mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-14 11:45:40 -04:00
drm/omap: dss: hdmi5: convert to devm_drm_bridge_alloc() API
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-11-b8bc1f16d7aa@bootlin.com Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
This commit is contained in:
@@ -480,7 +480,6 @@ static const struct drm_bridge_funcs hdmi5_bridge_funcs = {
|
||||
|
||||
static void hdmi5_bridge_init(struct omap_hdmi *hdmi)
|
||||
{
|
||||
hdmi->bridge.funcs = &hdmi5_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;
|
||||
@@ -727,9 +726,9 @@ static int hdmi5_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, &hdmi5_bridge_funcs);
|
||||
if (IS_ERR(hdmi))
|
||||
return PTR_ERR(hdmi);
|
||||
|
||||
hdmi->pdev = pdev;
|
||||
|
||||
@@ -740,25 +739,24 @@ static int hdmi5_probe(struct platform_device *pdev)
|
||||
|
||||
r = hdmi5_probe_of(hdmi);
|
||||
if (r)
|
||||
goto err_free;
|
||||
return r;
|
||||
|
||||
r = hdmi_wp_init(pdev, &hdmi->wp, 5);
|
||||
if (r)
|
||||
goto err_free;
|
||||
return r;
|
||||
|
||||
r = hdmi_phy_init(pdev, &hdmi->phy, 5);
|
||||
if (r)
|
||||
goto err_free;
|
||||
return r;
|
||||
|
||||
r = hdmi5_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,
|
||||
@@ -766,7 +764,7 @@ static int hdmi5_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");
|
||||
@@ -774,7 +772,7 @@ static int hdmi5_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);
|
||||
@@ -793,8 +791,6 @@ static int hdmi5_probe(struct platform_device *pdev)
|
||||
hdmi5_uninit_output(hdmi);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_free:
|
||||
kfree(hdmi);
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -807,8 +803,6 @@ static void hdmi5_remove(struct platform_device *pdev)
|
||||
hdmi5_uninit_output(hdmi);
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
kfree(hdmi);
|
||||
}
|
||||
|
||||
static const struct of_device_id hdmi_of_match[] = {
|
||||
|
||||
Reference in New Issue
Block a user