[PATCH v2 01/34] drm: convert many bridge drivers from devm_kzalloc() to devm_drm_bridge_alloc() API

Andy Yan andyshrk at 163.com
Mon Apr 28 05:44:03 PDT 2025


Hi ,

At 2025-04-25 02:59:08, "Luca Ceresoli" <luca.ceresoli at bootlin.com> wrote:
>devm_drm_bridge_alloc() is the new API to be used for allocating (and
>partially initializing) a private driver struct embedding a struct
>drm_bridge.
>
>For many drivers having a simple code flow in the probe function, this
>commit does a mass conversion automatically with the following semantic
>patch. The changes have been reviewed manually for correctness as well as
>to find any false positives.
>
>  @@
>  type T;
>  identifier C;
>  identifier BR;
>  expression DEV;
>  expression FUNCS;
>  @@
>  -T *C;
>  +T *C;
>   ...
>  (
>  -C = devm_kzalloc(DEV, ...);
>  -if (!C)
>  -    return -ENOMEM;
>  +C = devm_drm_bridge_alloc(DEV, T, BR, FUNCS);
>  +if (IS_ERR(C))
>  +     return PTR_ERR(C);
>  |
>  -C = devm_kzalloc(DEV, ...);
>  -if (!C)
>  -    return ERR_PTR(-ENOMEM);
>  +C = devm_drm_bridge_alloc(DEV, T, BR, FUNCS);
>  +if (IS_ERR(C))
>  +     return PTR_ERR(C);
>  )
>   ...
>  -C->BR.funcs = FUNCS;
>
>Signed-off-by: Luca Ceresoli <luca.ceresoli at bootlin.com>
>
>---
>
>Cc: Adam Ford <aford173 at gmail.com>
>Cc: Adrien Grassein <adrien.grassein at gmail.com>
>Cc: Aleksandr Mishin <amishin at t-argos.ru>
>Cc: Andy Yan <andy.yan at rock-chips.com>
>Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>Cc: Benson Leung <bleung at chromium.org>
>Cc: Biju Das <biju.das.jz at bp.renesas.com>
>Cc: Christoph Fritz <chf.fritz at googlemail.com>
>Cc: Cristian Ciocaltea <cristian.ciocaltea at collabora.com>
>Cc: Detlev Casanova <detlev.casanova at collabora.com>
>Cc: Dharma Balasubiramani <dharma.b at microchip.com>
>Cc: Guenter Roeck <groeck at chromium.org>
>Cc: Heiko Stuebner <heiko at sntech.de>
>Cc: Jani Nikula <jani.nikula at intel.com>
>Cc: Janne Grunau <j at jannau.net>
>Cc: Jerome Brunet <jbrunet at baylibre.com>
>Cc: Jesse Van Gavere <jesseevg at gmail.com>
>Cc: Kevin Hilman <khilman at baylibre.com>
>Cc: Kieran Bingham <kieran.bingham+renesas at ideasonboard.com>
>Cc: Liu Ying <victor.liu at nxp.com>
>Cc: Manikandan Muralidharan <manikandan.m at microchip.com>
>Cc: Martin Blumenstingl <martin.blumenstingl at googlemail.com>
>Cc: Matthias Brugger <matthias.bgg at gmail.com>
>Cc: Philipp Zabel <p.zabel at pengutronix.de>
>Cc: Phong LE <ple at baylibre.com>
>Cc: Sasha Finkelstein <fnkl.kernel at gmail.com>
>Cc: Sugar Zhang <sugar.zhang at rock-chips.com>
>Cc: Sui Jingfeng <sui.jingfeng at linux.dev>
>Cc: Tomi Valkeinen <tomi.valkeinen+renesas at ideasonboard.com>
>Cc: Vitalii Mordan <mordan at ispras.ru>
>
>Changed in v2:
>- added missing PTR_ERR() in the second spatch alternative
>---
> drivers/gpu/drm/adp/adp-mipi.c                      |  8 ++++----
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c        |  9 ++++-----
> drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c  |  9 ++++-----
> drivers/gpu/drm/bridge/aux-bridge.c                 |  9 ++++-----
> drivers/gpu/drm/bridge/aux-hpd-bridge.c             |  9 +++++----
> drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c |  8 ++++----
> drivers/gpu/drm/bridge/chipone-icn6211.c            |  9 ++++-----
> drivers/gpu/drm/bridge/chrontel-ch7033.c            |  8 ++++----
> drivers/gpu/drm/bridge/cros-ec-anx7688.c            |  9 ++++-----
> drivers/gpu/drm/bridge/fsl-ldb.c                    |  7 +++----
> drivers/gpu/drm/bridge/imx/imx-legacy-bridge.c      |  9 ++++-----
> drivers/gpu/drm/bridge/imx/imx8mp-hdmi-pvi.c        | 10 ++++------
> drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c     |  8 ++++----
> drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c        |  8 ++++----
> drivers/gpu/drm/bridge/ite-it6263.c                 |  9 ++++-----
> drivers/gpu/drm/bridge/ite-it6505.c                 |  9 ++++-----
> drivers/gpu/drm/bridge/ite-it66121.c                |  9 ++++-----
> drivers/gpu/drm/bridge/lontium-lt8912b.c            |  9 ++++-----
> drivers/gpu/drm/bridge/lontium-lt9211.c             |  8 +++-----
> drivers/gpu/drm/bridge/lontium-lt9611.c             |  9 ++++-----
> drivers/gpu/drm/bridge/lvds-codec.c                 |  9 ++++-----
> drivers/gpu/drm/bridge/microchip-lvds.c             |  8 ++++----
> drivers/gpu/drm/bridge/nwl-dsi.c                    |  8 ++++----
> drivers/gpu/drm/bridge/parade-ps8622.c              |  9 ++++-----
> drivers/gpu/drm/bridge/parade-ps8640.c              |  9 ++++-----
> drivers/gpu/drm/bridge/sii9234.c                    |  9 ++++-----
> drivers/gpu/drm/bridge/sil-sii8620.c                |  9 ++++-----
> drivers/gpu/drm/bridge/simple-bridge.c              | 10 ++++------
> drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c        |  8 ++++----
> drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c       |  8 ++++----
> drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c      |  8 ++++----
> drivers/gpu/drm/bridge/tc358762.c                   |  9 ++++-----
> drivers/gpu/drm/bridge/tc358764.c                   |  9 ++++-----
> drivers/gpu/drm/bridge/tc358768.c                   |  9 ++++-----
> drivers/gpu/drm/bridge/tc358775.c                   |  9 ++++-----
> drivers/gpu/drm/bridge/thc63lvd1024.c               |  8 ++++----
> drivers/gpu/drm/bridge/ti-dlpc3433.c                |  9 ++++-----
> drivers/gpu/drm/bridge/ti-tdp158.c                  |  8 ++++----
> drivers/gpu/drm/bridge/ti-tfp410.c                  |  9 ++++-----
> drivers/gpu/drm/bridge/ti-tpd12s015.c               |  9 ++++-----
> drivers/gpu/drm/mediatek/mtk_dp.c                   |  9 ++++-----
> drivers/gpu/drm/mediatek/mtk_dpi.c                  |  9 ++++-----
> drivers/gpu/drm/mediatek/mtk_dsi.c                  |  9 ++++-----
> drivers/gpu/drm/mediatek/mtk_hdmi.c                 |  9 ++++-----
> drivers/gpu/drm/meson/meson_encoder_cvbs.c          | 12 ++++++------
> drivers/gpu/drm/meson/meson_encoder_dsi.c           | 12 ++++++------
> drivers/gpu/drm/meson/meson_encoder_hdmi.c          | 12 ++++++------
> drivers/gpu/drm/renesas/rcar-du/rcar_lvds.c         |  9 ++++-----
> drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c      | 10 ++++------
> 49 files changed, 201 insertions(+), 237 deletions(-)
>

......

> 
>@@ -202,9 +203,6 @@ static int simple_bridge_probe(struct platform_device *pdev)
> 	if (IS_ERR(sbridge->enable))
> 		return dev_err_probe(&pdev->dev, PTR_ERR(sbridge->enable),
> 				     "Unable to retrieve enable GPIO\n");
>-
>-	/* Register the bridge. */
>-	sbridge->bridge.funcs = &simple_bridge_bridge_funcs;
> 	sbridge->bridge.of_node = pdev->dev.of_node;
> 	sbridge->bridge.timings = sbridge->info->timings;
> 
>diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
>index 5e5f8c2f95be1f5c4633f1093b17a00f9425bb37..9b1dfdb5e7ee528c876c01916c9821d550cad679 100644
>--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
>+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
>@@ -1045,9 +1045,10 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev,
> 		return ERR_PTR(-ENODEV);
> 	}
> 
>-	hdmi = devm_kzalloc(dev, sizeof(*hdmi), GFP_KERNEL);
>-	if (!hdmi)
>-		return ERR_PTR(-ENOMEM);
>+	hdmi = devm_drm_bridge_alloc(dev, struct dw_hdmi_qp, bridge,
>+				     &dw_hdmi_qp_bridge_funcs);
>+	if (IS_ERR(hdmi))
>+		return PTR_ERR(hdmi);

           This should return hdmi or ERR_CAST(hdmi);


> 
> 	hdmi->dev = dev;
> 
>@@ -1073,7 +1074,6 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev,
> 		return ERR_PTR(ret);
> 
> 	hdmi->bridge.driver_private = hdmi;
>-	hdmi->bridge.funcs = &dw_hdmi_qp_bridge_funcs;
> 	hdmi->bridge.ops = DRM_BRIDGE_OP_DETECT |
> 			   DRM_BRIDGE_OP_EDID |
> 			   DRM_BRIDGE_OP_HDMI |
>diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
>index b08ada920a501d6a62f39581944a87019f5e5c15..87886235b8d3a85e0711f7763d048ad9eefd159a 100644
>--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
>+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
>@@ -1194,9 +1194,10 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
> 	struct dw_mipi_dsi *dsi;
> 	int ret;
> 
>-	dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL);
>-	if (!dsi)
>-		return ERR_PTR(-ENOMEM);
>+	dsi = devm_drm_bridge_alloc(dev, struct dw_mipi_dsi, bridge,
>+				    &dw_mipi_dsi_bridge_funcs);
>+	if (IS_ERR(dsi))
>+		return PTR_ERR(dsi);


This shoud return dsi or ERR_CAST(dsi);
> 
> 	dsi->dev = dev;
> 	dsi->plat_data = plat_data;
>@@ -1265,7 +1266,6 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
> 	}
> 
> 	dsi->bridge.driver_private = dsi;
>-	dsi->bridge.funcs = &dw_mipi_dsi_bridge_funcs;
> 	dsi->bridge.of_node = pdev->dev.of_node;
> 
> 	return dsi;
>diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
>index c76f5f2e74d14bd372f969c6c7832aa57f80772b..9f694f72b521912f5d4af46f2df2fc0fe3f776ea 100644
>--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
>+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
>@@ -914,9 +914,10 @@ __dw_mipi_dsi2_probe(struct platform_device *pdev,
> 	struct dw_mipi_dsi2 *dsi2;
> 	int ret;
> 
>-	dsi2 = devm_kzalloc(dev, sizeof(*dsi2), GFP_KERNEL);
>-	if (!dsi2)
>-		return ERR_PTR(-ENOMEM);
>+	dsi2 = devm_drm_bridge_alloc(dev, struct dw_mipi_dsi2, bridge,
>+				     &dw_mipi_dsi2_bridge_funcs);
>+	if (IS_ERR(dsi2))
>+		return PTR_ERR(dsi2);

This should return dsi2 or ERR_CAST(dis2);

> 
> 	dsi2->dev = dev;
> 	dsi2->plat_data = plat_data;
>@@ -981,7 +982,6 @@ __dw_mipi_dsi2_probe(struct platform_device *pdev,
> 	}
> 
> 	dsi2->bridge.driver_private = dsi2;
>-	dsi2->bridge.funcs = &dw_mipi_dsi2_bridge_funcs;
> 	dsi2->bridge.of_node = pdev->dev.of_node;
> 
> 	return dsi2;
>
> 	/* Init host device */
>
>-- 
>2.49.0


More information about the linux-amlogic mailing list