Re: [PATCH] ALSA: hda/hdmi - add a parameter to let users decide if checking the eld_valid

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 2019/11/12 下午8:21, Hui Wang wrote:

On 2019/11/12 上午12:04, Takashi Iwai wrote:
On Mon, 11 Nov 2019 16:33:45 +0100,
Takashi Iwai wrote:
On Mon, 11 Nov 2019 15:45:02 +0100,
Hui Wang wrote:

[snip]
On the second thought, I wonder whether eld_valid would be corrected
later by the graphics side at all.  If yes, it's a timing issue, and
it can be corrected with the repolling.

A totally untested patch is below.

I will build a testing kernel with this patch and let the bug reporter test it.

Thanks,

Hui.

Hello Takashi,

Tested the patch,  it didn't work. The driver always failed to read the speaker allocation from snd_hdmi_get_eld_ati().

This is the dmesg after adding the patch:

https://launchpadlibrarian.net/451420819/dmesg (both presence and eld_valid bits are set, but can't get the speaker_alloc)

Regards,

Hui.





thanks,

Takashi

--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -1549,19 +1549,25 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
              do_repoll = true;
      }
  -    if (do_repoll)
+    do_repoll |= repoll && eld->eld_valid != eld->monitor_present;
+    if (do_repoll) {
          schedule_delayed_work(&per_pin->work, msecs_to_jiffies(300));
-    else
+        ret = false;
+    } else {
          update_eld(codec, per_pin, eld);
-
-    ret = !repoll || !eld->monitor_present || eld->eld_valid;
+        per_pin->repoll_count = 0;
+        ret = true;
+    }
        jack = snd_hda_jack_tbl_get(codec, pin_nid);
      if (jack) {
          jack->block_report = !ret;
-        jack->pin_sense = (eld->monitor_present && eld->eld_valid) ?
-            AC_PINSENSE_PRESENCE : 0;
+        if (ret) {
+            jack->pin_sense = (eld->monitor_present && eld->eld_valid) ?
+                AC_PINSENSE_PRESENCE : 0;
+        }
      }
+
      mutex_unlock(&per_pin->lock);
      return ret;
  }




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux