From 8f57f5aba4f8d7637125f19f5152cfc8e75788b3 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Thu, 5 Mar 2015 21:38:16 +0200 Subject: [PATCH] drm: omapdrm: Wire up atomic state object scaffolding Hook up the default .reset(), .atomic_duplicate_state() and .atomic_free_state() helpers to ensure that state objects are properly created and destroyed, and call drm_mode_config_reset() at init time to create the initial state objects. Framebuffer reference count also gets maintained automatically by the transitional helpers except for the legacy page flip operation. Maintain it explicitly there. Signed-off-by: Laurent Pinchart Signed-off-by: Tomi Valkeinen --- drivers/gpu/drm/omapdrm/omap_connector.c | 4 ++++ drivers/gpu/drm/omapdrm/omap_crtc.c | 6 ++++++ drivers/gpu/drm/omapdrm/omap_drv.c | 2 ++ drivers/gpu/drm/omapdrm/omap_plane.c | 5 +++++ 4 files changed, 17 insertions(+) diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c index cd1b10d660acd..d170f0cb1aa97 100644 --- a/drivers/gpu/drm/omapdrm/omap_connector.c +++ b/drivers/gpu/drm/omapdrm/omap_connector.c @@ -17,6 +17,7 @@ * this program. If not, see . */ +#include #include #include @@ -260,9 +261,12 @@ struct drm_encoder *omap_connector_attached_encoder( static const struct drm_connector_funcs omap_connector_funcs = { .dpms = drm_helper_connector_dpms, + .reset = drm_atomic_helper_connector_reset, .detect = omap_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, .destroy = omap_connector_destroy, + .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, + .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, }; static const struct drm_connector_helper_funcs omap_connector_helper_funcs = { diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c index 0359a67f8f8dd..5f4f5ad93345b 100644 --- a/drivers/gpu/drm/omapdrm/omap_crtc.c +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c @@ -19,6 +19,8 @@ #include +#include +#include #include #include #include @@ -742,6 +744,7 @@ static int omap_crtc_page_flip(struct drm_crtc *crtc, omap_crtc->flip_event = event; omap_crtc->flip_state = OMAP_PAGE_FLIP_WAIT; + drm_atomic_set_fb_for_plane(primary->state, fb); primary->fb = fb; spin_unlock_irqrestore(&dev->event_lock, flags); @@ -771,10 +774,13 @@ static int omap_crtc_set_property(struct drm_crtc *crtc, } static const struct drm_crtc_funcs omap_crtc_funcs = { + .reset = drm_atomic_helper_crtc_reset, .set_config = drm_crtc_helper_set_config, .destroy = omap_crtc_destroy, .page_flip = omap_crtc_page_flip, .set_property = omap_crtc_set_property, + .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, + .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, }; static const struct drm_crtc_helper_funcs omap_crtc_helper_funcs = { diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index dbd3046912815..5bf4b2b711268 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c @@ -350,6 +350,8 @@ static int omap_modeset_init(struct drm_device *dev) dev->mode_config.funcs = &omap_mode_config_funcs; + drm_mode_config_reset(dev); + return 0; } diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c index 57d5b035d078d..533dcc15f03c6 100644 --- a/drivers/gpu/drm/omapdrm/omap_plane.c +++ b/drivers/gpu/drm/omapdrm/omap_plane.c @@ -17,6 +17,8 @@ * this program. If not, see . */ +#include + #include "omap_dmm_tiler.h" #include "omap_drv.h" @@ -287,8 +289,11 @@ int omap_plane_set_property(struct drm_plane *plane, static const struct drm_plane_funcs omap_plane_funcs = { .update_plane = omap_plane_update, .disable_plane = omap_plane_disable, + .reset = drm_atomic_helper_plane_reset, .destroy = omap_plane_destroy, .set_property = omap_plane_set_property, + .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, + .atomic_destroy_state = drm_atomic_helper_plane_destroy_state, }; static void omap_plane_error_irq(struct omap_drm_irq *irq, uint32_t irqstatus) -- 2.39.5