Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Tue, 29 Oct 2002 05:02:57 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Tue, 29 Oct 2002 05:02:57 -0500 Received: from ns.suse.de ([213.95.15.193]:21770 "EHLO Cantor.suse.de") by vger.kernel.org with ESMTP id ; Tue, 29 Oct 2002 05:02:44 -0500 Date: Tue, 29 Oct 2002 11:08:43 +0100 Message-ID: From: Takashi Iwai To: Osamu Tomita Cc: LKML Subject: Re: [PATCHSET 22/25] add support for PC-9800 architecture (sound alsa) In-Reply-To: References: <20021026115417.A1424@precia.cinet.co.jp> User-Agent: Wanderlust/2.6.1 (Upside Down) SEMI/1.14.4 (Hosorogi) FLIM/1.14.4 (=?ISO-8859-4?Q?Kashiharajing=FE-mae?=) APEL/10.2 MULE XEmacs/21.4 (patch 8) (Honest Recruiter) (i386-suse-linux) MIME-Version: 1.0 (generated by SEMI 1.14.4 - "Hosorogi") Content-Type: multipart/mixed; boundary="Multipart_Tue_Oct_29_11:08:43_2002-1" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 41204 Lines: 1086 --Multipart_Tue_Oct_29_11:08:43_2002-1 Content-Type: text/plain; charset=US-ASCII Hi, the attached is a patch to create a new driver module, snd-pc98-cs4232, which supports CS4232 on PC9800 and PC98II MPU daughterboard. (if you find the module name weird, please change as you like. the name is tentative :) in this patch, almost all pc98-specific hardware initialization is done in the card module, hence the changes to common modules become minimum. the new module accepts the following module options. please note that "snd_" prefix for module options (not module name) is removed from the newest alsa drivers. port mandatory fm_port optional mpu_port optional mpu_irq optional dma1 mandatory dma2 optional pc98ii optional, bool (0 or 1) the MPU401 type is specified via pc98ii module option, not via the kernel config, so that the module binary can be shared among different machines. since the chip on pc98 seems like non-isapnp, i removed isapnp stuff from the module. also, control-port is disabled. please check whether it works for you. if it's ok, i'd like to merge it into alsa cvs, so the changes will be sent as ALSA update patches later. thanks, Takashi --Multipart_Tue_Oct_29_11:08:43_2002-1 Content-Type: application/octet-stream Content-Disposition: attachment; filename="pc98-cs4232.dif" Content-Transfer-Encoding: 7bit --- linux/sound/drivers/mpu401/mpu401_uart.c 13 Aug 2002 16:17:06 -0000 1.11 +++ linux/sound/drivers/mpu401/mpu401_uart.c 28 Oct 2002 11:36:38 -0000 @@ -400,12 +400,17 @@ spin_lock_init(&mpu->timer_lock); mpu->hardware = hardware; if (!integrated) { - if ((mpu->res = request_region(port, 2, "MPU401 UART")) == NULL) { + int res_size = hardware == MPU401_HW_PC98II ? 4 : 2; + if ((mpu->res = request_region(port, res_size, "MPU401 UART")) == NULL) { snd_device_free(card, rmidi); return -EBUSY; } } mpu->port = port; + if (hardware == MPU401_HW_PC98II) + mpu->cport = port + 2; + else + mpu->cport = port + 1; if (irq >= 0 && irq_flags) { if (request_irq(irq, snd_mpu401_uart_interrupt, irq_flags, "MPU401 UART", (void *) mpu)) { snd_printk("unable to grab IRQ %d\n", irq); --- linux/sound/drivers/opl3/opl3_lib.c 13 Aug 2002 16:17:06 -0000 1.9 +++ linux/sound/drivers/opl3/opl3_lib.c 28 Oct 2002 14:41:55 -0000 @@ -418,6 +418,7 @@ case OPL3_HW_OPL3_SV: case OPL3_HW_OPL3_CS: case OPL3_HW_OPL3_FM801: + case OPL3_HW_OPL3_PC98: opl3->command = &snd_opl3_command; break; case OPL3_HW_OPL3_CS4281: @@ -438,6 +439,25 @@ opl3->command = &snd_opl3_command; } } + + if (opl3->hardware == OPL3_HW_OPL3_PC98) { + /* Initialize? */ + opl3->command(opl3, OPL3_RIGHT | 0x05, 0x05); + opl3->command(opl3, OPL3_RIGHT | 0x08, 0x04); + opl3->command(opl3, OPL3_RIGHT | 0x08, 0x00); + opl3->command(opl3, OPL3_LEFT | 0xf7, 0x00); + opl3->command(opl3, OPL3_LEFT | 0x04, 0x60); + opl3->command(opl3, OPL3_LEFT | 0x04, 0x80); + inb(opl3->l_port); + + opl3->command(opl3, OPL3_LEFT | 0x02, 0xff); + opl3->command(opl3, OPL3_LEFT | 0x04, 0x21); + inb(opl3->l_port); + + opl3->command(opl3, OPL3_LEFT | 0x04, 0x60); + opl3->command(opl3, OPL3_LEFT | 0x04, 0x80); + } + opl3->command(opl3, OPL3_LEFT | OPL3_REG_TEST, OPL3_ENABLE_WAVE_SELECT); opl3->command(opl3, OPL3_LEFT | OPL3_REG_PERCUSSION, 0x00); /* Melodic mode */ --- linux/include/sound/mpu401.h 23 Aug 2002 15:25:03 -0000 1.6 +++ linux/include/sound/mpu401.h 28 Oct 2002 14:01:27 -0000 @@ -41,6 +41,7 @@ #define MPU401_HW_CMIPCI 15 /* CMIPCI MPU-401 UART */ #define MPU401_HW_ALS4000 16 /* Avance Logic ALS4000 */ #define MPU401_HW_INTEL8X0 17 /* Intel8x0 driver */ +#define MPU401_HW_PC98II 18 /* Roland PC98II */ #define MPU401_MODE_BIT_INPUT 0 #define MPU401_MODE_BIT_OUTPUT 1 @@ -64,6 +65,7 @@ unsigned short hardware; /* MPU401_HW_XXXX */ unsigned long port; /* base port of MPU-401 chip */ + unsigned long cport; /* port + 1 (usually) */ struct resource *res; /* port resource */ int irq; /* IRQ number of MPU-401 chip (-1 = poll) */ int irq_flags; @@ -89,8 +91,8 @@ /* I/O ports */ -#define MPU401C(mpu) ((mpu)->port + 1) -#define MPU401D(mpu) ((mpu)->port + 0) +#define MPU401C(mpu) (mpu)->cport +#define MPU401D(mpu) (mpu)->port /* --- linux/include/sound/opl3.h 18 Sep 2002 12:25:13 -0000 1.7 +++ linux/include/sound/opl3.h 28 Oct 2002 14:40:15 -0000 @@ -229,6 +229,7 @@ #define OPL3_HW_OPL3_CS 0x0302 /* CS4232/CS4236+ */ #define OPL3_HW_OPL3_FM801 0x0303 /* FM801 */ #define OPL3_HW_OPL3_CS4281 0x0304 /* CS4281 */ +#define OPL3_HW_OPL3_PC98 0x0305 /* PC9800 */ #define OPL3_HW_OPL4 0x0400 #define OPL3_HW_MASK 0xff00 --- linux/sound/isa/Config.in 24 Jul 2002 10:30:26 -0000 1.5 +++ linux/sound/isa/Config.in 28 Oct 2002 14:06:57 -0000 @@ -8,6 +8,7 @@ dep_tristate 'Generic Cirrus Logic CS4231 driver' CONFIG_SND_CS4231 $CONFIG_SND dep_tristate 'Generic Cirrus Logic CS4232 driver' CONFIG_SND_CS4232 $CONFIG_SND dep_tristate 'Generic Cirrus Logic CS4236+ driver' CONFIG_SND_CS4236 $CONFIG_SND +dep_tristate 'NEC PC9800 CS4232 driver' CONFIG_SND_PC98_CS4232 $CONFIG_SND $CONFIG_PC9800 dep_tristate 'Generic ESS ES968 driver' CONFIG_SND_ES968 $CONFIG_SND $CONFIG_ISAPNP dep_tristate 'Generic ESS ES688/ES1688 driver' CONFIG_SND_ES1688 $CONFIG_SND dep_tristate 'Generic ESS ES18xx driver' CONFIG_SND_ES18XX $CONFIG_SND --- linux/sound/isa/cs423x/Makefile 18 Jun 2002 15:32:29 -0000 1.5 +++ linux/sound/isa/cs423x/Makefile 28 Oct 2002 17:51:40 -0000 @@ -10,6 +10,7 @@ snd-cs4231-objs := cs4231.o snd-cs4232-objs := cs4232.o snd-cs4236-objs := cs4236.o +snd-pc98-cs4232-objs := pc98.o # Toplevel Module Dependency obj-$(CONFIG_SND_AZT2320) += snd-cs4231-lib.o @@ -22,6 +23,7 @@ obj-$(CONFIG_SND_INTERWAVE_STB) += snd-cs4231-lib.o obj-$(CONFIG_SND_OPTI92X_CS4231) += snd-cs4231-lib.o obj-$(CONFIG_SND_WAVEFRONT) += snd-cs4231-lib.o +obj-$(CONFIG_SND_PC98_CS4232) += snd-pc98-cs4232.o snd-cs4231-lib.o obj-m := $(sort $(obj-m)) --- /dev/null 2002-09-08 06:22:10.000000000 +0200 +++ linux/sound/isa/cs423x/pc98.c 2002-10-28 18:52:29.000000000 +0100 @@ -0,0 +1,466 @@ +/* + * Driver for CS4232 on NEC PC9800 series + * Copyright (c) by Jaroslav Kysela + * Osamu Tomita + * Takashi Iwai + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include +#include +#include +#include +#include +#define SNDRV_GET_ID +#include +#include "sound_pc9800.h" + +#define chip_t cs4231_t + +MODULE_AUTHOR("Osamu Tomita "); +MODULE_LICENSE("GPL"); +MODULE_CLASSES("{sound}"); +MODULE_DESCRIPTION("NEC PC9800 CS4232"); +MODULE_DEVICES("{{NEC,PC9800}}"); + +#define IDENT "PC98-CS4232" + +static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ +static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ +static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_ISAPNP; /* Enable this card */ +static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* PnP setup */ +#if 0 /* NOT USED */ +static long cport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* PnP setup */ +#endif +static long mpu_port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT;/* PnP setup */ +static long fm_port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* PnP setup */ +static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,11,12,15 */ +static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 9,11,12,15 */ +static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ +static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ +static int pc98ii[SNDRV_CARDS]; /* PC98II */ + +MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(index, "Index value for " IDENT " soundcard."); +MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); +MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +MODULE_PARM_DESC(id, "ID string for " IDENT " soundcard."); +MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); +MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(enable, "Enable " IDENT " soundcard."); +MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); +MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +MODULE_PARM_DESC(port, "Port # for " IDENT " driver."); +MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); +#if 0 /* NOT USED */ +MODULE_PARM(cport, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +MODULE_PARM_DESC(cport, "Control port # for " IDENT " driver."); +MODULE_PARM_SYNTAX(cport, SNDRV_PORT12_DESC); +#endif +MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " IDENT " driver."); +MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); +MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +MODULE_PARM_DESC(fm_port, "FM port # for " IDENT " driver."); +MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC); +MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(irq, "IRQ # for " IDENT " driver."); +MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); +MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " IDENT " driver."); +MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); +MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(dma1, "DMA1 # for " IDENT " driver."); +MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); +MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver."); +MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); +MODULE_PARM(pc98ii, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(pc98ii, "Roland MPU-PC98II support."); +MODULE_PARM_SYNTAX(pc98ii, SNDRV_BOOLEAN_FALSE_DESC); + + +static snd_card_t *snd_pc98_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; + +/* + * initialize MPU401-UART + */ + +static int __init pc98_mpu401_init(int irq) +{ +#include "pc9801_118_magic.h" +#define outp118(reg,data) outb((reg),0x148e);outb((data),0x148f) +#define WAIT118 outb(0x00,0x5f) + int mpu_intr, count; +#ifdef OOKUBO_ORIGINAL + int err = 0; +#endif /* OOKUBO_ORIGINAL */ + + switch (irq) { + case 3: + mpu_intr = 3; + break; + case 5: + mpu_intr = 2; + break; + case 6: + mpu_intr = 1; + break; + case 10: + mpu_intr = 0; + break; + default: + snd_printk(KERN_ERR IDENT ": Bad IRQ %d\n", irq); + return -EINVAL; + } + + outp118(0x21, mpu_intr); + WAIT118; + outb(0x00, 0x148e); + if (inb(0x148f) & 0x08) { + snd_printk(KERN_INFO IDENT ": No MIDI daughter board found\n"); + return 0; + } + + outp118(0x20, 0x00); + outp118(0x05, 0x04); + for (count = 0; count < 35000; count ++) + WAIT118; + outb(0x05, 0x148e); + for (count = 0; count < 65000; count ++) + if (inb(0x148f) == 0x04) + goto set_mode_118; + snd_printk(KERN_ERR IDENT ": MIDI daughter board initalize failed at stage1\n\n"); + return -EINVAL; + + set_mode_118: + outp118(0x05, 0x0c); + outb(0xaa, 0x485); + outb(0x99, 0x485); + outb(0x2a, 0x485); + for (count = 0; count < sizeof(Data0485_99); count ++) { + outb(Data0485_99[count], 0x485); + WAIT118; + } + + outb(0x00, 0x486); + outb(0xaa, 0x485); + outb(0x9e, 0x485); + outb(0x2a, 0x485); + for (count = 0; count < sizeof(Data0485_9E); count ++) + if (inb(0x485) != Data0485_9E[count]) { +#ifdef OOKUBO_ORIGINAL + err = 1; +#endif /* OOKUBO_ORIGINAL */ + break; + } + outb(0x00, 0x486); + for (count = 0; count < 2000; count ++) + WAIT118; +#ifdef OOKUBO_ORIGINAL + if (!err) { + outb(0xaa, 0x485); + outb(0x36, 0x485); + outb(0x28, 0x485); + for (count = 0; count < sizeof(Data0485_36); count ++) + outb(Data0485_36[count], 0x485); + outb(0x00, 0x486); + for (count = 0; count < 1500; count ++) + WAIT118; + outp118(0x05, inb(0x148f) | 0x08); + outb(0xff, 0x148c); + outp118(0x05, inb(0x148f) & 0xf7); + for (count = 0; count < 1500; count ++) + WAIT118; + } +#endif /* OOKUBO_ORIGINAL */ + + outb(0xaa, 0x485); + outb(0xa9, 0x485); + outb(0x21, 0x485); + for (count = 0; count < sizeof(Data0485_A9); count ++) { + outb(Data0485_A9[count], 0x485); + WAIT118; + } + + outb(0x00, 0x486); + outb(0xaa, 0x485); + outb(0x0c, 0x485); + outb(0x20, 0x485); + for (count = 0; count < sizeof(Data0485_0C); count ++) { + outb(Data0485_0C[count], 0x485); + WAIT118; + } + + outb(0x00, 0x486); + outb(0xaa, 0x485); + outb(0x66, 0x485); + outb(0x20, 0x485); + for (count = 0; count < sizeof(Data0485_66); count ++) { + outb(Data0485_66[count], 0x485); + WAIT118; + } + + outb(0x00, 0x486); + outb(0xaa, 0x485); + outb(0x60, 0x485); + outb(0x20, 0x485); + for (count = 0; count < sizeof(Data0485_60); count ++) { + outb(Data0485_60[count], 0x485); + WAIT118; + } + + outb(0x00, 0x486); + outp118(0x05, 0x04); + outp118(0x05, 0x00); + for (count = 0; count < 35000; count ++) + WAIT118; + outb(0x05, 0x148e); + for (count = 0; count < 65000; count ++) + if (inb(0x148f) == 0x00) + goto end_mode_118; + snd_printk(KERN_ERR IDENT ": MIDI daughter board initalize failed at stage2\n"); + return -EINVAL; + + end_mode_118: + outb(0x3f, 0x148d); + snd_printk(KERN_INFO IDENT ": MIDI daughter board initalized\n"); + return 0; +} + +static int __init pc98_cs4231_chip_init(int dev) +{ + int intr_bits, intr_bits2, dma_bits; + + switch (irq[dev]) { + case 3: + intr_bits = 0x08; + intr_bits2 = 0x03; + break; + case 5: + intr_bits = 0x10; + intr_bits2 = 0x08; + break; + case 10: + intr_bits = 0x18; + intr_bits2 = 0x02; + break; + case 12: + intr_bits = 0x20; + intr_bits2 = 0x00; + break; + default: + snd_printk(KERN_ERR IDENT ": Bad IRQ %d\n", irq[dev]); + return -EINVAL; + } + + switch (dma1[dev]) { + case 0: + dma_bits = 0x01; + break; + case 1: + dma_bits = 0x02; + break; + case 3: + dma_bits = 0x03; + break; + default: + snd_printk(KERN_ERR IDENT ": Bad DMA %d\n", dma1[dev]); + return -EINVAL; + } + + if (dma2[dev] >= 2) { + snd_printk(KERN_ERR IDENT ": Bad DMA %d\n", dma2[dev]); + return -EINVAL; + } + if (dma1[dev] != dma2[dev] && dma2[dev] >= 0) + intr_bits |= 0x04; + + if (PC9800_SOUND_ID() == PC9800_SOUND_ID_118) { + /* Set up CanBe control registers. */ + snd_printd(KERN_INFO "Setting up CanBe Sound System\n"); + outb(inb(PC9800_SOUND_IO_ID) | 0x03, PC9800_SOUND_IO_ID); + outb(0x01, 0x0f4a); + outb(intr_bits2, 0x0f4b); + } + + outb(intr_bits | dma_bits, 0xf40); + return 0; +} + + +static int __init snd_card_pc98_probe(int dev) +{ + snd_card_t *card; + snd_pcm_t *pcm = NULL; + cs4231_t *chip; + opl3_t *opl3; + int err; + + if (port[dev] == SNDRV_AUTO_PORT) { + snd_printk(KERN_ERR IDENT ": specify port\n"); + return -EINVAL; + } + card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); + if (card == NULL) + return -ENOMEM; + if (mpu_port[dev] < 0 || mpu_irq[dev] < 0) + mpu_port[dev] = SNDRV_AUTO_PORT; + if (fm_port[dev] < 0) + fm_port[dev] = SNDRV_AUTO_PORT; + + if ((err = pc98_cs4231_chip_init(dev)) < 0) { + snd_card_free(card); + return err; + } + + if ((err = snd_cs4231_create(card, + port[dev], + -1, + irq[dev], + dma1[dev], + dma2[dev], + CS4231_HW_DETECT, + 0, + &chip)) < 0) { + snd_card_free(card); + return err; + } + if ((err = snd_cs4231_pcm(chip, 0, &pcm)) < 0) { + snd_card_free(card); + return err; + } + if ((err = snd_cs4231_mixer(chip)) < 0) { + snd_card_free(card); + return err; + } + + if ((err = snd_cs4231_timer(chip, 0, NULL)) < 0) { + snd_card_free(card); + return err; + } + + if (fm_port[dev] != SNDRV_AUTO_PORT) { + /* ??? */ + outb(0x00, fm_port[dev] + 6); + inb(fm_port[dev] + 7); + /* Enable OPL-3 Function */ + outb(inb(PC9800_SOUND_IO_ID) | 0x03, PC9800_SOUND_IO_ID); + if (snd_opl3_create(card, + fm_port[dev], fm_port[dev] + 2, + OPL3_HW_OPL3_PC98, 0, &opl3) < 0) { + printk(KERN_ERR IDENT ": OPL3 not detected\n"); + } else { + if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { + snd_card_free(card); + return err; + } + } + } + + if (mpu_port[dev] != SNDRV_AUTO_PORT) { + err = pc98_mpu401_init(mpu_irq[dev]); + if (! err) { + err = snd_mpu401_uart_new(card, 0, + pc98ii ? MPU401_HW_PC98II : MPU401_HW_MPU401, + mpu_port[dev], 0, + mpu_irq[dev], SA_INTERRUPT, NULL); + if (err < 0) + snd_printk(KERN_INFO IDENT ": MPU401 not detected\n"); + } + } + + strcpy(card->driver, pcm->name); + strcpy(card->shortname, pcm->name); + sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i", + pcm->name, + chip->port, + irq[dev], + dma1[dev]); + if (dma1[dev] >= 0) + sprintf(card->longname + strlen(card->longname), "&%d", dma2[dev]); + if ((err = snd_card_register(card)) < 0) { + snd_card_free(card); + return err; + } + snd_pc98_cards[dev] = card; + return 0; +} + +static int __init alsa_card_pc98_init(void) +{ + int dev, cards = 0; + + for (dev = 0; dev < SNDRV_CARDS; dev++) { + if (!enable[dev]) + continue; + if (snd_card_pc98_probe(dev) >= 0) + cards++; + } + if (!cards) { +#ifdef MODULE + printk(KERN_ERR IDENT " soundcard not found or device busy\n"); +#endif + return -ENODEV; + } + return 0; +} + +static void __exit alsa_card_pc98_exit(void) +{ + int idx; + + for (idx = 0; idx < SNDRV_CARDS; idx++) + snd_card_free(snd_pc98_cards[idx]); +} + +module_init(alsa_card_pc98_init) +module_exit(alsa_card_pc98_exit) + +#ifndef MODULE + +/* format is: snd-pc98-cs4232=enable,index,id,port, + mpu_port,fm_port, + irq,mpu_irq,dma1,dma2,pc98ii */ + +static int __init alsa_card_pc98_setup(char *str) +{ + static unsigned __initdata nr_dev = 0; + + if (nr_dev >= SNDRV_CARDS) + return 0; + (void)(get_option(&str,&enable[nr_dev]) == 2 && + get_option(&str,&index[nr_dev]) == 2 && + get_id(&str,&id[nr_dev]) == 2 && + get_option(&str,(int *)&port[nr_dev]) == 2 && + get_option(&str,(int *)&mpu_port[nr_dev]) == 2 && + get_option(&str,(int *)&fm_port[nr_dev]) == 2 && + get_option(&str,&irq[nr_dev]) == 2 && + get_option(&str,&mpu_irq[nr_dev]) == 2 && + get_option(&str,&dma1[nr_dev]) == 2 && + get_option(&str,&dma2[nr_dev]) == 2 && + get_option(&str,&pc98ii[nr_dev]) == 2); + nr_dev++; + return 1; +} + +__setup("snd-pc98-cs4232=", alsa_card_pc98_setup); + +#endif /* ifndef MODULE */ --- /dev/null 2002-09-08 06:22:10.000000000 +0200 +++ linux/sound/isa/cs423x/pc9801_118_magic.h 2002-10-28 15:44:12.000000000 +0100 @@ -0,0 +1,411 @@ + static unsigned char Data0485_A9[] = { + 0x12, 0x03, 0x90, 0xc2, 0x2a, 0x75, 0x1e, 0x20, + 0xe4, 0x12, 0x2b, 0x9b, 0x22, 0xa9, 0x16, 0x77, + 0x33, 0xe9, 0x04, 0x54, 0x03, 0x44, 0xa8, 0xf5, + 0x16, 0xc2, 0x2f, 0x22, 0xa9, 0x16, 0x77, 0x42, + 0xe9, 0x04, 0x54, 0x03, 0x44, 0xa8, 0xf9, 0x77, + 0xf8, 0x04, 0x54, 0x03, 0x44, 0xa8, 0xf5, 0x16, + 0xc2, 0x2f, 0x22, 0x90, 0x25, 0x9f, 0x30, 0x04, + 0x05, 0xc2, 0x04, 0x12, 0x1f, 0x62, 0x30, 0x00, + 0x05, 0xc2, 0x00, 0x12, 0x15, 0xe6, 0x30, 0x01, + 0x05, 0xc2, 0x01, 0x12, 0x29, 0xaf, 0x30, 0x02, + 0x05, 0xc2, 0x02, 0x12, 0x29, 0xaf, 0x30, 0x05, + 0x05, 0xc2, 0x05, 0x12, 0x16, 0x65, 0x30, 0x06, + 0x08, 0xc2, 0x06, 0x12, 0x16, 0xb1, 0x12, 0x29, + 0xaf, 0x30, 0x07, 0x08, 0xc2, 0x07, 0x12, 0x16, + 0xe9, 0x12, 0x29, 0xaf, 0x22, 0x20, 0x97, 0x09, + 0x53, 0xa8, 0xfb, 0x12, 0x04, 0x2c, 0x43, 0xa8, + 0x04, 0x22, 0x71, 0xb8, 0x71, 0xb8, 0x71, 0xb8, + 0x22, 0x20, 0x4b, 0x04, 0x75, 0x4e, 0x02, 0x22, + 0xe5, 0x35, 0x24, 0xff, 0xf5, 0x35, 0xe5, 0x36, + 0x34, 0xff, 0xf5, 0x36, 0x75, 0x4e, 0x02, 0x22, + 0x10, 0x19, 0x02, 0x80, 0x08, 0x78, 0x00, 0xe2, + 0x78, 0x07, 0xf2, 0x61, 0x9b, 0x78, 0x11, 0xe2, + 0xc0, 0x01, 0xc0, 0xf0, 0xc0, 0xd0, 0xc0, 0x02, + 0x71, 0x14, 0xe5, 0x30, 0xb4, 0x01, 0x02, 0x61, + 0x93, 0x43, 0x08, 0x40, 0x12, 0x2a, 0x53, 0x61, + 0x93, 0x79, 0x03, 0xe3, 0xa2, 0xe2, 0x92, 0x26, + 0xa2, 0xe3, 0x92, 0x27, 0x22, 0xad, 0x2b, 0xbd, + 0x04, 0x07, 0xf5, 0x72, 0x78, 0x27, 0x02, 0x11, + 0x76, 0x02, 0x11, 0x30, 0x00, 0x00, 0x00, 0x12, + 0x28, 0xba, 0x79, 0x01, 0xe3, 0x75, 0x21, 0x3f, + 0x75, 0x49, 0x11, 0x75, 0x4c, 0x11, 0x31, 0xdc, + 0x75, 0x1a, 0x80, 0x51, 0x72, 0x75, 0x81, 0xe3, + 0x12, 0x25, 0xc9, 0x43, 0xa8, 0x01, 0x00, 0x53, + 0xa8, 0xfe, 0x10, 0x50, 0x02, 0x80, 0x03, 0x12, + 0x1a, 0x8d, 0xd1, 0x28, 0x12, 0x03, 0xd9, 0xd1, + 0xf2, 0x12, 0x2d, 0xf0, 0xb0, 0x11, 0x92, 0xe0, + 0xa2, 0x2a, 0xa0, 0xb5, 0x82, 0xe0, 0x50, 0x03, + 0x79, 0x0f, 0xe3, 0x71, 0xca, 0x51, 0x1e, 0x91, + 0xe4, 0x53, 0xa8, 0xfb, 0x10, 0x10, 0x02, 0x80, + 0x26, 0xc2, 0x8e, 0xd2, 0xab, 0xa2, 0x1c, 0x40, + 0x13, 0xa2, 0x1d, 0x50, 0x0a, 0x43, 0x08, 0x40, + 0x12, 0x1a, 0x01, 0xd1, 0xd7, 0x80, 0x0b, 0x12, + 0x26, 0x04, 0x61, 0x08, 0x43, 0x08, 0x40, 0x12, + 0x1a, 0x01, 0xd2, 0x1f, 0x12, 0x17, 0x7f, 0x43, + 0xa8, 0x04, 0x51, 0x1e, 0x91, 0xe4, 0x12, 0x13, + 0x34, 0x80, 0x98, 0xa2, 0x17, 0x72, 0x16, 0x72, + 0x15, 0x72, 0x2d, 0x50, 0x06, 0xfa, 0x12, 0x13, + 0x66, 0x80, 0x25, 0xc2, 0x13, 0x30, 0x28, 0x05, + 0x12, 0x02, 0xbe, 0x80, 0x1b, 0xb4, 0x10, 0x12, + 0x78, 0x00, 0xf2, 0xe5, 0x30, 0xb4, 0x01, 0x06, + 0x12, 0x03, 0x90, 0xd2, 0x19, 0x22, 0x12, 0x00, + 0xdd, 0x22, 0x75, 0x30, 0x00, 0x12, 0x00, 0xa1, + 0x22, 0x00, 0x00, 0x75, 0x1e, 0x00, 0x74, 0x0c, + 0x12, 0x2b, 0x9b, 0x74, 0x40, 0x79, 0x05, 0xf3, + 0x74, 0x49, 0x12, 0x2b, 0x9b, 0x74, 0x04, 0x79, + 0x05, 0xf3, 0x75, 0x15, 0x04, 0x74, 0x10, 0x12, + 0x2b, 0x9b, 0x74, 0x00, 0x79, 0x05, 0xf3, 0x74, + 0x17, 0x12, 0x2b, 0x9b, 0x74, 0x00, 0x79, 0x05, + 0xf3, 0x74, 0x1a, 0x12, 0x2b, 0x9b, 0x74, 0x00, + 0x79, 0x05, 0xf3, 0x74, 0x0a, 0x12, 0x2b, 0x9b, + 0x74, 0x20, 0x79, 0x05, 0xf3, 0x79, 0xe0, 0x77, + 0x20, 0x22, 0xd0, 0x02, 0xd0, 0xd0, 0xd0, 0xf0, + 0xd0, 0x01, 0xe5, 0x5f, 0xd0, 0xa8, 0x22, 0x00, + 0x00, 0x90, 0x25, 0x9f, 0x75, 0x26, 0xff, 0x75, + 0x27, 0xff, 0x75, 0x28, 0x03, 0x75, 0x13, 0xff, + 0x75, 0x1f, 0x00, 0x75, 0x14, 0xff, 0x22, 0x79, + 0x06, 0xe5, 0x29, 0x60, 0x0b, 0xe3, 0x30, 0xe1, + 0xf8, 0xe5, 0x4f, 0x64, 0x80, 0x79, 0x07, 0xf3, + 0x22, 0x10, 0x4c, 0x01, 0x22, 0x30, 0x4b, 0x0a, + 0xc2, 0x4b, 0xe5, 0x4d, 0x64, 0x80, 0xf5, 0x4f, + 0x80, 0x1d, 0xe5, 0x15, 0xa2, 0xe0, 0x82, 0xe6, + 0x40, 0x02, 0x80, 0x35, 0x30, 0x4a, 0x04, 0xb1, + 0xe6, 0x80, 0x0c, 0x30, 0x49, 0x04, 0x51, 0x2b, + 0x80, 0x05, 0x30, 0x48, 0x24, 0x91, 0x7e, 0x79, + 0x06, 0xe3, 0x30, 0xe0, 0x1a, 0x79, 0x06, 0xf3, + 0xe5, 0x4e, 0x24, 0xff, 0x50, 0x04, 0xf5, 0x4e, + 0x80, 0x0d, 0x79, 0x0f, 0xf3, 0x20, 0x2a, 0x07, + 0x12, 0x2b, 0x32, 0x75, 0x29, 0x00, 0x22, 0x91, + 0x1b, 0x22, 0x79, 0x0f, 0xe3, 0xc0, 0xa8, 0x75, + 0xa8, 0x00, 0x30, 0x2b, 0x03, 0xd0, 0xa8, 0x22, + 0x79, 0x0e, 0xf3, 0xd0, 0xa8, 0x22, 0x8a, 0xf0, + 0xe5, 0x50, 0x10, 0xf3, 0x10, 0x23, 0x23, 0x23, + 0x25, 0xf0, 0x12, 0x2c, 0xb8, 0xa2, 0xe7, 0x92, + 0xe4, 0xc2, 0xe7, 0x80, 0x08, 0x23, 0x23, 0x23, + 0x25, 0xf0, 0x12, 0x2c, 0x19, 0x25, 0x4f, 0x20, + 0xd2, 0x04, 0xf5, 0x4f, 0x80, 0x0a, 0x40, 0x05, + 0x75, 0x4f, 0x7f, 0x80, 0x03, 0x75, 0x4f, 0xff, + 0xea, 0x12, 0x2c, 0x3c, 0x25, 0x50, 0x20, 0xe7, + 0x05, 0xb4, 0x03, 0x07, 0x80, 0x0c, 0x75, 0x50, + 0x00, 0x80, 0x09, 0x40, 0x05, 0x75, 0x50, 0x03, + 0x80, 0x02, 0xf5, 0x50, 0x22, 0xe5, 0x4d, 0xc4, + 0x54, 0x0c, 0x03, 0x03, 0xfa, 0x91, 0xa9, 0x71, + 0xb8, 0xe5, 0x4d, 0xc4, 0x54, 0x03, 0xfa, 0x91, + 0xa9, 0x71, 0xb8, 0xe5, 0x4d, 0x54, 0x0c, 0x03, + 0x03, 0xfa, 0x91, 0xa9, 0x71, 0xb8, 0xe5, 0x4d, + 0x54, 0x03, 0xfa, 0x91, 0xa9, 0x71, 0xb8, 0x22, + 0x8a, 0xf0, 0xe5, 0x50, 0x23, 0x23, 0x25, 0xf0, + 0x12, 0x2b, 0xf6, 0x25, 0x4f, 0x20, 0xd2, 0x04, + 0xf5, 0x4f, 0x80, 0x0a, 0x40, 0x05, 0x75, 0x4f, + 0x7f, 0x80, 0x03, 0x75, 0x4f, 0xff, 0xea, 0x12, + 0x2c, 0x40, 0x25, 0x50, 0x20, 0xe7, 0x05, 0xb4, + 0x05, 0x07, 0x80, 0x0c, 0x75, 0x50, 0x00, 0x80, + 0x09, 0x40, 0x05, 0x75, 0x50, 0x05, 0x80, 0x02, + 0xf5, 0x50, 0x22, 0x30, 0x26, 0x03, 0x12, 0x1e, + 0xf5, 0x30, 0x27, 0x03, 0x12, 0x1f, 0x37, 0x30, + 0x25, 0x09, 0x12, 0x1f, 0x4e, 0x30, 0x23, 0x03, + 0x12, 0x1f, 0x1e, 0x10, 0x22, 0x02, 0x80, 0x0a, + 0xe5, 0x3b, 0xb4, 0xff, 0x02, 0xc2, 0x20, 0x12, + 0x1e, 0x79, 0x22, 0x78, 0x11, 0xe2, 0x20, 0xe0, + 0x07, 0xc0, 0x01, 0x12, 0x28, 0xba, 0xd0, 0x01, + 0x78, 0x00, 0xf2, 0x61, 0x9b, 0x12, 0x2b, 0x32, + 0x12, 0x17, 0x7f, 0x78, 0x00, 0xf2, 0xaa, 0x35, + 0xab, 0x36, 0xea, 0x24, 0xff, 0xfa, 0xeb, 0x34, + 0xff, 0xfb, 0x50, 0x03, 0xd2, 0x10, 0x22, 0x75, + 0x37, 0x01, 0x75, 0x38, 0x00, 0x75, 0x39, 0x00, + 0x12, 0x04, 0x04, 0xd2, 0x8e, 0x22, 0xa8, 0x2b, + 0xb8, 0x00, 0x02, 0x80, 0x03, 0x02, 0x11, 0xbd, + 0xf5, 0x74, 0x78, 0x2a, 0x12, 0x11, 0xec, 0xe5, + 0x74, 0x78, 0x29, 0x12, 0x11, 0xec, 0x22, 0xfa, + 0xe5, 0x2b, 0x60, 0x01, 0x22, 0xea, 0x78, 0x2b, + 0xf5, 0x75, 0x12, 0x11, 0xec, 0x22, 0x74, 0x10, + 0x12, 0x2b, 0x9b, 0x74, 0x20, 0x78, 0x05, 0xf2, + 0x74, 0x09, 0x12, 0x17, 0x75, 0xe5, 0x15, 0x44, + 0x80, 0x79, 0x05, 0xf3, 0xf5, 0x15, 0x12, 0x17, + 0x7f, 0x22, 0x12, 0x03, 0x84, 0x79, 0x0f, 0xe3, + 0x78, 0x00, 0xf2, 0x12, 0x2b, 0x28, 0xe5, 0x81, + 0x24, 0xfc, 0xf5, 0x81, 0x61, 0x93, 0xd2, 0x07, + 0x78, 0x11, 0xe2, 0x44, 0x11, 0xf5, 0x4c, 0xc2, + 0x0f, 0x12, 0x29, 0xa3, 0x61, 0x93, 0x02, 0x1b, + 0x77, 0x00, 0xe1, 0x81, 0xe1, 0x9a, 0xd2, 0x2c, + 0xa1, 0x0c, 0x20, 0x20, 0x02, 0xd2, 0x26, 0x02, + 0x1e, 0x35, 0x02, 0x1e, 0x61, 0x02, 0x1d, 0x8f, + 0xc2, 0x8e, 0x75, 0xa8, 0x9e, 0x22, 0x41, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x29, 0x91, 0x00, 0x00, 0x00, 0xa1, 0xbb, + 0xa1, 0xc3, 0x02, 0x1e, 0x6b, 0xe5, 0x4d, 0xc4, + 0x54, 0x0f, 0xfa, 0x91, 0x2f, 0x71, 0xb8, 0xe5, + 0x4d, 0x54, 0x0f, 0xfa, 0x91, 0x2f, 0x71, 0xb8, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xc6, + 0x02, 0x1d, 0x8f, 0xc2, 0x8e, 0xd2, 0xab, 0xc2, + 0x10, 0x79, 0x0f, 0xf3, 0x22, 0x00, 0x02, 0x2a, + 0x84, 0x00, 0xe1, 0xbc, 0xe1, 0xc8, 0x02, 0x1e, + 0x27, 0x00, 0x78, 0x00, 0xf2, 0x78, 0x0b, 0xe2, + 0xf4, 0xf5, 0x4d, 0xd2, 0x4c, 0x61, 0x9b, 0x30, + 0xb5, 0x02, 0xc2, 0x11, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x79, 0xbd, 0xf1, 0x3d, 0x83, + 0x22, 0xdd, 0xbd, 0xbd, 0xbd, 0x61, 0xbd, 0x8d, + 0x7a, 0xbd, 0xbd, 0xbd, 0xbd, 0x30, 0xbd, 0xbd, + 0xbd, 0x55, 0xbd, 0xbd, 0xbd, 0x52, 0xbd, 0xb6, + 0xb6, 0xbd, 0xbd, 0xbd, 0xbd, 0x00, 0xbd, 0xbd, + 0xbd, 0xe8, 0xda, 0xbd, 0xbd, 0xcf, 0xb9, 0xbd, + 0xc4, 0xf1, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, + 0xbd, 0x7b, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, + 0xbd, 0x70, 0x6a, 0x57, 0x47, 0x34, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0x29, 0xbd, + 0xbd, 0xbd, 0xb6, 0xb6, 0xbd, 0xbd, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0x2e, 0x25, + 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xfe, 0xf5, + 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0x19, 0xbd, + 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0x21, 0x8f, + 0x09, 0xbd, 0xf9, 0x86, 0xbd, 0xbd, 0xbd, 0xd7, + 0xbd, 0xa9, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0x9b, + 0xd1, 0x9d, 0xbd, 0xae, 0xbd, 0xbd, 0xbd, 0xcb, + 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, + 0xb6, 0xa5, 0xbd, 0xc5, 0xbd, 0xbd, 0xbd, 0xc3, + 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0x74, 0x10, + 0x12, 0x2b, 0x9b, 0xe4, 0x78, 0x05, 0xf2, 0x74, + 0x09, 0x12, 0x17, 0x75, 0xe5, 0x15, 0x54, 0x7f, + 0x79, 0x05, 0xf3, 0xf5, 0x15, 0x12, 0x17, 0x7f, + 0x22, 0x30, 0x51, 0x01, 0x22, 0x53, 0xa8, 0xfb, + 0x12, 0x2d, 0xf0, 0x50, 0x22, 0x79, 0x03, 0xe3, + 0x20, 0xe4, 0x1c, 0xaa, 0x35, 0xab, 0x36, 0xea, + 0x24, 0xf0, 0xfa, 0xeb, 0x34, 0xff, 0xfb, 0x50, + 0x0e, 0x10, 0x1f, 0x02, 0x80, 0x09, 0x20, 0x2a, + 0x03, 0x12, 0x2b, 0x32, 0x12, 0x2d, 0xd6, 0x43, + 0xa8, 0x04, 0x22, 0xa2, 0x1c, 0x72, 0x1d, 0x40, + 0x07, 0x53, 0x08, 0xbf, 0x78, 0x00, 0xf2, 0x22, + 0xb1, 0x1e, 0x22, 0x00, 0x79, 0x02, 0x12, 0x27, + 0x3d, 0x02, 0x2d, 0x37, 0x14, 0x54, 0xf0, 0x60, + 0x21, 0xe5, 0xf0, 0x24, 0xb6, 0xe5, 0xf0, 0x50, + 0x16, 0x24, 0x8b, 0x50, 0x15, 0xe5, 0xf0, 0x24, + 0x56, 0xe5, 0xf0, 0x50, 0x08, 0x24, 0x2f, 0x50, + 0x09, 0xe5, 0xf0, 0x24, 0xd9, 0x24, 0xd5, 0x24, + 0xf0, 0x22, 0x15, 0x81, 0x15, 0x81, 0xe9, 0x22, + 0x78, 0x13, 0x74, 0x00, 0xf2, 0x75, 0x2e, 0x01, + 0xd2, 0x6a, 0xc2, 0x69, 0xc2, 0x68, 0xc2, 0x6c, + 0x90, 0x25, 0x9f, 0x75, 0xb8, 0x07, 0x41, 0xa4, + 0xc0, 0x01, 0xc0, 0xf0, 0xc0, 0xd0, 0xc0, 0x02, + 0xe5, 0x3d, 0x54, 0x7d, 0x03, 0x10, 0xe5, 0x05, + 0x90, 0x28, 0x4b, 0x80, 0x03, 0x90, 0x2b, 0x7c, + 0x73, 0xe5, 0x3d, 0x30, 0xe5, 0x07, 0x74, 0xfd, + 0x78, 0x00, 0xf2, 0x61, 0x9b, 0x90, 0x1a, 0x97, + 0x74, 0xb6, 0xc0, 0xe0, 0x74, 0x27, 0xc0, 0xe0, + 0xc0, 0xa8, 0x02, 0x1b, 0xab, 0x90, 0x25, 0x9f, + 0xd0, 0xa8, 0x22, 0x90, 0x27, 0xb6, 0xc0, 0x82, + 0xc0, 0x83, 0xc0, 0xa8, 0x02, 0x1d, 0xa6, 0x90, + 0x27, 0xb6, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0xa8, + 0x02, 0x1e, 0x0a, 0xea, 0x24, 0xf0, 0xfa, 0xeb, + 0x34, 0xff, 0xfb, 0x50, 0x2e, 0x20, 0x0b, 0x05, + 0x85, 0x44, 0xe0, 0x80, 0x03, 0x75, 0xe0, 0x00, + 0x30, 0xe1, 0x20, 0xe5, 0x35, 0x24, 0xff, 0xf5, + 0x35, 0xe5, 0x36, 0x34, 0xff, 0xf5, 0x36, 0xc3, + 0xe5, 0x36, 0x13, 0xf5, 0x36, 0xe5, 0x35, 0x13, + 0xf5, 0x35, 0x75, 0x3a, 0x10, 0x12, 0x1a, 0x77, + 0x02, 0x18, 0x77, 0x75, 0x3a, 0x00, 0x12, 0x1a, + 0x77, 0x02, 0x18, 0x1b, 0x20, 0x4b, 0x04, 0x75, + 0x4e, 0x03, 0x22, 0xe5, 0x35, 0x24, 0xff, 0xf5, + 0x35, 0xe5, 0x36, 0x34, 0xff, 0xf5, 0x36, 0x75, + 0x4e, 0x03, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x02, 0x2c, + 0x70, 0xd2, 0x00, 0x78, 0x11, 0xe2, 0x44, 0x11, + 0xf5, 0x3f, 0xc2, 0x08, 0x12, 0x29, 0xa3, 0x02, + 0x23, 0x93, 0x21, 0x62, 0x61, 0x40, 0x01, 0x3a, + 0x01, 0x73, 0x21, 0x76, 0x61, 0xa8, 0x21, 0x39, + 0x21, 0x4a, 0x02, 0x2a, 0x7b, 0x79, 0x06, 0xf3, + 0xc0, 0xd0, 0x12, 0x03, 0xd9, 0x78, 0x00, 0xf2, + 0xd0, 0xd0, 0x22, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x2c, 0xb4, 0x78, 0x11, 0xe2, 0x44, 0x11, 0x54, + 0x0f, 0xf8, 0xc4, 0x48, 0xd2, 0x05, 0xf5, 0x48, + 0xc2, 0x0d, 0x31, 0xa3, 0x02, 0x23, 0x93, 0x20, + 0x4b, 0x04, 0x75, 0x4e, 0x01, 0x22, 0xe5, 0x35, + 0x24, 0xff, 0xf5, 0x35, 0xe5, 0x36, 0x34, 0xff, + 0xf5, 0x36, 0x75, 0x4e, 0x01, 0x22, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x79, 0xd0, 0x77, 0x1b, 0x79, 0xd1, 0x77, 0x18, + 0x79, 0xd2, 0x77, 0x77, 0x79, 0xd3, 0x77, 0x18, + 0x22, 0x75, 0x29, 0x00, 0x75, 0x25, 0x00, 0x75, + 0x34, 0x03, 0x75, 0x22, 0x00, 0x75, 0x23, 0x05, + 0x75, 0x4f, 0x00, 0x75, 0x50, 0x00, 0x75, 0x30, + 0x00, 0x79, 0xdc, 0x77, 0x03, 0xc2, 0x8e, 0x75, + 0x17, 0xa8, 0x75, 0x16, 0xa8, 0x74, 0xaa, 0x79, + 0x01, 0xf3, 0x79, 0xd7, 0x77, 0x74, 0x79, 0xd8, + 0x77, 0xff, 0x79, 0xd9, 0x77, 0x07, 0x79, 0xda, + 0x77, 0x00, 0x12, 0x25, 0x6f, 0x43, 0x08, 0x40, + 0x71, 0x32, 0x79, 0x0e, 0xe3, 0x10, 0x51, 0x1c, + 0x74, 0x06, 0x71, 0x9b, 0xe5, 0x11, 0x44, 0x80, + 0x79, 0x05, 0xf3, 0xf5, 0x11, 0x74, 0x07, 0x71, + 0x9b, 0xe5, 0x12, 0x44, 0x80, 0x79, 0x05, 0xf3, + 0xf5, 0x12, 0x80, 0x18, 0x53, 0x27, 0xa0, 0x53, + 0x28, 0x01, 0x75, 0x20, 0xf7, 0x12, 0x23, 0x4c, + 0x75, 0x11, 0x80, 0x75, 0x12, 0x80, 0x12, 0x1f, + 0xc0, 0x12, 0x21, 0xdc, 0x79, 0x06, 0xf3, 0x22, + 0xd2, 0x02, 0x78, 0x11, 0xe2, 0x44, 0x11, 0xf5, + 0x43, 0xc2, 0x0a, 0x12, 0x29, 0xa3, 0x02, 0x23, + 0x93, 0x78, 0x11, 0xe2, 0x44, 0x11, 0xf5, 0x44, + 0xc2, 0x0b, 0x12, 0x29, 0xa3, 0x02, 0x23, 0x93, + 0x78, 0x00, 0xe2, 0x90, 0x25, 0x9f, 0x02, 0x23, + 0x93, 0x78, 0x11, 0xe2, 0x75, 0x20, 0xf7, 0x75, + 0x21, 0x3f, 0x75, 0x49, 0x11, 0x75, 0x4c, 0x11, + 0x31, 0xa3, 0x02, 0x23, 0x93, 0x78, 0x11, 0xe2, + 0x44, 0x11, 0x54, 0x0f, 0xf8, 0xc4, 0x48, 0xf8, + 0xe5, 0x49, 0x45, 0x3f, 0x58, 0xf5, 0x49, 0xd2, + 0x06, 0xc2, 0x0e, 0x31, 0xa3, 0x02, 0x23, 0x93, + 0xc0, 0x01, 0x20, 0x2a, 0x04, 0x71, 0x32, 0xc2, + 0x11, 0x11, 0x5e, 0xc2, 0x1f, 0xd0, 0x01, 0x02, + 0x23, 0x9b, 0x12, 0x21, 0xdc, 0x78, 0x00, 0xf2, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xda, + 0xe7, 0x70, 0x2b, 0x20, 0x0a, 0x05, 0x85, 0x43, + 0xe0, 0x80, 0x03, 0x75, 0xe0, 0x00, 0x30, 0xe1, + 0x1d, 0x20, 0xe2, 0x1f, 0x74, 0xe0, 0xca, 0x74, + 0x00, 0x71, 0x9b, 0xca, 0x79, 0x05, 0xf3, 0xf5, + 0x09, 0xca, 0x74, 0x01, 0x71, 0x9b, 0xca, 0x79, + 0x05, 0xf3, 0xf5, 0x0a, 0x80, 0x43, 0x12, 0x15, + 0x3e, 0x80, 0x3e, 0xe5, 0x0b, 0xb4, 0x17, 0x02, + 0x80, 0x0b, 0x50, 0x09, 0x74, 0x17, 0xc3, 0x95, + 0x0b, 0x44, 0x60, 0x80, 0x02, 0x74, 0x60, 0xca, + 0x74, 0x00, 0x71, 0x9b, 0xca, 0x79, 0x05, 0xf3, + 0xf5, 0x09, 0xe5, 0x0c, 0xb4, 0x17, 0x02, 0x80, + 0x0b, 0x50, 0x09, 0x74, 0x17, 0xc3, 0x95, 0x0c, + 0x44, 0x60, 0x80, 0x02, 0x74, 0x60, 0xca, 0x74, + 0x01, 0x71, 0x9b, 0xca, 0x79, 0x05, 0xf3, 0xf5, + 0x0a, 0x22, 0xd2, 0x04, 0x78, 0x11, 0xe2, 0x44, + 0x11, 0xf5, 0x46, 0xc2, 0x0c, 0x31, 0xa3, 0x02, + 0x23, 0x93, 0xd2, 0x05, 0x78, 0x11, 0xe2, 0x44, + 0x11, 0xf5, 0x48, 0xc2, 0x0d, 0x31, 0xa3, 0x02, + 0x23, 0x93, 0xd2, 0x06, 0x78, 0x11, 0xe2, 0x44, + 0x11, 0xf5, 0x49, 0xc2, 0x0e, 0x31, 0xa3, 0x02, + 0x23, 0x93, 0x30, 0x1c, 0x21, 0x20, 0x4d, 0x1e, + 0xe5, 0x29, 0x60, 0x1a, 0xc2, 0x1c, 0x12, 0x19, + 0xec, 0x12, 0x13, 0xcf, 0xd2, 0x4d, 0x12, 0x17, + 0x7f, 0x78, 0x00, 0xf2, 0x79, 0x06, 0xf3, 0x43, + 0xa8, 0x04, 0x12, 0x24, 0x1b, 0x22, 0x12, 0x27, + 0x24, 0x22, 0x78, 0x00, 0xe2, 0x90, 0x25, 0x9f, + 0x02, 0x23, 0x93, 0x78, 0x00, 0xe2, 0xa2, 0xe7, + 0x72, 0xe3, 0x92, 0xe7, 0x02, 0x1d, 0x85, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x79, 0x04, 0xe3, 0x54, 0x80, 0x70, 0xf9, 0x22, + 0xe5, 0x29, 0x79, 0xde, 0xf7, 0x75, 0x29, 0x00, + 0x70, 0x12, 0xe5, 0x15, 0x79, 0xdd, 0xf7, 0x12, + 0x2d, 0xf0, 0x40, 0x08, 0x20, 0x1c, 0x07, 0x20, + 0x1d, 0x04, 0x80, 0x02, 0x71, 0x32, 0x30, 0xb5, + 0x0c, 0x79, 0x06, 0xf3, 0x20, 0x2a, 0x06, 0x79, + 0xdd, 0xe7, 0x54, 0xfc, 0xf7, 0xd2, 0x2b, 0x12, + 0x25, 0x6f, 0x22, 0x00, 0x00, 0x00, 0x00, 0xe5, + 0x15, 0xa2, 0xe0, 0xb0, 0xe6, 0x40, 0x31, 0xa2, + 0xe1, 0xb0, 0xe7, 0x40, 0x38, 0x10, 0x2b, 0x02, + 0x80, 0x26, 0x79, 0xde, 0xe7, 0x70, 0x0b, 0x79, + 0xdd, 0xe7, 0x20, 0xe0, 0x12, 0x20, 0xe1, 0x28, + 0x80, 0x16, 0xf5, 0x29, 0x30, 0x4d, 0x11, 0x20, + 0x4c, 0x0e, 0x12, 0x24, 0x1b, 0x80, 0x09, 0x43, + 0x08, 0x40, 0x12, 0x13, 0xcf, 0x12, 0x17, 0x7f, + 0xe5, 0x13, 0x20, 0xe4, 0x05, 0x12, 0x18, 0x1b, + 0x80, 0x03, 0x12, 0x18, 0x77, 0xc2, 0x2b, 0x22, + 0x12, 0x26, 0xd7, 0x12, 0x13, 0xb7, 0x22, 0x78, + 0x04, 0x79, 0x00, 0xd9, 0xfe, 0xd8, 0xfa, 0x22, + 0x00, 0x74, 0x09, 0x71, 0x9b, 0xe5, 0x15, 0x54, + 0xfc, 0x79, 0x05, 0xf3, 0xf5, 0x15, 0x22, 0x78, + 0x11, 0xe2, 0x44, 0x11, 0x54, 0x0f, 0xf8, 0xc4, + 0x48, 0xf5, 0x46, 0xc2, 0x0c, 0xd2, 0x04, 0x31, + 0xa3, 0x02, 0x23, 0x93, 0x12, 0x26, 0xd7, 0x12, + 0x00, 0xb7, 0x22, 0x00, 0x79, 0x06, 0xf3, 0x74, + 0x0a, 0x71, 0x9b, 0x79, 0xe0, 0xe7, 0x44, 0x02, + 0xf7, 0x79, 0x05, 0xf3, 0x22, 0x74, 0x0a, 0x71, + 0x9b, 0x79, 0xe0, 0xe7, 0x54, 0xfd, 0xf7, 0x79, + 0x05, 0xf3, 0x22, 0x21, 0x59, 0x41, 0x23, 0x21, + 0x59, 0x41, 0x33, 0x41, 0x43, 0x21, 0x59, 0x21, + 0x59, 0x02, 0x25, 0x9f, 0x00, 0x74, 0x0d, 0x71, + 0x9b, 0x74, 0x4d, 0x79, 0x05, 0xf3, 0xd2, 0x52, + 0x22, 0x00, 0x53, 0x08, 0x40, 0x45, 0x08, 0x45, + 0x1e, 0x79, 0x04, 0xf3, 0xf5, 0x08, 0x22, 0xd2, + 0x01, 0x78, 0x11, 0xe2, 0x44, 0x11, 0xf5, 0x42, + 0xc2, 0x09, 0x31, 0xa3, 0x02, 0x23, 0x93, 0x00, + 0x00, 0x00, 0x00, 0x71, 0x6e, 0x74, 0x09, 0x12, + 0x17, 0x75, 0xe5, 0x15, 0x44, 0x40, 0x79, 0x05, + 0xf3, 0xf5, 0x15, 0x75, 0x3a, 0x00, 0x12, 0x1a, + 0x77, 0x02, 0x18, 0x1b, 0xf5, 0x38, 0xe5, 0x37, + 0x24, 0x01, 0xf5, 0x37, 0xe5, 0x38, 0x34, 0x00, + 0xf5, 0x38, 0x40, 0x05, 0x75, 0x39, 0x00, 0x80, + 0x03, 0x75, 0x39, 0x01, 0x12, 0x04, 0x04, 0xd2, + 0x8e, 0x02, 0x03, 0x8d, 0x00, 0xb4, 0x0d, 0x03, + 0x74, 0x14, 0x22, 0x04, 0x83, 0x22, 0x00, 0x02, + 0xff, 0x01, 0x00, 0x05, 0xfe, 0xff, 0x00, 0x0a, + 0xfc, 0xfe, 0x00, 0xc0, 0xf8, 0xfc, 0x00, 0x28, + 0xf0, 0xf8, 0x00, 0x30, 0xe0, 0xd0, 0x01, 0x88, + 0x04, 0x83, 0x22, 0x00, 0xff, 0xfe, 0xfd, 0xfc, + 0xfc, 0xfb, 0xfa, 0xfe, 0xfd, 0xfb, 0xf9, 0xf7, + 0xf7, 0xf5, 0xf3, 0xfc, 0xfa, 0xf6, 0xf2, 0xee, + 0xee, 0xea, 0xe6, 0xf8, 0xf4, 0xec, 0xe4, 0xdc, + 0xd4, 0xcc, 0xc4, 0x24, 0x21, 0x83, 0x22, 0x04, + 0x83, 0x22, 0xff, 0x01, 0xff, 0x01, 0x00, 0x00, + 0x00, 0x02, 0x22, 0x32, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x83, + 0x22, 0x8a, 0x01, 0x20, 0x01, 0x0b, 0xea, 0xf3, + 0xf9, 0x8b, 0x7e, 0x6b, 0xd5, 0x01, 0x00, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x3a, 0x01, 0x38, 0x01, 0x4b, 0x01, + 0x49, 0x01, 0x5c, 0x01, 0x5a, 0x01, 0x08, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x15, 0x24, 0x48, 0x83, 0x22, 0x04, + 0x83, 0x22, 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, + 0x07, 0x08, 0x00, 0x03, 0x05, 0x07, 0x09, 0x0d, + 0x0f, 0x81, 0x00, 0x06, 0x0a, 0x0e, 0x82, 0x8a, + 0x8e, 0x22, 0x00, 0x0c, 0x84, 0x8c, 0x24, 0x2c, + 0xa4, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xaa, 0x35, 0xab, 0x36, + 0x02, 0x27, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x25, + 0x03, 0x03, 0x2b, 0x03, 0x00, 0x03, 0x00, 0x03, + 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0x22, + 0x00, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, + 0x2b, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, + 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, + 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x00, 0x02, + 0x21, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x00, + 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x00, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x21, + 0x01, 0x02, 0x21, 0x02, 0x02, 0x02, 0x00, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x20, 0xb5, 0x05, + 0x79, 0x0f, 0xf3, 0xc2, 0x11, 0x22, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, + 0x15, 0xa2, 0xe0, 0xb0, 0xe6, 0x50, 0x01, 0x22, + 0xa2, 0xe1, 0xb0, 0xe7, 0x22, 0x02, 0x00}; + static unsigned char Data0485_0C[] = { + 0x02, 0x27, 0x69}; + static unsigned char Data0485_66[] = { + 0x02, 0x25, 0x47, 0x02, 0x25, 0x60}; + static unsigned char Data0485_60[] = { + 0x02, 0x22, 0x7e}; + static unsigned char Data0485_99[] = { + 0xc2, 0x53, 0x02, 0x12, 0x86}; + static unsigned char Data0485_9E[] = { + 0x70, 0xf9, 0x22}; +#ifdef OOKUBO_ORIGINAL + static unsigned char Data0485_36[] = { + 0x78, 0x00, 0xf2, 0xc2, 0x53, 0x74, 0x86, 0xc0, + 0xe0, 0x74, 0x12, 0xc0, 0xe0, 0x32}; +#endif /* OOKUBO_ORIGINAL */ --- /dev/null 2002-09-08 06:22:10.000000000 +0200 +++ linux/sound/isa/cs423x/sound_pc9800.h 2002-10-28 15:45:00.000000000 +0100 @@ -0,0 +1,23 @@ +#ifndef _SOUND_PC9800_H_ +#define _SOUND_PC9800_H_ + +#include + +#define PC9800_SOUND_IO_ID 0xa460 + +/* Sound Functions ID. */ +#define PC9800_SOUND_ID() ((inb(PC9800_SOUND_IO_ID) >> 4) & 0x0f) + +#define PC9800_SOUND_ID_DO 0x0 /* PC-98DO+ Internal */ +#define PC9800_SOUND_ID_GS 0x1 /* PC-98GS Internal */ +#define PC9800_SOUND_ID_73 0x2 /* PC-9801-73 (base 0x18x) */ +#define PC9800_SOUND_ID_73A 0x3 /* PC-9801-73/76 (base 0x28x) */ +#define PC9800_SOUND_ID_86 0x4 /* PC-9801-86 and compatible (base 0x18x) */ +#define PC9800_SOUND_ID_86A 0x5 /* PC-9801-86 (base 0x28x) */ +#define PC9800_SOUND_ID_NF 0x6 /* PC-9821Nf/Np Internal */ +#define PC9800_SOUND_ID_XMATE 0x7 /* X-Mate Internal and compatible */ +#define PC9800_SOUND_ID_118 0x8 /* PC-9801-118 and compatible(CanBe Internal, etc.) */ + +#define PC9800_SOUND_ID_UNKNOWN 0xf /* Unknown (No Sound System or PC-9801-26) */ + +#endif --Multipart_Tue_Oct_29_11:08:43_2002-1-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/