]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/omap: dss: hdmi4: convert to devm_drm_bridge_alloc() API
authorLuca Ceresoli <luca.ceresoli@bootlin.com>
Fri, 9 May 2025 13:53:36 +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-10-b8bc1f16d7aa@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
drivers/gpu/drm/omapdrm/dss/hdmi4.c

index a3b22952fdc32b5899dae82d413108c5c0a1c3c8..3cd612af24498b057c33eaecb3d43c8df76cd23e 100644 (file)
@@ -505,7 +505,6 @@ static const struct drm_bridge_funcs hdmi4_bridge_funcs = {
 
 static void hdmi4_bridge_init(struct omap_hdmi *hdmi)
 {
-       hdmi->bridge.funcs = &hdmi4_bridge_funcs;
        hdmi->bridge.of_node = hdmi->pdev->dev.of_node;
        hdmi->bridge.ops = DRM_BRIDGE_OP_EDID;
        hdmi->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
@@ -761,9 +760,9 @@ static int hdmi4_probe(struct platform_device *pdev)
        int irq;
        int r;
 
-       hdmi = kzalloc(sizeof(*hdmi), GFP_KERNEL);
-       if (!hdmi)
-               return -ENOMEM;
+       hdmi = devm_drm_bridge_alloc(&pdev->dev, struct omap_hdmi, bridge, &hdmi4_bridge_funcs);
+       if (IS_ERR(hdmi))
+               return PTR_ERR(hdmi);
 
        hdmi->pdev = pdev;
 
@@ -774,25 +773,24 @@ static int hdmi4_probe(struct platform_device *pdev)
 
        r = hdmi4_probe_of(hdmi);
        if (r)
-               goto err_free;
+               return r;
 
        r = hdmi_wp_init(pdev, &hdmi->wp, 4);
        if (r)
-               goto err_free;
+               return r;
 
        r = hdmi_phy_init(pdev, &hdmi->phy, 4);
        if (r)
-               goto err_free;
+               return r;
 
        r = hdmi4_core_init(pdev, &hdmi->core);
        if (r)
-               goto err_free;
+               return r;
 
        irq = platform_get_irq(pdev, 0);
        if (irq < 0) {
                DSSERR("platform_get_irq failed\n");
-               r = -ENODEV;
-               goto err_free;
+               return -ENODEV;
        }
 
        r = devm_request_threaded_irq(&pdev->dev, irq,
@@ -800,7 +798,7 @@ static int hdmi4_probe(struct platform_device *pdev)
                        IRQF_ONESHOT, "OMAP HDMI", hdmi);
        if (r) {
                DSSERR("HDMI IRQ request failed\n");
-               goto err_free;
+               return r;
        }
 
        hdmi->vdda_reg = devm_regulator_get(&pdev->dev, "vdda");
@@ -808,7 +806,7 @@ static int hdmi4_probe(struct platform_device *pdev)
                r = PTR_ERR(hdmi->vdda_reg);
                if (r != -EPROBE_DEFER)
                        DSSERR("can't get VDDA regulator\n");
-               goto err_free;
+               return r;
        }
 
        pm_runtime_enable(&pdev->dev);
@@ -827,8 +825,6 @@ err_uninit_output:
        hdmi4_uninit_output(hdmi);
 err_pm_disable:
        pm_runtime_disable(&pdev->dev);
-err_free:
-       kfree(hdmi);
        return r;
 }
 
@@ -841,8 +837,6 @@ static void hdmi4_remove(struct platform_device *pdev)
        hdmi4_uninit_output(hdmi);
 
        pm_runtime_disable(&pdev->dev);
-
-       kfree(hdmi);
 }
 
 static const struct of_device_id hdmi_of_match[] = {