mfd: display-serdes: attach dsi in probe according to dsi driver

Signed-off-by: Luo Wei <lw@rock-chips.com>
Change-Id: Ia21da73530deaa4269502664560e85b13b97cb16
This commit is contained in:
Luo Wei
2024-05-25 14:48:21 +08:00
committed by Tao Huang
parent 0bb1c89c19
commit 0fd18c66f6
2 changed files with 39 additions and 39 deletions

View File

@@ -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;

View File

@@ -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;