<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 2016年08月11日 16:32, Russell King -
      ARM Linux wrote:<br>
    </div>
    <blockquote cite="mid:20160811083220.GS1041@n2100.armlinux.org.uk"
      type="cite">
      <pre wrap="">On Thu, Aug 11, 2016 at 03:54:03PM +0800, Mark Yao wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">hdmi->disabled maybe not match to the real hardware status.

->dw_hdmi_bridge_enable()
  hdmi->disabled = false;
-->dw_hdmi_update_power()
   if (hdmi->rxsense)
       force = DRM_FORCE_ON;
   else
       force = DRM_FORCE_OFF;

hdmi->rxsense maybe false on bridge enable path, then hdmi->disabled
is false, but actually hardware is power off, they are not match.
</pre>
      </blockquote>
      <pre wrap="">
... which is correct.  If rxsense is false, it means there is nothing
plugged in, so we don't power the hardware up until something _is_
plugged in.

When something is plugged in, we get the HPD and RXSENSE events, which
will cause dw_hdmi_update_power() to be called.

hdmi->disabled is merely a bit mask of things that would cause us to
want to avoid powering the hardware up when rxsense becomes true.

</pre>
    </blockquote>
    <br>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <span style="color: rgb(51, 51, 51); font-family: arial; font-size:
      16px; font-style: normal; font-variant: normal; font-weight:
      normal; letter-spacing: normal; line-height: 20px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px; display: inline !important; float:
      none; background-color: rgb(255, 255, 255);">At one moment</span>,
    if hdmi->rxsense = false, hdmi->disabled = true, and the hdmi
    is unplug<br>
    <br>
    then we plug hdmi:<br>
        1, dw_hdmi_irq<br>
          --> because disabled is true, so can't not run into the
    patch to enable hdmi->rxsense<br>
        2, uevent plugin<br>
        3, get_connector_detect: <br>
               hdmi->disabled is true, so just report status
    connected<br>
        4, dw_hdmi_bridge_enable<br>
              --> set hdmi->disabled = false, but because
    hdmi->rxsense is false, so force is power off.<br>
    then the userspace thinks the hdmi is power on, but in fact it's
    power off.<br>
       5, unplug hdmi<br>
           hdmi hardware rxsense status is false, also can't recovery to
    true.<br>
           all the status back to step 1.<br>
    <br>
    So the bug is when hdmi->rxsense run into false, hardly to
    recovery.<br>
    <br>
    hdmi->rxsense = true request dw_hdmi_bridge_enable<br>
    dw_hdmi_bridge_enable request "hdmi->rxsense == true"<br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Mark Yao</pre>
  </body>
</html>