Hi , At 2025-04-25 02:59:08, "Luca Ceresoli" <luca.ceres...@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.ceres...@bootlin.com> > >--- > >Cc: Adam Ford <aford...@gmail.com> >Cc: Adrien Grassein <adrien.grass...@gmail.com> >Cc: Aleksandr Mishin <amis...@t-argos.ru> >Cc: Andy Yan <andy....@rock-chips.com> >Cc: AngeloGioacchino Del Regno <angelogioacchino.delre...@collabora.com> >Cc: Benson Leung <ble...@chromium.org> >Cc: Biju Das <biju.das...@bp.renesas.com> >Cc: Christoph Fritz <chf.fr...@googlemail.com> >Cc: Cristian Ciocaltea <cristian.ciocal...@collabora.com> >Cc: Detlev Casanova <detlev.casan...@collabora.com> >Cc: Dharma Balasubiramani <dharm...@microchip.com> >Cc: Guenter Roeck <gro...@chromium.org> >Cc: Heiko Stuebner <he...@sntech.de> >Cc: Jani Nikula <jani.nik...@intel.com> >Cc: Janne Grunau <j...@jannau.net> >Cc: Jerome Brunet <jbru...@baylibre.com> >Cc: Jesse Van Gavere <jesse...@gmail.com> >Cc: Kevin Hilman <khil...@baylibre.com> >Cc: Kieran Bingham <kieran.bingham+rene...@ideasonboard.com> >Cc: Liu Ying <victor....@nxp.com> >Cc: Manikandan Muralidharan <manikanda...@microchip.com> >Cc: Martin Blumenstingl <martin.blumensti...@googlemail.com> >Cc: Matthias Brugger <matthias....@gmail.com> >Cc: Philipp Zabel <p.za...@pengutronix.de> >Cc: Phong LE <p...@baylibre.com> >Cc: Sasha Finkelstein <fnkl.ker...@gmail.com> >Cc: Sugar Zhang <sugar.zh...@rock-chips.com> >Cc: Sui Jingfeng <sui.jingf...@linux.dev> >Cc: Tomi Valkeinen <tomi.valkeinen+rene...@ideasonboard.com> >Cc: Vitalii Mordan <mor...@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