diff options
Diffstat (limited to 'drivers/gpu/drm/sun4i/sun4i_layer.c')
-rw-r--r-- | drivers/gpu/drm/sun4i/sun4i_layer.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.c b/drivers/gpu/drm/sun4i/sun4i_layer.c index 78f77af8805a..29631e0efde3 100644 --- a/drivers/gpu/drm/sun4i/sun4i_layer.c +++ b/drivers/gpu/drm/sun4i/sun4i_layer.c | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <drm/drm_atomic_helper.h> | 13 | #include <drm/drm_atomic_helper.h> |
14 | #include <drm/drm_plane_helper.h> | 14 | #include <drm/drm_plane_helper.h> |
15 | #include <drm/drm_gem_framebuffer_helper.h> | ||
15 | #include <drm/drmP.h> | 16 | #include <drm/drmP.h> |
16 | 17 | ||
17 | #include "sun4i_backend.h" | 18 | #include "sun4i_backend.h" |
@@ -92,14 +93,16 @@ static void sun4i_backend_layer_atomic_update(struct drm_plane *plane, | |||
92 | struct sun4i_backend *backend = layer->backend; | 93 | struct sun4i_backend *backend = layer->backend; |
93 | struct sun4i_frontend *frontend = backend->frontend; | 94 | struct sun4i_frontend *frontend = backend->frontend; |
94 | 95 | ||
96 | sun4i_backend_cleanup_layer(backend, layer->id); | ||
97 | |||
95 | if (layer_state->uses_frontend) { | 98 | if (layer_state->uses_frontend) { |
96 | sun4i_frontend_init(frontend); | 99 | sun4i_frontend_init(frontend); |
97 | sun4i_frontend_update_coord(frontend, plane); | 100 | sun4i_frontend_update_coord(frontend, plane); |
98 | sun4i_frontend_update_buffer(frontend, plane); | 101 | sun4i_frontend_update_buffer(frontend, plane); |
99 | sun4i_frontend_update_formats(frontend, plane, | 102 | sun4i_frontend_update_formats(frontend, plane, |
100 | DRM_FORMAT_ARGB8888); | 103 | DRM_FORMAT_XRGB8888); |
101 | sun4i_backend_update_layer_frontend(backend, layer->id, | 104 | sun4i_backend_update_layer_frontend(backend, layer->id, |
102 | DRM_FORMAT_ARGB8888); | 105 | DRM_FORMAT_XRGB8888); |
103 | sun4i_frontend_enable(frontend); | 106 | sun4i_frontend_enable(frontend); |
104 | } else { | 107 | } else { |
105 | sun4i_backend_update_layer_formats(backend, layer->id, plane); | 108 | sun4i_backend_update_layer_formats(backend, layer->id, plane); |
@@ -112,6 +115,7 @@ static void sun4i_backend_layer_atomic_update(struct drm_plane *plane, | |||
112 | } | 115 | } |
113 | 116 | ||
114 | static const struct drm_plane_helper_funcs sun4i_backend_layer_helper_funcs = { | 117 | static const struct drm_plane_helper_funcs sun4i_backend_layer_helper_funcs = { |
118 | .prepare_fb = drm_gem_fb_prepare_fb, | ||
115 | .atomic_disable = sun4i_backend_layer_atomic_disable, | 119 | .atomic_disable = sun4i_backend_layer_atomic_disable, |
116 | .atomic_update = sun4i_backend_layer_atomic_update, | 120 | .atomic_update = sun4i_backend_layer_atomic_update, |
117 | }; | 121 | }; |
@@ -125,10 +129,11 @@ static const struct drm_plane_funcs sun4i_backend_layer_funcs = { | |||
125 | .update_plane = drm_atomic_helper_update_plane, | 129 | .update_plane = drm_atomic_helper_update_plane, |
126 | }; | 130 | }; |
127 | 131 | ||
128 | static const uint32_t sun4i_backend_layer_formats[] = { | 132 | static const uint32_t sun4i_layer_formats[] = { |
129 | DRM_FORMAT_ARGB8888, | 133 | DRM_FORMAT_ARGB8888, |
130 | DRM_FORMAT_ARGB4444, | 134 | DRM_FORMAT_ARGB4444, |
131 | DRM_FORMAT_ARGB1555, | 135 | DRM_FORMAT_ARGB1555, |
136 | DRM_FORMAT_BGRX8888, | ||
132 | DRM_FORMAT_RGBA5551, | 137 | DRM_FORMAT_RGBA5551, |
133 | DRM_FORMAT_RGBA4444, | 138 | DRM_FORMAT_RGBA4444, |
134 | DRM_FORMAT_RGB888, | 139 | DRM_FORMAT_RGB888, |
@@ -154,8 +159,8 @@ static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm, | |||
154 | /* possible crtcs are set later */ | 159 | /* possible crtcs are set later */ |
155 | ret = drm_universal_plane_init(drm, &layer->plane, 0, | 160 | ret = drm_universal_plane_init(drm, &layer->plane, 0, |
156 | &sun4i_backend_layer_funcs, | 161 | &sun4i_backend_layer_funcs, |
157 | sun4i_backend_layer_formats, | 162 | sun4i_layer_formats, |
158 | ARRAY_SIZE(sun4i_backend_layer_formats), | 163 | ARRAY_SIZE(sun4i_layer_formats), |
159 | NULL, type, NULL); | 164 | NULL, type, NULL); |
160 | if (ret) { | 165 | if (ret) { |
161 | dev_err(drm->dev, "Couldn't initialize layer\n"); | 166 | dev_err(drm->dev, "Couldn't initialize layer\n"); |