mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 11:40:19 -04:00
drm/hisilicon/hibmc: fix the i2c device resource leak when vdac init failed
Currently the driver missed to clean the i2c adapter when vdac init failed.
It may cause resource leak.
Fixes: a0d078d06e ("drm/hisilicon: Features to support reading resolutions from EDID")
Signed-off-by: Baihan Li <libaihan@huawei.com>
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250813094238.3722345-2-shiyongbang@huawei.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
This commit is contained in:
committed by
Dmitry Baryshkov
parent
0f580d5d3d
commit
e5f48bfa2a
@@ -69,6 +69,7 @@ int hibmc_de_init(struct hibmc_drm_private *priv);
|
||||
int hibmc_vdac_init(struct hibmc_drm_private *priv);
|
||||
|
||||
int hibmc_ddc_create(struct drm_device *drm_dev, struct hibmc_vdac *connector);
|
||||
void hibmc_ddc_del(struct hibmc_vdac *vdac);
|
||||
|
||||
int hibmc_dp_init(struct hibmc_drm_private *priv);
|
||||
|
||||
|
||||
@@ -95,3 +95,8 @@ int hibmc_ddc_create(struct drm_device *drm_dev, struct hibmc_vdac *vdac)
|
||||
|
||||
return i2c_bit_add_bus(&vdac->adapter);
|
||||
}
|
||||
|
||||
void hibmc_ddc_del(struct hibmc_vdac *vdac)
|
||||
{
|
||||
i2c_del_adapter(&vdac->adapter);
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ static void hibmc_connector_destroy(struct drm_connector *connector)
|
||||
{
|
||||
struct hibmc_vdac *vdac = to_hibmc_vdac(connector);
|
||||
|
||||
i2c_del_adapter(&vdac->adapter);
|
||||
hibmc_ddc_del(vdac);
|
||||
drm_connector_cleanup(connector);
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv)
|
||||
ret = drmm_encoder_init(dev, encoder, NULL, DRM_MODE_ENCODER_DAC, NULL);
|
||||
if (ret) {
|
||||
drm_err(dev, "failed to init encoder: %d\n", ret);
|
||||
return ret;
|
||||
goto err;
|
||||
}
|
||||
|
||||
drm_encoder_helper_add(encoder, &hibmc_encoder_helper_funcs);
|
||||
@@ -121,7 +121,7 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv)
|
||||
&vdac->adapter);
|
||||
if (ret) {
|
||||
drm_err(dev, "failed to init connector: %d\n", ret);
|
||||
return ret;
|
||||
goto err;
|
||||
}
|
||||
|
||||
drm_connector_helper_add(connector, &hibmc_connector_helper_funcs);
|
||||
@@ -131,4 +131,9 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv)
|
||||
connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
hibmc_ddc_del(vdac);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user