summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorEric Nelson <eric.nelson@boundarydevices.com>2014-01-08 17:38:58 -0700
committerTroy Kisky <troy.kisky@boundarydevices.com>2014-04-24 18:59:19 -0700
commitdc0f277b0279649103be488fb03b4b4788b23d08 (patch)
treebbb17032e679b3f18e68da4428154dc7e4a7ca39 /drivers/video
parent3b75203cf39a2fcd113e124eb05b7ac4b92eb302 (diff)
mxc_hdmi: default to keep-alive (don't detect disconnect)
Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/mxc/mxc_hdmi.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c
index cb07abdd43d0..bf0a588a0830 100644
--- a/drivers/video/mxc/mxc_hdmi.c
+++ b/drivers/video/mxc/mxc_hdmi.c
@@ -941,6 +941,9 @@ static u8 hdmi_edid_i2c_read(struct mxc_hdmi *hdmi,
return data;
}
+static int keepalive=1;
+module_param(keepalive, int, 0644);
+MODULE_PARM_DESC(keepalive, "Allow only CEA modes");
/* "Power-down enable (active low)"
* That mean that power up == 1! */
@@ -1981,6 +1984,7 @@ static void hotplug_worker(struct work_struct *work)
u32 hdmi_phy_stat0, hdmi_phy_pol0, hdmi_phy_mask0;
unsigned long flags;
char event_string[32];
+ int isalive = 0;
char *envp[] = { event_string, NULL };
@@ -2007,7 +2011,10 @@ static void hotplug_worker(struct work_struct *work)
#ifdef CONFIG_MXC_HDMI_CEC
mxc_hdmi_cec_handle(0x80);
#endif
- } else {
+ if (keepalive)
+ hdmi_writeb(HDMI_DVI_STAT, HDMI_PHY_POL0);
+ isalive=1;
+ } else if (!keepalive) {
/* Plugout event */
dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
hdmi_set_cable_state(0);
@@ -2026,16 +2033,18 @@ static void hotplug_worker(struct work_struct *work)
* completed before next interrupt processed */
spin_lock_irqsave(&hdmi->irq_lock, flags);
- /* Re-enable HPD interrupts */
- hdmi_phy_mask0 = hdmi_readb(HDMI_PHY_MASK0);
- hdmi_phy_mask0 &= ~HDMI_DVI_STAT;
- hdmi_writeb(hdmi_phy_mask0, HDMI_PHY_MASK0);
+ if (!(keepalive || isalive)) {
+ /* Re-enable HPD interrupts */
+ hdmi_phy_mask0 = hdmi_readb(HDMI_PHY_MASK0);
+ hdmi_phy_mask0 &= ~HDMI_DVI_STAT;
+ hdmi_writeb(hdmi_phy_mask0, HDMI_PHY_MASK0);
- /* Unmute interrupts */
- hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
+ /* Unmute interrupts */
+ hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
- if (hdmi_readb(HDMI_IH_FC_STAT2) & HDMI_IH_FC_STAT2_OVERFLOW_MASK)
- mxc_hdmi_clear_overflow(hdmi);
+ if (hdmi_readb(HDMI_IH_FC_STAT2) & HDMI_IH_FC_STAT2_OVERFLOW_MASK)
+ mxc_hdmi_clear_overflow(hdmi);
+ }
spin_unlock_irqrestore(&hdmi->irq_lock, flags);
}