On 18/05/2026 20:01, Jonas Karlman wrote:
> The CEC notifier is being unregistered when the bridge detach,
> something that happens earlier than normal connector cleanup.
> 
> Change to unregister the CEC notifier at connector cleanup, in the
> connector .destroy() func, to align the lifetime of the connector and
> the CEC notifier and closer match a drmres handled generic CEC notifier.
> 
> Tested-by: Diederik de Haas <[email protected]>  # Rock64, RockPro64, 
> Quartz64-B
> Signed-off-by: Jonas Karlman <[email protected]>

Acked-by: Hans Verkuil <[email protected]>

Regards,

        Hans

> ---
> v7: No change
> v6: Collect t-b tag
> v5: New patch
> ---
>  drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 16 +++++-----------
>  1 file changed, 5 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c 
> b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> index cbbd15578042..5fd26ff8f55b 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> @@ -2532,6 +2532,11 @@ static void dw_hdmi_connector_destroy(struct 
> drm_connector *connector)
>  {
>       struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, 
> connector);
>  
> +     mutex_lock(&hdmi->cec_notifier_mutex);
> +     cec_notifier_conn_unregister(hdmi->cec_notifier);
> +     hdmi->cec_notifier = NULL;
> +     mutex_unlock(&hdmi->cec_notifier_mutex);
> +
>       drm_connector_cleanup(connector);
>       drm_bridge_put(&hdmi->bridge);
>  }
> @@ -2909,16 +2914,6 @@ static int dw_hdmi_bridge_attach(struct drm_bridge 
> *bridge,
>       return dw_hdmi_connector_create(hdmi);
>  }
>  
> -static void dw_hdmi_bridge_detach(struct drm_bridge *bridge)
> -{
> -     struct dw_hdmi *hdmi = bridge->driver_private;
> -
> -     mutex_lock(&hdmi->cec_notifier_mutex);
> -     cec_notifier_conn_unregister(hdmi->cec_notifier);
> -     hdmi->cec_notifier = NULL;
> -     mutex_unlock(&hdmi->cec_notifier_mutex);
> -}
> -
>  static enum drm_mode_status
>  dw_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
>                         const struct drm_display_info *info,
> @@ -2996,7 +2991,6 @@ static const struct drm_bridge_funcs 
> dw_hdmi_bridge_funcs = {
>       .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
>       .atomic_reset = drm_atomic_helper_bridge_reset,
>       .attach = dw_hdmi_bridge_attach,
> -     .detach = dw_hdmi_bridge_detach,
>       .atomic_check = dw_hdmi_bridge_atomic_check,
>       .atomic_get_output_bus_fmts = dw_hdmi_bridge_atomic_get_output_bus_fmts,
>       .atomic_get_input_bus_fmts = dw_hdmi_bridge_atomic_get_input_bus_fmts,

Reply via email to