diff options
Diffstat (limited to 'drivers/gpu/drm/drm_irq.c')
| -rw-r--r-- | drivers/gpu/drm/drm_irq.c | 23 | 
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 9be574fbcc2..3830e9e478c 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -291,11 +291,14 @@ static void drm_irq_vgaarb_nokms(void *cookie, bool state)  	if (!dev->irq_enabled)  		return; -	if (state) -		dev->driver->irq_uninstall(dev); -	else { -		dev->driver->irq_preinstall(dev); -		dev->driver->irq_postinstall(dev); +	if (state) { +		if (dev->driver->irq_uninstall) +			dev->driver->irq_uninstall(dev); +	} else { +		if (dev->driver->irq_preinstall) +			dev->driver->irq_preinstall(dev); +		if (dev->driver->irq_postinstall) +			dev->driver->irq_postinstall(dev);  	}  } @@ -338,7 +341,8 @@ int drm_irq_install(struct drm_device *dev)  	DRM_DEBUG("irq=%d\n", drm_dev_to_irq(dev));  	/* Before installing handler */ -	dev->driver->irq_preinstall(dev); +	if (dev->driver->irq_preinstall) +		dev->driver->irq_preinstall(dev);  	/* Install handler */  	if (drm_core_check_feature(dev, DRIVER_IRQ_SHARED)) @@ -363,7 +367,9 @@ int drm_irq_install(struct drm_device *dev)  		vga_client_register(dev->pdev, (void *)dev, drm_irq_vgaarb_nokms, NULL);  	/* After installing handler */ -	ret = dev->driver->irq_postinstall(dev); +	if (dev->driver->irq_postinstall) +		ret = dev->driver->irq_postinstall(dev); +  	if (ret < 0) {  		mutex_lock(&dev->struct_mutex);  		dev->irq_enabled = 0; @@ -416,7 +422,8 @@ int drm_irq_uninstall(struct drm_device *dev)  	if (!drm_core_check_feature(dev, DRIVER_MODESET))  		vga_client_register(dev->pdev, NULL, NULL, NULL); -	dev->driver->irq_uninstall(dev); +	if (dev->driver->irq_uninstall) +		dev->driver->irq_uninstall(dev);  	free_irq(drm_dev_to_irq(dev), dev);  |