aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/rcar-du/Kconfig2
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_drv.c15
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_plane.c45
3 files changed, 25 insertions, 37 deletions
diff --git a/drivers/gpu/drm/rcar-du/Kconfig b/drivers/gpu/drm/rcar-du/Kconfig
index 11485a4a16ae..d4e0a39568f6 100644
--- a/drivers/gpu/drm/rcar-du/Kconfig
+++ b/drivers/gpu/drm/rcar-du/Kconfig
@@ -1,6 +1,6 @@
1config DRM_RCAR_DU 1config DRM_RCAR_DU
2 tristate "DRM Support for R-Car Display Unit" 2 tristate "DRM Support for R-Car Display Unit"
3 depends on DRM && ARM && HAVE_DMA_ATTRS 3 depends on DRM && ARM && HAVE_DMA_ATTRS && OF
4 depends on ARCH_SHMOBILE || COMPILE_TEST 4 depends on ARCH_SHMOBILE || COMPILE_TEST
5 select DRM_KMS_HELPER 5 select DRM_KMS_HELPER
6 select DRM_KMS_CMA_HELPER 6 select DRM_KMS_CMA_HELPER
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index feddda0aaea2..bebcc97db5e5 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -93,7 +93,7 @@ static const struct rcar_du_device_info rcar_du_r8a7791_info = {
93 * (currently unsupported) TCON output. 93 * (currently unsupported) TCON output.
94 */ 94 */
95 [RCAR_DU_OUTPUT_DPAD0] = { 95 [RCAR_DU_OUTPUT_DPAD0] = {
96 .possible_crtcs = BIT(1), 96 .possible_crtcs = BIT(1) | BIT(0),
97 .encoder_type = DRM_MODE_ENCODER_NONE, 97 .encoder_type = DRM_MODE_ENCODER_NONE,
98 .port = 0, 98 .port = 0,
99 }, 99 },
@@ -106,15 +106,6 @@ static const struct rcar_du_device_info rcar_du_r8a7791_info = {
106 .num_lvds = 1, 106 .num_lvds = 1,
107}; 107};
108 108
109static const struct platform_device_id rcar_du_id_table[] = {
110 { "rcar-du-r8a7779", (kernel_ulong_t)&rcar_du_r8a7779_info },
111 { "rcar-du-r8a7790", (kernel_ulong_t)&rcar_du_r8a7790_info },
112 { "rcar-du-r8a7791", (kernel_ulong_t)&rcar_du_r8a7791_info },
113 { }
114};
115
116MODULE_DEVICE_TABLE(platform, rcar_du_id_table);
117
118static const struct of_device_id rcar_du_of_table[] = { 109static const struct of_device_id rcar_du_of_table[] = {
119 { .compatible = "renesas,du-r8a7779", .data = &rcar_du_r8a7779_info }, 110 { .compatible = "renesas,du-r8a7779", .data = &rcar_du_r8a7779_info },
120 { .compatible = "renesas,du-r8a7790", .data = &rcar_du_r8a7790_info }, 111 { .compatible = "renesas,du-r8a7790", .data = &rcar_du_r8a7790_info },
@@ -167,8 +158,7 @@ static int rcar_du_load(struct drm_device *dev, unsigned long flags)
167 init_waitqueue_head(&rcdu->commit.wait); 158 init_waitqueue_head(&rcdu->commit.wait);
168 159
169 rcdu->dev = &pdev->dev; 160 rcdu->dev = &pdev->dev;
170 rcdu->info = np ? of_match_device(rcar_du_of_table, rcdu->dev)->data 161 rcdu->info = of_match_device(rcar_du_of_table, rcdu->dev)->data;
171 : (void *)platform_get_device_id(pdev)->driver_data;
172 rcdu->ddev = dev; 162 rcdu->ddev = dev;
173 dev->dev_private = rcdu; 163 dev->dev_private = rcdu;
174 164
@@ -340,7 +330,6 @@ static struct platform_driver rcar_du_platform_driver = {
340 .pm = &rcar_du_pm_ops, 330 .pm = &rcar_du_pm_ops,
341 .of_match_table = rcar_du_of_table, 331 .of_match_table = rcar_du_of_table,
342 }, 332 },
343 .id_table = rcar_du_id_table,
344}; 333};
345 334
346module_platform_driver(rcar_du_platform_driver); 335module_platform_driver(rcar_du_platform_driver);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
index c66986414bb4..ffa583712cd9 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
@@ -273,29 +273,6 @@ static const struct drm_plane_helper_funcs rcar_du_plane_helper_funcs = {
273 .atomic_update = rcar_du_plane_atomic_update, 273 .atomic_update = rcar_du_plane_atomic_update,
274}; 274};
275 275
276static void rcar_du_plane_reset(struct drm_plane *plane)
277{
278 struct rcar_du_plane_state *state;
279
280 if (plane->state && plane->state->fb)
281 drm_framebuffer_unreference(plane->state->fb);
282
283 kfree(plane->state);
284 plane->state = NULL;
285
286 state = kzalloc(sizeof(*state), GFP_KERNEL);
287 if (state == NULL)
288 return;
289
290 state->hwindex = -1;
291 state->alpha = 255;
292 state->colorkey = RCAR_DU_COLORKEY_NONE;
293 state->zpos = plane->type == DRM_PLANE_TYPE_PRIMARY ? 0 : 1;
294
295 plane->state = &state->state;
296 plane->state->plane = plane;
297}
298
299static struct drm_plane_state * 276static struct drm_plane_state *
300rcar_du_plane_atomic_duplicate_state(struct drm_plane *plane) 277rcar_du_plane_atomic_duplicate_state(struct drm_plane *plane)
301{ 278{
@@ -322,6 +299,28 @@ static void rcar_du_plane_atomic_destroy_state(struct drm_plane *plane,
322 kfree(to_rcar_plane_state(state)); 299 kfree(to_rcar_plane_state(state));
323} 300}
324 301
302static void rcar_du_plane_reset(struct drm_plane *plane)
303{
304 struct rcar_du_plane_state *state;
305
306 if (plane->state) {
307 rcar_du_plane_atomic_destroy_state(plane, plane->state);
308 plane->state = NULL;
309 }
310
311 state = kzalloc(sizeof(*state), GFP_KERNEL);
312 if (state == NULL)
313 return;
314
315 state->hwindex = -1;
316 state->alpha = 255;
317 state->colorkey = RCAR_DU_COLORKEY_NONE;
318 state->zpos = plane->type == DRM_PLANE_TYPE_PRIMARY ? 0 : 1;
319
320 plane->state = &state->state;
321 plane->state->plane = plane;
322}
323
325static int rcar_du_plane_atomic_set_property(struct drm_plane *plane, 324static int rcar_du_plane_atomic_set_property(struct drm_plane *plane,
326 struct drm_plane_state *state, 325 struct drm_plane_state *state,
327 struct drm_property *property, 326 struct drm_property *property,