aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_plane.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_plane.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_plane.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
index 7abb49b7d606..9168154d749e 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -324,24 +324,37 @@ static const struct drm_plane_funcs omap_plane_funcs = {
324 .atomic_get_property = omap_plane_atomic_get_property, 324 .atomic_get_property = omap_plane_atomic_get_property,
325}; 325};
326 326
327static const char *plane_names[] = { 327static const char *plane_id_to_name[] = {
328 [OMAP_DSS_GFX] = "gfx", 328 [OMAP_DSS_GFX] = "gfx",
329 [OMAP_DSS_VIDEO1] = "vid1", 329 [OMAP_DSS_VIDEO1] = "vid1",
330 [OMAP_DSS_VIDEO2] = "vid2", 330 [OMAP_DSS_VIDEO2] = "vid2",
331 [OMAP_DSS_VIDEO3] = "vid3", 331 [OMAP_DSS_VIDEO3] = "vid3",
332}; 332};
333 333
334static const enum omap_plane_id plane_idx_to_id[] = {
335 OMAP_DSS_GFX,
336 OMAP_DSS_VIDEO1,
337 OMAP_DSS_VIDEO2,
338 OMAP_DSS_VIDEO3,
339};
340
334/* initialize plane */ 341/* initialize plane */
335struct drm_plane *omap_plane_init(struct drm_device *dev, 342struct drm_plane *omap_plane_init(struct drm_device *dev,
336 int id, enum drm_plane_type type, 343 int idx, enum drm_plane_type type,
337 u32 possible_crtcs) 344 u32 possible_crtcs)
338{ 345{
339 struct omap_drm_private *priv = dev->dev_private; 346 struct omap_drm_private *priv = dev->dev_private;
340 struct drm_plane *plane; 347 struct drm_plane *plane;
341 struct omap_plane *omap_plane; 348 struct omap_plane *omap_plane;
349 enum omap_plane_id id;
342 int ret; 350 int ret;
343 351
344 DBG("%s: type=%d", plane_names[id], type); 352 if (WARN_ON(idx >= ARRAY_SIZE(plane_idx_to_id)))
353 return ERR_PTR(-EINVAL);
354
355 id = plane_idx_to_id[idx];
356
357 DBG("%s: type=%d", plane_id_to_name[id], type);
345 358
346 omap_plane = kzalloc(sizeof(*omap_plane), GFP_KERNEL); 359 omap_plane = kzalloc(sizeof(*omap_plane), GFP_KERNEL);
347 if (!omap_plane) 360 if (!omap_plane)
@@ -351,7 +364,7 @@ struct drm_plane *omap_plane_init(struct drm_device *dev,
351 omap_plane->formats, ARRAY_SIZE(omap_plane->formats), 364 omap_plane->formats, ARRAY_SIZE(omap_plane->formats),
352 priv->dispc_ops->ovl_get_color_modes(id)); 365 priv->dispc_ops->ovl_get_color_modes(id));
353 omap_plane->id = id; 366 omap_plane->id = id;
354 omap_plane->name = plane_names[id]; 367 omap_plane->name = plane_id_to_name[id];
355 368
356 plane = &omap_plane->base; 369 plane = &omap_plane->base;
357 370
@@ -368,6 +381,9 @@ struct drm_plane *omap_plane_init(struct drm_device *dev,
368 return plane; 381 return plane;
369 382
370error: 383error:
384 dev_err(dev->dev, "%s(): could not create plane: %s\n",
385 __func__, plane_id_to_name[id]);
386
371 kfree(omap_plane); 387 kfree(omap_plane);
372 return NULL; 388 return NULL;
373} 389}