diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.c b/drivers/gpu/drm/sun4i/sun4i_layer.c index d65587d96d9e..7ec6d8131908 100644 --- a/drivers/gpu/drm/sun4i/sun4i_layer.c +++ b/drivers/gpu/drm/sun4i/sun4i_layer.c @@ -16,22 +16,17 @@ #include "sun4i_layer.h" #include "sunxi_engine.h" -static void sun4i_backend_layer_reset(struct drm_plane *plane) +static struct drm_plane_state *sun4i_backend_layer_create_state(struct drm_plane *plane) { struct sun4i_layer_state *state; - if (plane->state) { - state = state_to_sun4i_layer_state(plane->state); - - __drm_atomic_helper_plane_destroy_state(&state->state); - - kfree(state); - plane->state = NULL; - } - state = kzalloc_obj(*state); - if (state) - __drm_atomic_helper_plane_reset(plane, &state->state); + if (!state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_plane_state_init(&state->state, plane); + + return &state->state; } static struct drm_plane_state * @@ -133,7 +128,7 @@ static const struct drm_plane_funcs sun4i_backend_layer_funcs = { .atomic_duplicate_state = sun4i_backend_layer_duplicate_state, .destroy = drm_plane_cleanup, .disable_plane = drm_atomic_helper_disable_plane, - .reset = sun4i_backend_layer_reset, + .atomic_create_state = sun4i_backend_layer_create_state, .update_plane = drm_atomic_helper_update_plane, .format_mod_supported = sun4i_layer_format_mod_supported, };