msm: sde: add format enumeration based on rotator version

Current pixel format enumeration reports pixel format supported
by driver, and may include formats not supported by underlying
hardware.  This patch reorganizes pixel format enumeration to
report hardware supported pixel formats based on hardware version
as well I/O port direction.

CRs-Fixed: 1054825
Change-Id: I1e42b11b43f69dba4a5ac68cfdfb8305136a307c
Signed-off-by: Alan Kwong <akwong@codeaurora.org>
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
index f2bcf2f..dede637 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
@@ -1273,8 +1273,13 @@
 	u8 in_v_subsample, in_h_subsample;
 	u8 out_v_subsample, out_h_subsample;
 
-	if (!sde_mdp_is_wb_format(out_fmt)) {
-		SDEROT_DBG("Invalid output format\n");
+	if (!sde_rotator_is_valid_pixfmt(mgr, in_fmt->format, true)) {
+		SDEROT_DBG("Invalid input format %x\n", in_fmt->format);
+		return false;
+	}
+
+	if (!sde_rotator_is_valid_pixfmt(mgr, out_fmt->format, false)) {
+		SDEROT_DBG("Invalid output format %x\n", out_fmt->format);
 		return false;
 	}
 
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.h b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.h
index 2476309..3633114 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.h
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.h
@@ -302,10 +302,32 @@
 			struct dentry *debugfs_root);
 	int (*ops_hw_validate_entry)(struct sde_rot_mgr *mgr,
 			struct sde_rot_entry *entry);
+	u32 (*ops_hw_get_pixfmt)(struct sde_rot_mgr *mgr, int index,
+			bool input);
+	int (*ops_hw_is_valid_pixfmt)(struct sde_rot_mgr *mgr, u32 pixfmt,
+			bool input);
 
 	void *hw_data;
 };
 
+static inline int sde_rotator_is_valid_pixfmt(struct sde_rot_mgr *mgr,
+		u32 pixfmt, bool input)
+{
+	if (mgr && mgr->ops_hw_is_valid_pixfmt)
+		return mgr->ops_hw_is_valid_pixfmt(mgr, pixfmt, input);
+
+	return false;
+}
+
+static inline u32 sde_rotator_get_pixfmt(struct sde_rot_mgr *mgr,
+		int index, bool input)
+{
+	if (mgr && mgr->ops_hw_get_pixfmt)
+		return mgr->ops_hw_get_pixfmt(mgr, index, input);
+
+	return 0;
+}
+
 static inline int __compare_session_item_rect(
 	struct sde_rotation_buf_info *s_rect,
 	struct sde_rect *i_rect, uint32_t i_fmt, bool src)
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_dev.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_dev.c
index 3f463ef..be84f28 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_dev.c
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_dev.c
@@ -52,244 +52,6 @@
 #define SDE_ROTATOR_DEGREE_270		270
 #define SDE_ROTATOR_DEGREE_180		180
 #define SDE_ROTATOR_DEGREE_90		90
-/*
- * Format description/mapping
- * @pixelformat: external format defined in msm_sde_rotator header.
- *
- * Note RGBA/8888 naming convention follows internal convention and
- * is reverse of standard V4L2 convention.  Description containing
- * prefix 'SDE/' refers to SDE specific conventions and/or features.
- */
-static const struct v4l2_fmtdesc fmtdesc[] = {
-	{
-		.description = "SDE/XRGB_8888",
-		.pixelformat = SDE_PIX_FMT_XRGB_8888,
-	},
-	{
-		.description = "SDE/ARGB_8888",
-		.pixelformat = SDE_PIX_FMT_ARGB_8888,
-	},
-	{
-		.description = "SDE/ABGR_8888",
-		.pixelformat = SDE_PIX_FMT_ABGR_8888,
-	},
-	{
-		.description = "SDE/RGBA_8888",
-		.pixelformat = SDE_PIX_FMT_RGBA_8888,
-	},
-	{
-		.description = "SDE/BGRA_8888",
-		.pixelformat = SDE_PIX_FMT_BGRA_8888,
-	},
-	{
-		.description = "SDE/RGBX_8888",
-		.pixelformat = SDE_PIX_FMT_RGBX_8888,
-	},
-	{
-		.description = "SDE/BGRX_8888",
-		.pixelformat = SDE_PIX_FMT_BGRX_8888,
-	},
-	{
-		.description = "SDE/XBGR_8888",
-		.pixelformat = SDE_PIX_FMT_XBGR_8888,
-	},
-	{
-		.description = "RGBA_5551",
-		.pixelformat = SDE_PIX_FMT_RGBA_5551,
-	},
-	{
-		.description = "ARGB_1555",
-		.pixelformat = SDE_PIX_FMT_ARGB_1555,
-	},
-	{
-		.description = "ABGR_1555",
-		.pixelformat = SDE_PIX_FMT_ABGR_1555,
-	},
-	{
-		.description = "BGRA_5551",
-		.pixelformat = SDE_PIX_FMT_BGRA_5551,
-	},
-	{
-		.description = "BGRX_5551",
-		.pixelformat = SDE_PIX_FMT_BGRX_5551,
-	},
-	{
-		.description = "RGBX_5551",
-		.pixelformat = SDE_PIX_FMT_RGBX_5551,
-	},
-	{
-		.description = "XBGR_1555",
-		.pixelformat = SDE_PIX_FMT_XBGR_1555,
-	},
-	{
-		.description = "XRGB_1555",
-		.pixelformat = SDE_PIX_FMT_XRGB_1555,
-	},
-	{
-		.description = "ARGB_4444",
-		.pixelformat = SDE_PIX_FMT_ARGB_4444,
-	},
-	{
-		.description = "RGBA_4444",
-		.pixelformat = SDE_PIX_FMT_RGBA_4444,
-	},
-	{
-		.description = "BGRA_4444",
-		.pixelformat = SDE_PIX_FMT_BGRA_4444,
-	},
-	{
-		.description = "ABGR_4444",
-		.pixelformat = SDE_PIX_FMT_ABGR_4444,
-	},
-	{
-		.description = "RGBX_4444",
-		.pixelformat = SDE_PIX_FMT_RGBX_4444,
-	},
-	{
-		.description = "XRGB_4444",
-		.pixelformat = SDE_PIX_FMT_XRGB_4444,
-	},
-	{
-		.description = "BGRX_4444",
-		.pixelformat = SDE_PIX_FMT_BGRX_4444,
-	},
-	{
-		.description = "XBGR_4444",
-		.pixelformat = SDE_PIX_FMT_XBGR_4444,
-	},
-	{
-		.description = "RGB_888",
-		.pixelformat = SDE_PIX_FMT_RGB_888,
-	},
-	{
-		.description = "BGR_888",
-		.pixelformat = SDE_PIX_FMT_BGR_888,
-	},
-	{
-		.description = "RGB_565",
-		.pixelformat = SDE_PIX_FMT_RGB_565,
-	},
-	{
-		.description = "BGR_565",
-		.pixelformat = SDE_PIX_FMT_BGR_565,
-	},
-	{
-		.description = "Y_CB_CR_H2V2",
-		.pixelformat = SDE_PIX_FMT_Y_CB_CR_H2V2,
-	},
-	{
-		.description = "Y_CR_CB_H2V2",
-		.pixelformat = SDE_PIX_FMT_Y_CR_CB_H2V2,
-	},
-	{
-		.description = "SDE/Y_CR_CB_GH2V2",
-		.pixelformat = SDE_PIX_FMT_Y_CR_CB_GH2V2,
-	},
-	{
-		.description = "Y_CBCR_H2V2",
-		.pixelformat = SDE_PIX_FMT_Y_CBCR_H2V2,
-	},
-	{
-		.description = "Y_CRCB_H2V2",
-		.pixelformat = SDE_PIX_FMT_Y_CRCB_H2V2,
-	},
-	{
-		.description = "Y_CBCR_H1V2",
-		.pixelformat = SDE_PIX_FMT_Y_CBCR_H1V2,
-	},
-	{
-		.description = "Y_CRCB_H1V2",
-		.pixelformat = SDE_PIX_FMT_Y_CRCB_H1V2,
-	},
-	{
-		.description = "Y_CBCR_H2V1",
-		.pixelformat = SDE_PIX_FMT_Y_CBCR_H2V1,
-	},
-	{
-		.description = "Y_CRCB_H2V1",
-		.pixelformat = SDE_PIX_FMT_Y_CRCB_H2V1,
-	},
-	{
-		.description = "YCBYCR_H2V1",
-		.pixelformat = SDE_PIX_FMT_YCBYCR_H2V1,
-	},
-	{
-		.description = "SDE/Y_CBCR_H2V2_VENUS",
-		.pixelformat = SDE_PIX_FMT_Y_CBCR_H2V2_VENUS,
-	},
-	{
-		.description = "SDE/Y_CRCB_H2V2_VENUS",
-		.pixelformat = SDE_PIX_FMT_Y_CRCB_H2V2_VENUS,
-	},
-	{
-		.description = "SDE/RGBA_8888_UBWC",
-		.pixelformat = SDE_PIX_FMT_RGBA_8888_UBWC,
-	},
-	{
-		.description = "SDE/RGBX_8888_UBWC",
-		.pixelformat = SDE_PIX_FMT_RGBX_8888_UBWC,
-	},
-	{
-		.description = "SDE/RGB_565_UBWC",
-		.pixelformat = SDE_PIX_FMT_RGB_565_UBWC,
-	},
-	{
-		.description = "SDE/Y_CBCR_H2V2_UBWC",
-		.pixelformat = SDE_PIX_FMT_Y_CBCR_H2V2_UBWC,
-	},
-	{
-		.description = "SDE/RGBA_1010102",
-		.pixelformat = SDE_PIX_FMT_RGBA_1010102,
-	},
-	{
-		.description = "SDE/RGBX_1010102",
-		.pixelformat = SDE_PIX_FMT_RGBX_1010102,
-	},
-	{
-		.description = "SDE/ARGB_2101010",
-		.pixelformat = SDE_PIX_FMT_ARGB_2101010,
-	},
-	{
-		.description = "SDE/XRGB_2101010",
-		.pixelformat = SDE_PIX_FMT_XRGB_2101010,
-	},
-	{
-		.description = "SDE/BGRA_1010102",
-		.pixelformat = SDE_PIX_FMT_BGRA_1010102,
-	},
-	{
-		.description = "SDE/BGRX_1010102",
-		.pixelformat = SDE_PIX_FMT_BGRX_1010102,
-	},
-	{
-		.description = "SDE/ABGR_2101010",
-		.pixelformat = SDE_PIX_FMT_ABGR_2101010,
-	},
-	{
-		.description = "SDE/XBGR_2101010",
-		.pixelformat = SDE_PIX_FMT_XBGR_2101010,
-	},
-	{
-		.description = "SDE/RGBA_1010102_UBWC",
-		.pixelformat = SDE_PIX_FMT_RGBA_1010102_UBWC,
-	},
-	{
-		.description = "SDE/RGBX_1010102_UBWC",
-		.pixelformat = SDE_PIX_FMT_RGBX_1010102_UBWC,
-	},
-	{
-		.description = "SDE/Y_CBCR_H2V2_P010",
-		.pixelformat = SDE_PIX_FMT_Y_CBCR_H2V2_P010,
-	},
-	{
-		.description = "SDE/Y_CBCR_H2V2_TP10",
-		.pixelformat = SDE_PIX_FMT_Y_CBCR_H2V2_TP10,
-	},
-	{
-		.description = "SDE/Y_CBCR_H2V2_TP10_UBWC",
-		.pixelformat = SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC,
-	},
-};
 
 static void sde_rotator_submit_handler(struct work_struct *work);
 static void sde_rotator_retire_handler(struct work_struct *work);
@@ -309,26 +71,6 @@
 }
 
 /*
- * sde_rotator_get_format_idx - Get rotator format lookup index.
- * @ctx: Pointer to rotator ctx.
- * @f: v4l2 format.
- */
-static int sde_rotator_get_format_idx(struct sde_rotator_ctx *ctx,
-	struct v4l2_format *f)
-{
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(fmtdesc); i++)
-		if (fmtdesc[i].pixelformat == f->fmt.pix.pixelformat)
-			break;
-
-	if (i == ARRAY_SIZE(fmtdesc))
-		return -EINVAL;
-
-	return i;
-}
-
-/*
  * sde_rotator_get_flags_from_ctx - Get low-level command flag
  * @ctx: Pointer to rotator context.
  */
@@ -1302,12 +1044,21 @@
 static int sde_rotator_enum_fmt_vid_cap(struct file *file,
 	void *fh, struct v4l2_fmtdesc *f)
 {
-	if (f->index >= ARRAY_SIZE(fmtdesc))
+	struct sde_rotator_ctx *ctx = sde_rotator_ctx_from_fh(fh);
+	struct sde_rotator_device *rot_dev = ctx->rot_dev;
+	struct sde_mdp_format_params *fmt;
+	u32 pixfmt;
+
+	pixfmt = sde_rotator_get_pixfmt(rot_dev->mgr, f->index, false);
+	if (!pixfmt)
 		return -EINVAL;
 
-	f->pixelformat = fmtdesc[f->index].pixelformat;
-	strlcpy(f->description, fmtdesc[f->index].description,
-		sizeof(f->description));
+	fmt = sde_get_format_params(pixfmt);
+	if (!fmt)
+		return -EINVAL;
+
+	f->pixelformat = pixfmt;
+	strlcpy(f->description, fmt->description, sizeof(f->description));
 
 	return 0;
 }
@@ -1321,12 +1072,21 @@
 static int sde_rotator_enum_fmt_vid_out(struct file *file,
 	void *fh, struct v4l2_fmtdesc *f)
 {
-	if (f->index >= ARRAY_SIZE(fmtdesc))
+	struct sde_rotator_ctx *ctx = sde_rotator_ctx_from_fh(fh);
+	struct sde_rotator_device *rot_dev = ctx->rot_dev;
+	struct sde_mdp_format_params *fmt;
+	u32 pixfmt;
+
+	pixfmt = sde_rotator_get_pixfmt(rot_dev->mgr, f->index, true);
+	if (!pixfmt)
 		return -EINVAL;
 
-	f->pixelformat = fmtdesc[f->index].pixelformat;
-	strlcpy(f->description, fmtdesc[f->index].description,
-		sizeof(f->description));
+	fmt = sde_get_format_params(pixfmt);
+	if (!fmt)
+		return -EINVAL;
+
+	f->pixelformat = pixfmt;
+	strlcpy(f->description, fmt->description, sizeof(f->description));
 
 	return 0;
 }
@@ -1375,13 +1135,8 @@
 	struct sde_rotator_ctx *ctx = sde_rotator_ctx_from_fh(fh);
 	struct sde_rotator_device *rot_dev = ctx->rot_dev;
 	struct sde_rotation_config config;
-	int fmt_idx;
 	int ret;
 
-	fmt_idx = sde_rotator_get_format_idx(ctx, f);
-	if (fmt_idx < 0)
-		return -EINVAL;
-
 	sde_rot_mgr_lock(rot_dev->mgr);
 	sde_rotator_get_config_from_ctx(ctx, &config);
 	config.output.format = f->fmt.pix.pixelformat;
@@ -1419,13 +1174,8 @@
 	struct sde_rotator_ctx *ctx = sde_rotator_ctx_from_fh(fh);
 	struct sde_rotator_device *rot_dev = ctx->rot_dev;
 	struct sde_rotation_config config;
-	int fmt_idx;
 	int ret;
 
-	fmt_idx = sde_rotator_get_format_idx(ctx, f);
-	if (fmt_idx < 0)
-		return -EINVAL;
-
 	sde_rot_mgr_lock(rot_dev->mgr);
 	sde_rotator_get_config_from_ctx(ctx, &config);
 	config.input.format = f->fmt.pix.pixelformat;
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_formats.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_formats.c
index 5318c9d..3b36b6b 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_formats.c
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_formats.c
@@ -16,9 +16,10 @@
 #include "sde_rotator_formats.h"
 #include "sde_rotator_util.h"
 
-#define FMT_RGB_565(fmt, frame_fmt, flag_arg, e0, e1, e2, isubwc)	\
+#define FMT_RGB_565(fmt, desc, frame_fmt, flag_arg, e0, e1, e2, isubwc)	\
 	{							\
 		.format = (fmt),				\
+		.description = (desc),				\
 		.flag = flag_arg,				\
 		.fetch_planes = SDE_MDP_PLANE_INTERLEAVED,	\
 		.unpack_tight = 1,				\
@@ -37,9 +38,10 @@
 		.is_ubwc = isubwc,				\
 	}
 
-#define FMT_RGB_888(fmt, frame_fmt, flag_arg, e0, e1, e2, isubwc)	\
+#define FMT_RGB_888(fmt, desc, frame_fmt, flag_arg, e0, e1, e2, isubwc)	\
 	{							\
 		.format = (fmt),				\
+		.description = (desc),				\
 		.flag = flag_arg,				\
 		.fetch_planes = SDE_MDP_PLANE_INTERLEAVED,	\
 		.unpack_tight = 1,				\
@@ -58,10 +60,11 @@
 		.is_ubwc = isubwc,				\
 	}
 
-#define FMT_RGB_8888(fmt, frame_fmt, flag_arg,			\
+#define FMT_RGB_8888(fmt, desc, frame_fmt, flag_arg,			\
 		alpha_en, e0, e1, e2, e3, isubwc)		\
 	{							\
 		.format = (fmt),				\
+		.description = (desc),				\
 		.flag = flag_arg,				\
 		.fetch_planes = SDE_MDP_PLANE_INTERLEAVED,	\
 		.unpack_tight = 1,				\
@@ -93,10 +96,11 @@
 		.unpack_tight = 1,				\
 		.unpack_align_msb = 0
 
-#define FMT_YUV_PSEUDO(fmt, frame_fmt, samp, pixel_type,	\
+#define FMT_YUV_PSEUDO(fmt, desc, frame_fmt, samp, pixel_type,	\
 		flag_arg, e0, e1, isubwc)			\
 	{							\
 		FMT_YUV_COMMON(fmt),				\
+		.description = (desc),				\
 		.flag = flag_arg,				\
 		.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,	\
 		.chroma_sample = samp,				\
@@ -108,10 +112,11 @@
 		.is_ubwc = isubwc,				\
 	}
 
-#define FMT_YUV_PLANR(fmt, frame_fmt, samp, \
+#define FMT_YUV_PLANR(fmt, desc, frame_fmt, samp, \
 		flag_arg, e0, e1)		\
 	{							\
 		FMT_YUV_COMMON(fmt),				\
+		.description = (desc),				\
 		.flag = flag_arg,				\
 		.fetch_planes = SDE_MDP_PLANE_PLANAR,		\
 		.chroma_sample = samp,				\
@@ -123,9 +128,10 @@
 		.is_ubwc = SDE_MDP_COMPRESS_NONE,		\
 	}
 
-#define FMT_RGB_1555(fmt, alpha_en, flag_arg, e0, e1, e2, e3)	\
+#define FMT_RGB_1555(fmt, desc, alpha_en, flag_arg, e0, e1, e2, e3)	\
 	{							\
 		.format = (fmt),				\
+		.description = (desc),				\
 		.flag = flag_arg,				\
 		.fetch_planes = SDE_MDP_PLANE_INTERLEAVED,	\
 		.unpack_tight = 1,				\
@@ -145,9 +151,10 @@
 		.is_ubwc = SDE_MDP_COMPRESS_NONE,		\
 	}
 
-#define FMT_RGB_4444(fmt, alpha_en, flag_arg, e0, e1, e2, e3)		\
+#define FMT_RGB_4444(fmt, desc, alpha_en, flag_arg, e0, e1, e2, e3)	\
 	{							\
 		.format = (fmt),				\
+		.description = (desc),				\
 		.flag = flag_arg,				\
 		.fetch_planes = SDE_MDP_PLANE_INTERLEAVED,	\
 		.unpack_tight = 1,				\
@@ -167,10 +174,11 @@
 		.is_ubwc = SDE_MDP_COMPRESS_NONE,		\
 	}
 
-#define FMT_RGB_1010102(fmt, frame_fmt, flag_arg,		\
+#define FMT_RGB_1010102(fmt, desc, frame_fmt, flag_arg,		\
 			alpha_en, e0, e1, e2, e3, isubwc)	\
 	{							\
 		.format = (fmt),				\
+		.description = (desc),				\
 		.flag = flag_arg,				\
 		.fetch_planes = SDE_MDP_PLANE_INTERLEAVED,	\
 		.unpack_tight = 1,				\
@@ -190,7 +198,6 @@
 		.is_ubwc = isubwc,				\
 	}
 
-#define VALID_ROT_WB_ALL (VALID_ROT_WB_FORMAT | VALID_ROT_R3_WB_FORMAT)
 /*
  * UBWC formats table:
  * This table holds the UBWC formats supported.
@@ -200,7 +207,8 @@
 static struct sde_mdp_format_params_ubwc sde_mdp_format_ubwc_map[] = {
 	{
 		.mdp_format = FMT_RGB_565(SDE_PIX_FMT_RGB_565_UBWC,
-			SDE_MDP_FMT_TILE_A5X, VALID_ROT_WB_ALL,
+			"SDE/RGB_565_UBWC",
+			SDE_MDP_FMT_TILE_A5X, 0,
 			C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_UBWC),
 		.micro = {
 			.tile_height = 4,
@@ -209,7 +217,8 @@
 	},
 	{
 		.mdp_format = FMT_RGB_8888(SDE_PIX_FMT_RGBA_8888_UBWC,
-			SDE_MDP_FMT_TILE_A5X, VALID_ROT_WB_ALL, 1,
+			"SDE/RGBA_8888_UBWC",
+			SDE_MDP_FMT_TILE_A5X, 0, 1,
 			C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
 			SDE_MDP_COMPRESS_UBWC),
 		.micro = {
@@ -219,7 +228,8 @@
 	},
 	{
 		.mdp_format = FMT_RGB_8888(SDE_PIX_FMT_RGBX_8888_UBWC,
-			SDE_MDP_FMT_TILE_A5X, VALID_ROT_WB_ALL, 0,
+			"SDE/RGBX_8888_UBWC",
+			SDE_MDP_FMT_TILE_A5X, 0, 0,
 			C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
 			SDE_MDP_COMPRESS_UBWC),
 		.micro = {
@@ -229,9 +239,10 @@
 	},
 	{
 		.mdp_format = FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_UBWC,
+			"SDE/Y_CBCR_H2V2_UBWC",
 			SDE_MDP_FMT_TILE_A5X, SDE_MDP_CHROMA_420,
 			SDE_MDP_PIXEL_NORMAL,
-			VALID_ROT_WB_ALL, C1_B_Cb, C2_R_Cr,
+			0, C1_B_Cb, C2_R_Cr,
 			SDE_MDP_COMPRESS_UBWC),
 		.micro = {
 			.tile_height = 8,
@@ -240,7 +251,8 @@
 	},
 	{
 		.mdp_format = FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102_UBWC,
-			SDE_MDP_FMT_TILE_A5X, VALID_ROT_R3_WB_FORMAT, 1,
+			"SDE/RGBA_1010102_UBWC",
+			SDE_MDP_FMT_TILE_A5X, 0, 1,
 			C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
 			SDE_MDP_COMPRESS_UBWC),
 		.micro = {
@@ -250,7 +262,8 @@
 	},
 	{
 		.mdp_format = FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102_UBWC,
-			SDE_MDP_FMT_TILE_A5X, VALID_ROT_R3_WB_FORMAT, 0,
+			"SDE/RGBX_1010102_UBWC",
+			SDE_MDP_FMT_TILE_A5X, 0, 0,
 			C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
 			SDE_MDP_COMPRESS_UBWC),
 		.micro = {
@@ -260,9 +273,10 @@
 	},
 	{
 		.mdp_format = FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC,
+			"SDE/Y_CBCR_H2V2_TP10_UBWC",
 			SDE_MDP_FMT_TILE_A5X, SDE_MDP_CHROMA_420,
 			SDE_MDP_PIXEL_10BIT,
-			VALID_ROT_R3_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT,
+			0,
 			C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_UBWC),
 		.micro = {
 			.tile_height = 4,
@@ -273,88 +287,89 @@
 
 static struct sde_mdp_format_params sde_mdp_format_map[] = {
 	FMT_RGB_565(
-		SDE_PIX_FMT_RGB_565, SDE_MDP_FMT_LINEAR, VALID_ROT_WB_ALL |
-		VALID_MDP_WB_INTF_FORMAT, C1_B_Cb, C0_G_Y, C2_R_Cr,
-		SDE_MDP_COMPRESS_NONE),
+		SDE_PIX_FMT_RGB_565, "RGB_565", SDE_MDP_FMT_LINEAR,
+		0, C1_B_Cb, C0_G_Y, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
 	FMT_RGB_565(
-		SDE_PIX_FMT_BGR_565, SDE_MDP_FMT_LINEAR, VALID_ROT_WB_ALL |
-		VALID_MDP_WB_INTF_FORMAT, C2_R_Cr, C0_G_Y, C1_B_Cb,
-		SDE_MDP_COMPRESS_NONE),
+		SDE_PIX_FMT_BGR_565, "BGR_565", SDE_MDP_FMT_LINEAR,
+		0, C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
 	FMT_RGB_888(
-		SDE_PIX_FMT_RGB_888, SDE_MDP_FMT_LINEAR, VALID_ROT_WB_ALL |
-		VALID_MDP_WB_INTF_FORMAT, C2_R_Cr, C0_G_Y, C1_B_Cb,
-		SDE_MDP_COMPRESS_NONE),
+		SDE_PIX_FMT_RGB_888, "RGB_888", SDE_MDP_FMT_LINEAR,
+		0, C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
 	FMT_RGB_888(
-		SDE_PIX_FMT_BGR_888, SDE_MDP_FMT_LINEAR, VALID_ROT_WB_ALL |
-		VALID_MDP_WB_INTF_FORMAT, C1_B_Cb, C0_G_Y, C2_R_Cr,
+		SDE_PIX_FMT_BGR_888, "BGR_888", SDE_MDP_FMT_LINEAR,
+		0, C1_B_Cb, C0_G_Y, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
+
+	FMT_RGB_8888(
+		SDE_PIX_FMT_ABGR_8888, "SDE/ABGR_8888", SDE_MDP_FMT_LINEAR,
+		0, 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
 		SDE_MDP_COMPRESS_NONE),
 
 	FMT_RGB_8888(
-		SDE_PIX_FMT_ABGR_8888, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_WB_ALL, 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
+		SDE_PIX_FMT_XRGB_8888, "SDE/XRGB_8888", SDE_MDP_FMT_LINEAR,
+		0, 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_8888(
+		SDE_PIX_FMT_ARGB_8888, "SDE/ARGB_8888", SDE_MDP_FMT_LINEAR,
+		0, 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_8888(
+		SDE_PIX_FMT_RGBA_8888, "SDE/RGBA_8888", SDE_MDP_FMT_LINEAR,
+		0, 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_8888(
+		SDE_PIX_FMT_RGBX_8888, "SDE/RGBX_8888", SDE_MDP_FMT_LINEAR,
+		0, 0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_8888(
+		SDE_PIX_FMT_BGRA_8888, "SDE/BGRA_8888", SDE_MDP_FMT_LINEAR,
+		0, 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_8888(
+		SDE_PIX_FMT_BGRX_8888, "SDE/BGRX_8888", SDE_MDP_FMT_LINEAR,
+		0, 0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_8888(
+		SDE_PIX_FMT_XBGR_8888, "SDE/XBGR_8888", SDE_MDP_FMT_LINEAR,
+		0, 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
 		SDE_MDP_COMPRESS_NONE),
 
-	FMT_RGB_8888(
-		SDE_PIX_FMT_XRGB_8888, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_WB_ALL | VALID_MDP_WB_INTF_FORMAT,
-		0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_8888(
-		SDE_PIX_FMT_ARGB_8888, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_WB_ALL, 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
-		SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_8888(
-		SDE_PIX_FMT_RGBA_8888, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_WB_ALL, 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
-		SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_8888(
-		SDE_PIX_FMT_RGBX_8888, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_WB_ALL | VALID_MDP_WB_INTF_FORMAT,
-		0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA, SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_8888(
-		SDE_PIX_FMT_BGRA_8888, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_WB_ALL, 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
-		SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_8888(
-		SDE_PIX_FMT_BGRX_8888, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_WB_ALL | VALID_MDP_WB_INTF_FORMAT,
-		0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA, SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_8888(
-		SDE_PIX_FMT_XBGR_8888, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_WB_ALL | VALID_MDP_WB_INTF_FORMAT,
-		0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
-
-	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V1, SDE_MDP_FMT_LINEAR,
+	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V1, "Y_CRCB_H2V1",
+		SDE_MDP_FMT_LINEAR,
 		SDE_MDP_CHROMA_H2V1, SDE_MDP_PIXEL_NORMAL,
-		VALID_ROT_WB_ALL, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
-	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V1, SDE_MDP_FMT_LINEAR,
+		0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
+	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V1, "Y_CBCR_H2V1",
+		SDE_MDP_FMT_LINEAR,
 		SDE_MDP_CHROMA_H2V1, SDE_MDP_PIXEL_NORMAL,
-		VALID_ROT_WB_ALL, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
-	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H1V2, SDE_MDP_FMT_LINEAR,
+		0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
+	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H1V2, "Y_CRCB_H1V2",
+		SDE_MDP_FMT_LINEAR,
 		SDE_MDP_CHROMA_H1V2, SDE_MDP_PIXEL_NORMAL,
-		VALID_ROT_WB_ALL, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
-	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H1V2, SDE_MDP_FMT_LINEAR,
+		0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
+	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H1V2, "Y_CBCR_H1V2",
+		SDE_MDP_FMT_LINEAR,
 		SDE_MDP_CHROMA_H1V2, SDE_MDP_PIXEL_NORMAL,
-		VALID_ROT_WB_ALL, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
-	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2, SDE_MDP_FMT_LINEAR,
+		0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
+	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2, "Y_CRCB_H2V2",
+		SDE_MDP_FMT_LINEAR,
 		SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
-		VALID_ROT_WB_ALL | VALID_MDP_WB_INTF_FORMAT,
-		C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
-	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2, SDE_MDP_FMT_LINEAR,
+		0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
+	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2, "Y_CBCR_H2V2",
+		SDE_MDP_FMT_LINEAR,
 		SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
-		VALID_ROT_WB_ALL | VALID_MDP_WB_INTF_FORMAT,
-		C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
-	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_VENUS, SDE_MDP_FMT_LINEAR,
+		0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
+	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_VENUS, "SDE/Y_CBCR_H2V2_VENUS",
+		SDE_MDP_FMT_LINEAR,
 		SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
-		VALID_ROT_WB_ALL | VALID_MDP_WB_INTF_FORMAT,
-		C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
-	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2_VENUS, SDE_MDP_FMT_LINEAR,
+		0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
+	FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2_VENUS, "SDE/Y_CRCB_H2V2_VENUS",
+		SDE_MDP_FMT_LINEAR,
 		SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
-		VALID_ROT_WB_ALL | VALID_MDP_WB_INTF_FORMAT,
-		C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
+		0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
 
 	{
 		FMT_YUV_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010),
-		.flag = VALID_ROT_R3_WB_FORMAT,
+		.description = "SDE/Y_CBCR_H2V2_P010",
+		.flag = 0,
 		.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
 		.chroma_sample = SDE_MDP_CHROMA_420,
 		.unpack_count = 2,
@@ -368,7 +383,8 @@
 	},
 	{
 		FMT_YUV_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_TP10),
-		.flag = VALID_ROT_R3_WB_FORMAT,
+		.description = "SDE/Y_CBCR_H2V2_TP10",
+		.flag = 0,
 		.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
 		.chroma_sample = SDE_MDP_CHROMA_420,
 		.unpack_count = 2,
@@ -381,19 +397,20 @@
 		.is_ubwc = SDE_MDP_COMPRESS_NONE,
 	},
 
-	FMT_YUV_PLANR(SDE_PIX_FMT_Y_CB_CR_H2V2, SDE_MDP_FMT_LINEAR,
-		SDE_MDP_CHROMA_420, VALID_ROT_WB_FORMAT |
-		VALID_MDP_WB_INTF_FORMAT, C2_R_Cr, C1_B_Cb),
-	FMT_YUV_PLANR(SDE_PIX_FMT_Y_CR_CB_H2V2, SDE_MDP_FMT_LINEAR,
-		SDE_MDP_CHROMA_420, VALID_ROT_WB_FORMAT |
-		VALID_MDP_WB_INTF_FORMAT, C1_B_Cb, C2_R_Cr),
-	FMT_YUV_PLANR(SDE_PIX_FMT_Y_CR_CB_GH2V2, SDE_MDP_FMT_LINEAR,
-		SDE_MDP_CHROMA_420, VALID_ROT_WB_FORMAT |
-		VALID_MDP_WB_INTF_FORMAT, C1_B_Cb, C2_R_Cr),
+	FMT_YUV_PLANR(SDE_PIX_FMT_Y_CB_CR_H2V2, "Y_CB_CR_H2V2",
+		SDE_MDP_FMT_LINEAR,
+		SDE_MDP_CHROMA_420, 0, C2_R_Cr, C1_B_Cb),
+	FMT_YUV_PLANR(SDE_PIX_FMT_Y_CR_CB_H2V2, "Y_CR_CB_H2V2",
+		SDE_MDP_FMT_LINEAR,
+		SDE_MDP_CHROMA_420, 0, C1_B_Cb, C2_R_Cr),
+	FMT_YUV_PLANR(SDE_PIX_FMT_Y_CR_CB_GH2V2, "SDE/Y_CR_CB_GH2V2",
+		SDE_MDP_FMT_LINEAR,
+		SDE_MDP_CHROMA_420, 0, C1_B_Cb, C2_R_Cr),
 
 	{
 		FMT_YUV_COMMON(SDE_PIX_FMT_YCBYCR_H2V1),
-		.flag = VALID_ROT_WB_FORMAT,
+		.description = "YCBYCR_H2V1",
+		.flag = 0,
 		.fetch_planes = SDE_MDP_PLANE_INTERLEAVED,
 		.chroma_sample = SDE_MDP_CHROMA_H2V1,
 		.unpack_count = 4,
@@ -403,61 +420,69 @@
 		.element = { C2_R_Cr, C0_G_Y, C1_B_Cb, C0_G_Y },
 		.is_ubwc = SDE_MDP_COMPRESS_NONE,
 	},
-	FMT_RGB_1555(SDE_PIX_FMT_RGBA_5551, 1, VALID_ROT_WB_ALL,
+	FMT_RGB_1555(SDE_PIX_FMT_RGBA_5551, "RGBA_5551", 1, 0,
 		C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
-	FMT_RGB_1555(SDE_PIX_FMT_ARGB_1555, 1, VALID_ROT_WB_ALL,
+	FMT_RGB_1555(SDE_PIX_FMT_ARGB_1555, "ARGB_1555", 1, 0,
 		C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
-	FMT_RGB_1555(SDE_PIX_FMT_ABGR_1555, 1, VALID_ROT_WB_ALL,
+	FMT_RGB_1555(SDE_PIX_FMT_ABGR_1555, "ABGR_1555", 1, 0,
 		C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
-	FMT_RGB_1555(SDE_PIX_FMT_BGRA_5551, 1, VALID_ROT_WB_ALL,
+	FMT_RGB_1555(SDE_PIX_FMT_BGRA_5551, "BGRA_5551", 1, 0,
 		C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
-	FMT_RGB_1555(SDE_PIX_FMT_BGRX_5551, 0, VALID_ROT_WB_ALL,
+	FMT_RGB_1555(SDE_PIX_FMT_BGRX_5551, "BGRX_5551", 0, 0,
 		C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
-	FMT_RGB_1555(SDE_PIX_FMT_RGBX_5551, 0, VALID_ROT_WB_ALL,
+	FMT_RGB_1555(SDE_PIX_FMT_RGBX_5551, "RGBX_5551", 0, 0,
 		C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
-	FMT_RGB_1555(SDE_PIX_FMT_XBGR_1555, 0, VALID_ROT_WB_ALL,
+	FMT_RGB_1555(SDE_PIX_FMT_XBGR_1555, "XBGR_1555", 0, 0,
 		C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
-	FMT_RGB_1555(SDE_PIX_FMT_XRGB_1555, 0, VALID_ROT_WB_ALL,
+	FMT_RGB_1555(SDE_PIX_FMT_XRGB_1555, "XRGB_1555", 0, 0,
 		C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
-	FMT_RGB_4444(SDE_PIX_FMT_RGBA_4444, 1, VALID_ROT_WB_ALL,
+	FMT_RGB_4444(SDE_PIX_FMT_RGBA_4444, "RGBA_4444", 1, 0,
 		C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
-	FMT_RGB_4444(SDE_PIX_FMT_ARGB_4444, 1, VALID_ROT_WB_ALL,
+	FMT_RGB_4444(SDE_PIX_FMT_ARGB_4444, "ARGB_4444", 1, 0,
 		C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
-	FMT_RGB_4444(SDE_PIX_FMT_BGRA_4444, 1, VALID_ROT_WB_ALL,
+	FMT_RGB_4444(SDE_PIX_FMT_BGRA_4444, "BGRA_4444", 1, 0,
 		C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
-	FMT_RGB_4444(SDE_PIX_FMT_ABGR_4444, 1, VALID_ROT_WB_ALL,
+	FMT_RGB_4444(SDE_PIX_FMT_ABGR_4444, "ABGR_4444", 1, 0,
 		C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
-	FMT_RGB_4444(SDE_PIX_FMT_RGBX_4444, 0, VALID_ROT_WB_ALL,
+	FMT_RGB_4444(SDE_PIX_FMT_RGBX_4444, "RGBX_4444", 0, 0,
 		C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
-	FMT_RGB_4444(SDE_PIX_FMT_XRGB_4444, 0, VALID_ROT_WB_ALL,
+	FMT_RGB_4444(SDE_PIX_FMT_XRGB_4444, "XRGB_4444", 0, 0,
 		C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
-	FMT_RGB_4444(SDE_PIX_FMT_BGRX_4444, 0, VALID_ROT_WB_ALL,
+	FMT_RGB_4444(SDE_PIX_FMT_BGRX_4444, "BGRX_4444", 0, 0,
 		C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
-	FMT_RGB_4444(SDE_PIX_FMT_XBGR_4444, 0, VALID_ROT_WB_ALL,
+	FMT_RGB_4444(SDE_PIX_FMT_XBGR_4444, "XBGR_4444", 0, 0,
 		C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
-	FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_R3_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT,
-		1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA, SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_R3_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT,
-		0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA, SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_1010102(SDE_PIX_FMT_BGRA_1010102, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_R3_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT,
-		1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA, SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_1010102(SDE_PIX_FMT_BGRX_1010102, SDE_MDP_FMT_LINEAR,
-		VALID_ROT_R3_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT,
-		0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA, SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_1010102(SDE_PIX_FMT_ARGB_2101010, SDE_MDP_FMT_LINEAR,
-		INVALID_WB_FORMAT, 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
+	FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102, "SDE/RGBA_1010102",
+		SDE_MDP_FMT_LINEAR,
+		0, 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
 		SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_1010102(SDE_PIX_FMT_XRGB_2101010, SDE_MDP_FMT_LINEAR,
-		INVALID_WB_FORMAT, 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
+	FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102, "SDE/RGBX_1010102",
+		SDE_MDP_FMT_LINEAR,
+		0, 0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
 		SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_1010102(SDE_PIX_FMT_ABGR_2101010, SDE_MDP_FMT_LINEAR,
-		INVALID_WB_FORMAT, 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
+	FMT_RGB_1010102(SDE_PIX_FMT_BGRA_1010102, "SDE/BGRA_1010102",
+		SDE_MDP_FMT_LINEAR,
+		0, 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
 		SDE_MDP_COMPRESS_NONE),
-	FMT_RGB_1010102(SDE_PIX_FMT_XBGR_2101010, SDE_MDP_FMT_LINEAR,
-		INVALID_WB_FORMAT, 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
+	FMT_RGB_1010102(SDE_PIX_FMT_BGRX_1010102, "SDE/BGRX_1010102",
+		SDE_MDP_FMT_LINEAR,
+		0, 0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_1010102(SDE_PIX_FMT_ARGB_2101010, "SDE/ARGB_2101010",
+		SDE_MDP_FMT_LINEAR,
+		0, 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_1010102(SDE_PIX_FMT_XRGB_2101010, "SDE/XRGB_2101010",
+		SDE_MDP_FMT_LINEAR,
+		0, 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_1010102(SDE_PIX_FMT_ABGR_2101010, "SDE/ABGR_2101010",
+		SDE_MDP_FMT_LINEAR,
+		0, 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
+		SDE_MDP_COMPRESS_NONE),
+	FMT_RGB_1010102(SDE_PIX_FMT_XBGR_2101010, "SDE/XBGR_2101010",
+		SDE_MDP_FMT_LINEAR,
+		0, 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
 		SDE_MDP_COMPRESS_NONE),
 };
 
@@ -518,24 +543,3 @@
 
 	return 0;
 }
-
-/*
- * sde_mdp_is_wb_format - determine if the given fmt is supported by writeback
- * @fmt: Pointer to format parameter
- */
-bool sde_mdp_is_wb_format(struct sde_mdp_format_params *fmt)
-{
-	struct sde_rot_data_type *mdata = sde_rot_get_mdata();
-
-	if (!mdata || !fmt)
-		return false;
-	else if (test_bit(SDE_CAPS_R1_WB, mdata->sde_caps_map) &&
-			(fmt->flag & VALID_ROT_WB_FORMAT))
-		return true;
-	else if (test_bit(SDE_CAPS_R3_WB, mdata->sde_caps_map) &&
-			(fmt->flag & VALID_ROT_R3_WB_FORMAT))
-		return true;
-	else
-		return false;
-}
-
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_formats.h b/drivers/media/platform/msm/sde/rotator/sde_rotator_formats.h
index 198bee3..23548b9 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_formats.h
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_formats.h
@@ -17,19 +17,11 @@
 #include <linux/types.h>
 #include <media/msm_sde_rotator.h>
 
-/* internal formats */
-#define SDE_PIX_FMT_Y_CBCR_H2V2_TP10	v4l2_fourcc('T', 'P', '1', '0')
-
 #define SDE_ROT_MAX_PLANES		4
 
 #define UBWC_META_MACRO_W_H		16
 #define UBWC_META_BLOCK_SIZE		256
 
-#define INVALID_WB_FORMAT		0
-#define VALID_ROT_WB_FORMAT		BIT(0)
-#define VALID_MDP_WB_INTF_FORMAT	BIT(1)
-#define VALID_ROT_R3_WB_FORMAT		BIT(2)
-
 /*
  * Value of enum chosen to fit the number of bits
  * expected by the HW programming.
@@ -79,6 +71,7 @@
 
 struct sde_mdp_format_params {
 	u32 format;
+	const char *description;
 	u32 flag;
 	u8 is_yuv;
 	u8 is_ubwc;
@@ -111,8 +104,6 @@
 
 int sde_rot_get_ubwc_micro_dim(u32 format, u16 *w, u16 *h);
 
-bool sde_mdp_is_wb_format(struct sde_mdp_format_params *fmt);
-
 static inline bool sde_mdp_is_tilea4x_format(struct sde_mdp_format_params *fmt)
 {
 	return fmt && (fmt->frame_format == SDE_MDP_FMT_TILE_A4X);
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_r1.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_r1.c
index 31cc4f3..5b574ed 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_r1.c
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_r1.c
@@ -45,6 +45,100 @@
 	struct sde_mdp_hw_resource *mdp_hw;
 };
 
+static u32 sde_hw_rotator_input_pixfmts[] = {
+	SDE_PIX_FMT_XRGB_8888,
+	SDE_PIX_FMT_ARGB_8888,
+	SDE_PIX_FMT_ABGR_8888,
+	SDE_PIX_FMT_RGBA_8888,
+	SDE_PIX_FMT_BGRA_8888,
+	SDE_PIX_FMT_RGBX_8888,
+	SDE_PIX_FMT_BGRX_8888,
+	SDE_PIX_FMT_XBGR_8888,
+	SDE_PIX_FMT_RGBA_5551,
+	SDE_PIX_FMT_ARGB_1555,
+	SDE_PIX_FMT_ABGR_1555,
+	SDE_PIX_FMT_BGRA_5551,
+	SDE_PIX_FMT_BGRX_5551,
+	SDE_PIX_FMT_RGBX_5551,
+	SDE_PIX_FMT_XBGR_1555,
+	SDE_PIX_FMT_XRGB_1555,
+	SDE_PIX_FMT_ARGB_4444,
+	SDE_PIX_FMT_RGBA_4444,
+	SDE_PIX_FMT_BGRA_4444,
+	SDE_PIX_FMT_ABGR_4444,
+	SDE_PIX_FMT_RGBX_4444,
+	SDE_PIX_FMT_XRGB_4444,
+	SDE_PIX_FMT_BGRX_4444,
+	SDE_PIX_FMT_XBGR_4444,
+	SDE_PIX_FMT_RGB_888,
+	SDE_PIX_FMT_BGR_888,
+	SDE_PIX_FMT_RGB_565,
+	SDE_PIX_FMT_BGR_565,
+	SDE_PIX_FMT_Y_CB_CR_H2V2,
+	SDE_PIX_FMT_Y_CR_CB_H2V2,
+	SDE_PIX_FMT_Y_CR_CB_GH2V2,
+	SDE_PIX_FMT_Y_CBCR_H2V2,
+	SDE_PIX_FMT_Y_CRCB_H2V2,
+	SDE_PIX_FMT_Y_CBCR_H1V2,
+	SDE_PIX_FMT_Y_CRCB_H1V2,
+	SDE_PIX_FMT_Y_CBCR_H2V1,
+	SDE_PIX_FMT_Y_CRCB_H2V1,
+	SDE_PIX_FMT_YCBYCR_H2V1,
+	SDE_PIX_FMT_Y_CBCR_H2V2_VENUS,
+	SDE_PIX_FMT_Y_CRCB_H2V2_VENUS,
+	SDE_PIX_FMT_RGBA_8888_UBWC,
+	SDE_PIX_FMT_RGBX_8888_UBWC,
+	SDE_PIX_FMT_RGB_565_UBWC,
+	SDE_PIX_FMT_Y_CBCR_H2V2_UBWC,
+};
+
+static u32 sde_hw_rotator_output_pixfmts[] = {
+	SDE_PIX_FMT_XRGB_8888,
+	SDE_PIX_FMT_ARGB_8888,
+	SDE_PIX_FMT_ABGR_8888,
+	SDE_PIX_FMT_RGBA_8888,
+	SDE_PIX_FMT_BGRA_8888,
+	SDE_PIX_FMT_RGBX_8888,
+	SDE_PIX_FMT_BGRX_8888,
+	SDE_PIX_FMT_XBGR_8888,
+	SDE_PIX_FMT_RGBA_5551,
+	SDE_PIX_FMT_ARGB_1555,
+	SDE_PIX_FMT_ABGR_1555,
+	SDE_PIX_FMT_BGRA_5551,
+	SDE_PIX_FMT_BGRX_5551,
+	SDE_PIX_FMT_RGBX_5551,
+	SDE_PIX_FMT_XBGR_1555,
+	SDE_PIX_FMT_XRGB_1555,
+	SDE_PIX_FMT_ARGB_4444,
+	SDE_PIX_FMT_RGBA_4444,
+	SDE_PIX_FMT_BGRA_4444,
+	SDE_PIX_FMT_ABGR_4444,
+	SDE_PIX_FMT_RGBX_4444,
+	SDE_PIX_FMT_XRGB_4444,
+	SDE_PIX_FMT_BGRX_4444,
+	SDE_PIX_FMT_XBGR_4444,
+	SDE_PIX_FMT_RGB_888,
+	SDE_PIX_FMT_BGR_888,
+	SDE_PIX_FMT_RGB_565,
+	SDE_PIX_FMT_BGR_565,
+	SDE_PIX_FMT_Y_CB_CR_H2V2,
+	SDE_PIX_FMT_Y_CR_CB_H2V2,
+	SDE_PIX_FMT_Y_CR_CB_GH2V2,
+	SDE_PIX_FMT_Y_CBCR_H2V2,
+	SDE_PIX_FMT_Y_CRCB_H2V2,
+	SDE_PIX_FMT_Y_CBCR_H1V2,
+	SDE_PIX_FMT_Y_CRCB_H1V2,
+	SDE_PIX_FMT_Y_CBCR_H2V1,
+	SDE_PIX_FMT_Y_CRCB_H2V1,
+	SDE_PIX_FMT_YCBYCR_H2V1,
+	SDE_PIX_FMT_Y_CBCR_H2V2_VENUS,
+	SDE_PIX_FMT_Y_CRCB_H2V2_VENUS,
+	SDE_PIX_FMT_RGBA_8888_UBWC,
+	SDE_PIX_FMT_RGBX_8888_UBWC,
+	SDE_PIX_FMT_RGB_565_UBWC,
+	SDE_PIX_FMT_Y_CBCR_H2V2_UBWC,
+};
+
 static struct sde_mdp_hw_resource *sde_rotator_hw_alloc(
 	struct sde_rot_mgr *mgr, u32 ctl_id, u32 wb_id, int irq_num)
 {
@@ -403,6 +497,52 @@
 	return cnt;
 }
 
+/*
+ * sde_hw_rotator_get_pixfmt - get the indexed pixel format
+ * @mgr: Pointer to rotator manager
+ * @index: index of pixel format
+ * @input: true for input port; false for output port
+ */
+static u32 sde_hw_rotator_get_pixfmt(struct sde_rot_mgr *mgr,
+		int index, bool input)
+{
+	if (input) {
+		if (index < ARRAY_SIZE(sde_hw_rotator_input_pixfmts))
+			return sde_hw_rotator_input_pixfmts[index];
+		else
+			return 0;
+	} else {
+		if (index < ARRAY_SIZE(sde_hw_rotator_output_pixfmts))
+			return sde_hw_rotator_output_pixfmts[index];
+		else
+			return 0;
+	}
+}
+
+/*
+ * sde_hw_rotator_is_valid_pixfmt - verify if the given pixel format is valid
+ * @mgr: Pointer to rotator manager
+ * @pixfmt: pixel format to be verified
+ * @input: true for input port; false for output port
+ */
+static int sde_hw_rotator_is_valid_pixfmt(struct sde_rot_mgr *mgr, u32 pixfmt,
+		bool input)
+{
+	int i;
+
+	if (input) {
+		for (i = 0; i < ARRAY_SIZE(sde_hw_rotator_input_pixfmts); i++)
+			if (sde_hw_rotator_input_pixfmts[i] == pixfmt)
+				return true;
+	} else {
+		for (i = 0; i < ARRAY_SIZE(sde_hw_rotator_output_pixfmts); i++)
+			if (sde_hw_rotator_output_pixfmts[i] == pixfmt)
+				return true;
+	}
+
+	return false;
+}
+
 static int sde_rotator_hw_parse_dt(struct sde_rotator_r1_data *hw_data,
 		struct platform_device *dev)
 {
@@ -552,6 +692,8 @@
 	mgr->ops_hw_show_caps = sde_rotator_hw_show_caps;
 	mgr->ops_hw_show_state = sde_rotator_hw_show_state;
 	mgr->ops_hw_create_debugfs = sde_rotator_r1_create_debugfs;
+	mgr->ops_hw_get_pixfmt = sde_hw_rotator_get_pixfmt;
+	mgr->ops_hw_is_valid_pixfmt = sde_hw_rotator_is_valid_pixfmt;
 
 	ret = sde_rotator_hw_parse_dt(mgr->hw_data, mgr->pdev);
 	if (ret)
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c
index 6caf50c..b570b3e 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c
@@ -78,6 +78,126 @@
 #define SDE_ROTREG_READ(base, off) \
 	readl_relaxed(base + (off))
 
+static u32 sde_hw_rotator_input_pixfmts[] = {
+	SDE_PIX_FMT_XRGB_8888,
+	SDE_PIX_FMT_ARGB_8888,
+	SDE_PIX_FMT_ABGR_8888,
+	SDE_PIX_FMT_RGBA_8888,
+	SDE_PIX_FMT_BGRA_8888,
+	SDE_PIX_FMT_RGBX_8888,
+	SDE_PIX_FMT_BGRX_8888,
+	SDE_PIX_FMT_XBGR_8888,
+	SDE_PIX_FMT_RGBA_5551,
+	SDE_PIX_FMT_ARGB_1555,
+	SDE_PIX_FMT_ABGR_1555,
+	SDE_PIX_FMT_BGRA_5551,
+	SDE_PIX_FMT_BGRX_5551,
+	SDE_PIX_FMT_RGBX_5551,
+	SDE_PIX_FMT_XBGR_1555,
+	SDE_PIX_FMT_XRGB_1555,
+	SDE_PIX_FMT_ARGB_4444,
+	SDE_PIX_FMT_RGBA_4444,
+	SDE_PIX_FMT_BGRA_4444,
+	SDE_PIX_FMT_ABGR_4444,
+	SDE_PIX_FMT_RGBX_4444,
+	SDE_PIX_FMT_XRGB_4444,
+	SDE_PIX_FMT_BGRX_4444,
+	SDE_PIX_FMT_XBGR_4444,
+	SDE_PIX_FMT_RGB_888,
+	SDE_PIX_FMT_BGR_888,
+	SDE_PIX_FMT_RGB_565,
+	SDE_PIX_FMT_BGR_565,
+	SDE_PIX_FMT_Y_CB_CR_H2V2,
+	SDE_PIX_FMT_Y_CR_CB_H2V2,
+	SDE_PIX_FMT_Y_CR_CB_GH2V2,
+	SDE_PIX_FMT_Y_CBCR_H2V2,
+	SDE_PIX_FMT_Y_CRCB_H2V2,
+	SDE_PIX_FMT_Y_CBCR_H1V2,
+	SDE_PIX_FMT_Y_CRCB_H1V2,
+	SDE_PIX_FMT_Y_CBCR_H2V1,
+	SDE_PIX_FMT_Y_CRCB_H2V1,
+	SDE_PIX_FMT_YCBYCR_H2V1,
+	SDE_PIX_FMT_Y_CBCR_H2V2_VENUS,
+	SDE_PIX_FMT_Y_CRCB_H2V2_VENUS,
+	SDE_PIX_FMT_RGBA_8888_UBWC,
+	SDE_PIX_FMT_RGBX_8888_UBWC,
+	SDE_PIX_FMT_RGB_565_UBWC,
+	SDE_PIX_FMT_Y_CBCR_H2V2_UBWC,
+	SDE_PIX_FMT_RGBA_1010102,
+	SDE_PIX_FMT_RGBX_1010102,
+	SDE_PIX_FMT_ARGB_2101010,
+	SDE_PIX_FMT_XRGB_2101010,
+	SDE_PIX_FMT_BGRA_1010102,
+	SDE_PIX_FMT_BGRX_1010102,
+	SDE_PIX_FMT_ABGR_2101010,
+	SDE_PIX_FMT_XBGR_2101010,
+	SDE_PIX_FMT_RGBA_1010102_UBWC,
+	SDE_PIX_FMT_RGBX_1010102_UBWC,
+	SDE_PIX_FMT_Y_CBCR_H2V2_P010,
+	SDE_PIX_FMT_Y_CBCR_H2V2_TP10,
+	SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC,
+};
+
+static u32 sde_hw_rotator_output_pixfmts[] = {
+	SDE_PIX_FMT_XRGB_8888,
+	SDE_PIX_FMT_ARGB_8888,
+	SDE_PIX_FMT_ABGR_8888,
+	SDE_PIX_FMT_RGBA_8888,
+	SDE_PIX_FMT_BGRA_8888,
+	SDE_PIX_FMT_RGBX_8888,
+	SDE_PIX_FMT_BGRX_8888,
+	SDE_PIX_FMT_XBGR_8888,
+	SDE_PIX_FMT_RGBA_5551,
+	SDE_PIX_FMT_ARGB_1555,
+	SDE_PIX_FMT_ABGR_1555,
+	SDE_PIX_FMT_BGRA_5551,
+	SDE_PIX_FMT_BGRX_5551,
+	SDE_PIX_FMT_RGBX_5551,
+	SDE_PIX_FMT_XBGR_1555,
+	SDE_PIX_FMT_XRGB_1555,
+	SDE_PIX_FMT_ARGB_4444,
+	SDE_PIX_FMT_RGBA_4444,
+	SDE_PIX_FMT_BGRA_4444,
+	SDE_PIX_FMT_ABGR_4444,
+	SDE_PIX_FMT_RGBX_4444,
+	SDE_PIX_FMT_XRGB_4444,
+	SDE_PIX_FMT_BGRX_4444,
+	SDE_PIX_FMT_XBGR_4444,
+	SDE_PIX_FMT_RGB_888,
+	SDE_PIX_FMT_BGR_888,
+	SDE_PIX_FMT_RGB_565,
+	SDE_PIX_FMT_BGR_565,
+	/* SDE_PIX_FMT_Y_CB_CR_H2V2 */
+	/* SDE_PIX_FMT_Y_CR_CB_H2V2 */
+	/* SDE_PIX_FMT_Y_CR_CB_GH2V2 */
+	SDE_PIX_FMT_Y_CBCR_H2V2,
+	SDE_PIX_FMT_Y_CRCB_H2V2,
+	SDE_PIX_FMT_Y_CBCR_H1V2,
+	SDE_PIX_FMT_Y_CRCB_H1V2,
+	SDE_PIX_FMT_Y_CBCR_H2V1,
+	SDE_PIX_FMT_Y_CRCB_H2V1,
+	/* SDE_PIX_FMT_YCBYCR_H2V1 */
+	SDE_PIX_FMT_Y_CBCR_H2V2_VENUS,
+	SDE_PIX_FMT_Y_CRCB_H2V2_VENUS,
+	SDE_PIX_FMT_RGBA_8888_UBWC,
+	SDE_PIX_FMT_RGBX_8888_UBWC,
+	SDE_PIX_FMT_RGB_565_UBWC,
+	SDE_PIX_FMT_Y_CBCR_H2V2_UBWC,
+	SDE_PIX_FMT_RGBA_1010102,
+	SDE_PIX_FMT_RGBX_1010102,
+	/* SDE_PIX_FMT_ARGB_2101010 */
+	/* SDE_PIX_FMT_XRGB_2101010 */
+	SDE_PIX_FMT_BGRA_1010102,
+	SDE_PIX_FMT_BGRX_1010102,
+	/* SDE_PIX_FMT_ABGR_2101010 */
+	/* SDE_PIX_FMT_XBGR_2101010 */
+	SDE_PIX_FMT_RGBA_1010102_UBWC,
+	SDE_PIX_FMT_RGBX_1010102_UBWC,
+	SDE_PIX_FMT_Y_CBCR_H2V2_P010,
+	SDE_PIX_FMT_Y_CBCR_H2V2_TP10,
+	SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC,
+};
+
 /* Invalid software timestamp value for initialization */
 #define SDE_REGDMA_SWTS_INVALID	(~0)
 
@@ -1872,6 +1992,52 @@
 }
 
 /*
+ * sde_hw_rotator_get_pixfmt - get the indexed pixel format
+ * @mgr: Pointer to rotator manager
+ * @index: index of pixel format
+ * @input: true for input port; false for output port
+ */
+static u32 sde_hw_rotator_get_pixfmt(struct sde_rot_mgr *mgr,
+		int index, bool input)
+{
+	if (input) {
+		if (index < ARRAY_SIZE(sde_hw_rotator_input_pixfmts))
+			return sde_hw_rotator_input_pixfmts[index];
+		else
+			return 0;
+	} else {
+		if (index < ARRAY_SIZE(sde_hw_rotator_output_pixfmts))
+			return sde_hw_rotator_output_pixfmts[index];
+		else
+			return 0;
+	}
+}
+
+/*
+ * sde_hw_rotator_is_valid_pixfmt - verify if the given pixel format is valid
+ * @mgr: Pointer to rotator manager
+ * @pixfmt: pixel format to be verified
+ * @input: true for input port; false for output port
+ */
+static int sde_hw_rotator_is_valid_pixfmt(struct sde_rot_mgr *mgr, u32 pixfmt,
+		bool input)
+{
+	int i;
+
+	if (input) {
+		for (i = 0; i < ARRAY_SIZE(sde_hw_rotator_input_pixfmts); i++)
+			if (sde_hw_rotator_input_pixfmts[i] == pixfmt)
+				return true;
+	} else {
+		for (i = 0; i < ARRAY_SIZE(sde_hw_rotator_output_pixfmts); i++)
+			if (sde_hw_rotator_output_pixfmts[i] == pixfmt)
+				return true;
+	}
+
+	return false;
+}
+
+/*
  * sde_hw_rotator_parse_dt - parse r3 specific device tree settings
  * @hw_data: Pointer to rotator hw
  * @dev: Pointer to platform device
@@ -1949,6 +2115,8 @@
 	mgr->ops_hw_show_caps = sde_hw_rotator_show_caps;
 	mgr->ops_hw_show_state = sde_hw_rotator_show_state;
 	mgr->ops_hw_create_debugfs = sde_rotator_r3_create_debugfs;
+	mgr->ops_hw_get_pixfmt = sde_hw_rotator_get_pixfmt;
+	mgr->ops_hw_is_valid_pixfmt = sde_hw_rotator_is_valid_pixfmt;
 
 	ret = sde_hw_rotator_parse_dt(mgr->hw_data, mgr->pdev);
 	if (ret)