aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2006-07-03 09:58:16 -0400
committerJaroslav Kysela <perex@suse.cz>2006-07-12 14:07:45 -0400
commit1a806f487da563d0b60375665911009e60a7d121 (patch)
tree2798ba17e1f09408cb98931620a01166ca791af2
parentcc63935f56d1b2486fa17bea63ee3cfc7b9c1304 (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.c15
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;