drm/exynos: unify plane type assignment
authorAndrzej Hajda <a.hajda@samsung.com>
Mon, 7 Jan 2019 15:35:44 +0000 (16:35 +0100)
committerAndrzej Hajda <a.hajda@samsung.com>
Wed, 20 Mar 2019 11:48:12 +0000 (12:48 +0100)
Since all Exynos CRTCs uses the first plane as primary plane and the last
one as cursor plane we can drop custom assignments per CRTC and replace it
with common code.

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
drivers/gpu/drm/exynos/exynos5433_drm_decon.c
drivers/gpu/drm/exynos/exynos7_drm_decon.c
drivers/gpu/drm/exynos/exynos_drm_drv.h
drivers/gpu/drm/exynos/exynos_drm_fimd.c
drivers/gpu/drm/exynos/exynos_drm_plane.c
drivers/gpu/drm/exynos/exynos_drm_vidi.c
drivers/gpu/drm/exynos/exynos_mixer.c

index 0d409f4539235d1e8b470141eb3699b84bcf9aae..663446ca2d098f1251542ade4f4e780eabd43c31 100644 (file)
@@ -78,11 +78,6 @@ static const uint32_t decon_formats[] = {
        DRM_FORMAT_ARGB8888,
 };
 
-static const enum drm_plane_type decon_win_types[WINDOWS_NR] = {
-       [PRIMARY_WIN] = DRM_PLANE_TYPE_PRIMARY,
-       [CURSON_WIN] = DRM_PLANE_TYPE_CURSOR,
-};
-
 static inline void decon_set_bits(struct decon_context *ctx, u32 reg, u32 mask,
                                  u32 val)
 {
@@ -619,7 +614,7 @@ static int decon_bind(struct device *dev, struct device *master, void *data)
                                        | EXYNOS_DRM_PLANE_CAP_PIX_BLEND;
                ret = exynos_plane_init(drm_dev, &ctx->planes[i],
                        decon_formats, ARRAY_SIZE(decon_formats),
-                       decon_win_types[i]);
+                       WINDOWS_NR - ctx->first_win);
                if (ret)
                        return ret;
        }
index 22659f2da7552e368d848d9423c2a24b7c6f1528..b6ad2faed159ca402144bfbae5a6c71de69b1fdf 100644 (file)
@@ -78,11 +78,6 @@ static const uint32_t decon_formats[] = {
        DRM_FORMAT_BGRA8888,
 };
 
-static const enum drm_plane_type decon_win_types[WINDOWS_NR] = {
-       DRM_PLANE_TYPE_PRIMARY,
-       DRM_PLANE_TYPE_CURSOR,
-};
-
 static void decon_wait_for_vblank(struct exynos_drm_crtc *crtc)
 {
        struct decon_context *ctx = to_decon(crtc);
@@ -628,7 +623,7 @@ static int decon_bind(struct device *dev, struct device *master, void *data)
        for (i = 0; i < WINDOWS_NR; i++) {
                ctx->planes[i].index = i;
                ret = exynos_plane_init(drm_dev, &ctx->planes[i], decon_formats,
-                       ARRAY_SIZE(decon_formats), decon_win_types[i]);
+                       ARRAY_SIZE(decon_formats), WINDOWS_NR);
                if (ret)
                        return ret;
        }
index 82af112be03d1dd38a31114fbfd86745ae278618..23b27b82de6e2d11a88e62e198a77c1064859cb0 100644 (file)
@@ -97,7 +97,7 @@ struct exynos_drm_plane {
 
 int exynos_plane_init(struct drm_device *dev, struct exynos_drm_plane *plane,
                      const uint32_t *pixel_formats, int num_pixel_formats,
-                     enum drm_plane_type type);
+                     int win_count);
 
 /*
  * Exynos drm crtc ops
index 8ea1cfd51736ac8eabb8e6af586eb8507225a0f9..b3c11bca5aede0407ace313cffdfe4f3fd58ba49 100644 (file)
@@ -212,14 +212,6 @@ static const struct of_device_id fimd_driver_dt_match[] = {
 };
 MODULE_DEVICE_TABLE(of, fimd_driver_dt_match);
 
-static const enum drm_plane_type fimd_win_types[WINDOWS_NR] = {
-       DRM_PLANE_TYPE_PRIMARY,
-       DRM_PLANE_TYPE_OVERLAY,
-       DRM_PLANE_TYPE_OVERLAY,
-       DRM_PLANE_TYPE_OVERLAY,
-       DRM_PLANE_TYPE_CURSOR,
-};
-
 static const uint32_t fimd_formats[] = {
        DRM_FORMAT_C8,
        DRM_FORMAT_XRGB1555,
@@ -1049,7 +1041,7 @@ static int fimd_bind(struct device *dev, struct device *master, void *data)
                                            | EXYNOS_DRM_PLANE_CAP_WIN_BLEND
                                            | EXYNOS_DRM_PLANE_CAP_PIX_BLEND;
                ret = exynos_plane_init(drm_dev, &ctx->planes[i], fimd_formats,
-                               ARRAY_SIZE(fimd_formats), fimd_win_types[i]);
+                               ARRAY_SIZE(fimd_formats), WINDOWS_NR);
                if (ret)
                        return ret;
        }
index e1aa504539fad623062d028cd5e8d5e80726fd70..5f8f56b693691c0469f360b15206480ba879977a 100644 (file)
@@ -291,9 +291,18 @@ static void exynos_plane_attach_zpos_property(struct drm_plane *plane,
                drm_plane_create_zpos_property(plane, zpos, 0, MAX_PLANE - 1);
 }
 
+static inline enum drm_plane_type exynos_plane_type(int index, int count)
+{
+       if (count && !index)
+               return DRM_PLANE_TYPE_PRIMARY;
+       if (index == count - 1)
+               return DRM_PLANE_TYPE_CURSOR;
+       return DRM_PLANE_TYPE_OVERLAY;
+}
+
 int exynos_plane_init(struct drm_device *dev, struct exynos_drm_plane *plane,
                      const uint32_t *pixel_formats, int num_pixel_formats,
-                     enum drm_plane_type type)
+                     int win_count)
 {
        int err;
        unsigned int supported_modes = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
@@ -302,11 +311,9 @@ int exynos_plane_init(struct drm_device *dev, struct exynos_drm_plane *plane,
        struct drm_plane *bplane = &plane->base;
 
        err = drm_universal_plane_init(dev, bplane,
-                                      1 << dev->mode_config.num_crtc,
-                                      &exynos_plane_funcs,
-                                      pixel_formats,
-                                      num_pixel_formats,
-                                      NULL, type, NULL);
+               1 << dev->mode_config.num_crtc,
+               &exynos_plane_funcs, pixel_formats, num_pixel_formats,NULL,
+               exynos_plane_type(plane->index, win_count), NULL);
        if (err) {
                DRM_ERROR("failed to initialize plane\n");
                return err;
index 2579462aec704d00b378310ebfce70624f87c378..eb1fd3a2cdf3b5207e7423193ac9b6de9e6ed26f 100644 (file)
@@ -85,12 +85,6 @@ static const uint32_t formats[] = {
        DRM_FORMAT_NV12,
 };
 
-static const enum drm_plane_type vidi_win_types[WINDOWS_NR] = {
-       DRM_PLANE_TYPE_PRIMARY,
-       DRM_PLANE_TYPE_OVERLAY,
-       DRM_PLANE_TYPE_CURSOR,
-};
-
 static int vidi_enable_vblank(struct exynos_drm_crtc *crtc)
 {
        struct vidi_context *ctx = to_vidi(crtc);
@@ -381,7 +375,7 @@ static int vidi_bind(struct device *dev, struct device *master, void *data)
 
        for (i = 0; i < WINDOWS_NR; i++) {
                ret = exynos_plane_init(drm_dev, &ctx->planes[i], formats,
-                                       ARRAY_SIZE(formats), vidi_win_types[i]);
+                                       ARRAY_SIZE(formats), WINDOWS_NR);
                if (ret)
                        return ret;
        }
index 946d62ae83e32b2c3cd435090e44f44fc23f16da..d0dcbbfc67e5b5b37106127a3ed3087b1b567a79 100644 (file)
@@ -1121,8 +1121,6 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data)
        struct drm_device *drm_dev = data;
        unsigned int i;
        int ret;
-       static enum drm_plane_type types[] = { DRM_PLANE_TYPE_PRIMARY,
-               DRM_PLANE_TYPE_CURSOR, DRM_PLANE_TYPE_OVERLAY };
 
        ret = mixer_initialize(ctx, drm_dev);
        if (ret)
@@ -1135,7 +1133,7 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data)
                                              EXYNOS_DRM_PLANE_CAP_PIX_BLEND |
                                              EXYNOS_DRM_PLANE_CAP_WIN_BLEND;
                ret = exynos_plane_init(drm_dev, &ctx->planes[i], mixer_formats,
-                       ARRAY_SIZE(mixer_formats), types[i]);
+                       ARRAY_SIZE(mixer_formats), VP_DEFAULT_WIN);
                if (ret)
                        return ret;
        }
@@ -1147,7 +1145,7 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data)
                                              EXYNOS_DRM_PLANE_CAP_TILE |
                                              EXYNOS_DRM_PLANE_CAP_WIN_BLEND;
                ret = exynos_plane_init(drm_dev, &ctx->planes[i], vp_formats,
-                       ARRAY_SIZE(vp_formats), types[i]);
+                       ARRAY_SIZE(vp_formats), VP_DEFAULT_WIN);
                if (ret)
                        return ret;
        }