亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pxa-wm8971.c

?? 聲音播放器新片驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ADCTL1,0x00c0);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ADCTL2,0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ADCIN, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LADCIN,0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_RADCIN,0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUTM1,0x0150);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUTM2,0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUTM1,0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUTM2,0x0150);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_MOUTM1,0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_MOUTM2, 0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUT2V, 0x0179);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUT2V, 0x0179);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_MOUTV, 0x0079);   /* 		ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LINVOL, 0x0097);		ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_RINVOL, 0x0097);		ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUT1V, 0x0040);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUT1V, 0x0040);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LDAC, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_RDAC, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUT1V, 0x0179);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUT1V, 0x0179);	//ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ADCDAC, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_AUDIO, 0x0002);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_SRATE, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LDAC, 0x01e0);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_RDAC, 0x01e0);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_BASS, 0x000f);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_TREBLE, 0x000f);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ALC1, 0x007b);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ALC2, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ALC3, 0x0032);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_NGATE, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LADC, 0x00c3);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_RADC, 0x00c3);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ADCTL1, 0x00c0);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ADCTL2, 0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ADCIN, 0x0100);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LADCIN, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_RADCIN, 0x0000);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUTM1, 0x0150);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUTM2, 0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUTM1, 0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUTM2, 0x0150);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_MOUTM1, 0x0050);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_MOUTM2, 0x0150);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUT2V, 0x0179);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUT2V, 0x0179);	ret += wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_MOUTV, 0x0079);	*/out:		return ret != 0 ? -EIO : 0;}

#if 1static struct wm8971_mixer_t wm8971_mixer;
static int wm8971_mixer_ioctl( struct inode *inode, struct file *file,			unsigned int cmd, unsigned long arg){	int i, val = 0;	if (cmd == SOUND_MIXER_INFO) {		mixer_info info;		strncpy(info.id, wm8971_codec.name, sizeof(info.id));		strncpy(info.name, wm8971_codec.name, sizeof(info.name));		info.modify_counter = wm8971_codec.modcnt;		if (copy_to_user((void *)arg, &info, sizeof(info)))			return -EFAULT;		return 0;	}	if (cmd == SOUND_OLD_MIXER_INFO) {		_old_mixer_info info;		strncpy(info.id, wm8971_codec.name, sizeof(info.id));		strncpy(info.name, wm8971_codec.name, sizeof(info.name));		if (copy_to_user((void *)arg, &info, sizeof(info)))			return -EFAULT;		return 0;	}	if (_IOC_TYPE(cmd) != 'M' || _SIOC_SIZE(cmd) != sizeof(int))		return -EINVAL;	if (cmd == OSS_GETVERSION)		return put_user(SOUND_VERSION, (int *)arg);	if (_SIOC_DIR(cmd) == _SIOC_READ) {		switch (_IOC_NR(cmd)) {			case SOUND_MIXER_DEVMASK: /* give them the supported mixers */				val = wm8971_codec.supported_mixers;				break;				//case SOUND_MIXER_RECMASK: /* Arg contains a bit for each supported recording source */			//	val = wm8971_codec.record_sources;			//	break;				case SOUND_MIXER_STEREODEVS: /* Mixer channels supporting stereo */				val = wm8971_codec.stereo_mixers;				break;			case SOUND_MIXER_CAPS:				val = SOUND_CAP_EXCL_INPUT;				break;				default: /* read a specific mixer */				i = _IOC_NR(cmd);					//if (!supported_mixer(&wm8971_codec, i)) 				//	return -EINVAL;				val = wm8971_get_mixer(i);				break;			}			return put_user(val, (int *)arg);		}	if (_SIOC_DIR(cmd) == (_SIOC_WRITE|_SIOC_READ)) {		wm8971_codec.modcnt++;		if (get_user(val, (int *)arg))			return -EFAULT;		switch (_IOC_NR(cmd)) {		default: /* write a specific mixer */			i = _IOC_NR(cmd);			//if (!supported_mixer(&wm8971_codec, i)) 			//	return -EINVAL;			return wm8971_set_mixer(i, val);		}	}	return -EINVAL;}	/* ** NOT TESTED ** */		static int wm8971_get_mixer(int cmd){			int val = 0;	u16 r = 0,l = 0;		switch (cmd) {		case SOUND_MIXER_VOLUME: /* OUT1 Volume */			l = wm8971_read_reg_cache(WM8971_LOUT1V) & 0x7f;			r = wm8971_read_reg_cache(WM8971_ROUT1V) & 0x7f;			break;				case SOUND_MIXER_BASS:	/* bass */			l = wm8971_read_reg_cache(WM8971_BASS) & 0x0f;			break;		case SOUND_MIXER_TREBLE:	/* treble */			l = wm8971_read_reg_cache(WM8971_TREBLE) & 0x0f;			break;		case SOUND_MIXER_SYNTH:			break;					case SOUND_MIXER_PCM:			break;					case SOUND_MIXER_SPEAKER: /* OUT2 Volume */			l = wm8971_read_reg_cache(WM8971_LOUT2V) & 0x7f;			r = wm8971_read_reg_cache(WM8971_ROUT2V) & 0x7f;			break;		case SOUND_MIXER_LINE:				break;		case SOUND_MIXER_MIC:			//l = wm8971_read_reg_cache(WM8971_INCTL1) & 0x060;			//r = wm8971_read_reg_cache(WM8971_INCTL1) & 0x180;			break;					case SOUND_MIXER_CD:				break;					case SOUND_MIXER_IMIX:		/* Recording monitor */			break;		case SOUND_MIXER_ALTPCM:			break;					case SOUND_MIXER_RECLEV:	/* Recording level */			break;		case SOUND_MIXER_IGAIN:		/* Input gain */			l = wm8971_read_reg_cache(WM8971_LADC) & 0xff;			r = wm8971_read_reg_cache(WM8971_RADC) & 0xff;			break;		case SOUND_MIXER_OGAIN:		/* Output gain */				l = wm8971_read_reg_cache(WM8971_LDAC) & 0xff;			r = wm8971_read_reg_cache(WM8971_RDAC) & 0xff;						break;		default:			warn("unknown mixer IOCTL");			return -EINVAL;	}		/* mix left and right */	val = ((l << 8) & 0xff00) + (r & 0xff); 	return val;}/* ** NOT TESTED ** */static int wm8971_set_mixer(int cmd, int val){			int ret = 0;	u16 reg;	unsigned int left,right;	/* separate left and right settings */	right = ((val >> 8)  & 0xff) ;	left = (val  & 0xff) ;	if (right > 100) 		right = 100;	if (left > 100) 		left = 100;		switch (cmd) {		case SOUND_MIXER_VOLUME: /* volume OUT1 */			reg = wm8971_read_reg_cache(WM8971_LOUT1V) & 0x180;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUT1V, reg | left);			reg = wm8971_read_reg_cache(WM8971_ROUT1V) & 0x180;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUT1V, reg | right);			break;				case SOUND_MIXER_BASS:	/* bass */			reg = wm8971_read_reg_cache(WM8971_BASS) & 0x1f0;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_BASS, reg | (left & 0x0f));			break;		case SOUND_MIXER_TREBLE:	/* treble */			reg = wm8971_read_reg_cache(WM8971_TREBLE) & 0x1f0;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_TREBLE, reg | (left & 0x0f));			break;		case SOUND_MIXER_SYNTH:			break;					case SOUND_MIXER_PCM:			break;					case SOUND_MIXER_SPEAKER: /* volume OUT2 */			reg = wm8971_read_reg_cache(WM8971_LOUT2V) & 0x180;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LOUT2V, reg | left);			reg = wm8971_read_reg_cache(WM8971_ROUT1V) & 0x180;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_ROUT2V, reg | right);			break;		case SOUND_MIXER_LINE:				break;		case SOUND_MIXER_MIC:			break;					case SOUND_MIXER_CD:				break;					case SOUND_MIXER_IMIX:		/*  Recording monitor  */			break;		case SOUND_MIXER_ALTPCM:			break;					case SOUND_MIXER_RECLEV:	/* Recording level */			break;		case SOUND_MIXER_IGAIN:		/* Input gain LR ADC */			reg = wm8971_read_reg_cache(WM8971_LADC) & 0x100;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LADC, reg | left);			reg = wm8971_read_reg_cache(WM8971_RADC) & 0x100;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_RADC, reg | right);			break;		case SOUND_MIXER_OGAIN:		/* Output gain LR DAC*/				reg = wm8971_read_reg_cache(WM8971_LDAC) & 0x100;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_LDAC, reg | left);			reg = wm8971_read_reg_cache(WM8971_RDAC) & 0x100;			wm8971_2w_write(wm8971_codec.wm8971_2w_client, WM8971_RDAC, reg | right);					break;		default:			warn("unknown mixer IOCTL");			ret = -EINVAL;			break;		}	return ret;}static struct file_operations wm8971_mixer_fops = {	ioctl:		wm8971_mixer_ioctl,	llseek:		no_llseek,	owner:		THIS_MODULE};#endifstatic struct file_operations wm8971_pcm_fops = {	open:		wm8971_pcm_open,	owner:		THIS_MODULE};/* WM8971 2 Wire layer */ 
static int __init pxa_wm8971_init(void){	int ret;	char proc_str[64];		printk("Wolfson WM8971 Audio Codec\n");	printk("Victor add audio driver\n", WM8971_VERSION);		/* get Bulverde I2C adapter */	if ((ret = i2c_add_driver(&wm8971_driver)) != 0) {		err("can't add i2c driver");				goto out;	}		/* initialise WM8971 */	if ((ret = wm8971_init()) != 0) {		err("can't initialise WM8971\n");		goto out;	}				/* register audio interfaces with kernel */	wm8971_pcm.dev_dsp = register_sound_dsp(&wm8971_pcm_fops, -1);	wm8971_mixer.dev_mixer = register_sound_mixer(&wm8971_mixer_fops, -1);			#ifdef CONFIG_PROC_FS	/* register proc interface */	sprintf(proc_str, "driver/%s", AUDIO_NAME);	if ((wm8971_codec.ps = create_proc_read_entry (proc_str, 0, NULL,					     wm8971_read_proc, &wm8971_codec)) == 0)		err("could not register proc interface /proc/%s", proc_str);#endif#ifdef CONFIG_PM	/* register with power manager */	if ((wm8971_codec.pm = pm_register(PM_UNKNOWN_DEV, PM_SYS_UNKNOWN, wm8971_pm_event)) == 0)		err("could not register with power management");#endif#if defined (CONFIG_ARCH_MAINSTONE)	/* enable USB on the go MUX so we can use SSPFRM2 */	MST_MSCWR2 |= (1 << 5);	MST_MSCWR2 &= ~(1 << 6);		MST_MSCWR2 &= ~(1 << 2);#endif		return 0;	out:  	return ret;}/*  * unregister interfaces and clean up */static void __exit pxa_wm8971_exit(void){#if defined (CONFIG_ARCH_MAINSTONE)		/* disable USB on the go MUX so we can use ttyS0 */	MST_MSCWR2 &= ~(1 << 5);	MST_MSCWR2 |= (1 << 6);		MST_MSCWR2 |= (1 << 2);#endif	#ifdef CONFIG_PM	pm_unregister (wm8971_codec.pm);#endif	wm8971_power_down();	//unregister_sound_mixer(wm8971_mixer.dev_mixer);	wm8971_detach(wm8971_codec.wm8971_2w_client);	i2c_del_driver(&wm8971_driver);	ssp_exit(&wm8971_codec.ssp);}module_init(pxa_wm8971_init);module_exit(pxa_wm8971_exit);MODULE_DESCRIPTION("WM8971 driver");MODULE_AUTHOR("foxt");MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品污www在线观看| 综合色天天鬼久久鬼色| 不卡一区在线观看| 天天av天天翘天天综合网 | 久久久精品国产免大香伊| 在线免费一区三区| 国产精品18久久久久久久久久久久| 亚洲高清免费视频| 《视频一区视频二区| 精品女同一区二区| 欧美精品欧美精品系列| 91亚洲男人天堂| 国产99久久久国产精品 | 91亚洲国产成人精品一区二三| 蜜臀99久久精品久久久久久软件| 亚洲免费视频成人| 欧美国产国产综合| 精品88久久久久88久久久| 欧美日韩电影一区| 日本道精品一区二区三区| 成人sese在线| 成人综合在线视频| 国产一级精品在线| 蜜臀精品一区二区三区在线观看 | 国产亚洲精品超碰| 精品国产一区二区三区久久影院| 欧美久久久久久久久中文字幕| 91色九色蝌蚪| 91理论电影在线观看| 北岛玲一区二区三区四区| 国产成人啪免费观看软件| 国产综合久久久久久鬼色| 久久超碰97中文字幕| 日产欧产美韩系列久久99| 五月婷婷激情综合| 亚洲大片免费看| 一级中文字幕一区二区| 亚洲精品少妇30p| 一区二区三区日韩精品| 一区二区三区在线视频观看| 亚洲乱码国产乱码精品精可以看| 久久精品理论片| 另类调教123区| 琪琪久久久久日韩精品| 亚洲综合激情网| 中文字幕欧美日韩一区| 国产午夜精品福利| 国产欧美日韩一区二区三区在线观看| 色狠狠一区二区三区香蕉| 大陆成人av片| 精品一区二区久久久| 久久福利资源站| 色视频欧美一区二区三区| 日韩欧美aaaaaa| 亚洲精品免费一二三区| 狠狠网亚洲精品| 在线视频一区二区免费| 2021中文字幕一区亚洲| 夜夜嗨av一区二区三区中文字幕 | 欧美日韩免费观看一区二区三区| 久久久久久久久久电影| 亚洲成人动漫精品| 成人夜色视频网站在线观看| 欧美精品在线视频| 亚洲日本在线天堂| 国产成人精品午夜视频免费| 欧美男人的天堂一二区| 亚洲欧美在线高清| 国产在线一区观看| 91精品国产91久久久久久一区二区 | 一区二区三区欧美久久| 国产精品自拍在线| 欧美一区二区三区四区在线观看 | 美女视频一区在线观看| 色天使久久综合网天天| 国产精品美女久久久久高潮| 黄页网站大全一区二区| 欧美福利一区二区| 一二三四区精品视频| 成人激情文学综合网| 26uuu亚洲| 麻豆中文一区二区| 在线91免费看| 亚洲国产精品久久久久婷婷884 | 91麻豆成人久久精品二区三区| 久久九九久精品国产免费直播| 人禽交欧美网站| 欧美色区777第一页| 亚洲综合色噜噜狠狠| 99久久精品国产观看| 中文字幕精品在线不卡| 国产成人综合在线播放| 精品国产乱码久久久久久夜甘婷婷| 日韩电影在线一区二区三区| 精品1区2区3区| 亚洲国产精品久久久久婷婷884| 色婷婷激情一区二区三区| 亚洲视频1区2区| 成人午夜在线视频| 国产精品拍天天在线| 粉嫩在线一区二区三区视频| 久久精品视频在线看| 国产福利不卡视频| 国产亚洲精品bt天堂精选| 国产成人精品三级| 国产日产亚洲精品系列| 91蜜桃婷婷狠狠久久综合9色| 国产农村妇女精品| 99亚偷拍自图区亚洲| 国产精品久久久久天堂| av成人免费在线| 亚洲伦理在线免费看| 欧美日韩中文字幕精品| 亚洲va国产va欧美va观看| 欧美军同video69gay| 免费美女久久99| 精品久久久久久久人人人人传媒 | 欧美狂野另类xxxxoooo| 日韩综合小视频| 日韩欧美一级二级三级久久久| 麻豆91精品视频| 国产日产欧产精品推荐色| 成人午夜在线播放| 一区二区三区中文字幕在线观看| 欧美三级电影网| 美女被吸乳得到大胸91| 久久日韩精品一区二区五区| 成人黄页毛片网站| 一区二区三区免费网站| 欧美性色aⅴ视频一区日韩精品| 午夜精品福利久久久| 日韩精品一区二区在线| 国产成人一区在线| 一二三区精品视频| 精品人在线二区三区| 国产精品资源网站| 亚洲色欲色欲www| 欧美欧美欧美欧美| 国内外精品视频| 亚洲欧美中日韩| 欧美日韩国产另类一区| 精品一区二区三区不卡 | 日本欧美加勒比视频| 久久久久久久综合狠狠综合| 99久久99久久精品免费看蜜桃| 亚洲第一福利视频在线| 国产视频911| 欧美制服丝袜第一页| 国内一区二区在线| 一区二区三区中文字幕| www国产精品av| 色激情天天射综合网| 黄网站免费久久| 一区二区三区精品视频在线| 日韩精品一区二区在线| 91看片淫黄大片一级在线观看| 日本不卡视频在线| 亚洲天堂精品视频| 日韩久久久久久| 欧美在线一二三四区| 国产麻豆精品在线| 午夜精品免费在线| 中文字幕一区二区三区蜜月| 欧美一区二区精美| 一本色道久久综合亚洲aⅴ蜜桃| 久久精品噜噜噜成人88aⅴ| 亚洲黄一区二区三区| 久久精品欧美一区二区三区不卡| 欧美午夜精品久久久| 成人激情小说乱人伦| 精品一区二区免费在线观看| 亚洲成国产人片在线观看| 日本少妇一区二区| 中文字幕在线不卡一区| 欧美成人午夜电影| 欧美性videosxxxxx| 成人精品在线视频观看| 久久99精品久久久久久动态图| 亚洲综合在线第一页| 久久先锋影音av鲁色资源| 欧美日韩第一区日日骚| 在线视频你懂得一区| 成人免费视频视频在线观看免费| 日本不卡在线视频| 亚洲国产成人av网| 亚洲精品中文字幕乱码三区| 国产日韩欧美a| 国产夜色精品一区二区av| 日韩一区二区视频| 56国语精品自产拍在线观看| 在线看日韩精品电影| 色综合久久综合网| 不卡电影一区二区三区| 高清成人在线观看| 国产乱码精品一品二品| 国产一区二区在线看| 韩国av一区二区| 国产精品一线二线三线| 精品一区二区在线视频| 久久不见久久见免费视频7|