⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emu10k1_main.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
 * 	* 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, &reg );	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, &reg );	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, &reg );	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, &reg );	snd_printk(KERN_INFO "emu1010: Card options=0x%x\n",reg);	snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &reg );	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, &reg );	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 + -