drm/mediatek: add component DITHER
authorYongqiang Niu <yongqiang.niu@mediatek.com>
Thu, 29 Aug 2019 14:50:39 +0000 (22:50 +0800)
committerCK Hu <ck.hu@mediatek.com>
Wed, 9 Oct 2019 08:10:13 +0000 (16:10 +0800)
This patch add component DITHER

Signed-off-by: Yongqiang Niu <yongqiang.niu@mediatek.com>
Signed-off-by: CK Hu <ck.hu@mediatek.com>
drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h

index 1f6df17b244e6936ef4adde1a953e0c92a5bc4a9..74056a18dc34779fab64d591405f621f376cc437 100644 (file)
 #define CCORR_RELAY_MODE                       BIT(0)
 #define DISP_CCORR_SIZE                                0x0030
 
+#define DISP_DITHER_EN                         0x0000
+#define DITHER_EN                              BIT(0)
+#define DISP_DITHER_CFG                                0x0020
+#define DITHER_RELAY_MODE                      BIT(0)
+#define DISP_DITHER_SIZE                       0x0030
+
 #define DISP_GAMMA_EN                          0x0000
 #define DISP_GAMMA_CFG                         0x0020
 #define DISP_GAMMA_SIZE                                0x0030
@@ -147,6 +153,24 @@ static void mtk_ccorr_stop(struct mtk_ddp_comp *comp)
        writel_relaxed(0x0, comp->regs + DISP_CCORR_EN);
 }
 
+static void mtk_dither_config(struct mtk_ddp_comp *comp, unsigned int w,
+                             unsigned int h, unsigned int vrefresh,
+                             unsigned int bpc)
+{
+       writel(h << 16 | w, comp->regs + DISP_DITHER_SIZE);
+       writel(DITHER_RELAY_MODE, comp->regs + DISP_DITHER_CFG);
+}
+
+static void mtk_dither_start(struct mtk_ddp_comp *comp)
+{
+       writel(DITHER_EN, comp->regs + DISP_DITHER_EN);
+}
+
+static void mtk_dither_stop(struct mtk_ddp_comp *comp)
+{
+       writel_relaxed(0x0, comp->regs + DISP_DITHER_EN);
+}
+
 static void mtk_gamma_config(struct mtk_ddp_comp *comp, unsigned int w,
                             unsigned int h, unsigned int vrefresh,
                             unsigned int bpc)
@@ -201,6 +225,12 @@ static const struct mtk_ddp_comp_funcs ddp_ccorr = {
        .stop = mtk_ccorr_stop,
 };
 
+static const struct mtk_ddp_comp_funcs ddp_dither = {
+       .config = mtk_dither_config,
+       .start = mtk_dither_start,
+       .stop = mtk_dither_stop,
+};
+
 static const struct mtk_ddp_comp_funcs ddp_gamma = {
        .gamma_set = mtk_gamma_set,
        .config = mtk_gamma_config,
@@ -225,6 +255,7 @@ static const char * const mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX] = {
        [MTK_DISP_CCORR] = "ccorr",
        [MTK_DISP_AAL] = "aal",
        [MTK_DISP_GAMMA] = "gamma",
+       [MTK_DISP_DITHER] = "dither",
        [MTK_DISP_UFOE] = "ufoe",
        [MTK_DSI] = "dsi",
        [MTK_DPI] = "dpi",
@@ -247,6 +278,7 @@ static const struct mtk_ddp_comp_match mtk_ddp_matches[DDP_COMPONENT_ID_MAX] = {
        [DDP_COMPONENT_CCORR]   = { MTK_DISP_CCORR,     0, &ddp_ccorr },
        [DDP_COMPONENT_COLOR0]  = { MTK_DISP_COLOR,     0, NULL },
        [DDP_COMPONENT_COLOR1]  = { MTK_DISP_COLOR,     1, NULL },
+       [DDP_COMPONENT_DITHER]  = { MTK_DISP_DITHER,    0, &ddp_dither },
        [DDP_COMPONENT_DPI0]    = { MTK_DPI,            0, NULL },
        [DDP_COMPONENT_DPI1]    = { MTK_DPI,            1, NULL },
        [DDP_COMPONENT_DSI0]    = { MTK_DSI,            0, NULL },
index b5869a1d33451ed1a976b75e8db3f7cb5064a399..c085e78a98bf9a17f41c6fb4dbb0a9fda905eb63 100644 (file)
@@ -21,6 +21,7 @@ enum mtk_ddp_comp_type {
        MTK_DISP_WDMA,
        MTK_DISP_COLOR,
        MTK_DISP_CCORR,
+       MTK_DISP_DITHER,
        MTK_DISP_AAL,
        MTK_DISP_GAMMA,
        MTK_DISP_UFOE,
@@ -40,6 +41,7 @@ enum mtk_ddp_comp_id {
        DDP_COMPONENT_CCORR,
        DDP_COMPONENT_COLOR0,
        DDP_COMPONENT_COLOR1,
+       DDP_COMPONENT_DITHER,
        DDP_COMPONENT_DPI0,
        DDP_COMPONENT_DPI1,
        DDP_COMPONENT_DSI0,