diff options
author | Takashi Iwai <tiwai@suse.de> | 2006-07-03 09:58:16 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2006-07-12 14:07:45 -0400 |
commit | 1a806f487da563d0b60375665911009e60a7d121 (patch) | |
tree | 2798ba17e1f09408cb98931620a01166ca791af2 | |
parent | cc63935f56d1b2486fa17bea63ee3cfc7b9c1304 (diff) |
[ALSA] Fix workaround for AD1988A rev2 codec
Fix the workaround for AD1988A rev2 codec not to apply to AD1988B codec
chips.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
-rw-r--r-- | sound/pci/hda/patch_analog.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 33b7d5806469..1f990db33106 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
@@ -1545,6 +1545,9 @@ enum { | |||
1545 | /* reivision id to check workarounds */ | 1545 | /* reivision id to check workarounds */ |
1546 | #define AD1988A_REV2 0x100200 | 1546 | #define AD1988A_REV2 0x100200 |
1547 | 1547 | ||
1548 | #define is_rev2(codec) \ | ||
1549 | ((codec)->vendor_id == 0x11d41988 && \ | ||
1550 | (codec)->revision_id == AD1988A_REV2) | ||
1548 | 1551 | ||
1549 | /* | 1552 | /* |
1550 | * mixers | 1553 | * mixers |
@@ -2195,7 +2198,7 @@ static inline hda_nid_t ad1988_idx_to_dac(struct hda_codec *codec, int idx) | |||
2195 | /* A B C D E F G H */ | 2198 | /* A B C D E F G H */ |
2196 | 0x04, 0x05, 0x0a, 0x04, 0x06, 0x05, 0x0a, 0x06 | 2199 | 0x04, 0x05, 0x0a, 0x04, 0x06, 0x05, 0x0a, 0x06 |
2197 | }; | 2200 | }; |
2198 | if (codec->revision_id == AD1988A_REV2) | 2201 | if (is_rev2(codec)) |
2199 | return idx_to_dac_rev2[idx]; | 2202 | return idx_to_dac_rev2[idx]; |
2200 | else | 2203 | else |
2201 | return idx_to_dac[idx]; | 2204 | return idx_to_dac[idx]; |
@@ -2564,7 +2567,7 @@ static int patch_ad1988(struct hda_codec *codec) | |||
2564 | mutex_init(&spec->amp_mutex); | 2567 | mutex_init(&spec->amp_mutex); |
2565 | codec->spec = spec; | 2568 | codec->spec = spec; |
2566 | 2569 | ||
2567 | if (codec->revision_id == AD1988A_REV2) | 2570 | if (is_rev2(codec)) |
2568 | snd_printk(KERN_INFO "patch_analog: AD1988A rev.2 is detected, enable workarounds\n"); | 2571 | snd_printk(KERN_INFO "patch_analog: AD1988A rev.2 is detected, enable workarounds\n"); |
2569 | 2572 | ||
2570 | board_config = snd_hda_check_board_config(codec, ad1988_cfg_tbl); | 2573 | board_config = snd_hda_check_board_config(codec, ad1988_cfg_tbl); |
@@ -2590,13 +2593,13 @@ static int patch_ad1988(struct hda_codec *codec) | |||
2590 | case AD1988_6STACK_DIG: | 2593 | case AD1988_6STACK_DIG: |
2591 | spec->multiout.max_channels = 8; | 2594 | spec->multiout.max_channels = 8; |
2592 | spec->multiout.num_dacs = 4; | 2595 | spec->multiout.num_dacs = 4; |
2593 | if (codec->revision_id == AD1988A_REV2) | 2596 | if (is_rev2(codec)) |
2594 | spec->multiout.dac_nids = ad1988_6stack_dac_nids_rev2; | 2597 | spec->multiout.dac_nids = ad1988_6stack_dac_nids_rev2; |
2595 | else | 2598 | else |
2596 | spec->multiout.dac_nids = ad1988_6stack_dac_nids; | 2599 | spec->multiout.dac_nids = ad1988_6stack_dac_nids; |
2597 | spec->input_mux = &ad1988_6stack_capture_source; | 2600 | spec->input_mux = &ad1988_6stack_capture_source; |
2598 | spec->num_mixers = 2; | 2601 | spec->num_mixers = 2; |
2599 | if (codec->revision_id == AD1988A_REV2) | 2602 | if (is_rev2(codec)) |
2600 | spec->mixers[0] = ad1988_6stack_mixers1_rev2; | 2603 | spec->mixers[0] = ad1988_6stack_mixers1_rev2; |
2601 | else | 2604 | else |
2602 | spec->mixers[0] = ad1988_6stack_mixers1; | 2605 | spec->mixers[0] = ad1988_6stack_mixers1; |
@@ -2612,7 +2615,7 @@ static int patch_ad1988(struct hda_codec *codec) | |||
2612 | case AD1988_3STACK_DIG: | 2615 | case AD1988_3STACK_DIG: |
2613 | spec->multiout.max_channels = 6; | 2616 | spec->multiout.max_channels = 6; |
2614 | spec->multiout.num_dacs = 3; | 2617 | spec->multiout.num_dacs = 3; |
2615 | if (codec->revision_id == AD1988A_REV2) | 2618 | if (is_rev2(codec)) |
2616 | spec->multiout.dac_nids = ad1988_3stack_dac_nids_rev2; | 2619 | spec->multiout.dac_nids = ad1988_3stack_dac_nids_rev2; |
2617 | else | 2620 | else |
2618 | spec->multiout.dac_nids = ad1988_3stack_dac_nids; | 2621 | spec->multiout.dac_nids = ad1988_3stack_dac_nids; |
@@ -2620,7 +2623,7 @@ static int patch_ad1988(struct hda_codec *codec) | |||
2620 | spec->channel_mode = ad1988_3stack_modes; | 2623 | spec->channel_mode = ad1988_3stack_modes; |
2621 | spec->num_channel_mode = ARRAY_SIZE(ad1988_3stack_modes); | 2624 | spec->num_channel_mode = ARRAY_SIZE(ad1988_3stack_modes); |
2622 | spec->num_mixers = 2; | 2625 | spec->num_mixers = 2; |
2623 | if (codec->revision_id == AD1988A_REV2) | 2626 | if (is_rev2(codec)) |
2624 | spec->mixers[0] = ad1988_3stack_mixers1_rev2; | 2627 | spec->mixers[0] = ad1988_3stack_mixers1_rev2; |
2625 | else | 2628 | else |
2626 | spec->mixers[0] = ad1988_3stack_mixers1; | 2629 | spec->mixers[0] = ad1988_3stack_mixers1; |