aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_sigmatel.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-01-20 11:19:01 -0500
committerTakashi Iwai <tiwai@suse.de>2009-01-20 11:19:01 -0500
commitcaa10b6e808a4d65eb0306f0006308244f2b8d79 (patch)
treefbd6bbbdfa6239d1d5b41417b273b934dc7349de /sound/pci/hda/patch_sigmatel.c
parent1b52ae701fedf97f9984e73b6a1fe2444230871b (diff)
ALSA: hda - Improve auto-probing of STAC9872 codec
Use the standard STAC/IDT auto-probing routine for non-static STAC9872 codec probing. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/patch_sigmatel.c')
-rw-r--r--sound/pci/hda/patch_sigmatel.c58
1 files changed, 48 insertions, 10 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index a4d4afe6b4fc..b6e797d1c218 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -5511,24 +5511,62 @@ static struct snd_pci_quirk stac9872_cfg_tbl[] = {
5511 {} 5511 {}
5512}; 5512};
5513 5513
5514static struct snd_kcontrol_new stac9872_mixer[] = {
5515 HDA_CODEC_VOLUME("Capture Volume", 0x09, 0, HDA_INPUT),
5516 HDA_CODEC_MUTE("Capture Switch", 0x09, 0, HDA_INPUT),
5517 STAC_INPUT_SOURCE(1),
5518 { } /* end */
5519};
5520
5521static hda_nid_t stac9872_pin_nids[] = {
5522 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
5523 0x11, 0x13, 0x14,
5524};
5525
5526static hda_nid_t stac9872_adc_nids[] = {
5527 0x8 /*,0x6*/
5528};
5529
5530static hda_nid_t stac9872_mux_nids[] = {
5531 0x15
5532};
5533
5514static int patch_stac9872(struct hda_codec *codec) 5534static int patch_stac9872(struct hda_codec *codec)
5515{ 5535{
5516 struct sigmatel_spec *spec; 5536 struct sigmatel_spec *spec;
5517 int board_config;
5518 5537
5519 board_config = snd_hda_check_board_config(codec, STAC_9872_MODELS,
5520 stac9872_models,
5521 stac9872_cfg_tbl);
5522 if (board_config < 0)
5523 /* unknown config, let generic-parser do its job... */
5524 return snd_hda_parse_generic_codec(codec);
5525
5526 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 5538 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5527 if (spec == NULL) 5539 if (spec == NULL)
5528 return -ENOMEM; 5540 return -ENOMEM;
5529
5530 codec->spec = spec; 5541 codec->spec = spec;
5531 switch (board_config) { 5542
5543 spec->board_config = snd_hda_check_board_config(codec, STAC_9872_MODELS,
5544 stac9872_models,
5545 stac9872_cfg_tbl);
5546 if (spec->board_config < 0) {
5547 int err;
5548
5549 spec->num_pins = ARRAY_SIZE(stac9872_pin_nids);
5550 spec->pin_nids = stac9872_pin_nids;
5551 spec->multiout.dac_nids = spec->dac_nids;
5552 spec->num_adcs = ARRAY_SIZE(stac9872_adc_nids);
5553 spec->adc_nids = stac9872_adc_nids;
5554 spec->num_muxes = ARRAY_SIZE(stac9872_mux_nids);
5555 spec->mux_nids = stac9872_mux_nids;
5556 spec->mixer = stac9872_mixer;
5557 spec->init = vaio_init;
5558
5559 err = stac92xx_parse_auto_config(codec, 0x10, 0x12);
5560 if (err < 0) {
5561 stac92xx_free(codec);
5562 return -EINVAL;
5563 }
5564 spec->input_mux = &spec->private_imux;
5565 codec->patch_ops = stac92xx_patch_ops;
5566 return 0;
5567 }
5568
5569 switch (spec->board_config) {
5532 case CXD9872RD_VAIO: 5570 case CXD9872RD_VAIO:
5533 case STAC9872AK_VAIO: 5571 case STAC9872AK_VAIO:
5534 case STAC9872K_VAIO: 5572 case STAC9872K_VAIO: