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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? patch_cmedia.c

?? 一個Linux下的軟貓驅(qū)動
?? C
?? 第 1 頁 / 共 2 頁
字號:
	memset(assigned, 0, sizeof(assigned));	/* check the pins we found */	for (i = 0; i < cfg->line_outs; i++) {		nid = cfg->line_out_pins[i];		/* nid 0x0b~0x0e is hardwired to audio widget 0x3~0x6 */		if (nid >= 0x0b && nid <= 0x0e) {			spec->dac_nids[i] = (nid - 0x0b) + 0x03;			assigned[nid - 0x0b] = 1;		}	}	/* left pin can be connect to any audio widget */	for (i = 0; i < cfg->line_outs; i++) {		nid = cfg->line_out_pins[i];		if (nid <= 0x0e)			continue;		/* search for an empty channel */		for (j = 0; j < cfg->line_outs; j++) {			if (! assigned[j]) {				spec->dac_nids[i] = j + 0x03;				assigned[j] = 1;				break;			}		}	}	spec->num_dacs = cfg->line_outs;	return 0;}/* create multi_init table, which is used for multichannel initialization */static int cmi9880_fill_multi_init(struct hda_codec *codec, const struct auto_pin_cfg *cfg){	struct cmi_spec *spec = codec->spec;	hda_nid_t nid;	int i, j, k, len;	/* clear the table, only one c-media dac assumed here */	memset(spec->multi_init, 0, sizeof(spec->multi_init));	for (j = 0, i = 0; i < cfg->line_outs; i++) {		hda_nid_t conn[4];		nid = cfg->line_out_pins[i];		/* set as output */		spec->multi_init[j].nid = nid;		spec->multi_init[j].verb = AC_VERB_SET_PIN_WIDGET_CONTROL;		spec->multi_init[j].param = PIN_OUT;		j++;		if (nid > 0x0e) {			/* set connection */			spec->multi_init[j].nid = nid;			spec->multi_init[j].verb = AC_VERB_SET_CONNECT_SEL;			spec->multi_init[j].param = 0;			/* find the index in connect list */			len = snd_hda_get_connections(codec, nid, conn, 4);			for (k = 0; k < len; k++)				if (conn[k] == spec->dac_nids[i]) {					spec->multi_init[j].param = k;					break;				}			j++;		}	}	return 0;}static int cmi9880_init(struct hda_codec *codec){	struct cmi_spec *spec = codec->spec;	if (spec->board_config == CMI_ALLOUT)		snd_hda_sequence_write(codec, cmi9880_allout_init);	else		snd_hda_sequence_write(codec, cmi9880_basic_init);	if (spec->board_config == CMI_AUTO)		snd_hda_sequence_write(codec, spec->multi_init);	return 0;}#ifdef CONFIG_PM/* * resume */static int cmi9880_resume(struct hda_codec *codec){	struct cmi_spec *spec = codec->spec;	cmi9880_init(codec);	snd_hda_resume_ctls(codec, cmi9880_basic_mixer);	if (spec->surr_switch)		snd_hda_resume_ctls(codec, cmi9880_ch_mode_mixer);	if (spec->multiout.dig_out_nid)		snd_hda_resume_spdif_out(codec);	if (spec->dig_in_nid)		snd_hda_resume_spdif_in(codec);	return 0;}#endif/* * Analog playback callbacks */static int cmi9880_playback_pcm_open(struct hda_pcm_stream *hinfo,				     struct hda_codec *codec,				     snd_pcm_substream_t *substream){	struct cmi_spec *spec = codec->spec;	return snd_hda_multi_out_analog_open(codec, &spec->multiout, substream);}static int cmi9880_playback_pcm_prepare(struct hda_pcm_stream *hinfo,					struct hda_codec *codec,					unsigned int stream_tag,					unsigned int format,					snd_pcm_substream_t *substream){	struct cmi_spec *spec = codec->spec;	return snd_hda_multi_out_analog_prepare(codec, &spec->multiout, stream_tag,						format, substream);}static int cmi9880_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,				       struct hda_codec *codec,				       snd_pcm_substream_t *substream){	struct cmi_spec *spec = codec->spec;	return snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);}/* * Digital out */static int cmi9880_dig_playback_pcm_open(struct hda_pcm_stream *hinfo,					 struct hda_codec *codec,					 snd_pcm_substream_t *substream){	struct cmi_spec *spec = codec->spec;	return snd_hda_multi_out_dig_open(codec, &spec->multiout);}static int cmi9880_dig_playback_pcm_close(struct hda_pcm_stream *hinfo,					  struct hda_codec *codec,					  snd_pcm_substream_t *substream){	struct cmi_spec *spec = codec->spec;	return snd_hda_multi_out_dig_close(codec, &spec->multiout);}/* * Analog capture */static int cmi9880_capture_pcm_prepare(struct hda_pcm_stream *hinfo,				      struct hda_codec *codec,				      unsigned int stream_tag,				      unsigned int format,				      snd_pcm_substream_t *substream){	struct cmi_spec *spec = codec->spec;	snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number],				   stream_tag, 0, format);	return 0;}static int cmi9880_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,				      struct hda_codec *codec,				      snd_pcm_substream_t *substream){	struct cmi_spec *spec = codec->spec;	snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number], 0, 0, 0);	return 0;}/* */static struct hda_pcm_stream cmi9880_pcm_analog_playback = {	.substreams = 1,	.channels_min = 2,	.channels_max = 8,	.nid = 0x03, /* NID to query formats and rates */	.ops = {		.open = cmi9880_playback_pcm_open,		.prepare = cmi9880_playback_pcm_prepare,		.cleanup = cmi9880_playback_pcm_cleanup	},};static struct hda_pcm_stream cmi9880_pcm_analog_capture = {	.substreams = 2,	.channels_min = 2,	.channels_max = 2,	.nid = 0x08, /* NID to query formats and rates */	.ops = {		.prepare = cmi9880_capture_pcm_prepare,		.cleanup = cmi9880_capture_pcm_cleanup	},};static struct hda_pcm_stream cmi9880_pcm_digital_playback = {	.substreams = 1,	.channels_min = 2,	.channels_max = 2,	/* NID is set in cmi9880_build_pcms */	.ops = {		.open = cmi9880_dig_playback_pcm_open,		.close = cmi9880_dig_playback_pcm_close	},};static struct hda_pcm_stream cmi9880_pcm_digital_capture = {	.substreams = 1,	.channels_min = 2,	.channels_max = 2,	/* NID is set in cmi9880_build_pcms */};static int cmi9880_build_pcms(struct hda_codec *codec){	struct cmi_spec *spec = codec->spec;	struct hda_pcm *info = spec->pcm_rec;	codec->num_pcms = 1;	codec->pcm_info = info;	info->name = "CMI9880";	info->stream[SNDRV_PCM_STREAM_PLAYBACK] = cmi9880_pcm_analog_playback;	info->stream[SNDRV_PCM_STREAM_CAPTURE] = cmi9880_pcm_analog_capture;	if (spec->multiout.dig_out_nid || spec->dig_in_nid) {		codec->num_pcms++;		info++;		info->name = "CMI9880 Digital";		if (spec->multiout.dig_out_nid) {			info->stream[SNDRV_PCM_STREAM_PLAYBACK] = cmi9880_pcm_digital_playback;			info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;		}		if (spec->dig_in_nid) {			info->stream[SNDRV_PCM_STREAM_CAPTURE] = cmi9880_pcm_digital_capture;			info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;		}	}	return 0;}static void cmi9880_free(struct hda_codec *codec){	kfree(codec->spec);}/* */static struct hda_board_config cmi9880_cfg_tbl[] = {	{ .modelname = "minimal", .config = CMI_MINIMAL },	{ .modelname = "min_fp", .config = CMI_MIN_FP },	{ .modelname = "full", .config = CMI_FULL },	{ .modelname = "full_dig", .config = CMI_FULL_DIG },	{ .pci_subvendor = 0x1043, .pci_subdevice = 0x813d, .config = CMI_FULL_DIG }, /* ASUS P5AD2 */	{ .modelname = "allout", .config = CMI_ALLOUT },	{ .modelname = "auto", .config = CMI_AUTO },	{} /* terminator */};static struct hda_codec_ops cmi9880_patch_ops = {	.build_controls = cmi9880_build_controls,	.build_pcms = cmi9880_build_pcms,	.init = cmi9880_init,	.free = cmi9880_free,#ifdef CONFIG_PM	.resume = cmi9880_resume,#endif};static int patch_cmi9880(struct hda_codec *codec){	struct cmi_spec *spec;	spec = kzalloc(sizeof(*spec), GFP_KERNEL);	if (spec == NULL)		return -ENOMEM;	codec->spec = spec;	spec->board_config = snd_hda_check_board_config(codec, cmi9880_cfg_tbl);	if (spec->board_config < 0) {		snd_printdd(KERN_INFO "hda_codec: Unknown model for CMI9880\n");		spec->board_config = CMI_AUTO; /* try everything */	}	/* copy default DAC NIDs */	memcpy(spec->dac_nids, cmi9880_dac_nids, sizeof(spec->dac_nids));	spec->num_dacs = 4;	switch (spec->board_config) {	case CMI_MINIMAL:	case CMI_MIN_FP:		spec->surr_switch = 1;		if (spec->board_config == CMI_MINIMAL)			spec->num_ch_modes = 2;		else {			spec->front_panel = 1;			spec->num_ch_modes = 3;		}		spec->channel_modes = cmi9880_channel_modes;		spec->multiout.max_channels = cmi9880_channel_modes[0].channels;		spec->input_mux = &cmi9880_basic_mux;		break;	case CMI_FULL:	case CMI_FULL_DIG:		spec->front_panel = 1;		spec->multiout.max_channels = 8;		spec->input_mux = &cmi9880_basic_mux;		if (spec->board_config == CMI_FULL_DIG) {			spec->multiout.dig_out_nid = CMI_DIG_OUT_NID;			spec->dig_in_nid = CMI_DIG_IN_NID;		}		break;	case CMI_ALLOUT:		spec->front_panel = 1;		spec->multiout.max_channels = 8;		spec->no_line_in = 1;		spec->input_mux = &cmi9880_no_line_mux;		spec->multiout.dig_out_nid = CMI_DIG_OUT_NID;		break;	case CMI_AUTO:		{		unsigned int port_e, port_f, port_g, port_h;		unsigned int port_spdifi, port_spdifo;		struct auto_pin_cfg cfg;		/* collect pin default configuration */		port_e = snd_hda_codec_read(codec, 0x0f, 0, AC_VERB_GET_CONFIG_DEFAULT, 0);		port_f = snd_hda_codec_read(codec, 0x10, 0, AC_VERB_GET_CONFIG_DEFAULT, 0);		spec->front_panel = 1;		if (get_defcfg_connect(port_e) == AC_JACK_PORT_NONE ||		    get_defcfg_connect(port_f) == AC_JACK_PORT_NONE) {			port_g = snd_hda_codec_read(codec, 0x1f, 0, AC_VERB_GET_CONFIG_DEFAULT, 0);			port_h = snd_hda_codec_read(codec, 0x20, 0, AC_VERB_GET_CONFIG_DEFAULT, 0);			spec->surr_switch = 1;			/* no front panel */			if (get_defcfg_connect(port_g) == AC_JACK_PORT_NONE ||			    get_defcfg_connect(port_h) == AC_JACK_PORT_NONE) {				/* no optional rear panel */				spec->board_config = CMI_MINIMAL;				spec->front_panel = 0;				spec->num_ch_modes = 2;			} else {				spec->board_config = CMI_MIN_FP;				spec->num_ch_modes = 3;			}			spec->channel_modes = cmi9880_channel_modes;			spec->input_mux = &cmi9880_basic_mux;			spec->multiout.max_channels = cmi9880_channel_modes[0].channels;		} else {			spec->input_mux = &cmi9880_basic_mux;			port_spdifi = snd_hda_codec_read(codec, 0x13, 0, AC_VERB_GET_CONFIG_DEFAULT, 0);			port_spdifo = snd_hda_codec_read(codec, 0x12, 0, AC_VERB_GET_CONFIG_DEFAULT, 0);			if (get_defcfg_connect(port_spdifo) != AC_JACK_PORT_NONE)				spec->multiout.dig_out_nid = CMI_DIG_OUT_NID;			if (get_defcfg_connect(port_spdifi) != AC_JACK_PORT_NONE)				spec->dig_in_nid = CMI_DIG_IN_NID;			spec->multiout.max_channels = 8;		}		snd_hda_parse_pin_def_config(codec, &cfg);		if (cfg.line_outs) {			spec->multiout.max_channels = cfg.line_outs * 2;			cmi9880_fill_multi_dac_nids(codec, &cfg);			cmi9880_fill_multi_init(codec, &cfg);		} else			snd_printd("patch_cmedia: cannot detect association in defcfg\n");		break;		}	}	spec->multiout.num_dacs = spec->num_dacs;	spec->multiout.dac_nids = spec->dac_nids;	spec->adc_nids = cmi9880_adc_nids;	codec->patch_ops = cmi9880_patch_ops;	return 0;}/* * patch entries */struct hda_codec_preset snd_hda_preset_cmedia[] = {	{ .id = 0x13f69880, .name = "CMI9880", .patch = patch_cmi9880 }, 	{ .id = 0x434d4980, .name = "CMI9880", .patch = patch_cmi9880 },	{} /* terminator */};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91理论电影在线观看| 日韩激情一二三区| 国产高清不卡一区二区| 国产色婷婷亚洲99精品小说| 极品少妇xxxx精品少妇偷拍| 国产色婷婷亚洲99精品小说| 不卡高清视频专区| 一区二区三区在线免费| 欧美日本免费一区二区三区| 日本亚洲天堂网| 日韩美女主播在线视频一区二区三区| 日本不卡视频一二三区| 精品剧情v国产在线观看在线| 韩国在线一区二区| 国产精品卡一卡二| 欧美日韩亚洲综合一区二区三区 | 94色蜜桃网一区二区三区| 中文字幕一区二区视频| 欧美在线啊v一区| 日韩精品电影一区亚洲| 精品国产sm最大网站免费看| 成人免费av网站| 亚洲一区二区三区不卡国产欧美| 正在播放亚洲一区| 国产精品香蕉一区二区三区| 亚洲欧美日韩系列| 日韩一区二区三区在线| 国产福利一区二区三区视频在线| 亚洲免费资源在线播放| 日韩一级欧美一级| av一区二区三区黑人| 丝袜美腿亚洲色图| 国产精品久久久久久久久动漫| 欧美亚洲另类激情小说| 国产在线看一区| 亚洲激情男女视频| 欧美xxx久久| 91亚洲精品一区二区乱码| 日韩制服丝袜av| 国产精品久久久久久久岛一牛影视| 欧美日韩一区二区在线观看视频 | 久久免费精品国产久精品久久久久 | www..com久久爱| 亚欧色一区w666天堂| 欧美激情一二三区| 日韩欧美中文字幕制服| 日本道色综合久久| 国产91清纯白嫩初高中在线观看 | 国产亚洲综合性久久久影院| 在线视频你懂得一区二区三区| 久久国产麻豆精品| 亚洲福利国产精品| 亚洲色欲色欲www| 久久免费视频色| 欧美一区二区三区免费视频| 色婷婷综合久色| 成人性视频免费网站| 经典一区二区三区| 日韩av电影免费观看高清完整版在线观看| 国产精品久久久久久妇女6080| 久久亚洲捆绑美女| 日韩精品一区二区三区三区免费 | 国产成人精品一区二区三区网站观看| 午夜久久久久久久久| 亚洲精品视频一区二区| 中文无字幕一区二区三区| 日韩欧美亚洲国产另类| 91麻豆精品国产91| 欧美丰满嫩嫩电影| 欧美日韩国产系列| 欧美日韩美少妇| 欧美网站一区二区| 在线一区二区三区做爰视频网站| 成人免费观看男女羞羞视频| 国产精品1区二区.| 国产不卡在线视频| 成人av在线资源网| 国产精品77777竹菊影视小说| 寂寞少妇一区二区三区| 国产一区二区三区四区在线观看 | 黑人巨大精品欧美黑白配亚洲| 免费观看久久久4p| 国产成人精品在线看| 国产毛片精品一区| 国产传媒欧美日韩成人| 国产精品996| 波多野结衣亚洲一区| 成人美女视频在线看| 成人午夜电影网站| 99热精品国产| 91偷拍与自偷拍精品| 在线亚洲欧美专区二区| 欧美日韩国产综合视频在线观看 | 日韩天堂在线观看| 91精选在线观看| 精品国一区二区三区| 中文字幕精品一区二区精品绿巨人 | 国产在线一区观看| 国产精品一区二区不卡| eeuss鲁片一区二区三区在线看| 97精品视频在线观看自产线路二| 91久久精品网| 欧美一二三四区在线| 国产亚洲精品久| 亚洲欧美电影院| 亚洲123区在线观看| 久久99精品视频| 懂色一区二区三区免费观看| 91豆麻精品91久久久久久| 欧美一卡二卡三卡| 国产精品无遮挡| 伊人婷婷欧美激情| 久久综合综合久久综合| 成人高清在线视频| 51精品秘密在线观看| 欧美国产日韩a欧美在线观看| 一区二区三区不卡在线观看| 美脚の诱脚舐め脚责91| 懂色av中文字幕一区二区三区 | 久久无码av三级| 国产精品白丝在线| 天堂午夜影视日韩欧美一区二区| 国产福利精品一区二区| 欧美亚洲一区二区在线| 337p日本欧洲亚洲大胆精品| ...av二区三区久久精品| 免费一级欧美片在线观看| 粉嫩aⅴ一区二区三区四区五区| 欧美日韩mp4| 欧美国产日韩精品免费观看| 日日欢夜夜爽一区| a亚洲天堂av| 精品国精品国产| 亚洲午夜久久久久| 成人一级黄色片| 欧美大片在线观看| 亚洲一二三专区| 成人精品视频一区| 日韩免费高清电影| 亚洲成人精品一区二区| av中文字幕在线不卡| 久久久夜色精品亚洲| 日本三级亚洲精品| 欧美性大战xxxxx久久久| 中文字幕的久久| 韩国精品主播一区二区在线观看| 欧美日韩久久一区| 亚洲日本护士毛茸茸| 国产成人精品影院| 久久影院午夜论| 奇米综合一区二区三区精品视频| 91黄色免费观看| 中文字幕欧美一| 国产不卡免费视频| 亚洲精品一区二区三区99| 视频一区中文字幕| 欧美天天综合网| 一区二区三区中文在线观看| 99国产精品久久| 国产精品亲子乱子伦xxxx裸| 国产黄色精品网站| 久久久午夜电影| 国产精品一区二区在线观看网站 | 成人ar影院免费观看视频| 国产日韩综合av| 国产一区二区不卡在线 | 国产高清不卡一区二区| 精品国产露脸精彩对白| 精品一区二区三区视频在线观看| 欧美成人精品福利| 青青草97国产精品免费观看| 欧美放荡的少妇| 日韩福利电影在线| 欧美剧情片在线观看| 五月天激情综合| 91麻豆精品国产91久久久更新时间 | 91色综合久久久久婷婷| 成人免费在线观看入口| 91尤物视频在线观看| 亚洲乱码精品一二三四区日韩在线 | 不卡欧美aaaaa| 亚洲色图一区二区三区| 91精彩视频在线| 天天av天天翘天天综合网 | 99国产精品久久| 亚洲人成精品久久久久久| 日本乱人伦一区| 亚洲第一av色| 日韩一区二区电影在线| 国内成+人亚洲+欧美+综合在线| 久久香蕉国产线看观看99| 国产精品69毛片高清亚洲| 综合久久综合久久| 欧美日韩亚洲综合一区| 久国产精品韩国三级视频| 欧美国产精品专区| 色就色 综合激情| 免费在线视频一区| 欧美国产日本视频| 欧美日韩免费观看一区三区|