aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_irq.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_irq.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_irq.c b/drivers/gpu/drm/omapdrm/omap_irq.c
index 3eb097efc48..86d88bbc0f0 100644
--- a/drivers/gpu/drm/omapdrm/omap_irq.c
+++ b/drivers/gpu/drm/omapdrm/omap_irq.c
@@ -18,6 +18,7 @@
18 */ 18 */
19 19
20#include "omap_drv.h" 20#include "omap_drv.h"
21#include "drm_fb_helper.h"
21 22
22static DEFINE_SPINLOCK(list_lock); 23static DEFINE_SPINLOCK(list_lock);
23 24
@@ -187,6 +188,30 @@ void omap_irq_disable_vblank(struct drm_device *dev, int crtc_id)
187 dispc_runtime_put(); 188 dispc_runtime_put();
188} 189}
189 190
191irqreturn_t omap_hdmi_hpd_irq_handler(int irq, void *arg)
192{
193 struct drm_device *dev = (struct drm_device *)arg;
194 struct drm_connector *connector;
195 struct omap_drm_private *priv = dev->dev_private;
196 unsigned long flags = 0;
197
198 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
199 if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA) ||
200 (connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)) {
201 connector->status = connector_status_unknown;
202
203 if (priv->fbdev) {
204 spin_lock_irqsave(&list_lock, flags);
205 drm_kms_helper_poll_enable(dev);
206 connector->force = 0;
207 spin_unlock_irqrestore(&list_lock, flags);
208 }
209 }
210 }
211
212 return IRQ_HANDLED;
213}
214
190irqreturn_t omap_irq_handler(int irq, void *arg) 215irqreturn_t omap_irq_handler(int irq, void *arg)
191{ 216{
192 struct drm_device *dev = (struct drm_device *) arg; 217 struct drm_device *dev = (struct drm_device *) arg;