diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_irq.c')
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_irq.c | 41 | 
1 files changed, 28 insertions, 13 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_irq.c b/drivers/gpu/drm/omapdrm/omap_irq.c index 9263db117ff..f035d2bceae 100644 --- a/drivers/gpu/drm/omapdrm/omap_irq.c +++ b/drivers/gpu/drm/omapdrm/omap_irq.c @@ -45,12 +45,11 @@ static void omap_irq_update(struct drm_device *dev)  	dispc_read_irqenable();        /* flush posted write */  } -void omap_irq_register(struct drm_device *dev, struct omap_drm_irq *irq) +void __omap_irq_register(struct drm_device *dev, struct omap_drm_irq *irq)  {  	struct omap_drm_private *priv = dev->dev_private;  	unsigned long flags; -	dispc_runtime_get();  	spin_lock_irqsave(&list_lock, flags);  	if (!WARN_ON(irq->registered)) { @@ -60,14 +59,21 @@ void omap_irq_register(struct drm_device *dev, struct omap_drm_irq *irq)  	}  	spin_unlock_irqrestore(&list_lock, flags); +} + +void omap_irq_register(struct drm_device *dev, struct omap_drm_irq *irq) +{ +	dispc_runtime_get(); + +	__omap_irq_register(dev, irq); +  	dispc_runtime_put();  } -void omap_irq_unregister(struct drm_device *dev, struct omap_drm_irq *irq) +void __omap_irq_unregister(struct drm_device *dev, struct omap_drm_irq *irq)  {  	unsigned long flags; -	dispc_runtime_get();  	spin_lock_irqsave(&list_lock, flags);  	if (!WARN_ON(!irq->registered)) { @@ -77,6 +83,14 @@ void omap_irq_unregister(struct drm_device *dev, struct omap_drm_irq *irq)  	}  	spin_unlock_irqrestore(&list_lock, flags); +} + +void omap_irq_unregister(struct drm_device *dev, struct omap_drm_irq *irq) +{ +	dispc_runtime_get(); + +	__omap_irq_unregister(dev, irq); +  	dispc_runtime_put();  } @@ -173,7 +187,7 @@ void omap_irq_disable_vblank(struct drm_device *dev, int crtc_id)  	dispc_runtime_put();  } -irqreturn_t omap_irq_handler(DRM_IRQ_ARGS) +irqreturn_t omap_irq_handler(int irq, void *arg)  {  	struct drm_device *dev = (struct drm_device *) arg;  	struct omap_drm_private *priv = dev->dev_private; @@ -261,7 +275,7 @@ int omap_drm_irq_install(struct drm_device *dev)  		mutex_unlock(&dev->struct_mutex);  		return -EBUSY;  	} -	dev->irq_enabled = 1; +	dev->irq_enabled = true;  	mutex_unlock(&dev->struct_mutex);  	/* Before installing handler */ @@ -272,7 +286,7 @@ int omap_drm_irq_install(struct drm_device *dev)  	if (ret < 0) {  		mutex_lock(&dev->struct_mutex); -		dev->irq_enabled = 0; +		dev->irq_enabled = false;  		mutex_unlock(&dev->struct_mutex);  		return ret;  	} @@ -283,7 +297,7 @@ int omap_drm_irq_install(struct drm_device *dev)  	if (ret < 0) {  		mutex_lock(&dev->struct_mutex); -		dev->irq_enabled = 0; +		dev->irq_enabled = false;  		mutex_unlock(&dev->struct_mutex);  		dispc_free_irq(dev);  	} @@ -294,11 +308,12 @@ int omap_drm_irq_install(struct drm_device *dev)  int omap_drm_irq_uninstall(struct drm_device *dev)  {  	unsigned long irqflags; -	int irq_enabled, i; +	bool irq_enabled; +	int i;  	mutex_lock(&dev->struct_mutex);  	irq_enabled = dev->irq_enabled; -	dev->irq_enabled = 0; +	dev->irq_enabled = false;  	mutex_unlock(&dev->struct_mutex);  	/* @@ -307,9 +322,9 @@ int omap_drm_irq_uninstall(struct drm_device *dev)  	if (dev->num_crtcs) {  		spin_lock_irqsave(&dev->vbl_lock, irqflags);  		for (i = 0; i < dev->num_crtcs; i++) { -			DRM_WAKEUP(&dev->vbl_queue[i]); -			dev->vblank_enabled[i] = 0; -			dev->last_vblank[i] = +			wake_up(&dev->vblank[i].queue); +			dev->vblank[i].enabled = false; +			dev->vblank[i].last =  				dev->driver->get_vblank_counter(dev, i);  		}  		spin_unlock_irqrestore(&dev->vbl_lock, irqflags);  | 
