drm/mediatek: Refactor pixel format logic
[sfrench/cifs-2.6.git] / drivers / gpu / drm / mediatek / mtk_drm_plane.c
index d54fbf34b000525db2f7cb1d17e27da97dca0c76..31f9420aff6f8c5fda7372e1633b1aba0be2960c 100644 (file)
 #include "mtk_drm_gem.h"
 #include "mtk_drm_plane.h"
 
-static const u32 formats[] = {
-       DRM_FORMAT_XRGB8888,
-       DRM_FORMAT_ARGB8888,
-       DRM_FORMAT_BGRX8888,
-       DRM_FORMAT_BGRA8888,
-       DRM_FORMAT_ABGR8888,
-       DRM_FORMAT_XBGR8888,
-       DRM_FORMAT_RGB888,
-       DRM_FORMAT_BGR888,
-       DRM_FORMAT_RGB565,
-       DRM_FORMAT_UYVY,
-       DRM_FORMAT_YUYV,
-};
-
 static const u64 modifiers[] = {
        DRM_FORMAT_MOD_LINEAR,
        DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 |
@@ -315,13 +301,19 @@ static const struct drm_plane_helper_funcs mtk_plane_helper_funcs = {
 
 int mtk_plane_init(struct drm_device *dev, struct drm_plane *plane,
                   unsigned long possible_crtcs, enum drm_plane_type type,
-                  unsigned int supported_rotations)
+                  unsigned int supported_rotations, const u32 *formats,
+                  size_t num_formats)
 {
        int err;
 
+       if (!formats || !num_formats) {
+               DRM_ERROR("no formats for plane\n");
+               return -EINVAL;
+       }
+
        err = drm_universal_plane_init(dev, plane, possible_crtcs,
                                       &mtk_plane_funcs, formats,
-                                      ARRAY_SIZE(formats), modifiers, type, NULL);
+                                      num_formats, modifiers, type, NULL);
        if (err) {
                DRM_ERROR("failed to initialize plane\n");
                return err;