drm/bridge: attach dsi in probe according to dsi driver

Type: Fix
Redmine ID: N/A
Associated modifications:
    commit d420d65bec ("drm/rockchip: dsi2: optimize drive probe process")
    Change-Id: Ic8782e9902a6133990fca728ab12e530e50b6d68
Test: N/A

Signed-off-by: Zhibin Huang <zhibin.huang@rock-chips.com>
Change-Id: Ia5e8d905e6eb683d78174bb06724261c6301d6e0
This commit is contained in:
Zhibin Huang
2024-05-07 10:40:50 +08:00
committed by Tao Huang
parent 2973c66147
commit 4f35f8e5bc
3 changed files with 49 additions and 25 deletions

View File

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

View File

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

View File

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