<div dir="ltr"><div><div>Hi, <br><br>Replies in between...<br><br></div>Regards,<br></div>Luís<br><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Nov 7, 2017 at 10:30 AM, Russell King - ARM Linux <span dir="ltr"><<a href="mailto:linux@armlinux.org.uk" target="_blank">linux@armlinux.org.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, Nov 07, 2017 at 10:15:02AM +0000, Russell King - ARM Linux wrote:<br>
> On Tue, Nov 07, 2017 at 10:00:48AM +0000, Luís Mendes wrote:<br>
</span><span class="">> > an EDID is forced through drm_kms_helper.edid_firmware=<wbr>edid/ktc_edid.bin,<br>
> > because dw_hdmi_connector_get_modes(..<wbr>.) won't get called, causing  the<br>
> > edid not to be parsed for audio suppport, nor for the HDMI connector<br>
> > support. As a result DVI mode will always be used.<br>
><br>
> Yes, when using an override EDID, audio probably won't work because the<br>
> parsing calls are mis-placed.  I thought that had been fixed.<br>
<br>
</span>Hi,<br>
<br>
This should fix this particular issue, which is definitely a bug in the<br>
driver.  Please test.<br></blockquote><div><br></div><div>Yes, the issue is fixed with this patch. I am now able to force the EDID and the HDMI and Audio sink are properly set. Thanks! <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
As previously explained, I can't fathom how xf86-video-armada would get<br>
the EDID of your TV without dw-hdmi first getting the EDID itself,<br>
except via override or similar to what you're doing above.<br></blockquote><div> </div><div>I will check this better, I will try what you suggested in the following email to this one.<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks.<br>
<br>
 drivers/gpu/drm/bridge/<wbr>synopsys/dw-hdmi.c | 28 ++++++++++++++++++++++++----<br>
 1 file changed, 24 insertions(+), 4 deletions(-)<br>
<br>
diff --git a/drivers/gpu/drm/bridge/<wbr>synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/<wbr>synopsys/dw-hdmi.c<br>
index 9fe407f49986..2516a1c18a10 100644<br>
--- a/drivers/gpu/drm/bridge/<wbr>synopsys/dw-hdmi.c<br>
+++ b/drivers/gpu/drm/bridge/<wbr>synopsys/dw-hdmi.c<br>
@@ -1918,10 +1918,7 @@ static int dw_hdmi_connector_get_modes(<wbr>struct drm_connector *connector)<br>
                dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n",<br>
                        edid->width_cm, edid->height_cm);<br>
<br>
-               hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid);<br>
-               hdmi->sink_has_audio = drm_detect_monitor_audio(edid)<wbr>;<br>
                drm_mode_connector_update_<wbr>edid_property(connector, edid);<br>
-               cec_notifier_set_phys_addr_<wbr>from_edid(hdmi->cec_notifier, edid);<br>
                ret = drm_add_edid_modes(connector, edid);<br>
                /* Store the ELD */<br>
                drm_edid_to_eld(connector, edid);<br>
@@ -1933,6 +1930,29 @@ static int dw_hdmi_connector_get_modes(<wbr>struct drm_connector *connector)<br>
        return ret;<br>
 }<br>
<br>
+static int dw_hdmi_connector_fill_modes(<wbr>struct drm_connector *connector,<br>
+                                       uint32_t maxX, uint32_t maxY)<br>
+{<br>
+       struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,<br>
+                                           connector);<br>
+       int ret;<br>
+<br>
+       ret = drm_helper_probe_single_<wbr>connector_modes(connector, maxX, maxY);<br>
+<br>
+       if (connector->edid_blob_ptr) {<br>
+               struct edid *edid = (void *)connector->edid_blob_ptr-><wbr>data;<br>
+<br>
+               hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid);<br>
+               hdmi->sink_has_audio = drm_detect_monitor_audio(edid)<wbr>;<br>
+               cec_notifier_set_phys_addr_<wbr>from_edid(hdmi->cec_notifier, edid);<br>
+       } else {<br>
+               hdmi->sink_is_hdmi = false;<br>
+               hdmi->sink_has_audio = false;<br>
+       }<br>
+<br>
+       return ret;<br>
+}<br>
+<br>
 static void dw_hdmi_connector_force(struct drm_connector *connector)<br>
 {<br>
        struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,<br>
@@ -1946,7 +1966,7 @@ static void dw_hdmi_connector_force(struct drm_connector *connector)<br>
 }<br>
<br>
 static const struct drm_connector_funcs dw_hdmi_connector_funcs = {<br>
-       .fill_modes = drm_helper_probe_single_<wbr>connector_modes,<br>
+       .fill_modes = dw_hdmi_connector_fill_modes,<br>
        .detect = dw_hdmi_connector_detect,<br>
        .destroy = drm_connector_cleanup,<br>
        .force = dw_hdmi_connector_force,<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
--<br>
RMK's Patch system: <a href="http://www.armlinux.org.uk/developer/patches/" rel="noreferrer" target="_blank">http://www.armlinux.org.uk/<wbr>developer/patches/</a><br>
FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up<br>
According to <a href="http://speedtest.net" rel="noreferrer" target="_blank">speedtest.net</a>: 8.21Mbps down 510kbps up<br>
</div></div></blockquote></div><br></div></div></div></div>