diff mbox

[v3,3/9] drm: bridge: analogix: Destroy connector when unbinding

Message ID 1491380967-28570-4-git-send-email-jeffy.chen@rock-chips.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jeffy Chen April 5, 2017, 8:29 a.m. UTC
Normally we do this in drm_mode_config_cleanup. But analogix dp's
connector is allocated in bind, and freed after unbind. So we need
to destroy it in unbind to avoid further access.

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---

Changes in v3: None
Changes in v2: None

 drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Andrzej Hajda April 6, 2017, 7:19 a.m. UTC | #1
On 05.04.2017 10:29, Jeffy Chen wrote:
> Normally we do this in drm_mode_config_cleanup. But analogix dp's
> connector is allocated in bind, and freed after unbind. So we need
> to destroy it in unbind to avoid further access.
>
> Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>

Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>

One comment below

> ---
>
> Changes in v3: None
> Changes in v2: None
>
>  drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> index 7b75f82..a96fd55 100644
> --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> @@ -1439,6 +1439,7 @@ void analogix_dp_unbind(struct device *dev, struct device *master,
>  	struct analogix_dp_device *dp = dev_get_drvdata(dev);
>  
>  	analogix_dp_bridge_disable(dp->bridge);

Not related to the patch, but what about bridge,  above it is only
disabled, but not detached, encoder cleanup code should do it but it is
also missing.

Regards
Andrzej

> +	dp->connector.funcs->destroy(&dp->connector);
>  
>  	if (dp->plat_data->panel) {
>  		if (drm_panel_unprepare(dp->plat_data->panel))
Jeffy Chen April 6, 2017, 12:20 p.m. UTC | #2
Hi Andrzej,

On 04/06/2017 03:19 PM, Andrzej Hajda wrote:
> On 05.04.2017 10:29, Jeffy Chen wrote:
>> Normally we do this in drm_mode_config_cleanup. But analogix dp's
>> connector is allocated in bind, and freed after unbind. So we need
>> to destroy it in unbind to avoid further access.
>>
>> Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
>
> Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
>
> One comment below
>
>> ---
>>
>> Changes in v3: None
>> Changes in v2: None
>>
>>   drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>> index 7b75f82..a96fd55 100644
>> --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>> +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>> @@ -1439,6 +1439,7 @@ void analogix_dp_unbind(struct device *dev, struct device *master,
>>   	struct analogix_dp_device *dp = dev_get_drvdata(dev);
>>
>>   	analogix_dp_bridge_disable(dp->bridge);
>
> Not related to the patch, but what about bridge,  above it is only
> disabled, but not detached, encoder cleanup code should do it but it is
> also missing.
right, i should notice there's a drm_encoder_cleanup(dp->encoder) when 
failed to create bridge...thanx for pointing that out :)
>
> Regards
> Andrzej
>
>> +	dp->connector.funcs->destroy(&dp->connector);
>>
>>   	if (dp->plat_data->panel) {
>>   		if (drm_panel_unprepare(dp->plat_data->panel))
>
>
>
>
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
index 7b75f82..a96fd55 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
@@ -1439,6 +1439,7 @@  void analogix_dp_unbind(struct device *dev, struct device *master,
 	struct analogix_dp_device *dp = dev_get_drvdata(dev);
 
 	analogix_dp_bridge_disable(dp->bridge);
+	dp->connector.funcs->destroy(&dp->connector);
 
 	if (dp->plat_data->panel) {
 		if (drm_panel_unprepare(dp->plat_data->panel))