diff --git a/drivers/gpu/drm/bridge/ite-it6161.c b/drivers/gpu/drm/bridge/ite-it6161.c index accb2cae8ace..ed4949dbb4e4 100644 --- a/drivers/gpu/drm/bridge/ite-it6161.c +++ b/drivers/gpu/drm/bridge/ite-it6161.c @@ -2183,8 +2183,6 @@ static int it6161_bridge_attach(struct drm_bridge *bridge, goto cleanup_connector; } - DRM_INFO("%s, ret:%d", __func__, it6161_attach_dsi(it6161)); - err = drm_connector_register(&it6161->connector); if (err < 0) { DRM_DEV_ERROR(dev, "Failed to register connector: %d", err); @@ -4030,7 +4028,7 @@ static void hdmi_tx_enable_hdcp(struct it6161 *it6161) } #endif -static bool getHDMITX_LinkStatus() +static bool getHDMITX_LinkStatus(void) { it6161_debug("%s reg0E:0x%02x reg0x61:0x%02x", __func__, it6161_hdmi_tx_read(it6161, REG_TX_SYS_STATUS), it6161_hdmi_tx_read(it6161, REG_TX_AFE_DRV_CTRL));//allen if(B_TX_RXSENDETECT & it6161_hdmi_tx_read(it6161, REG_TX_SYS_STATUS)) { @@ -4669,7 +4667,7 @@ static void setHDMITX_HBRAudio(u8 bAudInterface /*I2S/SPDIF/TDM*/) // it6161_hdmi_tx_write(it6161, REG_TX_SW_RST, rst ); } -static void setHDMITX_DSDAudio() +static void setHDMITX_DSDAudio(void) { // to be continue // u8 rst; @@ -6812,6 +6810,12 @@ static int it6161_i2c_probe(struct i2c_client *i2c_mipi_rx, it6161->bridge.funcs = &it6161_bridge_funcs; drm_bridge_add(&it6161->bridge); + err = it6161_attach_dsi(it6161); + if (err) { + DRM_DEV_ERROR(dev, "failed to attach dsi, ret: %d", err); + goto err_cec; + } + return 0; err_cec: diff --git a/drivers/gpu/drm/bridge/maxim-max96755f.c b/drivers/gpu/drm/bridge/maxim-max96755f.c index d43f550c6892..7d9b1d9413e2 100644 --- a/drivers/gpu/drm/bridge/maxim-max96755f.c +++ b/drivers/gpu/drm/bridge/maxim-max96755f.c @@ -179,21 +179,17 @@ static int max96755f_bridge_attach(struct drm_bridge *bridge, drm_connector_attach_encoder(connector, bridge->encoder); - ser->dsi = max96755f_attach_dsi(ser, ser->dsi_node); - if (IS_ERR(ser->dsi)) - return PTR_ERR(ser->dsi); - return 0; } static void max96755f_bridge_detach(struct drm_bridge *bridge) { - struct max96755f_bridge *ser = to_max96755f_bridge(bridge); +} - if (ser->dsi) { - mipi_dsi_detach(ser->dsi); - mipi_dsi_device_unregister(ser->dsi); - } +static void max96755f_detach_dsi(struct max96755f_bridge *ser) +{ + mipi_dsi_detach(ser->dsi); + mipi_dsi_device_unregister(ser->dsi); } static void max96755f_mipi_dsi_rx_config(struct max96755f_bridge *ser) @@ -548,13 +544,27 @@ static int max96755f_bridge_probe(struct platform_device *pdev) drm_bridge_add(&ser->bridge); + ser->dsi = max96755f_attach_dsi(ser, ser->dsi_node); + if (IS_ERR(ser->dsi)) { + dev_err(ser->dev, "failed to attach dsi\n"); + ret = PTR_ERR(ser->dsi); + goto err_remove_bridge; + } + return 0; + +err_remove_bridge: + drm_bridge_remove(&ser->bridge); + return ret; } static int max96755f_bridge_remove(struct platform_device *pdev) { struct max96755f_bridge *ser = platform_get_drvdata(pdev); + if (ser->dsi) + max96755f_detach_dsi(ser); + drm_bridge_remove(&ser->bridge); return 0; diff --git a/drivers/gpu/drm/bridge/rohm-bu18tl82.c b/drivers/gpu/drm/bridge/rohm-bu18tl82.c index c0e4a26a0ecd..6d31c4352e0e 100644 --- a/drivers/gpu/drm/bridge/rohm-bu18tl82.c +++ b/drivers/gpu/drm/bridge/rohm-bu18tl82.c @@ -169,13 +169,6 @@ static int bu18tl82_bridge_attach(struct drm_bridge *bridge, if (ret) return ret; - if (bu18tl82->sel_mipi) { - /* Attach primary DSI */ - bu18tl82->dsi = bu18tl82_attach_dsi(bu18tl82, bu18tl82->dsi_node); - if (IS_ERR(bu18tl82->dsi)) - return PTR_ERR(bu18tl82->dsi); - } - ret = drm_bridge_attach(bridge->encoder, bu18tl82->bridge, bridge, flags); if (ret) { @@ -191,12 +184,12 @@ static int bu18tl82_bridge_attach(struct drm_bridge *bridge, static void bu18tl82_bridge_detach(struct drm_bridge *bridge) { - struct bu18tl82 *bu18tl82 = bridge_to_bu18tl82(bridge); +} - if (bu18tl82->sel_mipi) { - mipi_dsi_detach(bu18tl82->dsi); - mipi_dsi_device_unregister(bu18tl82->dsi); - } +static void bu18tl82_detach_dsi(struct bu18tl82 *bu18tl82) +{ + mipi_dsi_detach(bu18tl82->dsi); + mipi_dsi_device_unregister(bu18tl82->dsi); } static void bu18tl82_bridge_enable(struct drm_bridge *bridge) @@ -301,13 +294,30 @@ static int bu18tl82_i2c_probe(struct i2c_client *client, drm_bridge_add(&bu18tl82->base); + if (bu18tl82->sel_mipi) { + /* Attach primary DSI */ + bu18tl82->dsi = bu18tl82_attach_dsi(bu18tl82, bu18tl82->dsi_node); + if (IS_ERR(bu18tl82->dsi)) { + dev_err(bu18tl82->dev, "failed to attach dsi\n"); + ret = PTR_ERR(bu18tl82->dsi); + goto err_remove_bridge; + } + } + return 0; + +err_remove_bridge: + drm_bridge_remove(&bu18tl82->base); + return ret; } static void bu18tl82_i2c_remove(struct i2c_client *client) { struct bu18tl82 *bu18tl82 = i2c_get_clientdata(client); + if (bu18tl82->sel_mipi) + bu18tl82_detach_dsi(bu18tl82); + drm_bridge_remove(&bu18tl82->base); }