imx-drm: fix hdmi hotplug detection initial state
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 18 Apr 2014 09:46:45 +0000 (10:46 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Apr 2014 23:13:56 +0000 (16:13 -0700)
The initial state at boot is assumed to be disconnected, and we hope
to receive an interrupt to update the status.  Let's be more explicit
about the current state - reading the PHY status register tells us
the current level of the hotplug signal, which we can report back in
the _detect() method.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/imx-drm/imx-hdmi.c

index 0e63821..886a0d4 100644 (file)
@@ -120,8 +120,6 @@ struct imx_hdmi {
        struct clk *isfr_clk;
        struct clk *iahb_clk;
 
-       enum drm_connector_status connector_status;
-
        struct hdmi_data_info hdmi_data;
        int vic;
 
@@ -1379,7 +1377,9 @@ static enum drm_connector_status imx_hdmi_connector_detect(struct drm_connector
 {
        struct imx_hdmi *hdmi = container_of(connector, struct imx_hdmi,
                                             connector);
-       return hdmi->connector_status;
+
+       return hdmi_readb(hdmi, HDMI_PHY_STAT0) & HDMI_PHY_HPD ?
+               connector_status_connected : connector_status_disconnected;
 }
 
 static int imx_hdmi_connector_get_modes(struct drm_connector *connector)
@@ -1521,7 +1521,6 @@ static irqreturn_t imx_hdmi_irq(int irq, void *dev_id)
 
                        hdmi_modb(hdmi, 0, HDMI_PHY_HPD, HDMI_PHY_POL0);
 
-                       hdmi->connector_status = connector_status_connected;
                        imx_hdmi_poweron(hdmi);
                } else {
                        dev_dbg(hdmi->dev, "EVENT=plugout\n");
@@ -1529,7 +1528,6 @@ static irqreturn_t imx_hdmi_irq(int irq, void *dev_id)
                        hdmi_modb(hdmi, HDMI_PHY_HPD, HDMI_PHY_HPD,
                                HDMI_PHY_POL0);
 
-                       hdmi->connector_status = connector_status_disconnected;
                        imx_hdmi_poweroff(hdmi);
                }
                drm_helper_hpd_irq_event(hdmi->connector.dev);
@@ -1603,7 +1601,6 @@ static int imx_hdmi_bind(struct device *dev, struct device *master, void *data)
                return -ENOMEM;
 
        hdmi->dev = dev;
-       hdmi->connector_status = connector_status_disconnected;
        hdmi->sample_rate = 48000;
        hdmi->ratio = 100;