]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/omap: dss: venc: convert to devm_drm_bridge_alloc() API
authorLuca Ceresoli <luca.ceresoli@bootlin.com>
Fri, 9 May 2025 13:53:39 +0000 (15:53 +0200)
committerLuca Ceresoli <luca.ceresoli@bootlin.com>
Wed, 21 May 2025 11:40:09 +0000 (13:40 +0200)
This is the new API for allocating DRM bridges.

Switching from a non-devm to a devm allocation allows removing the kfree()
in the remove function and in the probe error management code, and as a
consequence to simplify the code flow by removing now unnecessary gotos.

Acked-by: Maxime Ripard <mripard@kernel.org>
Link: https://lore.kernel.org/r/20250509-drm-bridge-convert-to-alloc-api-v3-13-b8bc1f16d7aa@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
drivers/gpu/drm/omapdrm/dss/venc.c

index 50349518eda1630400529caf27ca4469bb09fc82..9b5d53dc361e654a2e4009c3c81b726f9ef76ced 100644 (file)
@@ -664,7 +664,6 @@ static const struct drm_bridge_funcs venc_bridge_funcs = {
 
 static void venc_bridge_init(struct venc_device *venc)
 {
-       venc->bridge.funcs = &venc_bridge_funcs;
        venc->bridge.of_node = venc->pdev->dev.of_node;
        venc->bridge.ops = DRM_BRIDGE_OP_MODES;
        venc->bridge.type = DRM_MODE_CONNECTOR_SVIDEO;
@@ -809,9 +808,9 @@ static int venc_probe(struct platform_device *pdev)
        struct venc_device *venc;
        int r;
 
-       venc = kzalloc(sizeof(*venc), GFP_KERNEL);
-       if (!venc)
-               return -ENOMEM;
+       venc = devm_drm_bridge_alloc(&pdev->dev, struct venc_device, bridge, &venc_bridge_funcs);
+       if (IS_ERR(venc))
+               return PTR_ERR(venc);
 
        venc->pdev = pdev;
 
@@ -824,26 +823,24 @@ static int venc_probe(struct platform_device *pdev)
        venc->config = &venc_config_pal_trm;
 
        venc->base = devm_platform_ioremap_resource(pdev, 0);
-       if (IS_ERR(venc->base)) {
-               r = PTR_ERR(venc->base);
-               goto err_free;
-       }
+       if (IS_ERR(venc->base))
+               return PTR_ERR(venc->base);
 
        venc->vdda_dac_reg = devm_regulator_get(&pdev->dev, "vdda");
        if (IS_ERR(venc->vdda_dac_reg)) {
                r = PTR_ERR(venc->vdda_dac_reg);
                if (r != -EPROBE_DEFER)
                        DSSERR("can't get VDDA_DAC regulator\n");
-               goto err_free;
+               return r;
        }
 
        r = venc_get_clocks(venc);
        if (r)
-               goto err_free;
+               return r;
 
        r = venc_probe_of(venc);
        if (r)
-               goto err_free;
+               return r;
 
        pm_runtime_enable(&pdev->dev);
 
@@ -861,8 +858,6 @@ err_uninit_output:
        venc_uninit_output(venc);
 err_pm_disable:
        pm_runtime_disable(&pdev->dev);
-err_free:
-       kfree(venc);
        return r;
 }
 
@@ -875,8 +870,6 @@ static void venc_remove(struct platform_device *pdev)
        venc_uninit_output(venc);
 
        pm_runtime_disable(&pdev->dev);
-
-       kfree(venc);
 }
 
 static __maybe_unused int venc_runtime_suspend(struct device *dev)