diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_irq.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_irq.c | 25 |
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 | ||
22 | static DEFINE_SPINLOCK(list_lock); | 23 | static 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 | ||
191 | irqreturn_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 | |||
190 | irqreturn_t omap_irq_handler(int irq, void *arg) | 215 | irqreturn_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; |