📄 emu10k1_main.c
字号:
* * PCM device nb. 2: * 16 x 16-bit playback - snd_emu10k1_fx8010_playback_ops * 16 x 32-bit capture - snd_emu10k1_capture_efx_ops */static int snd_emu10k1_emu1010_init(struct snd_emu10k1 * emu){ unsigned int i; int tmp,tmp2; int reg; int err; snd_printk(KERN_INFO "emu1010: Special config.\n"); /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, * Lock Sound Memory Cache, Lock Tank Memory Cache, * Mute all codecs. */ outl(0x0005a00c, emu->port + HCFG); /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, * Lock Tank Memory Cache, * Mute all codecs. */ outl(0x0005a004, emu->port + HCFG); /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, * Mute all codecs. */ outl(0x0005a000, emu->port + HCFG); /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, * Mute all codecs. */ outl(0x0005a000, emu->port + HCFG); /* Disable 48Volt power to Audio Dock */ snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0 ); /* ID, should read & 0x7f = 0x55. (Bit 7 is the IRQ bit) */ snd_emu1010_fpga_read(emu, EMU_HANA_ID, ® ); snd_printdd("reg1=0x%x\n",reg); if ((reg & 0x3f) == 0x15) { /* FPGA netlist already present so clear it */ /* Return to programming mode */ snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0x02 ); } snd_emu1010_fpga_read(emu, EMU_HANA_ID, ® ); snd_printdd("reg2=0x%x\n",reg); if ((reg & 0x3f) == 0x15) { /* FPGA failed to return to programming mode */ snd_printk(KERN_INFO "emu1010: FPGA failed to return to programming mode\n"); return -ENODEV; } snd_printk(KERN_INFO "emu1010: EMU_HANA_ID=0x%x\n",reg); if (emu->card_capabilities->emu1010 == 1) { if ((err = snd_emu1010_load_firmware(emu, HANA_FILENAME)) != 0) { snd_printk(KERN_INFO "emu1010: Loading Hana Firmware file %s failed\n", HANA_FILENAME); return err; } } else if (emu->card_capabilities->emu1010 == 2) { if ((err = snd_emu1010_load_firmware(emu, EMU1010B_FILENAME)) != 0) { snd_printk(KERN_INFO "emu1010: Loading Firmware file %s failed\n", EMU1010B_FILENAME); return err; } } else if (emu->card_capabilities->emu1010 == 3) { if ((err = snd_emu1010_load_firmware(emu, EMU1010_NOTEBOOK_FILENAME)) != 0) { snd_printk(KERN_INFO "emu1010: Loading Firmware file %s failed\n", EMU1010_NOTEBOOK_FILENAME); return err; } } /* ID, should read & 0x7f = 0x55 when FPGA programmed. */ snd_emu1010_fpga_read(emu, EMU_HANA_ID, ® ); if ((reg & 0x3f) != 0x15) { /* FPGA failed to be programmed */ snd_printk(KERN_INFO "emu1010: Loading Hana Firmware file failed, reg=0x%x\n", reg); return -ENODEV; } snd_printk(KERN_INFO "emu1010: Hana Firmware loaded\n"); snd_emu1010_fpga_read(emu, EMU_HANA_MAJOR_REV, &tmp ); snd_emu1010_fpga_read(emu, EMU_HANA_MINOR_REV, &tmp2 ); snd_printk("Hana ver:%d.%d\n",tmp ,tmp2); /* Enable 48Volt power to Audio Dock */ snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, EMU_HANA_DOCK_PWR_ON ); snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ® ); snd_printk(KERN_INFO "emu1010: Card options=0x%x\n",reg); snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ® ); snd_printk(KERN_INFO "emu1010: Card options=0x%x\n",reg); snd_emu1010_fpga_read(emu, EMU_HANA_OPTICAL_TYPE, &tmp ); /* Optical -> ADAT I/O */ /* 0 : SPDIF * 1 : ADAT */ emu->emu1010.optical_in = 1; /* IN_ADAT */ emu->emu1010.optical_out = 1; /* IN_ADAT */ tmp = 0; tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) | (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0); snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp ); snd_emu1010_fpga_read(emu, EMU_HANA_ADC_PADS, &tmp ); /* Set no attenuation on Audio Dock pads. */ snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, 0x00 ); emu->emu1010.adc_pads = 0x00; snd_emu1010_fpga_read(emu, EMU_HANA_DOCK_MISC, &tmp ); /* Unmute Audio dock DACs, Headphone source DAC-4. */ snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30 ); snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12 ); snd_emu1010_fpga_read(emu, EMU_HANA_DAC_PADS, &tmp ); /* DAC PADs. */ snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, 0x0f ); emu->emu1010.dac_pads = 0x0f; snd_emu1010_fpga_read(emu, EMU_HANA_DOCK_MISC, &tmp ); snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30 ); snd_emu1010_fpga_read(emu, EMU_HANA_SPDIF_MODE, &tmp ); /* SPDIF Format. Set Consumer mode, 24bit, copy enable */ snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10 ); /* MIDI routing */ snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19 ); /* Unknown. */ snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c ); /* snd_emu1010_fpga_write(emu, 0x09, 0x0f ); // IRQ Enable: All on */ /* IRQ Enable: All off */ snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE, 0x00 ); snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ® ); snd_printk(KERN_INFO "emu1010: Card options3=0x%x\n",reg); /* Default WCLK set to 48kHz. */ snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x00 ); /* Word Clock source, Internal 48kHz x1 */ snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K ); //snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X ); /* Audio Dock LEDs. */ snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12 );#if 0 /* For 96kHz */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_0, EMU_SRC_HAMOA_ADC_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_1, EMU_SRC_HAMOA_ADC_RIGHT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_4, EMU_SRC_HAMOA_ADC_LEFT2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_5, EMU_SRC_HAMOA_ADC_RIGHT2);#endif#if 0 /* For 192kHz */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_0, EMU_SRC_HAMOA_ADC_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_1, EMU_SRC_HAMOA_ADC_RIGHT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_2, EMU_SRC_HAMOA_ADC_LEFT2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_3, EMU_SRC_HAMOA_ADC_RIGHT2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_4, EMU_SRC_HAMOA_ADC_LEFT3); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_5, EMU_SRC_HAMOA_ADC_RIGHT3); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_6, EMU_SRC_HAMOA_ADC_LEFT4); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_7, EMU_SRC_HAMOA_ADC_RIGHT4);#endif#if 1 /* For 48kHz */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_0, EMU_SRC_DOCK_MIC_A1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_1, EMU_SRC_DOCK_MIC_B1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_2, EMU_SRC_HAMOA_ADC_LEFT2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_3, EMU_SRC_HAMOA_ADC_LEFT2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_4, EMU_SRC_DOCK_ADC1_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_5, EMU_SRC_DOCK_ADC1_RIGHT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_6, EMU_SRC_DOCK_ADC2_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_7, EMU_SRC_DOCK_ADC2_RIGHT1); /* Pavel Hofman - setting defaults for 8 more capture channels * Defaults only, users will set their own values anyways, let's * just copy/paste. */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_8, EMU_SRC_DOCK_MIC_A1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_9, EMU_SRC_DOCK_MIC_B1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_A, EMU_SRC_HAMOA_ADC_LEFT2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_B, EMU_SRC_HAMOA_ADC_LEFT2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_C, EMU_SRC_DOCK_ADC1_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_D, EMU_SRC_DOCK_ADC1_RIGHT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_E, EMU_SRC_DOCK_ADC2_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_F, EMU_SRC_DOCK_ADC2_RIGHT1);#endif#if 0 /* Original */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_4, EMU_SRC_HANA_ADAT); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_5, EMU_SRC_HANA_ADAT + 1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_6, EMU_SRC_HANA_ADAT + 2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_7, EMU_SRC_HANA_ADAT + 3); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_8, EMU_SRC_HANA_ADAT + 4); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_9, EMU_SRC_HANA_ADAT + 5); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_A, EMU_SRC_HANA_ADAT + 6); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_B, EMU_SRC_HANA_ADAT + 7); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_C, EMU_SRC_DOCK_MIC_A1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_D, EMU_SRC_DOCK_MIC_B1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_E, EMU_SRC_HAMOA_ADC_LEFT2); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE2_EMU32_F, EMU_SRC_HAMOA_ADC_LEFT2);#endif for (i = 0;i < 0x20; i++ ) { /* AudioDock Elink <- Silence */ snd_emu1010_fpga_link_dst_src_write(emu, 0x0100+i, EMU_SRC_SILENCE); } for (i = 0;i < 4; i++) { /* Hana SPDIF Out <- Silence */ snd_emu1010_fpga_link_dst_src_write(emu, 0x0200+i, EMU_SRC_SILENCE); } for (i = 0;i < 7; i++) { /* Hamoa DAC <- Silence */ snd_emu1010_fpga_link_dst_src_write(emu, 0x0300+i, EMU_SRC_SILENCE); } for (i = 0;i < 7; i++) { /* Hana ADAT Out <- Silence */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + i, EMU_SRC_SILENCE); } snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE_I2S0_LEFT, EMU_SRC_DOCK_ADC1_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE_I2S0_RIGHT, EMU_SRC_DOCK_ADC1_RIGHT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE_I2S1_LEFT, EMU_SRC_DOCK_ADC2_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE_I2S1_RIGHT, EMU_SRC_DOCK_ADC2_RIGHT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE_I2S2_LEFT, EMU_SRC_DOCK_ADC3_LEFT1); snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_ALICE_I2S2_RIGHT, EMU_SRC_DOCK_ADC3_RIGHT1); snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x01 ); // Unmute all snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &tmp ); /* AC97 1.03, Any 32Meg of 2Gig address, Auto-Mute, EMU32 Slave, * Lock Sound Memory Cache, Lock Tank Memory Cache, * Mute all codecs. */ outl(0x0000a000, emu->port + HCFG); /* AC97 1.03, Any 32Meg of 2Gig address, Auto-Mute, EMU32 Slave, * Lock Sound Memory Cache, Lock Tank Memory Cache, * Un-Mute all codecs. */ outl(0x0000a001, emu->port + HCFG); /* Initial boot complete. Now patches */ snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &tmp ); snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19 ); /* MIDI Route */ snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c ); /* Unknown */ snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19 ); /* MIDI Route */ snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c ); /* Unknown */ snd_emu1010_fpga_read(emu, EMU_HANA_SPDIF_MODE, &tmp ); snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10 ); /* SPDIF Format spdif (or 0x11 for aes/ebu) */ /* Start Micro/Audio Dock firmware loader thread */ emu->emu1010.firmware_thread = kthread_create(&emu1010_firmware_thread, emu, "emu1010_firmware"); wake_up_process(emu->emu1010.firmware_thread);#if 0 snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HAMOA_DAC_LEFT1, EMU_SRC_ALICE_EMU32B + 2); /* ALICE2 bus 0xa2 */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HAMOA_DAC_RIGHT1, EMU_SRC_ALICE_EMU32B + 3); /* ALICE2 bus 0xa3 */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 2); /* ALICE2 bus 0xb2 */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 3); /* ALICE2 bus 0xb3 */#endif /* Default outputs */ snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_DAC1_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ emu->emu1010.output_source[0] = 21; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_DAC1_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); emu->emu1010.output_source[1] = 22; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_DAC2_LEFT1, EMU_SRC_ALICE_EMU32A + 2); emu->emu1010.output_source[2] = 23; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_DAC2_RIGHT1, EMU_SRC_ALICE_EMU32A + 3); emu->emu1010.output_source[3] = 24; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_DAC3_LEFT1, EMU_SRC_ALICE_EMU32A + 4); emu->emu1010.output_source[4] = 25; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_DAC3_RIGHT1, EMU_SRC_ALICE_EMU32A + 5); emu->emu1010.output_source[5] = 26; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_DAC4_LEFT1, EMU_SRC_ALICE_EMU32A + 6); emu->emu1010.output_source[6] = 27; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_DAC4_RIGHT1, EMU_SRC_ALICE_EMU32A + 7); emu->emu1010.output_source[7] = 28; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_PHONES_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ emu->emu1010.output_source[8] = 21; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_PHONES_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); emu->emu1010.output_source[9] = 22; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ emu->emu1010.output_source[10] = 21; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_DOCK_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); emu->emu1010.output_source[11] = 22; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ emu->emu1010.output_source[12] = 21; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); emu->emu1010.output_source[13] = 22; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HAMOA_DAC_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ emu->emu1010.output_source[14] = 21; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HAMOA_DAC_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); emu->emu1010.output_source[15] = 22; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ emu->emu1010.output_source[16] = 21; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + 1, EMU_SRC_ALICE_EMU32A + 1); emu->emu1010.output_source[17] = 22; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + 2, EMU_SRC_ALICE_EMU32A + 2); emu->emu1010.output_source[18] = 23; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + 3, EMU_SRC_ALICE_EMU32A + 3); emu->emu1010.output_source[19] = 24; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + 4, EMU_SRC_ALICE_EMU32A + 4); emu->emu1010.output_source[20] = 25; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + 5, EMU_SRC_ALICE_EMU32A + 5); emu->emu1010.output_source[21] = 26; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + 6, EMU_SRC_ALICE_EMU32A + 6); emu->emu1010.output_source[22] = 27; snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + 7, EMU_SRC_ALICE_EMU32A + 7); emu->emu1010.output_source[23] = 28; /* TEMP: Select SPDIF in/out */ //snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, 0x0); /* Output spdif */ /* TEMP: Select 48kHz SPDIF out */ snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x0); /* Mute all */ snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x0); /* Default fallback clock 48kHz */ /* Word Clock source, Internal 48kHz x1 */ snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K ); //snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X ); emu->emu1010.internal_clock = 1; /* 48000 */ snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12);/* Set LEDs on Audio Dock */ snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x1); /* Unmute all */ //snd_emu1010_fpga_write(emu, 0x7, 0x0); /* Mute all */ //snd_emu1010_fpga_write(emu, 0x7, 0x1); /* Unmute all */ //snd_emu1010_fpga_write(emu, 0xe, 0x12); /* Set LEDs on Audio Dock */ return 0;}/* * Create the EMU10K1 instance */#ifdef CONFIG_PM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -