aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
diff options
context:
space:
mode:
authorSean Paul <seanpaul@chromium.org>2019-11-05 16:10:23 -0500
committerCK Hu <ck.hu@mediatek.com>2019-11-06 16:00:45 +0800
commitb368d3ecab2db45a4fa296fe825d4ef6893f4620 (patch)
tree68be9fd8b5b6395abf302dc522ee8998ebad6749 /drivers/gpu/drm/mediatek/mtk_disp_ovl.c
parentdrm/mediatek: Support reflect-y plane rotation (diff)
downloadlinux-dev-b368d3ecab2db45a4fa296fe825d4ef6893f4620.tar.xz
linux-dev-b368d3ecab2db45a4fa296fe825d4ef6893f4620.zip
drm/mediatek: Support reflect-x plane rotation
Add support for REFLECT_X rotations. Cc: Fritz Koenig <frkoenig@chromium.org> Cc: Daniele Castagna <dcastagna@chromium.org> Cc: Miguel Casas <mcasas@chromium.org> Cc: Mark Yacoub <markyacoub@google.com> Signed-off-by: Sean Paul <seanpaul@chromium.org> Signed-off-by: CK Hu <ck.hu@mediatek.com>
Diffstat (limited to '')
-rw-r--r--drivers/gpu/drm/mediatek/mtk_disp_ovl.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
index fae10aead3d5..f4c4d3fedc5f 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
@@ -53,6 +53,7 @@
#define OVL_CON_AEN BIT(8)
#define OVL_CON_ALPHA 0xff
#define OVL_CON_VIRT_FLIP BIT(9)
+#define OVL_CON_HORZ_FLIP BIT(10)
struct mtk_disp_ovl_data {
unsigned int addr;
@@ -142,7 +143,8 @@ static unsigned int mtk_ovl_layer_nr(struct mtk_ddp_comp *comp)
static unsigned int mtk_ovl_supported_rotations(struct mtk_ddp_comp *comp)
{
- return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_Y;
+ return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_Y |
+ DRM_MODE_REFLECT_X;
}
static int mtk_ovl_layer_check(struct mtk_ddp_comp *comp, unsigned int idx,
@@ -153,6 +155,7 @@ static int mtk_ovl_layer_check(struct mtk_ddp_comp *comp, unsigned int idx,
rotation = drm_rotation_simplify(state->rotation,
DRM_MODE_ROTATE_0 |
+ DRM_MODE_REFLECT_X |
DRM_MODE_REFLECT_Y);
rotation &= ~DRM_MODE_ROTATE_0;
@@ -269,6 +272,11 @@ static void mtk_ovl_layer_config(struct mtk_ddp_comp *comp, unsigned int idx,
addr += (pending->height - 1) * pending->pitch;
}
+ if (pending->rotation & DRM_MODE_REFLECT_X) {
+ con |= OVL_CON_HORZ_FLIP;
+ addr += pending->pitch - 1;
+ }
+
writel_relaxed(con, comp->regs + DISP_REG_OVL_CON(idx));
writel_relaxed(pitch, comp->regs + DISP_REG_OVL_PITCH(idx));
writel_relaxed(src_size, comp->regs + DISP_REG_OVL_SRC_SIZE(idx));