On 3/11/26 5:10 AM, Thomas Zimmermann wrote:
> Replace simple-display helpers with regular atomic helpers. Store the
> pipeline elements in struct st7586_device and initialize them as part
> of probing the device. Use mipi-dbi's existing helpers and initializer
> macros where possible.
> 
> Effectively open-codes the modesetting code in the initializer helpers
> of mipi-dbi and simple-display. St7586 requires custom helpers for
> various pipeline elements, and non-freeing cleanup of the pipeline.
> 


...

> +static void st7586_plane_helper_atomic_update(struct drm_plane *plane,
> +                                           struct drm_atomic_state *state)
>  {
> -     struct drm_plane_state *state = pipe->plane.state;
> -     struct drm_shadow_plane_state *shadow_plane_state = 
> to_drm_shadow_plane_state(state);
> -     struct drm_framebuffer *fb = state->fb;
> +     struct drm_plane_state *plane_state = plane->state;
> +     struct drm_shadow_plane_state *shadow_plane_state = 
> to_drm_shadow_plane_state(plane_state);
> +     struct drm_framebuffer *fb = plane_state->fb;
> +     struct drm_plane_state *old_plane_state = 
> drm_atomic_get_old_plane_state(state, plane);
>       struct drm_rect rect;
>       int idx;
>  
> -     if (!pipe->crtc.state->active)
> +     if (!fb)
>               return;
>  
> -     if (!drm_dev_enter(fb->dev, &idx))
> -             return;

What was wrong with returning early here?

> +     if (drm_dev_enter(plane->dev, &idx)) {
> +             if (drm_atomic_helper_damage_merged(old_plane_state, 
> plane_state, &rect))
> +                     st7586_fb_dirty(&shadow_plane_state->data[0], fb, &rect,
> +                                     &shadow_plane_state->fmtcnv_state);
> +             drm_dev_exit(idx);
> +     }
> +}
>  
> -     if (drm_atomic_helper_damage_merged(old_state, state, &rect))
> -             st7586_fb_dirty(&shadow_plane_state->data[0], fb, &rect,
> -                             &shadow_plane_state->fmtcnv_state);

Reply via email to