2020-06-09 18:24:40

by Adrian Ratiu

[permalink] [raw]
Subject: [PATCH v9 04/11] drm: bridge: dw_mipi_dsi: remove bind/unbind API

The DW mipi-dsi bind/unbind API was only used to attach the bridge to
the encoder in the Rockchip driver, but with the addition of i.MX6 it
gets more complicated because the i.MX6 part of the bridge is another
bridge in itself which needs to daisy chain to the dw-mipi-dsi core.

So, instead of extending this API to allow daisy-chaining bridges and
risk having trouble with multiple connectors added by various bridges
just delete it and let the DW core bridge be accesed by SoC-specific
parts via the of_drm_find_bridge() API.

This just fixes the Rockchip driver for the bind() deprecation, it
doesn't convert it to a proper bridge daisy-chain with simple encoder
and bridge .attach call-backs, that refactoring work should be done
separately (and the i.MX6 driver can be used as reference).

Suggested-by: Laurent Pinchart <[email protected]>
Signed-off-by: Adrian Ratiu <[email protected]>
---
New in v9.
---
drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 22 -------------------
.../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 7 +++---
2 files changed, 3 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
index 16fd87055e7b7..70df0578cbe7b 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
@@ -1453,28 +1453,6 @@ void dw_mipi_dsi_remove(struct dw_mipi_dsi *dsi)
}
EXPORT_SYMBOL_GPL(dw_mipi_dsi_remove);

-/*
- * Bind/unbind API, used from platforms based on the component framework.
- */
-int dw_mipi_dsi_bind(struct dw_mipi_dsi *dsi, struct drm_encoder *encoder)
-{
- int ret;
-
- ret = drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
- if (ret) {
- DRM_ERROR("Failed to initialize bridge with drm\n");
- return ret;
- }
-
- return ret;
-}
-EXPORT_SYMBOL_GPL(dw_mipi_dsi_bind);
-
-void dw_mipi_dsi_unbind(struct dw_mipi_dsi *dsi)
-{
-}
-EXPORT_SYMBOL_GPL(dw_mipi_dsi_unbind);
-
MODULE_AUTHOR("Chris Zhong <[email protected]>");
MODULE_AUTHOR("Philippe Cornu <[email protected]>");
MODULE_DESCRIPTION("DW MIPI DSI host controller driver");
diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
index 3feff0c45b3f7..86f87c7ea03cf 100644
--- a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
@@ -876,6 +876,7 @@ static int dw_mipi_dsi_rockchip_bind(struct device *dev,
{
struct dw_mipi_dsi_rockchip *dsi = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
+ struct drm_bridge *dw_bridge = of_drm_find_bridge(dev->of_node);
struct device *second;
bool master1, master2;
int ret;
@@ -929,9 +930,9 @@ static int dw_mipi_dsi_rockchip_bind(struct device *dev,
return ret;
}

- ret = dw_mipi_dsi_bind(dsi->dmd, &dsi->encoder);
+ ret = drm_bridge_attach(&dsi->encoder, dw_bridge, NULL, 0);
if (ret) {
- DRM_DEV_ERROR(dev, "Failed to bind: %d\n", ret);
+ DRM_DEV_ERROR(dev, "Failed to attach DW DSI bridge: %d\n", ret);
return ret;
}

@@ -947,8 +948,6 @@ static void dw_mipi_dsi_rockchip_unbind(struct device *dev,
if (dsi->is_slave)
return;

- dw_mipi_dsi_unbind(dsi->dmd);
-
clk_disable_unprepare(dsi->pllref_clk);
}

--
2.27.0


2020-06-10 12:24:33

by Yannick FERTRE

[permalink] [raw]
Subject: Re: [PATCH v9 04/11] drm: bridge: dw_mipi_dsi: remove bind/unbind API

Hi Adrian,

thanks for the pach: tested on stm32mp1.

Tested-by: Yannick Fertré <[email protected]>

On 6/9/20 7:49 PM, Adrian Ratiu wrote:
> The DW mipi-dsi bind/unbind API was only used to attach the bridge to
> the encoder in the Rockchip driver, but with the addition of i.MX6 it
> gets more complicated because the i.MX6 part of the bridge is another
> bridge in itself which needs to daisy chain to the dw-mipi-dsi core.
>
> So, instead of extending this API to allow daisy-chaining bridges and
> risk having trouble with multiple connectors added by various bridges
> just delete it and let the DW core bridge be accesed by SoC-specific
> parts via the of_drm_find_bridge() API.
>
> This just fixes the Rockchip driver for the bind() deprecation, it
> doesn't convert it to a proper bridge daisy-chain with simple encoder
> and bridge .attach call-backs, that refactoring work should be done
> separately (and the i.MX6 driver can be used as reference).
>
> Suggested-by: Laurent Pinchart <[email protected]>
> Signed-off-by: Adrian Ratiu <[email protected]>
> ---
> New in v9.
> ---
> drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 22 -------------------
> .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 7 +++---
> 2 files changed, 3 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> index 16fd87055e7b7..70df0578cbe7b 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> @@ -1453,28 +1453,6 @@ void dw_mipi_dsi_remove(struct dw_mipi_dsi *dsi)
> }
> EXPORT_SYMBOL_GPL(dw_mipi_dsi_remove);
>
> -/*
> - * Bind/unbind API, used from platforms based on the component framework.
> - */
> -int dw_mipi_dsi_bind(struct dw_mipi_dsi *dsi, struct drm_encoder *encoder)
> -{
> - int ret;
> -
> - ret = drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
> - if (ret) {
> - DRM_ERROR("Failed to initialize bridge with drm\n");
> - return ret;
> - }
> -
> - return ret;
> -}
> -EXPORT_SYMBOL_GPL(dw_mipi_dsi_bind);
> -
> -void dw_mipi_dsi_unbind(struct dw_mipi_dsi *dsi)
> -{
> -}
> -EXPORT_SYMBOL_GPL(dw_mipi_dsi_unbind);
> -
> MODULE_AUTHOR("Chris Zhong <[email protected]>");
> MODULE_AUTHOR("Philippe Cornu <[email protected]>");
> MODULE_DESCRIPTION("DW MIPI DSI host controller driver");
> diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
> index 3feff0c45b3f7..86f87c7ea03cf 100644
> --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
> +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
> @@ -876,6 +876,7 @@ static int dw_mipi_dsi_rockchip_bind(struct device *dev,
> {
> struct dw_mipi_dsi_rockchip *dsi = dev_get_drvdata(dev);
> struct drm_device *drm_dev = data;
> + struct drm_bridge *dw_bridge = of_drm_find_bridge(dev->of_node);
> struct device *second;
> bool master1, master2;
> int ret;
> @@ -929,9 +930,9 @@ static int dw_mipi_dsi_rockchip_bind(struct device *dev,
> return ret;
> }
>
> - ret = dw_mipi_dsi_bind(dsi->dmd, &dsi->encoder);
> + ret = drm_bridge_attach(&dsi->encoder, dw_bridge, NULL, 0);
> if (ret) {
> - DRM_DEV_ERROR(dev, "Failed to bind: %d\n", ret);
> + DRM_DEV_ERROR(dev, "Failed to attach DW DSI bridge: %d\n", ret);
> return ret;
> }
>
> @@ -947,8 +948,6 @@ static void dw_mipi_dsi_rockchip_unbind(struct device *dev,
> if (dsi->is_slave)
> return;
>
> - dw_mipi_dsi_unbind(dsi->dmd);
> -
> clk_disable_unprepare(dsi->pllref_clk);
> }
>