diff options
| -rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 1527cb61e5d6..33fc7cd00935 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
| @@ -1764,6 +1764,21 @@ static void stac92xx_set_pinctl(struct hda_codec *codec, hda_nid_t nid, | |||
| 1764 | unsigned int pin_ctl = snd_hda_codec_read(codec, nid, | 1764 | unsigned int pin_ctl = snd_hda_codec_read(codec, nid, |
| 1765 | 0, AC_VERB_GET_PIN_WIDGET_CONTROL, 0x00); | 1765 | 0, AC_VERB_GET_PIN_WIDGET_CONTROL, 0x00); |
| 1766 | 1766 | ||
| 1767 | if (pin_ctl & AC_PINCTL_IN_EN) { | ||
| 1768 | /* | ||
| 1769 | * we need to check the current set-up direction of | ||
| 1770 | * shared input pins since they can be switched via | ||
| 1771 | * "xxx as Output" mixer switch | ||
| 1772 | */ | ||
| 1773 | struct sigmatel_spec *spec = codec->spec; | ||
| 1774 | struct auto_pin_cfg *cfg = &spec->autocfg; | ||
| 1775 | if ((nid == cfg->input_pins[AUTO_PIN_LINE] && | ||
| 1776 | spec->line_switch) || | ||
| 1777 | (nid == cfg->input_pins[AUTO_PIN_MIC] && | ||
| 1778 | spec->mic_switch)) | ||
| 1779 | return; | ||
| 1780 | } | ||
| 1781 | |||
| 1767 | /* if setting pin direction bits, clear the current | 1782 | /* if setting pin direction bits, clear the current |
| 1768 | direction bits first */ | 1783 | direction bits first */ |
| 1769 | if (flag & (AC_PINCTL_IN_EN | AC_PINCTL_OUT_EN)) | 1784 | if (flag & (AC_PINCTL_IN_EN | AC_PINCTL_OUT_EN)) |
