<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 23 Dec 2019 at 15:50, Zhihui Chen <<a href="mailto:chenzhihui4@huawei.com">chenzhihui4@huawei.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">add gamma_set function, and we can also use it to adjust the brightness of the<br>
display.<br>
<br>
Signed-off-by: Zhihui Chen <<a href="mailto:chenzhihui4@huawei.com" target="_blank">chenzhihui4@huawei.com</a>><br></blockquote><div><br></div>Thanks for the patch.<br>Acked-by: Xinliang Liu <<a href="mailto:xinliang.liu@linaro.org">xinliang.liu@linaro.org</a>><br><div>Applied to drm-misc-next.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
---<br>
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    | 37 +++++++++++++++++++<br>
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h  |  5 +++<br>
 2 files changed, 42 insertions(+)<br>
<br>
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c<br>
index 24de937c1cb1..f1ce6cb099d0 100644<br>
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c<br>
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c<br>
@@ -456,6 +456,42 @@ static void hibmc_crtc_disable_vblank(struct drm_crtc *crtc)<br>
               priv->mmio + HIBMC_RAW_INTERRUPT_EN);<br>
 }<br>
<br>
+static void hibmc_crtc_load_lut(struct drm_crtc *crtc)<br>
+{<br>
+       struct hibmc_drm_private *priv = crtc->dev->dev_private;<br>
+       void __iomem   *mmio = priv->mmio;<br>
+       u16 *r, *g, *b;<br>
+       unsigned int reg;<br>
+       int i;<br>
+<br>
+       r = crtc->gamma_store;<br>
+       g = r + crtc->gamma_size;<br>
+       b = g + crtc->gamma_size;<br>
+<br>
+       for (i = 0; i < crtc->gamma_size; i++) {<br>
+               unsigned int offset = i << 2;<br>
+               u8 red = *r++ >> 8;<br>
+               u8 green = *g++ >> 8;<br>
+               u8 blue = *b++ >> 8;<br>
+               u32 rgb = (red << 16) | (green << 8) | blue;<br>
+<br>
+               writel(rgb, mmio + HIBMC_CRT_PALETTE + offset);<br>
+       }<br>
+<br>
+       reg = readl(priv->mmio + HIBMC_CRT_DISP_CTL);<br>
+       reg |= HIBMC_FIELD(HIBMC_CTL_DISP_CTL_GAMMA, 1);<br>
+       writel(reg, priv->mmio + HIBMC_CRT_DISP_CTL);<br>
+}<br>
+<br>
+static int hibmc_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,<br>
+                             u16 *blue, uint32_t size,<br>
+                             struct drm_modeset_acquire_ctx *ctx)<br>
+{<br>
+       hibmc_crtc_load_lut(crtc);<br>
+<br>
+       return 0;<br>
+}<br>
+<br>
 static const struct drm_crtc_funcs hibmc_crtc_funcs = {<br>
        .page_flip = drm_atomic_helper_page_flip,<br>
        .set_config = drm_atomic_helper_set_config,<br>
@@ -465,6 +501,7 @@ static const struct drm_crtc_funcs hibmc_crtc_funcs = {<br>
        .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,<br>
        .enable_vblank = hibmc_crtc_enable_vblank,<br>
        .disable_vblank = hibmc_crtc_disable_vblank,<br>
+       .gamma_set = hibmc_crtc_gamma_set,<br>
 };<br>
<br>
 static const struct drm_crtc_helper_funcs hibmc_crtc_helper_funcs = {<br>
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h<br>
index b9e20cfcfb5a..9b7e85947113 100644<br>
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h<br>
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h<br>
@@ -91,6 +91,9 @@<br>
 #define HIBMC_CRT_DISP_CTL_TIMING(x)           ((x) << 8)<br>
 #define HIBMC_CRT_DISP_CTL_TIMING_MASK         0x100<br>
<br>
+#define HIBMC_CTL_DISP_CTL_GAMMA(x)            ((x) << 3)<br>
+#define HIBMC_CTL_DISP_CTL_GAMMA_MASK          0x08<br>
+<br>
 #define HIBMC_CRT_DISP_CTL_PLANE(x)            ((x) << 2)<br>
 #define HIBMC_CRT_DISP_CTL_PLANE_MASK          4<br>
<br>
@@ -193,5 +196,7 @@<br>
 #define CRT_PLL2_HS_148MHZ                     0xB0CCCCCD<br>
 #define CRT_PLL2_HS_193MHZ                     0xC0872B02<br>
<br>
+#define HIBMC_CRT_PALETTE                       0x80C00<br>
+<br>
 #define HIBMC_FIELD(field, value) (field(value) & field##_MASK)<br>
 #endif<br>
-- <br>
2.20.1<br>
<br>
<br>
</blockquote></div></div>