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

📄 patch_sigmatel.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	[STAC_INTEL_MAC_V4] = "intel-mac-v4",	[STAC_INTEL_MAC_V5] = "intel-mac-v5",	/* for backward compatibility */	[STAC_MACMINI]	= "macmini",	[STAC_MACBOOK]	= "macbook",	[STAC_MACBOOK_PRO_V1]	= "macbook-pro-v1",	[STAC_MACBOOK_PRO_V2]	= "macbook-pro",	[STAC_IMAC_INTEL] = "imac-intel",	[STAC_IMAC_INTEL_20] = "imac-intel-20",	[STAC_922X_DELL_D81] = "dell-d81",	[STAC_922X_DELL_D82] = "dell-d82",	[STAC_922X_DELL_M81] = "dell-m81",	[STAC_922X_DELL_M82] = "dell-m82",};static struct snd_pci_quirk stac922x_cfg_tbl[] = {	/* SigmaTel reference board */	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2668,		      "DFI LanParty", STAC_D945_REF),	/* Intel 945G based systems */	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0101,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0202,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0606,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0601,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0111,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x1115,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x1116,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x1117,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x1118,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x1119,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x8826,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x5049,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x5055,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x5048,		      "Intel D945G", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0110,		      "Intel D945G", STAC_D945GTP3),	/* Intel D945G 5-stack systems */	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0404,		      "Intel D945G", STAC_D945GTP5),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0303,		      "Intel D945G", STAC_D945GTP5),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0013,		      "Intel D945G", STAC_D945GTP5),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0417,		      "Intel D945G", STAC_D945GTP5),	/* Intel 945P based systems */	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0b0b,		      "Intel D945P", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0112,		      "Intel D945P", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0d0d,		      "Intel D945P", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0909,		      "Intel D945P", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0505,		      "Intel D945P", STAC_D945GTP3),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x0707,		      "Intel D945P", STAC_D945GTP5),	/* other systems  */	/* Apple Mac Mini (early 2006) */	SND_PCI_QUIRK(0x8384, 0x7680,		      "Mac Mini", STAC_INTEL_MAC_V3),	/* Dell systems  */	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01a7,		      "unknown Dell", STAC_922X_DELL_D81),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01a9,		      "unknown Dell", STAC_922X_DELL_D81),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01ab,		      "unknown Dell", STAC_922X_DELL_D81),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01ac,		      "unknown Dell", STAC_922X_DELL_D82),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01bf,		      "unknown Dell", STAC_922X_DELL_M81),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01d0,		      "unknown Dell", STAC_922X_DELL_D82),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01d1,		      "unknown Dell", STAC_922X_DELL_D81),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01d2,		      "unknown Dell", STAC_922X_DELL_D81),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01d7,		      "Dell XPS M1210", STAC_922X_DELL_M82),	{} /* terminator */};static unsigned int ref927x_pin_configs[14] = {	0x02214020, 0x02a19080, 0x0181304e, 0x01014010,	0x01a19040, 0x01011012, 0x01016011, 0x0101201f, 	0x183301f0, 0x18a001f0, 0x18a001f0, 0x01442070,	0x01c42190, 0x40000100,};static unsigned int d965_3st_pin_configs[14] = {	0x0221401f, 0x02a19120, 0x40000100, 0x01014011,	0x01a19021, 0x01813024, 0x40000100, 0x40000100,	0x40000100, 0x40000100, 0x40000100, 0x40000100,	0x40000100, 0x40000100};static unsigned int d965_5st_pin_configs[14] = {	0x02214020, 0x02a19080, 0x0181304e, 0x01014010,	0x01a19040, 0x01011012, 0x01016011, 0x40000100,	0x40000100, 0x40000100, 0x40000100, 0x01442070,	0x40000100, 0x40000100};static unsigned int dell_3st_pin_configs[14] = {	0x02211230, 0x02a11220, 0x01a19040, 0x01114210,	0x01111212, 0x01116211, 0x01813050, 0x01112214,	0x403003fa, 0x40000100, 0x40000100, 0x404003fb,	0x40c003fc, 0x40000100};static unsigned int *stac927x_brd_tbl[STAC_927X_MODELS] = {	[STAC_D965_REF] = ref927x_pin_configs,	[STAC_D965_3ST] = d965_3st_pin_configs,	[STAC_D965_5ST] = d965_5st_pin_configs,	[STAC_DELL_3ST] = dell_3st_pin_configs,};static const char *stac927x_models[STAC_927X_MODELS] = {	[STAC_D965_REF]	= "ref",	[STAC_D965_3ST]	= "3stack",	[STAC_D965_5ST] = "5stack",	[STAC_DELL_3ST]	= "dell-3stack",};static struct snd_pci_quirk stac927x_cfg_tbl[] = {	/* SigmaTel reference board */	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2668,		      "DFI LanParty", STAC_D965_REF),	 /* Intel 946 based systems */	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x3d01, "Intel D946", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0xa301, "Intel D946", STAC_D965_3ST),	/* 965 based 3 stack systems */	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2116, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2115, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2114, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2113, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2112, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2111, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2110, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2009, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2008, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2007, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2006, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2005, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2004, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2003, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2002, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2001, "Intel D965", STAC_D965_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL,  0x01f3, "Dell Inspiron 1420", STAC_D965_3ST),	/* Dell 3 stack systems */	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL,  0x01dd, "Dell Dimension E520", STAC_DELL_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL,  0x01ed, "Dell     ", STAC_DELL_3ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL,  0x01f4, "Dell     ", STAC_DELL_3ST),	/* 965 based 5 stack systems */	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL,  0x0209, "Dell XPS 1330", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2301, "Intel D965", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2302, "Intel D965", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2303, "Intel D965", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2304, "Intel D965", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2305, "Intel D965", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2501, "Intel D965", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2502, "Intel D965", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2503, "Intel D965", STAC_D965_5ST),	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2504, "Intel D965", STAC_D965_5ST),	{} /* terminator */};static unsigned int ref9205_pin_configs[12] = {	0x40000100, 0x40000100, 0x01016011, 0x01014010,	0x01813122, 0x01a19021, 0x40000100, 0x40000100,	0x90a000f0, 0x90a000f0, 0x01441030, 0x01c41030};/*    STAC 9205 pin configs for    102801F1    102801F2    102801FC    102801FD    10280204    1028021F*/static unsigned int dell_9205_m42_pin_configs[12] = {	0x0321101F, 0x03A11020, 0x400003FA, 0x90170310,	0x400003FB, 0x400003FC, 0x400003FD, 0x40F000F9,	0x90A60330, 0x400003FF, 0x0144131F, 0x40C003FE,};/*    STAC 9205 pin configs for    102801F9    102801FA    102801FE    102801FF (Dell Precision M4300)    10280206    10280200    10280201*/static unsigned int dell_9205_m43_pin_configs[12] = {	0x0321101f, 0x03a11020, 0x90a70330, 0x90170310,	0x400000fe, 0x400000ff, 0x400000fd, 0x40f000f9,	0x400000fa, 0x400000fc, 0x0144131f, 0x40c003f8,};static unsigned int dell_9205_m44_pin_configs[12] = {	0x0421101f, 0x04a11020, 0x400003fa, 0x90170310,	0x400003fb, 0x400003fc, 0x400003fd, 0x400003f9,	0x90a60330, 0x400003ff, 0x01441340, 0x40c003fe,};static unsigned int *stac9205_brd_tbl[STAC_9205_MODELS] = {	[STAC_9205_REF] = ref9205_pin_configs,	[STAC_9205_DELL_M42] = dell_9205_m42_pin_configs,	[STAC_9205_DELL_M43] = dell_9205_m43_pin_configs,	[STAC_9205_DELL_M44] = dell_9205_m44_pin_configs,};static const char *stac9205_models[STAC_9205_MODELS] = {	[STAC_9205_REF] = "ref",	[STAC_9205_DELL_M42] = "dell-m42",	[STAC_9205_DELL_M43] = "dell-m43",	[STAC_9205_DELL_M44] = "dell-m44",};static struct snd_pci_quirk stac9205_cfg_tbl[] = {	/* SigmaTel reference board */	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2668,		      "DFI LanParty", STAC_9205_REF),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01f1,		      "unknown Dell", STAC_9205_DELL_M42),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01f2,		      "unknown Dell", STAC_9205_DELL_M42),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01f8,		      "Dell Precision", STAC_9205_DELL_M43),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x021c,			  "Dell Precision", STAC_9205_DELL_M43),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01f9,		      "Dell Precision", STAC_9205_DELL_M43),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x021b,		      "Dell Precision", STAC_9205_DELL_M43),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01fa,		      "Dell Precision", STAC_9205_DELL_M43),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01fc,		      "unknown Dell", STAC_9205_DELL_M42),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01fd,		      "unknown Dell", STAC_9205_DELL_M42),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01fe,		      "Dell Precision", STAC_9205_DELL_M43),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01ff,		      "Dell Precision M4300", STAC_9205_DELL_M43),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0206,		      "Dell Precision", STAC_9205_DELL_M43),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01f1,		      "Dell Inspiron", STAC_9205_DELL_M44),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01f2,		      "Dell Inspiron", STAC_9205_DELL_M44),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01fc,		      "Dell Inspiron", STAC_9205_DELL_M44),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01fd,		      "Dell Inspiron", STAC_9205_DELL_M44),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0204,		      "unknown Dell", STAC_9205_DELL_M42),	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x021f,		      "Dell Inspiron", STAC_9205_DELL_M44),	{} /* terminator */};static int stac92xx_save_bios_config_regs(struct hda_codec *codec){	int i;	struct sigmatel_spec *spec = codec->spec;		if (! spec->bios_pin_configs) {		spec->bios_pin_configs = kcalloc(spec->num_pins,		                                 sizeof(*spec->bios_pin_configs), GFP_KERNEL);		if (! spec->bios_pin_configs)			return -ENOMEM;	}		for (i = 0; i < spec->num_pins; i++) {		hda_nid_t nid = spec->pin_nids[i];		unsigned int pin_cfg;				pin_cfg = snd_hda_codec_read(codec, nid, 0, 			AC_VERB_GET_CONFIG_DEFAULT, 0x00);			snd_printdd(KERN_INFO "hda_codec: pin nid %2.2x bios pin config %8.8x\n",					nid, pin_cfg);		spec->bios_pin_configs[i] = pin_cfg;	}		return 0;}static void stac92xx_set_config_reg(struct hda_codec *codec,				    hda_nid_t pin_nid, unsigned int pin_config){	int i;	snd_hda_codec_write(codec, pin_nid, 0,			    AC_VERB_SET_CONFIG_DEFAULT_BYTES_0,			    pin_config & 0x000000ff);	snd_hda_codec_write(codec, pin_nid, 0,			    AC_VERB_SET_CONFIG_DEFAULT_BYTES_1,			    (pin_config & 0x0000ff00) >> 8);	snd_hda_codec_write(codec, pin_nid, 0,			    AC_VERB_SET_CONFIG_DEFAULT_BYTES_2,			    (pin_config & 0x00ff0000) >> 16);	snd_hda_codec_write(codec, pin_nid, 0,			    AC_VERB_SET_CONFIG_DEFAULT_BYTES_3,			    pin_config >> 24);	i = snd_hda_codec_read(codec, pin_nid, 0,			       AC_VERB_GET_CONFIG_DEFAULT,			       0x00);		snd_printdd(KERN_INFO "hda_codec: pin nid %2.2x pin config %8.8x\n",		    pin_nid, i);}static void stac92xx_set_config_regs(struct hda_codec *codec){	int i;	struct sigmatel_spec *spec = codec->spec; 	if (!spec->pin_configs) 		return;	for (i = 0; i < spec->num_pins; i++)		stac92xx_set_config_reg(codec, spec->pin_nids[i],					spec->pin_configs[i]);}static void stac92xx_enable_gpio_mask(struct hda_codec *codec){	struct sigmatel_spec *spec = codec->spec;	/* Configure GPIOx as output */	snd_hda_codec_write_cache(codec, codec->afg, 0,				  AC_VERB_SET_GPIO_DIRECTION, spec->gpio_mask);	/* Configure GPIOx as CMOS */	snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7e7, 0x00000000);	/* Assert GPIOx */	snd_hda_codec_write_cache(codec, codec->afg, 0,				  AC_VERB_SET_GPIO_DATA, spec->gpio_data);	/* Enable GPIOx */	snd_hda_codec_write_cache(codec, codec->afg, 0,				  AC_VERB_SET_GPIO_MASK, spec->gpio_mask);}/* * Analog playback callbacks */static int stac92xx_playback_pcm_open(struct hda_pcm_stream *hinfo,				      struct hda_codec *codec,				      struct snd_pcm_substream *substream){	struct sigmatel_spec *spec = codec->spec;	return snd_hda_multi_out_analog_open(codec, &spec->multiout, substream);}static int stac92xx_playback_pcm_prepare(struct hda_pcm_stream *hinfo,					 struct hda_codec *codec,					 unsigned int stream_tag,					 unsigned int format,					 struct snd_pcm_substream *substream){	struct sigmatel_spec *spec = codec->spec;	return snd_hda_multi_out_analog_prepare(codec, &spec->multiout, stream_tag, format, substream);}static int stac92xx_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,					struct hda_codec *codec,					struct snd_pcm_substream *substream){	struct sigmatel_spec *spec = codec->spec;	return snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);}/* * Digital playback callbacks */static int stac92xx_dig_playback_pcm_open(struct hda_pcm_stream *hinfo,					  struct hda_codec *codec,					  struct snd_pcm_substream *substream){	struct sigmatel_spec *spec = codec->spec;	return snd_hda_multi_out_dig_open(codec, &spec->multiout);}static int stac92xx_dig_playback_pcm_close(struct hda_pcm_stream *hinfo,					   struct hda_codec *codec,					   struct snd_pcm_substream *substream){	struct sigmatel_spec *spec = codec->spec;	return snd_hda_multi_out_dig_close(codec, &spec->multiout);}static int stac92xx_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,					 struct hda_codec *codec,					 unsigned int stream_tag,					 unsigned int format,					 struct snd_pcm_substream *substream){	struct sigmatel_spec *spec = codec->spec;	return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,					     stream_tag, format, substream);}/* * Analog capture callbacks */static int stac92xx_capture_pcm_prepare(struct hda_pcm_stream *hinfo,					struct hda_codec *codec,					unsigned int stream_tag,					unsigned int format,					struct snd_pcm_substream *substream){	struct sigmatel_spec *spec = codec->spec;	snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number],                                   stream_tag, 0, format);	return 0;}static int stac92xx_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,					struct hda_codec *codec,					struct snd_pcm_substream *substream){	struct sigmatel_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 stac92xx_pcm_digital_playback = {	.substreams = 1,	.channels_min = 2,	.channels_max = 2,

⌨️ 快捷键说明

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