On Mon, 11 Apr 2016 19:10:51 +0200, Hyungwon Hwang wrote: > > With the introduce of pcm_lock and per_pin->lock, this temporary buffer > is not needed anymore. The use of a temporary buffer is not only to avoid the race. It's also for avoiding the corruption due to an erroneous read. That is, pin_get_eld() might overwrite some bogus data while it returns an error. Since the driver retries upon the error, we need to keep the old good data as much as possible. thanks, Takashi > > Signed-off-by: Hyungwon Hwang <hyungwon.hwang7@xxxxxxxxx> > --- > sound/pci/hda/patch_hdmi.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c > index 5af372d..a24d5b4 100644 > --- a/sound/pci/hda/patch_hdmi.c > +++ b/sound/pci/hda/patch_hdmi.c > @@ -1395,8 +1395,7 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin, > struct hda_jack_tbl *jack; > struct hda_codec *codec = per_pin->codec; > struct hdmi_spec *spec = codec->spec; > - struct hdmi_eld *eld = &spec->temp_eld; > - struct hdmi_eld *pin_eld = &per_pin->sink_eld; > + struct hdmi_eld *eld = &per_pin->sink_eld; > hda_nid_t pin_nid = per_pin->pin_nid; > /* > * Always execute a GetPinSense verb here, even when called from > @@ -1413,15 +1412,15 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin, > present = snd_hda_pin_sense(codec, pin_nid); > > mutex_lock(&per_pin->lock); > - pin_eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE); > - if (pin_eld->monitor_present) > + eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE); > + if (eld->monitor_present) > eld->eld_valid = !!(present & AC_PINSENSE_ELDV); > else > eld->eld_valid = false; > > codec_dbg(codec, > "HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n", > - codec->addr, pin_nid, pin_eld->monitor_present, eld->eld_valid); > + codec->addr, pin_nid, eld->monitor_present, eld->eld_valid); > > if (eld->eld_valid) { > if (spec->ops.pin_get_eld(codec, pin_nid, eld->eld_buffer, > @@ -1441,7 +1440,7 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin, > else > update_eld(codec, per_pin, eld); > > - ret = !repoll || !pin_eld->monitor_present || pin_eld->eld_valid; > + ret = !repoll || !eld->monitor_present || eld->eld_valid; > > jack = snd_hda_jack_tbl_get(codec, pin_nid); > if (jack) > -- > 2.5.0 > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel