[PATCH] drm/ingenic: Convert to Linux IRQ interfaces

Paul Cercueil paul at crapouillou.net
Sat Jul 10 10:04:11 UTC 2021


Hi,

Le sam., juil. 10 2021 at 08:33:47 +0200, Sam Ravnborg 
<sam at ravnborg.org> a écrit :
> Hi Thomas,
> 
> On Tue, Jul 06, 2021 at 09:44:09AM +0200, Thomas Zimmermann wrote:
>>  Drop the DRM IRQ midlayer in favor of Linux IRQ interfaces. DRM's
>>  IRQ helpers are mostly useful for UMS drivers. Modern KMS drivers
>>  don't benefit from using it.
>> 
>>  Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>>  ---
>>   drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 13 +++++++------
>>   1 file changed, 7 insertions(+), 6 deletions(-)
>> 
>>  diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c 
>> b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
>>  index c296472164d9..a09b7da21b53 100644
>>  --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
>>  +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
>>  @@ -33,7 +33,6 @@
>>   #include <drm/drm_fourcc.h>
>>   #include <drm/drm_gem_atomic_helper.h>
>>   #include <drm/drm_gem_framebuffer_helper.h>
>>  -#include <drm/drm_irq.h>
>>   #include <drm/drm_managed.h>
>>   #include <drm/drm_of.h>
>>   #include <drm/drm_panel.h>
>>  @@ -799,8 +798,6 @@ static const struct drm_driver 
>> ingenic_drm_driver_data = {
>>   	.fops			= &ingenic_drm_fops,
>>   	.gem_create_object	= ingenic_drm_gem_create_object,
>>   	DRM_GEM_CMA_DRIVER_OPS,
>>  -
>>  -	.irq_handler		= ingenic_drm_irq_handler,
>>   };
>> 
>>   static const struct drm_plane_funcs 
>> ingenic_drm_primary_plane_funcs = {
>>  @@ -1098,7 +1095,7 @@ static int ingenic_drm_bind(struct device 
>> *dev, bool has_components)
>>   		encoder->possible_clones = clone_mask;
>>   	}
>> 
>>  -	ret = drm_irq_install(drm, irq);
>>  +	ret = request_irq(irq, ingenic_drm_irq_handler, 0, 
>> drm->driver->name, drm);
>> 

Can't you use the devm variant?

>>   	if (ret) {
>>   		dev_err(dev, "Unable to install IRQ handler\n");
>>   		return ret;
>>  @@ -1192,14 +1189,18 @@ static void ingenic_drm_unbind(struct 
>> device *dev)
>>   {
>>   	struct ingenic_drm *priv = dev_get_drvdata(dev);
>>   	struct clk *parent_clk = clk_get_parent(priv->pix_clk);
>>  +	struct drm_device *drm = &priv->drm;
>>  +	struct platform_device *pdev = to_platform_device(drm->dev);
>>  +
>>  +	free_irq(platform_get_irq(pdev, 0), drm);
> 
> The driver was missing a drm_irq_uninstall() so the above code is
> actually a small bug-fix. It should be mentioned in the changelog.
> With this fixed:
> Reviewed-by: Sam Ravnborg <sam at ravnborg.org>
> 
> Note: I expect Paul to review too and apply.

I wasn't Cc'd? :(

-Paul

> 
> 	Sam
> 
>> 
>>   	clk_notifier_unregister(parent_clk, &priv->clock_nb);
>>   	if (priv->lcd_clk)
>>   		clk_disable_unprepare(priv->lcd_clk);
>>   	clk_disable_unprepare(priv->pix_clk);
>> 
>>  -	drm_dev_unregister(&priv->drm);
>>  -	drm_atomic_helper_shutdown(&priv->drm);
>>  +	drm_dev_unregister(drm);
>>  +	drm_atomic_helper_shutdown(drm);
>>   }
>> 
>>   static const struct component_master_ops ingenic_master_ops = {
>>  --
>>  2.32.0




More information about the dri-devel mailing list