diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-01-20 11:19:01 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-01-20 11:19:01 -0500 |
commit | caa10b6e808a4d65eb0306f0006308244f2b8d79 (patch) | |
tree | fbd6bbbdfa6239d1d5b41417b273b934dc7349de /sound/pci/hda/patch_sigmatel.c | |
parent | 1b52ae701fedf97f9984e73b6a1fe2444230871b (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.c | 58 |
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 | ||
5514 | static 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 | |||
5521 | static hda_nid_t stac9872_pin_nids[] = { | ||
5522 | 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, | ||
5523 | 0x11, 0x13, 0x14, | ||
5524 | }; | ||
5525 | |||
5526 | static hda_nid_t stac9872_adc_nids[] = { | ||
5527 | 0x8 /*,0x6*/ | ||
5528 | }; | ||
5529 | |||
5530 | static hda_nid_t stac9872_mux_nids[] = { | ||
5531 | 0x15 | ||
5532 | }; | ||
5533 | |||
5514 | static int patch_stac9872(struct hda_codec *codec) | 5534 | static 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: |