From 0fd18c66f6f01f03d8eb90be15f4138f2a593d22 Mon Sep 17 00:00:00 2001 From: Luo Wei Date: Sat, 25 May 2024 14:48:21 +0800 Subject: [PATCH] mfd: display-serdes: attach dsi in probe according to dsi driver Signed-off-by: Luo Wei Change-Id: Ia21da73530deaa4269502664560e85b13b97cb16 --- .../mfd/display-serdes/serdes-bridge-split.c | 40 +++++++++---------- drivers/mfd/display-serdes/serdes-bridge.c | 38 +++++++++--------- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/drivers/mfd/display-serdes/serdes-bridge-split.c b/drivers/mfd/display-serdes/serdes-bridge-split.c index 4bb47cbf3f73..a129377bcabc 100644 --- a/drivers/mfd/display-serdes/serdes-bridge-split.c +++ b/drivers/mfd/display-serdes/serdes-bridge-split.c @@ -73,23 +73,10 @@ static int serdes_bridge_split_attach(struct drm_bridge *bridge, return ret; } - if (serdes_bridge_split->sel_mipi) { - dev_info(serdes_bridge_split->dev->parent, "serdes sel_mipi %d\n", - serdes_bridge_split->sel_mipi); - /* Attach primary DSI */ - serdes_bridge_split->dsi = serdes_attach_dsi(serdes_bridge_split, - serdes_bridge_split->remote_node); - if (IS_ERR(serdes_bridge_split->dsi)) - return PTR_ERR(serdes_bridge_split->dsi); - } - if (serdes_bridge_split->next_bridge) { ret = drm_bridge_attach(bridge->encoder, serdes_bridge_split->next_bridge, bridge, flags); if (ret) { - if (serdes_bridge_split->sel_mipi) - mipi_dsi_device_unregister(serdes_bridge_split->dsi); - dev_err(serdes_bridge_split->dev->parent, "failed to attach bridge, ret=%d\n", ret); return ret; @@ -106,14 +93,12 @@ static int serdes_bridge_split_attach(struct drm_bridge *bridge, static void serdes_bridge_split_detach(struct drm_bridge *bridge) { - struct serdes_bridge_split *serdes_bridge_split = to_serdes_bridge_split(bridge); +} - if (serdes_bridge_split->sel_mipi) { - mipi_dsi_detach(serdes_bridge_split->dsi); - mipi_dsi_device_unregister(serdes_bridge_split->dsi); - } - - SERDES_DBG_MFD("%s\n", __func__); +static void serdes_detach_dsi(struct serdes_bridge_split *serdes_bridge_split) +{ + mipi_dsi_detach(serdes_bridge_split->dsi); + mipi_dsi_device_unregister(serdes_bridge_split->dsi); } static void serdes_bridge_split_disable(struct drm_bridge *bridge) @@ -301,6 +286,18 @@ static int serdes_bridge_split_probe(struct platform_device *pdev) drm_bridge_add(&serdes_bridge_split->base_bridge); + if (serdes_bridge_split->sel_mipi) { + dev_info(serdes_bridge_split->dev->parent, "serdes sel_mipi %d\n", + serdes_bridge_split->sel_mipi); + /* Attach primary DSI */ + serdes_bridge_split->dsi = serdes_attach_dsi(serdes_bridge_split, + serdes_bridge_split->remote_node); + if (IS_ERR(serdes_bridge_split->dsi)) { + drm_bridge_remove(&serdes_bridge_split->base_bridge); + return PTR_ERR(serdes_bridge_split->dsi); + } + } + dev_info(dev, "serdes %s, %s successful mipi=%d, of_node=%s\n", serdes->chip_data->name, __func__, serdes_bridge_split->sel_mipi, serdes_bridge_split->base_bridge.of_node->name); @@ -312,6 +309,9 @@ static int serdes_bridge_split_remove(struct platform_device *pdev) { struct serdes_bridge_split *serdes_bridge_split = platform_get_drvdata(pdev); + if (serdes_bridge_split->sel_mipi) + serdes_detach_dsi(serdes_bridge_split); + drm_bridge_remove(&serdes_bridge_split->base_bridge); return 0; diff --git a/drivers/mfd/display-serdes/serdes-bridge.c b/drivers/mfd/display-serdes/serdes-bridge.c index 9d3f8f5a4720..17198da83e58 100644 --- a/drivers/mfd/display-serdes/serdes-bridge.c +++ b/drivers/mfd/display-serdes/serdes-bridge.c @@ -71,22 +71,10 @@ static int serdes_bridge_attach(struct drm_bridge *bridge, return ret; } - if (serdes_bridge->sel_mipi) { - dev_info(serdes_bridge->dev->parent, "serdes sel_mipi %d\n", - serdes_bridge->sel_mipi); - /* Attach primary DSI */ - serdes_bridge->dsi = serdes_attach_dsi(serdes_bridge, serdes_bridge->remote_node); - if (IS_ERR(serdes_bridge->dsi)) - return PTR_ERR(serdes_bridge->dsi); - } - if (serdes_bridge->next_bridge) { ret = drm_bridge_attach(bridge->encoder, serdes_bridge->next_bridge, bridge, flags); if (ret) { - if (serdes_bridge->sel_mipi) - mipi_dsi_device_unregister(serdes_bridge->dsi); - dev_err(serdes_bridge->dev->parent, "failed to attach bridge, ret=%d\n", ret); return ret; @@ -103,14 +91,12 @@ static int serdes_bridge_attach(struct drm_bridge *bridge, static void serdes_bridge_detach(struct drm_bridge *bridge) { - struct serdes_bridge *serdes_bridge = to_serdes_bridge(bridge); +} - if (serdes_bridge->sel_mipi) { - mipi_dsi_detach(serdes_bridge->dsi); - mipi_dsi_device_unregister(serdes_bridge->dsi); - } - - SERDES_DBG_MFD("%s\n", __func__); +static void serdes_detach_dsi(struct serdes_bridge *serdes_bridge) +{ + mipi_dsi_detach(serdes_bridge->dsi); + mipi_dsi_device_unregister(serdes_bridge->dsi); } static void serdes_bridge_disable(struct drm_bridge *bridge) @@ -304,6 +290,17 @@ static int serdes_bridge_probe(struct platform_device *pdev) drm_bridge_add(&serdes_bridge->base_bridge); + if (serdes_bridge->sel_mipi) { + dev_info(serdes_bridge->dev->parent, "serdes sel_mipi %d\n", + serdes_bridge->sel_mipi); + /* Attach primary DSI */ + serdes_bridge->dsi = serdes_attach_dsi(serdes_bridge, serdes_bridge->remote_node); + if (IS_ERR(serdes_bridge->dsi)) { + drm_bridge_remove(&serdes_bridge->base_bridge); + return PTR_ERR(serdes_bridge->dsi); + } + } + dev_info(dev, "serdes %s, serdes_bridge_probe successful mipi=%d, of_node=%s\n", serdes->chip_data->name, serdes_bridge->sel_mipi, serdes_bridge->base_bridge.of_node->name); @@ -315,6 +312,9 @@ static int serdes_bridge_remove(struct platform_device *pdev) { struct serdes_bridge *serdes_bridge = platform_get_drvdata(pdev); + if (serdes_bridge->sel_mipi) + serdes_detach_dsi(serdes_bridge); + drm_bridge_remove(&serdes_bridge->base_bridge); return 0;