Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 375239
b: refs/heads/master
c: 17df3f5
h: refs/heads/master
i:
  375237: 785dbb7
  375235: 4fcae74
  375231: b779463
v: v3
  • Loading branch information
Takashi Iwai committed May 8, 2013
1 parent 369ef69 commit a7417e1
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 33 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2195b063f6609e4c6268f291683902f25eaf9aa6
refs/heads/master: 17df3f55652f7ea8fb1197b5c32e227b3da9f215
54 changes: 22 additions & 32 deletions trunk/sound/pci/hda/patch_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1832,12 +1832,10 @@ static void intel_haswell_fixup_connect_list(struct hda_codec *codec,
#define INTEL_EN_ALL_PIN_CVTS 0x01 /* enable 2nd & 3rd pins and convertors */

static void intel_haswell_enable_all_pins(struct hda_codec *codec,
const struct hda_fixup *fix, int action)
bool update_tree)
{
unsigned int vendor_param;

if (action != HDA_FIXUP_ACT_PRE_PROBE)
return;
vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
INTEL_GET_VENDOR_VERB, 0);
if (vendor_param == -1 || vendor_param & INTEL_EN_ALL_PIN_CVTS)
Expand All @@ -1849,8 +1847,8 @@ static void intel_haswell_enable_all_pins(struct hda_codec *codec,
if (vendor_param == -1)
return;

snd_hda_codec_update_widgets(codec);
return;
if (update_tree)
snd_hda_codec_update_widgets(codec);
}

static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec)
Expand All @@ -1868,30 +1866,20 @@ static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec)
INTEL_SET_VENDOR_VERB, vendor_param);
}

/* Haswell needs to re-issue the vendor-specific verbs before turning to D0.
* Otherwise you may get severe h/w communication errors.
*/
static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg,
unsigned int power_state)
{
if (power_state == AC_PWRST_D0) {
intel_haswell_enable_all_pins(codec, false);
intel_haswell_fixup_enable_dp12(codec);
}


/* available models for fixup */
enum {
INTEL_HASWELL,
};

static const struct hda_model_fixup hdmi_models[] = {
{.id = INTEL_HASWELL, .name = "Haswell"},
{}
};

static const struct snd_pci_quirk hdmi_fixup_tbl[] = {
SND_PCI_QUIRK(0x8086, 0x2010, "Haswell", INTEL_HASWELL),
{} /* terminator */
};

static const struct hda_fixup hdmi_fixups[] = {
[INTEL_HASWELL] = {
.type = HDA_FIXUP_FUNC,
.v.func = intel_haswell_enable_all_pins,
},
};

snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE, power_state);
snd_hda_codec_set_power_to_all(codec, fg, power_state);
}

static int patch_generic_hdmi(struct hda_codec *codec)
{
Expand All @@ -1904,18 +1892,20 @@ static int patch_generic_hdmi(struct hda_codec *codec)
codec->spec = spec;
hdmi_array_init(spec, 4);

snd_hda_pick_fixup(codec, hdmi_models, hdmi_fixup_tbl, hdmi_fixups);
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);

if (codec->vendor_id == 0x80862807)
if (codec->vendor_id == 0x80862807) {
intel_haswell_enable_all_pins(codec, true);
intel_haswell_fixup_enable_dp12(codec);
}

if (hdmi_parse_codec(codec) < 0) {
codec->spec = NULL;
kfree(spec);
return -EINVAL;
}
codec->patch_ops = generic_hdmi_patch_ops;
if (codec->vendor_id == 0x80862807)
codec->patch_ops.set_power_state = haswell_set_power_state;

generic_hdmi_init_per_pins(codec);

init_channel_allocations();
Expand Down

0 comments on commit a7417e1

Please sign in to comment.