Loading include/sound/emu10k1.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1628,7 +1628,7 @@ struct snd_emu_chip_details { unsigned char spdif_bug; /* Has Spdif phasing bug */ unsigned char spdif_bug; /* Has Spdif phasing bug */ unsigned char ac97_chip; /* Has an AC97 chip: 1 = mandatory, 2 = optional */ unsigned char ac97_chip; /* Has an AC97 chip: 1 = mandatory, 2 = optional */ unsigned char ecard; /* APS EEPROM */ unsigned char ecard; /* APS EEPROM */ unsigned char emu1010; /* EMU 1010m card */ unsigned char emu_model; /* EMU model type */ unsigned char spi_dac; /* SPI interface for DAC */ unsigned char spi_dac; /* SPI interface for DAC */ unsigned char i2c_adc; /* I2C interface for ADC */ unsigned char i2c_adc; /* I2C interface for ADC */ unsigned char adc_1361t; /* Use Philips 1361T ADC */ unsigned char adc_1361t; /* Use Philips 1361T ADC */ Loading sound/pci/emu10k1/emu10k1_main.c +78 −52 Original line number Original line Diff line number Diff line Loading @@ -54,12 +54,14 @@ #define DOCK_FILENAME "emu/audio_dock.fw" #define DOCK_FILENAME "emu/audio_dock.fw" #define EMU1010B_FILENAME "emu/emu1010b.fw" #define EMU1010B_FILENAME "emu/emu1010b.fw" #define MICRO_DOCK_FILENAME "emu/micro_dock.fw" #define MICRO_DOCK_FILENAME "emu/micro_dock.fw" #define EMU0404_FILENAME "emu/emu0404.fw" #define EMU1010_NOTEBOOK_FILENAME "emu/emu1010_notebook.fw" #define EMU1010_NOTEBOOK_FILENAME "emu/emu1010_notebook.fw" MODULE_FIRMWARE(HANA_FILENAME); MODULE_FIRMWARE(HANA_FILENAME); MODULE_FIRMWARE(DOCK_FILENAME); MODULE_FIRMWARE(DOCK_FILENAME); MODULE_FIRMWARE(EMU1010B_FILENAME); MODULE_FIRMWARE(EMU1010B_FILENAME); MODULE_FIRMWARE(MICRO_DOCK_FILENAME); MODULE_FIRMWARE(MICRO_DOCK_FILENAME); MODULE_FIRMWARE(EMU0404_FILENAME); MODULE_FIRMWARE(EMU1010_NOTEBOOK_FILENAME); MODULE_FIRMWARE(EMU1010_NOTEBOOK_FILENAME); Loading Loading @@ -287,7 +289,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page); snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page); } } if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { outl(HCFG_AUTOMUTE_ASYNC | outl(HCFG_AUTOMUTE_ASYNC | HCFG_EMU32_SLAVE | HCFG_EMU32_SLAVE | HCFG_AUDIOENABLE, emu->port + HCFG); HCFG_AUDIOENABLE, emu->port + HCFG); Loading Loading @@ -317,7 +319,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); if (enable_ir) { /* enable IR for SB Live */ if (enable_ir) { /* enable IR for SB Live */ if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { ; /* Disable all access to A_IOCFG for the emu1010 */ ; /* Disable all access to A_IOCFG for the emu1010 */ } else if (emu->card_capabilities->i2c_adc) { } else if (emu->card_capabilities->i2c_adc) { ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ Loading @@ -338,7 +340,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) } } } } if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { ; /* Disable all access to A_IOCFG for the emu1010 */ ; /* Disable all access to A_IOCFG for the emu1010 */ } else if (emu->card_capabilities->i2c_adc) { } else if (emu->card_capabilities->i2c_adc) { ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ Loading @@ -358,7 +360,7 @@ static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu) outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG); outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG); /* Enable analog/digital outs on audigy */ /* Enable analog/digital outs on audigy */ if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { ; /* Disable all access to A_IOCFG for the emu1010 */ ; /* Disable all access to A_IOCFG for the emu1010 */ } else if (emu->card_capabilities->i2c_adc) { } else if (emu->card_capabilities->i2c_adc) { ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ Loading Loading @@ -660,6 +662,8 @@ static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * file int n, i; int n, i; int reg; int reg; int value; int value; unsigned int write_post; unsigned long flags; const struct firmware *fw_entry; const struct firmware *fw_entry; if ((err = request_firmware(&fw_entry, filename, &emu->pci->dev)) != 0) { if ((err = request_firmware(&fw_entry, filename, &emu->pci->dev)) != 0) { Loading @@ -667,12 +671,6 @@ static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * file return err; return err; } } snd_printk(KERN_INFO "firmware size=0x%zx\n", fw_entry->size); snd_printk(KERN_INFO "firmware size=0x%zx\n", fw_entry->size); #if 0 if (fw_entry->size != 0x133a4) { snd_printk(KERN_ERR "firmware: %s wrong size.\n",filename); return -EINVAL; } #endif /* The FPGA is a Xilinx Spartan IIE XC2S50E */ /* The FPGA is a Xilinx Spartan IIE XC2S50E */ /* GPIO7 -> FPGA PGMN /* GPIO7 -> FPGA PGMN Loading @@ -680,9 +678,12 @@ static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * file * GPIO5 -> FPGA DIN * GPIO5 -> FPGA DIN * FPGA CONFIG OFF -> FPGA PGMN * FPGA CONFIG OFF -> FPGA PGMN */ */ spin_lock_irqsave(&emu->emu_lock, flags); outl(0x00, emu->port + A_IOCFG); /* Set PGMN low for 1uS. */ outl(0x00, emu->port + A_IOCFG); /* Set PGMN low for 1uS. */ udelay(1); write_post = inl(emu->port + A_IOCFG); udelay(100); outl(0x80, emu->port + A_IOCFG); /* Leave bit 7 set during netlist setup. */ outl(0x80, emu->port + A_IOCFG); /* Leave bit 7 set during netlist setup. */ write_post = inl(emu->port + A_IOCFG); udelay(100); /* Allow FPGA memory to clean */ udelay(100); /* Allow FPGA memory to clean */ for(n = 0; n < fw_entry->size; n++) { for(n = 0; n < fw_entry->size; n++) { value=fw_entry->data[n]; value=fw_entry->data[n]; Loading @@ -692,12 +693,15 @@ static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * file reg = reg | 0x20; reg = reg | 0x20; value = value >> 1; value = value >> 1; outl(reg, emu->port + A_IOCFG); outl(reg, emu->port + A_IOCFG); write_post = inl(emu->port + A_IOCFG); outl(reg | 0x40, emu->port + A_IOCFG); outl(reg | 0x40, emu->port + A_IOCFG); write_post = inl(emu->port + A_IOCFG); } } } } /* After programming, set GPIO bit 4 high again. */ /* After programming, set GPIO bit 4 high again. */ outl(0x10, emu->port + A_IOCFG); outl(0x10, emu->port + A_IOCFG); write_post = inl(emu->port + A_IOCFG); spin_unlock_irqrestore(&emu->emu_lock, flags); release_firmware(fw_entry); release_firmware(fw_entry); return 0; return 0; Loading @@ -711,7 +715,7 @@ int emu1010_firmware_thread(void *data) { for (;;) { for (;;) { /* Delay to allow Audio Dock to settle */ /* Delay to allow Audio Dock to settle */ msleep(1000); msleep_interruptible(1000); if (kthread_should_stop()) if (kthread_should_stop()) break; break; snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp ); /* IRQ Status */ snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp ); /* IRQ Status */ Loading @@ -721,17 +725,17 @@ int emu1010_firmware_thread(void *data) { /* Return to Audio Dock programming mode */ /* Return to Audio Dock programming mode */ snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware\n"); snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware\n"); snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_AUDIODOCK ); snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_AUDIODOCK ); if (emu->card_capabilities->emu1010 == 1) { if (emu->card_capabilities->emu_model == 1) { if ((err = snd_emu1010_load_firmware(emu, DOCK_FILENAME)) != 0) { if ((err = snd_emu1010_load_firmware(emu, DOCK_FILENAME)) != 0) { return err; continue; } } } else if (emu->card_capabilities->emu1010 == 2) { } else if (emu->card_capabilities->emu_model == 2) { if ((err = snd_emu1010_load_firmware(emu, MICRO_DOCK_FILENAME)) != 0) { if ((err = snd_emu1010_load_firmware(emu, MICRO_DOCK_FILENAME)) != 0) { return err; continue; } } } else if (emu->card_capabilities->emu1010 == 3) { } else if (emu->card_capabilities->emu_model == 3) { if ((err = snd_emu1010_load_firmware(emu, MICRO_DOCK_FILENAME)) != 0) { if ((err = snd_emu1010_load_firmware(emu, MICRO_DOCK_FILENAME)) != 0) { return err; continue; } } } } Loading @@ -744,8 +748,7 @@ int emu1010_firmware_thread(void *data) { if ((reg & 0x1f) != 0x15) { if ((reg & 0x1f) != 0x15) { /* FPGA failed to be programmed */ /* FPGA failed to be programmed */ snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware file failed, reg=0x%x\n", reg); snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware file failed, reg=0x%x\n", reg); return 0; continue; return -ENODEV; } } snd_printk(KERN_INFO "emu1010: Audio Dock Firmware loaded\n"); snd_printk(KERN_INFO "emu1010: Audio Dock Firmware loaded\n"); snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp ); snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp ); Loading @@ -756,9 +759,9 @@ int emu1010_firmware_thread(void *data) { msleep(10); msleep(10); /* Unmute all. Default is muted after a firmware load */ /* Unmute all. Default is muted after a firmware load */ snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE ); snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE ); break; } } } } snd_printk(KERN_INFO "emu1010: firmware thread stopping\n"); return 0; return 0; } } Loading Loading @@ -799,6 +802,7 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 * emu) int tmp,tmp2; int tmp,tmp2; int reg; int reg; int err; int err; const char *filename = NULL; snd_printk(KERN_INFO "emu1010: Special config.\n"); snd_printk(KERN_INFO "emu1010: Special config.\n"); /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, Loading Loading @@ -840,22 +844,32 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 * emu) return -ENODEV; return -ENODEV; } } snd_printk(KERN_INFO "emu1010: EMU_HANA_ID=0x%x\n",reg); snd_printk(KERN_INFO "emu1010: EMU_HANA_ID=0x%x\n",reg); if (emu->card_capabilities->emu1010 == 1) { switch (emu->card_capabilities->emu_model) { if ((err = snd_emu1010_load_firmware(emu, HANA_FILENAME)) != 0) { case 1: snd_printk(KERN_INFO "emu1010: Loading Hana Firmware file %s failed\n", HANA_FILENAME); filename = HANA_FILENAME; return err; break; } case 2: } else if (emu->card_capabilities->emu1010 == 2) { filename = EMU1010B_FILENAME; if ((err = snd_emu1010_load_firmware(emu, EMU1010B_FILENAME)) != 0) { break; snd_printk(KERN_INFO "emu1010: Loading Firmware file %s failed\n", EMU1010B_FILENAME); case 3: return err; filename = EMU1010_NOTEBOOK_FILENAME; break; case 4: filename = EMU0404_FILENAME; break; default: filename = NULL; return -ENODEV; break; } } } else if (emu->card_capabilities->emu1010 == 3) { snd_printk(KERN_INFO "emu1010: filename %s testing\n", filename); if ((err = snd_emu1010_load_firmware(emu, EMU1010_NOTEBOOK_FILENAME)) != 0) { err = snd_emu1010_load_firmware(emu, filename); snd_printk(KERN_INFO "emu1010: Loading Firmware file %s failed\n", EMU1010_NOTEBOOK_FILENAME); if (err != 0) { snd_printk( KERN_INFO "emu1010: Loading Firmware file %s failed\n", filename); return err; return err; } } } /* ID, should read & 0x7f = 0x55 when FPGA programmed. */ /* ID, should read & 0x7f = 0x55 when FPGA programmed. */ snd_emu1010_fpga_read(emu, EMU_HANA_ID, ® ); snd_emu1010_fpga_read(emu, EMU_HANA_ID, ® ); Loading Loading @@ -1201,11 +1215,12 @@ static int snd_emu10k1_free(struct snd_emu10k1 *emu) } } snd_emu10k1_free_efx(emu); snd_emu10k1_free_efx(emu); } } if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model == 1) { /* Disable 48Volt power to Audio Dock */ /* Disable 48Volt power to Audio Dock */ snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0 ); snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0 ); kthread_stop(emu->emu1010.firmware_thread); } } if (emu->card_capabilities->emu_model) kthread_stop(emu->emu1010.firmware_thread); if (emu->memhdr) if (emu->memhdr) snd_util_memhdr_free(emu->memhdr); snd_util_memhdr_free(emu->memhdr); if (emu->silent_page.area) if (emu->silent_page.area) Loading Loading @@ -1337,6 +1352,15 @@ static struct snd_emu_chip_details emu_chip_details[] = { .spi_dac = 1, .spi_dac = 1, .i2c_adc = 1, .i2c_adc = 1, .spk71 = 1} , .spk71 = 1} , /* Tested by James@superbug.co.uk 20-3-2007. */ {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40021102, .driver = "Audigy2", .name = "E-mu 0404 [4002]", .id = "EMU0404", .emu10k2_chip = 1, .ca0102_chip = 1, .spk71 = 1, .emu_model = 4} , /* EMU 0404 */ /* Tested by James@superbug.co.uk 4th Nov 2007. */ {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x42011102, {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x42011102, .driver = "Audigy2", .name = "E-mu 1010 Notebook [MAEM8950]", .driver = "Audigy2", .name = "E-mu 1010 Notebook [MAEM8950]", .id = "EMU1010", .id = "EMU1010", Loading @@ -1344,28 +1368,30 @@ static struct snd_emu_chip_details emu_chip_details[] = { .ca0108_chip = 1, .ca0108_chip = 1, .ca_cardbus_chip = 1, .ca_cardbus_chip = 1, .spk71 = 1 , .spk71 = 1 , .emu1010 = 3} , .emu_model = 3} , /* Tested by James@superbug.co.uk 4th Nov 2007. */ {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40041102, {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40041102, .driver = "Audigy2", .name = "E-mu 1010b PCI [MAEM????]", .driver = "Audigy2", .name = "E-mu 1010b PCI [MAEM????]", .id = "EMU1010", .id = "EMU1010", .emu10k2_chip = 1, .emu10k2_chip = 1, .ca0108_chip = 1, .ca0108_chip = 1, .spk71 = 1, .spk71 = 1, .emu1010 = 2} , .emu_model = 2} , {.vendor = 0x1102, .device = 0x0008, /* Tested by James@superbug.co.uk 8th July 2005. */ .driver = "Audigy2", .name = "Audigy 2 Value [Unknown]", .id = "Audigy2", .emu10k2_chip = 1, .ca0108_chip = 1, .ac97_chip = 1} , /* Tested by James@superbug.co.uk 8th July 2005. No sound available yet. */ {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102, {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102, .driver = "Audigy2", .name = "E-mu 1010 [4001]", .driver = "Audigy2", .name = "E-mu 1010 [4001]", .id = "EMU1010", .id = "EMU1010", .emu10k2_chip = 1, .emu10k2_chip = 1, .ca0102_chip = 1, .ca0102_chip = 1, .spk71 = 1, .spk71 = 1, .emu1010 = 1} , .emu_model = 1} , /* Emu 1010 */ /* Audigy4 (Not PRO) SB0610 */ {.vendor = 0x1102, .device = 0x0008, .driver = "Audigy2", .name = "Audigy 2 Value [Unknown]", .id = "Audigy2", .emu10k2_chip = 1, .ca0108_chip = 1, .ac97_chip = 1} , /* Tested by James@superbug.co.uk 3rd July 2005 */ /* Tested by James@superbug.co.uk 3rd July 2005 */ {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102, {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102, .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]", .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]", Loading Loading @@ -1793,7 +1819,7 @@ int __devinit snd_emu10k1_create(struct snd_card *card, if (emu->card_capabilities->ecard) { if (emu->card_capabilities->ecard) { if ((err = snd_emu10k1_ecard_init(emu)) < 0) if ((err = snd_emu10k1_ecard_init(emu)) < 0) goto error; goto error; } else if (emu->card_capabilities->emu1010) { } else if (emu->card_capabilities->emu_model) { if ((err = snd_emu10k1_emu1010_init(emu)) < 0) { if ((err = snd_emu10k1_emu1010_init(emu)) < 0) { snd_emu10k1_free(emu); snd_emu10k1_free(emu); return err; return err; Loading Loading @@ -1942,7 +1968,7 @@ void snd_emu10k1_resume_init(struct snd_emu10k1 *emu) snd_emu10k1_cardbus_init(emu); snd_emu10k1_cardbus_init(emu); if (emu->card_capabilities->ecard) if (emu->card_capabilities->ecard) snd_emu10k1_ecard_init(emu); snd_emu10k1_ecard_init(emu); else if (emu->card_capabilities->emu1010) else if (emu->card_capabilities->emu_model) snd_emu10k1_emu1010_init(emu); snd_emu10k1_emu1010_init(emu); else else snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE); snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE); Loading sound/pci/emu10k1/emufx.c +3 −3 Original line number Original line Diff line number Diff line Loading @@ -1261,7 +1261,7 @@ static int __devinit _snd_emu10k1_audigy_init_efx(struct snd_emu10k1 *emu) A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) /* emu1212 DSP 0 and DSP 1 Capture */ /* emu1212 DSP 0 and DSP 1 Capture */ if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { if (emu->card_capabilities->ca0108_chip) { if (emu->card_capabilities->ca0108_chip) { /* Note:JCD:No longer bit shift lower 16bits to upper 16bits of 32bit value. */ /* Note:JCD:No longer bit shift lower 16bits to upper 16bits of 32bit value. */ A_OP(icode, &ptr, iMACINT0, A_GPR(tmp), A_C_00000000, A3_EMU32IN(0x0), A_C_00000001); A_OP(icode, &ptr, iMACINT0, A_GPR(tmp), A_C_00000000, A3_EMU32IN(0x0), A_C_00000001); Loading Loading @@ -1515,7 +1515,7 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) /* digital outputs */ /* digital outputs */ /* A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); */ /* A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); */ if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { /* EMU1010 Outputs from PCM Front, Rear, Center, LFE, Side */ /* EMU1010 Outputs from PCM Front, Rear, Center, LFE, Side */ snd_printk("EMU outputs on\n"); snd_printk("EMU outputs on\n"); for (z = 0; z < 8; z++) { for (z = 0; z < 8; z++) { Loading Loading @@ -1563,7 +1563,7 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_R, capture+1); A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_R, capture+1); #endif #endif if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { if (emu->card_capabilities->ca0108_chip) { if (emu->card_capabilities->ca0108_chip) { snd_printk("EMU2 inputs on\n"); snd_printk("EMU2 inputs on\n"); for (z = 0; z < 0x10; z++) { for (z = 0; z < 0x10; z++) { Loading sound/pci/emu10k1/emumixer.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -1792,7 +1792,7 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu, return err; return err; } } if ( emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { ; /* Disable the snd_audigy_spdif_shared_spdif */ ; /* Disable the snd_audigy_spdif_shared_spdif */ } else if (emu->audigy) { } else if (emu->audigy) { if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL) if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL) Loading @@ -1817,7 +1817,7 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu, return err; return err; } } if ( emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { int i; int i; for (i = 0; i < ARRAY_SIZE(snd_emu1010_output_enum_ctls); i++) { for (i = 0; i < ARRAY_SIZE(snd_emu1010_output_enum_ctls); i++) { Loading sound/pci/emu10k1/emupcm.c +4 −4 Original line number Original line Diff line number Diff line Loading @@ -357,7 +357,7 @@ static void snd_emu10k1_pcm_init_voice(struct snd_emu10k1 *emu, snd_emu10k1_ptr_write(emu, PTRX, voice, (send_amount[0] << 8) | send_amount[1]); snd_emu10k1_ptr_write(emu, PTRX, voice, (send_amount[0] << 8) | send_amount[1]); snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_amount[3] << 24)); snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_amount[3] << 24)); snd_emu10k1_ptr_write(emu, PSST, voice, start_addr | (send_amount[2] << 24)); snd_emu10k1_ptr_write(emu, PSST, voice, start_addr | (send_amount[2] << 24)); if (emu->card_capabilities->emu1010) if (emu->card_capabilities->emu_model) pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ else else pitch_target = emu10k1_calc_pitch_target(runtime->rate); pitch_target = emu10k1_calc_pitch_target(runtime->rate); Loading Loading @@ -700,7 +700,7 @@ static void snd_emu10k1_playback_trigger_voice(struct snd_emu10k1 *emu, struct s voice = evoice->number; voice = evoice->number; pitch = snd_emu10k1_rate_to_pitch(runtime->rate) >> 8; pitch = snd_emu10k1_rate_to_pitch(runtime->rate) >> 8; if (emu->card_capabilities->emu1010) if (emu->card_capabilities->emu_model) pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ else else pitch_target = emu10k1_calc_pitch_target(runtime->rate); pitch_target = emu10k1_calc_pitch_target(runtime->rate); Loading Loading @@ -1231,7 +1231,7 @@ static int snd_emu10k1_capture_efx_open(struct snd_pcm_substream *substream) runtime->hw.rates = SNDRV_PCM_RATE_48000; runtime->hw.rates = SNDRV_PCM_RATE_48000; runtime->hw.rate_min = runtime->hw.rate_max = 48000; runtime->hw.rate_min = runtime->hw.rate_max = 48000; spin_lock_irq(&emu->reg_lock); spin_lock_irq(&emu->reg_lock); if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { /* Nb. of channels has been increased to 16 */ /* Nb. of channels has been increased to 16 */ /* TODO /* TODO * SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE * SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE Loading Loading @@ -1790,7 +1790,7 @@ int __devinit snd_emu10k1_pcm_efx(struct snd_emu10k1 * emu, int device, struct s /* emu->efx_voices_mask[0] = FXWC_DEFAULTROUTE_C | FXWC_DEFAULTROUTE_A; */ /* emu->efx_voices_mask[0] = FXWC_DEFAULTROUTE_C | FXWC_DEFAULTROUTE_A; */ if (emu->audigy) { if (emu->audigy) { emu->efx_voices_mask[0] = 0; emu->efx_voices_mask[0] = 0; if (emu->card_capabilities->emu1010) if (emu->card_capabilities->emu_model) /* Pavel Hofman - 32 voices will be used for /* Pavel Hofman - 32 voices will be used for * capture (write mode) - * capture (write mode) - * each bit = corresponding voice * each bit = corresponding voice Loading Loading
include/sound/emu10k1.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1628,7 +1628,7 @@ struct snd_emu_chip_details { unsigned char spdif_bug; /* Has Spdif phasing bug */ unsigned char spdif_bug; /* Has Spdif phasing bug */ unsigned char ac97_chip; /* Has an AC97 chip: 1 = mandatory, 2 = optional */ unsigned char ac97_chip; /* Has an AC97 chip: 1 = mandatory, 2 = optional */ unsigned char ecard; /* APS EEPROM */ unsigned char ecard; /* APS EEPROM */ unsigned char emu1010; /* EMU 1010m card */ unsigned char emu_model; /* EMU model type */ unsigned char spi_dac; /* SPI interface for DAC */ unsigned char spi_dac; /* SPI interface for DAC */ unsigned char i2c_adc; /* I2C interface for ADC */ unsigned char i2c_adc; /* I2C interface for ADC */ unsigned char adc_1361t; /* Use Philips 1361T ADC */ unsigned char adc_1361t; /* Use Philips 1361T ADC */ Loading
sound/pci/emu10k1/emu10k1_main.c +78 −52 Original line number Original line Diff line number Diff line Loading @@ -54,12 +54,14 @@ #define DOCK_FILENAME "emu/audio_dock.fw" #define DOCK_FILENAME "emu/audio_dock.fw" #define EMU1010B_FILENAME "emu/emu1010b.fw" #define EMU1010B_FILENAME "emu/emu1010b.fw" #define MICRO_DOCK_FILENAME "emu/micro_dock.fw" #define MICRO_DOCK_FILENAME "emu/micro_dock.fw" #define EMU0404_FILENAME "emu/emu0404.fw" #define EMU1010_NOTEBOOK_FILENAME "emu/emu1010_notebook.fw" #define EMU1010_NOTEBOOK_FILENAME "emu/emu1010_notebook.fw" MODULE_FIRMWARE(HANA_FILENAME); MODULE_FIRMWARE(HANA_FILENAME); MODULE_FIRMWARE(DOCK_FILENAME); MODULE_FIRMWARE(DOCK_FILENAME); MODULE_FIRMWARE(EMU1010B_FILENAME); MODULE_FIRMWARE(EMU1010B_FILENAME); MODULE_FIRMWARE(MICRO_DOCK_FILENAME); MODULE_FIRMWARE(MICRO_DOCK_FILENAME); MODULE_FIRMWARE(EMU0404_FILENAME); MODULE_FIRMWARE(EMU1010_NOTEBOOK_FILENAME); MODULE_FIRMWARE(EMU1010_NOTEBOOK_FILENAME); Loading Loading @@ -287,7 +289,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page); snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page); } } if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { outl(HCFG_AUTOMUTE_ASYNC | outl(HCFG_AUTOMUTE_ASYNC | HCFG_EMU32_SLAVE | HCFG_EMU32_SLAVE | HCFG_AUDIOENABLE, emu->port + HCFG); HCFG_AUDIOENABLE, emu->port + HCFG); Loading Loading @@ -317,7 +319,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); if (enable_ir) { /* enable IR for SB Live */ if (enable_ir) { /* enable IR for SB Live */ if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { ; /* Disable all access to A_IOCFG for the emu1010 */ ; /* Disable all access to A_IOCFG for the emu1010 */ } else if (emu->card_capabilities->i2c_adc) { } else if (emu->card_capabilities->i2c_adc) { ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ Loading @@ -338,7 +340,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) } } } } if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { ; /* Disable all access to A_IOCFG for the emu1010 */ ; /* Disable all access to A_IOCFG for the emu1010 */ } else if (emu->card_capabilities->i2c_adc) { } else if (emu->card_capabilities->i2c_adc) { ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ Loading @@ -358,7 +360,7 @@ static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu) outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG); outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG); /* Enable analog/digital outs on audigy */ /* Enable analog/digital outs on audigy */ if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { ; /* Disable all access to A_IOCFG for the emu1010 */ ; /* Disable all access to A_IOCFG for the emu1010 */ } else if (emu->card_capabilities->i2c_adc) { } else if (emu->card_capabilities->i2c_adc) { ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ Loading Loading @@ -660,6 +662,8 @@ static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * file int n, i; int n, i; int reg; int reg; int value; int value; unsigned int write_post; unsigned long flags; const struct firmware *fw_entry; const struct firmware *fw_entry; if ((err = request_firmware(&fw_entry, filename, &emu->pci->dev)) != 0) { if ((err = request_firmware(&fw_entry, filename, &emu->pci->dev)) != 0) { Loading @@ -667,12 +671,6 @@ static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * file return err; return err; } } snd_printk(KERN_INFO "firmware size=0x%zx\n", fw_entry->size); snd_printk(KERN_INFO "firmware size=0x%zx\n", fw_entry->size); #if 0 if (fw_entry->size != 0x133a4) { snd_printk(KERN_ERR "firmware: %s wrong size.\n",filename); return -EINVAL; } #endif /* The FPGA is a Xilinx Spartan IIE XC2S50E */ /* The FPGA is a Xilinx Spartan IIE XC2S50E */ /* GPIO7 -> FPGA PGMN /* GPIO7 -> FPGA PGMN Loading @@ -680,9 +678,12 @@ static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * file * GPIO5 -> FPGA DIN * GPIO5 -> FPGA DIN * FPGA CONFIG OFF -> FPGA PGMN * FPGA CONFIG OFF -> FPGA PGMN */ */ spin_lock_irqsave(&emu->emu_lock, flags); outl(0x00, emu->port + A_IOCFG); /* Set PGMN low for 1uS. */ outl(0x00, emu->port + A_IOCFG); /* Set PGMN low for 1uS. */ udelay(1); write_post = inl(emu->port + A_IOCFG); udelay(100); outl(0x80, emu->port + A_IOCFG); /* Leave bit 7 set during netlist setup. */ outl(0x80, emu->port + A_IOCFG); /* Leave bit 7 set during netlist setup. */ write_post = inl(emu->port + A_IOCFG); udelay(100); /* Allow FPGA memory to clean */ udelay(100); /* Allow FPGA memory to clean */ for(n = 0; n < fw_entry->size; n++) { for(n = 0; n < fw_entry->size; n++) { value=fw_entry->data[n]; value=fw_entry->data[n]; Loading @@ -692,12 +693,15 @@ static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * file reg = reg | 0x20; reg = reg | 0x20; value = value >> 1; value = value >> 1; outl(reg, emu->port + A_IOCFG); outl(reg, emu->port + A_IOCFG); write_post = inl(emu->port + A_IOCFG); outl(reg | 0x40, emu->port + A_IOCFG); outl(reg | 0x40, emu->port + A_IOCFG); write_post = inl(emu->port + A_IOCFG); } } } } /* After programming, set GPIO bit 4 high again. */ /* After programming, set GPIO bit 4 high again. */ outl(0x10, emu->port + A_IOCFG); outl(0x10, emu->port + A_IOCFG); write_post = inl(emu->port + A_IOCFG); spin_unlock_irqrestore(&emu->emu_lock, flags); release_firmware(fw_entry); release_firmware(fw_entry); return 0; return 0; Loading @@ -711,7 +715,7 @@ int emu1010_firmware_thread(void *data) { for (;;) { for (;;) { /* Delay to allow Audio Dock to settle */ /* Delay to allow Audio Dock to settle */ msleep(1000); msleep_interruptible(1000); if (kthread_should_stop()) if (kthread_should_stop()) break; break; snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp ); /* IRQ Status */ snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp ); /* IRQ Status */ Loading @@ -721,17 +725,17 @@ int emu1010_firmware_thread(void *data) { /* Return to Audio Dock programming mode */ /* Return to Audio Dock programming mode */ snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware\n"); snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware\n"); snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_AUDIODOCK ); snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_AUDIODOCK ); if (emu->card_capabilities->emu1010 == 1) { if (emu->card_capabilities->emu_model == 1) { if ((err = snd_emu1010_load_firmware(emu, DOCK_FILENAME)) != 0) { if ((err = snd_emu1010_load_firmware(emu, DOCK_FILENAME)) != 0) { return err; continue; } } } else if (emu->card_capabilities->emu1010 == 2) { } else if (emu->card_capabilities->emu_model == 2) { if ((err = snd_emu1010_load_firmware(emu, MICRO_DOCK_FILENAME)) != 0) { if ((err = snd_emu1010_load_firmware(emu, MICRO_DOCK_FILENAME)) != 0) { return err; continue; } } } else if (emu->card_capabilities->emu1010 == 3) { } else if (emu->card_capabilities->emu_model == 3) { if ((err = snd_emu1010_load_firmware(emu, MICRO_DOCK_FILENAME)) != 0) { if ((err = snd_emu1010_load_firmware(emu, MICRO_DOCK_FILENAME)) != 0) { return err; continue; } } } } Loading @@ -744,8 +748,7 @@ int emu1010_firmware_thread(void *data) { if ((reg & 0x1f) != 0x15) { if ((reg & 0x1f) != 0x15) { /* FPGA failed to be programmed */ /* FPGA failed to be programmed */ snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware file failed, reg=0x%x\n", reg); snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware file failed, reg=0x%x\n", reg); return 0; continue; return -ENODEV; } } snd_printk(KERN_INFO "emu1010: Audio Dock Firmware loaded\n"); snd_printk(KERN_INFO "emu1010: Audio Dock Firmware loaded\n"); snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp ); snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp ); Loading @@ -756,9 +759,9 @@ int emu1010_firmware_thread(void *data) { msleep(10); msleep(10); /* Unmute all. Default is muted after a firmware load */ /* Unmute all. Default is muted after a firmware load */ snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE ); snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE ); break; } } } } snd_printk(KERN_INFO "emu1010: firmware thread stopping\n"); return 0; return 0; } } Loading Loading @@ -799,6 +802,7 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 * emu) int tmp,tmp2; int tmp,tmp2; int reg; int reg; int err; int err; const char *filename = NULL; snd_printk(KERN_INFO "emu1010: Special config.\n"); snd_printk(KERN_INFO "emu1010: Special config.\n"); /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, Loading Loading @@ -840,22 +844,32 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 * emu) return -ENODEV; return -ENODEV; } } snd_printk(KERN_INFO "emu1010: EMU_HANA_ID=0x%x\n",reg); snd_printk(KERN_INFO "emu1010: EMU_HANA_ID=0x%x\n",reg); if (emu->card_capabilities->emu1010 == 1) { switch (emu->card_capabilities->emu_model) { if ((err = snd_emu1010_load_firmware(emu, HANA_FILENAME)) != 0) { case 1: snd_printk(KERN_INFO "emu1010: Loading Hana Firmware file %s failed\n", HANA_FILENAME); filename = HANA_FILENAME; return err; break; } case 2: } else if (emu->card_capabilities->emu1010 == 2) { filename = EMU1010B_FILENAME; if ((err = snd_emu1010_load_firmware(emu, EMU1010B_FILENAME)) != 0) { break; snd_printk(KERN_INFO "emu1010: Loading Firmware file %s failed\n", EMU1010B_FILENAME); case 3: return err; filename = EMU1010_NOTEBOOK_FILENAME; break; case 4: filename = EMU0404_FILENAME; break; default: filename = NULL; return -ENODEV; break; } } } else if (emu->card_capabilities->emu1010 == 3) { snd_printk(KERN_INFO "emu1010: filename %s testing\n", filename); if ((err = snd_emu1010_load_firmware(emu, EMU1010_NOTEBOOK_FILENAME)) != 0) { err = snd_emu1010_load_firmware(emu, filename); snd_printk(KERN_INFO "emu1010: Loading Firmware file %s failed\n", EMU1010_NOTEBOOK_FILENAME); if (err != 0) { snd_printk( KERN_INFO "emu1010: Loading Firmware file %s failed\n", filename); return err; return err; } } } /* ID, should read & 0x7f = 0x55 when FPGA programmed. */ /* ID, should read & 0x7f = 0x55 when FPGA programmed. */ snd_emu1010_fpga_read(emu, EMU_HANA_ID, ® ); snd_emu1010_fpga_read(emu, EMU_HANA_ID, ® ); Loading Loading @@ -1201,11 +1215,12 @@ static int snd_emu10k1_free(struct snd_emu10k1 *emu) } } snd_emu10k1_free_efx(emu); snd_emu10k1_free_efx(emu); } } if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model == 1) { /* Disable 48Volt power to Audio Dock */ /* Disable 48Volt power to Audio Dock */ snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0 ); snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0 ); kthread_stop(emu->emu1010.firmware_thread); } } if (emu->card_capabilities->emu_model) kthread_stop(emu->emu1010.firmware_thread); if (emu->memhdr) if (emu->memhdr) snd_util_memhdr_free(emu->memhdr); snd_util_memhdr_free(emu->memhdr); if (emu->silent_page.area) if (emu->silent_page.area) Loading Loading @@ -1337,6 +1352,15 @@ static struct snd_emu_chip_details emu_chip_details[] = { .spi_dac = 1, .spi_dac = 1, .i2c_adc = 1, .i2c_adc = 1, .spk71 = 1} , .spk71 = 1} , /* Tested by James@superbug.co.uk 20-3-2007. */ {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40021102, .driver = "Audigy2", .name = "E-mu 0404 [4002]", .id = "EMU0404", .emu10k2_chip = 1, .ca0102_chip = 1, .spk71 = 1, .emu_model = 4} , /* EMU 0404 */ /* Tested by James@superbug.co.uk 4th Nov 2007. */ {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x42011102, {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x42011102, .driver = "Audigy2", .name = "E-mu 1010 Notebook [MAEM8950]", .driver = "Audigy2", .name = "E-mu 1010 Notebook [MAEM8950]", .id = "EMU1010", .id = "EMU1010", Loading @@ -1344,28 +1368,30 @@ static struct snd_emu_chip_details emu_chip_details[] = { .ca0108_chip = 1, .ca0108_chip = 1, .ca_cardbus_chip = 1, .ca_cardbus_chip = 1, .spk71 = 1 , .spk71 = 1 , .emu1010 = 3} , .emu_model = 3} , /* Tested by James@superbug.co.uk 4th Nov 2007. */ {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40041102, {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40041102, .driver = "Audigy2", .name = "E-mu 1010b PCI [MAEM????]", .driver = "Audigy2", .name = "E-mu 1010b PCI [MAEM????]", .id = "EMU1010", .id = "EMU1010", .emu10k2_chip = 1, .emu10k2_chip = 1, .ca0108_chip = 1, .ca0108_chip = 1, .spk71 = 1, .spk71 = 1, .emu1010 = 2} , .emu_model = 2} , {.vendor = 0x1102, .device = 0x0008, /* Tested by James@superbug.co.uk 8th July 2005. */ .driver = "Audigy2", .name = "Audigy 2 Value [Unknown]", .id = "Audigy2", .emu10k2_chip = 1, .ca0108_chip = 1, .ac97_chip = 1} , /* Tested by James@superbug.co.uk 8th July 2005. No sound available yet. */ {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102, {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102, .driver = "Audigy2", .name = "E-mu 1010 [4001]", .driver = "Audigy2", .name = "E-mu 1010 [4001]", .id = "EMU1010", .id = "EMU1010", .emu10k2_chip = 1, .emu10k2_chip = 1, .ca0102_chip = 1, .ca0102_chip = 1, .spk71 = 1, .spk71 = 1, .emu1010 = 1} , .emu_model = 1} , /* Emu 1010 */ /* Audigy4 (Not PRO) SB0610 */ {.vendor = 0x1102, .device = 0x0008, .driver = "Audigy2", .name = "Audigy 2 Value [Unknown]", .id = "Audigy2", .emu10k2_chip = 1, .ca0108_chip = 1, .ac97_chip = 1} , /* Tested by James@superbug.co.uk 3rd July 2005 */ /* Tested by James@superbug.co.uk 3rd July 2005 */ {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102, {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102, .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]", .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]", Loading Loading @@ -1793,7 +1819,7 @@ int __devinit snd_emu10k1_create(struct snd_card *card, if (emu->card_capabilities->ecard) { if (emu->card_capabilities->ecard) { if ((err = snd_emu10k1_ecard_init(emu)) < 0) if ((err = snd_emu10k1_ecard_init(emu)) < 0) goto error; goto error; } else if (emu->card_capabilities->emu1010) { } else if (emu->card_capabilities->emu_model) { if ((err = snd_emu10k1_emu1010_init(emu)) < 0) { if ((err = snd_emu10k1_emu1010_init(emu)) < 0) { snd_emu10k1_free(emu); snd_emu10k1_free(emu); return err; return err; Loading Loading @@ -1942,7 +1968,7 @@ void snd_emu10k1_resume_init(struct snd_emu10k1 *emu) snd_emu10k1_cardbus_init(emu); snd_emu10k1_cardbus_init(emu); if (emu->card_capabilities->ecard) if (emu->card_capabilities->ecard) snd_emu10k1_ecard_init(emu); snd_emu10k1_ecard_init(emu); else if (emu->card_capabilities->emu1010) else if (emu->card_capabilities->emu_model) snd_emu10k1_emu1010_init(emu); snd_emu10k1_emu1010_init(emu); else else snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE); snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE); Loading
sound/pci/emu10k1/emufx.c +3 −3 Original line number Original line Diff line number Diff line Loading @@ -1261,7 +1261,7 @@ static int __devinit _snd_emu10k1_audigy_init_efx(struct snd_emu10k1 *emu) A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) /* emu1212 DSP 0 and DSP 1 Capture */ /* emu1212 DSP 0 and DSP 1 Capture */ if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { if (emu->card_capabilities->ca0108_chip) { if (emu->card_capabilities->ca0108_chip) { /* Note:JCD:No longer bit shift lower 16bits to upper 16bits of 32bit value. */ /* Note:JCD:No longer bit shift lower 16bits to upper 16bits of 32bit value. */ A_OP(icode, &ptr, iMACINT0, A_GPR(tmp), A_C_00000000, A3_EMU32IN(0x0), A_C_00000001); A_OP(icode, &ptr, iMACINT0, A_GPR(tmp), A_C_00000000, A3_EMU32IN(0x0), A_C_00000001); Loading Loading @@ -1515,7 +1515,7 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) /* digital outputs */ /* digital outputs */ /* A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); */ /* A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); */ if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { /* EMU1010 Outputs from PCM Front, Rear, Center, LFE, Side */ /* EMU1010 Outputs from PCM Front, Rear, Center, LFE, Side */ snd_printk("EMU outputs on\n"); snd_printk("EMU outputs on\n"); for (z = 0; z < 8; z++) { for (z = 0; z < 8; z++) { Loading Loading @@ -1563,7 +1563,7 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_R, capture+1); A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_R, capture+1); #endif #endif if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { if (emu->card_capabilities->ca0108_chip) { if (emu->card_capabilities->ca0108_chip) { snd_printk("EMU2 inputs on\n"); snd_printk("EMU2 inputs on\n"); for (z = 0; z < 0x10; z++) { for (z = 0; z < 0x10; z++) { Loading
sound/pci/emu10k1/emumixer.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -1792,7 +1792,7 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu, return err; return err; } } if ( emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { ; /* Disable the snd_audigy_spdif_shared_spdif */ ; /* Disable the snd_audigy_spdif_shared_spdif */ } else if (emu->audigy) { } else if (emu->audigy) { if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL) if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL) Loading @@ -1817,7 +1817,7 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu, return err; return err; } } if ( emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { int i; int i; for (i = 0; i < ARRAY_SIZE(snd_emu1010_output_enum_ctls); i++) { for (i = 0; i < ARRAY_SIZE(snd_emu1010_output_enum_ctls); i++) { Loading
sound/pci/emu10k1/emupcm.c +4 −4 Original line number Original line Diff line number Diff line Loading @@ -357,7 +357,7 @@ static void snd_emu10k1_pcm_init_voice(struct snd_emu10k1 *emu, snd_emu10k1_ptr_write(emu, PTRX, voice, (send_amount[0] << 8) | send_amount[1]); snd_emu10k1_ptr_write(emu, PTRX, voice, (send_amount[0] << 8) | send_amount[1]); snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_amount[3] << 24)); snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_amount[3] << 24)); snd_emu10k1_ptr_write(emu, PSST, voice, start_addr | (send_amount[2] << 24)); snd_emu10k1_ptr_write(emu, PSST, voice, start_addr | (send_amount[2] << 24)); if (emu->card_capabilities->emu1010) if (emu->card_capabilities->emu_model) pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ else else pitch_target = emu10k1_calc_pitch_target(runtime->rate); pitch_target = emu10k1_calc_pitch_target(runtime->rate); Loading Loading @@ -700,7 +700,7 @@ static void snd_emu10k1_playback_trigger_voice(struct snd_emu10k1 *emu, struct s voice = evoice->number; voice = evoice->number; pitch = snd_emu10k1_rate_to_pitch(runtime->rate) >> 8; pitch = snd_emu10k1_rate_to_pitch(runtime->rate) >> 8; if (emu->card_capabilities->emu1010) if (emu->card_capabilities->emu_model) pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ else else pitch_target = emu10k1_calc_pitch_target(runtime->rate); pitch_target = emu10k1_calc_pitch_target(runtime->rate); Loading Loading @@ -1231,7 +1231,7 @@ static int snd_emu10k1_capture_efx_open(struct snd_pcm_substream *substream) runtime->hw.rates = SNDRV_PCM_RATE_48000; runtime->hw.rates = SNDRV_PCM_RATE_48000; runtime->hw.rate_min = runtime->hw.rate_max = 48000; runtime->hw.rate_min = runtime->hw.rate_max = 48000; spin_lock_irq(&emu->reg_lock); spin_lock_irq(&emu->reg_lock); if (emu->card_capabilities->emu1010) { if (emu->card_capabilities->emu_model) { /* Nb. of channels has been increased to 16 */ /* Nb. of channels has been increased to 16 */ /* TODO /* TODO * SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE * SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE Loading Loading @@ -1790,7 +1790,7 @@ int __devinit snd_emu10k1_pcm_efx(struct snd_emu10k1 * emu, int device, struct s /* emu->efx_voices_mask[0] = FXWC_DEFAULTROUTE_C | FXWC_DEFAULTROUTE_A; */ /* emu->efx_voices_mask[0] = FXWC_DEFAULTROUTE_C | FXWC_DEFAULTROUTE_A; */ if (emu->audigy) { if (emu->audigy) { emu->efx_voices_mask[0] = 0; emu->efx_voices_mask[0] = 0; if (emu->card_capabilities->emu1010) if (emu->card_capabilities->emu_model) /* Pavel Hofman - 32 voices will be used for /* Pavel Hofman - 32 voices will be used for * capture (write mode) - * capture (write mode) - * each bit = corresponding voice * each bit = corresponding voice Loading