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

📄 ac97_proc.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
					    val & AC97_ALC650_COPY ? "" : " Copyright",					    val & AC97_ALC650_PRE ? " Preemph50/15" : "",					    (val & AC97_ALC650_CC_MASK) >> AC97_ALC650_CC_SHIFT,					    (val & AC97_ALC650_L) >> 15);				val = snd_ac97_read(ac97, AC97_ALC650_SPDIF_INPUT_STATUS2);				snd_iprintf(buffer, "%s Accuracy=%i%s%s\n",					    spdif_rates[(val & AC97_ALC650_SPSR_MASK) >> AC97_ALC650_SPSR_SHIFT],					    (val & AC97_ALC650_CLOCK_ACCURACY) >> AC97_ALC650_CLOCK_SHIFT,					    (val & AC97_ALC650_CLOCK_LOCK ? " Locked" : " Unlocked"),					    (val & AC97_ALC650_V ? " Validity?" : ""));			} else {				snd_iprintf(buffer, "SPDIF In Status  : Not Locked\n");			}		}	}	if ((ac97->ext_id & AC97_EI_REV_MASK) >= AC97_EI_REV_23) {		val = snd_ac97_read(ac97, AC97_INT_PAGING);		snd_ac97_update_bits(ac97, AC97_INT_PAGING,				     AC97_PAGE_MASK, AC97_PAGE_1);		snd_ac97_proc_read_functions(ac97, buffer);		snd_ac97_update_bits(ac97, AC97_INT_PAGING,				     AC97_PAGE_MASK, val & AC97_PAGE_MASK);	}      __modem:	mext = snd_ac97_read(ac97, AC97_EXTENDED_MID);	if (mext == 0)		return;		snd_iprintf(buffer, "Extended modem ID: codec=%i%s%s%s%s%s\n",			(mext & AC97_MEI_ADDR_MASK) >> AC97_MEI_ADDR_SHIFT,			mext & AC97_MEI_CID2 ? " CID2" : "",			mext & AC97_MEI_CID1 ? " CID1" : "",			mext & AC97_MEI_HANDSET ? " HSET" : "",			mext & AC97_MEI_LINE2 ? " LIN2" : "",			mext & AC97_MEI_LINE1 ? " LIN1" : "");	val = snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS);	snd_iprintf(buffer, "Modem status     :%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",			val & AC97_MEA_GPIO ? " GPIO" : "",			val & AC97_MEA_MREF ? " MREF" : "",			val & AC97_MEA_ADC1 ? " ADC1" : "",			val & AC97_MEA_DAC1 ? " DAC1" : "",			val & AC97_MEA_ADC2 ? " ADC2" : "",			val & AC97_MEA_DAC2 ? " DAC2" : "",			val & AC97_MEA_HADC ? " HADC" : "",			val & AC97_MEA_HDAC ? " HDAC" : "",			val & AC97_MEA_PRA ? " PRA(GPIO)" : "",			val & AC97_MEA_PRB ? " PRB(res)" : "",			val & AC97_MEA_PRC ? " PRC(ADC1)" : "",			val & AC97_MEA_PRD ? " PRD(DAC1)" : "",			val & AC97_MEA_PRE ? " PRE(ADC2)" : "",			val & AC97_MEA_PRF ? " PRF(DAC2)" : "",			val & AC97_MEA_PRG ? " PRG(HADC)" : "",			val & AC97_MEA_PRH ? " PRH(HDAC)" : "");	if (mext & AC97_MEI_LINE1) {		val = snd_ac97_read(ac97, AC97_LINE1_RATE);		snd_iprintf(buffer, "Line1 rate       : %iHz\n", val);	}	if (mext & AC97_MEI_LINE2) {		val = snd_ac97_read(ac97, AC97_LINE2_RATE);		snd_iprintf(buffer, "Line2 rate       : %iHz\n", val);	}	if (mext & AC97_MEI_HANDSET) {		val = snd_ac97_read(ac97, AC97_HANDSET_RATE);		snd_iprintf(buffer, "Headset rate     : %iHz\n", val);	}}static void snd_ac97_proc_read(snd_info_entry_t *entry, snd_info_buffer_t * buffer){	ac97_t *ac97 = entry->private_data;		down(&ac97->page_mutex);	if ((ac97->id & 0xffffff40) == AC97_ID_AD1881) {	// Analog Devices AD1881/85/86		int idx;		for (idx = 0; idx < 3; idx++)			if (ac97->spec.ad18xx.id[idx]) {				/* select single codec */				snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000,						     ac97->spec.ad18xx.unchained[idx] | ac97->spec.ad18xx.chained[idx]);				snd_ac97_proc_read_main(ac97, buffer, idx);				snd_iprintf(buffer, "\n\n");			}		/* select all codecs */		snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000);				snd_iprintf(buffer, "\nAD18XX configuration\n");		snd_iprintf(buffer, "Unchained        : 0x%04x,0x%04x,0x%04x\n",			ac97->spec.ad18xx.unchained[0],			ac97->spec.ad18xx.unchained[1],			ac97->spec.ad18xx.unchained[2]);		snd_iprintf(buffer, "Chained          : 0x%04x,0x%04x,0x%04x\n",			ac97->spec.ad18xx.chained[0],			ac97->spec.ad18xx.chained[1],			ac97->spec.ad18xx.chained[2]);	} else {		snd_ac97_proc_read_main(ac97, buffer, 0);	}	up(&ac97->page_mutex);}#ifdef CONFIG_SND_DEBUG/* direct register write for debugging */static void snd_ac97_proc_regs_write(snd_info_entry_t *entry, snd_info_buffer_t *buffer){	ac97_t *ac97 = entry->private_data;	char line[64];	unsigned int reg, val;	down(&ac97->page_mutex);	while (!snd_info_get_line(buffer, line, sizeof(line))) {		if (sscanf(line, "%x %x", &reg, &val) != 2)			continue;		/* register must be even */		if (reg < 0x80 && (reg & 1) == 0 && val <= 0xffff)			snd_ac97_write_cache(ac97, reg, val);	}	up(&ac97->page_mutex);}#endifstatic void snd_ac97_proc_regs_read_main(ac97_t *ac97, snd_info_buffer_t * buffer, int subidx){	int reg, val;	for (reg = 0; reg < 0x80; reg += 2) {		val = snd_ac97_read(ac97, reg);		snd_iprintf(buffer, "%i:%02x = %04x\n", subidx, reg, val);	}}static void snd_ac97_proc_regs_read(snd_info_entry_t *entry, 				    snd_info_buffer_t * buffer){	ac97_t *ac97 = entry->private_data;	down(&ac97->page_mutex);	if ((ac97->id & 0xffffff40) == AC97_ID_AD1881) {	// Analog Devices AD1881/85/86		int idx;		for (idx = 0; idx < 3; idx++)			if (ac97->spec.ad18xx.id[idx]) {				/* select single codec */				snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000,						     ac97->spec.ad18xx.unchained[idx] | ac97->spec.ad18xx.chained[idx]);				snd_ac97_proc_regs_read_main(ac97, buffer, idx);			}		/* select all codecs */		snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000);	} else {		snd_ac97_proc_regs_read_main(ac97, buffer, 0);	}		up(&ac97->page_mutex);}void snd_ac97_proc_init(ac97_t * ac97){	snd_info_entry_t *entry;	char name[32];	const char *prefix;	if (ac97->bus->proc == NULL)		return;	prefix = ac97_is_audio(ac97) ? "ac97" : "mc97";	sprintf(name, "%s#%d-%d", prefix, ac97->addr, ac97->num);	if ((entry = snd_info_create_card_entry(ac97->bus->card, name, ac97->bus->proc)) != NULL) {		snd_info_set_text_ops(entry, ac97, 1024, snd_ac97_proc_read);		if (snd_info_register(entry) < 0) {			snd_info_free_entry(entry);			entry = NULL;		}	}	ac97->proc = entry;	sprintf(name, "%s#%d-%d+regs", prefix, ac97->addr, ac97->num);	if ((entry = snd_info_create_card_entry(ac97->bus->card, name, ac97->bus->proc)) != NULL) {		snd_info_set_text_ops(entry, ac97, 1024, snd_ac97_proc_regs_read);#ifdef CONFIG_SND_DEBUG		entry->mode |= S_IWUSR;		entry->c.text.write_size = 1024;		entry->c.text.write = snd_ac97_proc_regs_write;#endif		if (snd_info_register(entry) < 0) {			snd_info_free_entry(entry);			entry = NULL;		}	}	ac97->proc_regs = entry;}void snd_ac97_proc_done(ac97_t * ac97){	if (ac97->proc_regs) {		snd_info_unregister(ac97->proc_regs);		ac97->proc_regs = NULL;	}	if (ac97->proc) {		snd_info_unregister(ac97->proc);		ac97->proc = NULL;	}}void snd_ac97_bus_proc_init(ac97_bus_t * bus){	snd_info_entry_t *entry;	char name[32];	sprintf(name, "codec97#%d", bus->num);	if ((entry = snd_info_create_card_entry(bus->card, name, bus->card->proc_root)) != NULL) {		entry->mode = S_IFDIR | S_IRUGO | S_IXUGO;		if (snd_info_register(entry) < 0) {			snd_info_free_entry(entry);			entry = NULL;		}	}	bus->proc = entry;}void snd_ac97_bus_proc_done(ac97_bus_t * bus){	if (bus->proc) {		snd_info_unregister(bus->proc);		bus->proc = NULL;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -