Re: [PATCH] drm/hisilicon/hibmc: add DPMS on/off function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Fri, 20 Dec 2019 at 10:31, Zhihui Chen <chenzhihui4@xxxxxxxxxx> wrote:
add DPMS function to turn on/off signal of monitor

Signed-off-by: Zhihui Chen <chenzhihui4@xxxxxxxxxx>
 
Thanks for the patch.
Acked-by: Xinliang Liu <xinliang.liu@xxxxxxxxxx>
Applied to drm-misc-next.
 
---
 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c   | 16 ++++++++++++++++
 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h |  6 ++++++
 2 files changed, 22 insertions(+)

diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index 722e369f30d4..24de937c1cb1 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -189,6 +189,20 @@ static struct drm_plane *hibmc_plane_init(struct hibmc_drm_private *priv)
        return plane;
 }

+static void hibmc_crtc_dpms(struct drm_crtc *crtc, int dpms)
+{
+       struct hibmc_drm_private *priv = crtc->dev->dev_private;
+       unsigned int reg;
+
+       reg = readl(priv->mmio + HIBMC_CRT_DISP_CTL);
+       reg &= ~HIBMC_CRT_DISP_CTL_DPMS_MASK;
+       reg |= HIBMC_FIELD(HIBMC_CRT_DISP_CTL_DPMS, dpms);
+       reg &= ~HIBMC_CRT_DISP_CTL_TIMING_MASK;
+       if (dpms == HIBMC_CRT_DPMS_ON)
+               reg |= HIBMC_CRT_DISP_CTL_TIMING(1);
+       writel(reg, priv->mmio + HIBMC_CRT_DISP_CTL);
+}
+
 static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc,
                                     struct drm_crtc_state *old_state)
 {
@@ -205,6 +219,7 @@ static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc,
        reg |= HIBMC_CURR_GATE_DISPLAY(1);
        hibmc_set_current_gate(priv, reg);
        drm_crtc_vblank_on(crtc);
+       hibmc_crtc_dpms(crtc, HIBMC_CRT_DPMS_ON);
 }

 static void hibmc_crtc_atomic_disable(struct drm_crtc *crtc,
@@ -213,6 +228,7 @@ static void hibmc_crtc_atomic_disable(struct drm_crtc *crtc,
        unsigned int reg;
        struct hibmc_drm_private *priv = crtc->dev->dev_private;

+       hibmc_crtc_dpms(crtc, HIBMC_CRT_DPMS_OFF);
        drm_crtc_vblank_off(crtc);

        hibmc_set_power_mode(priv, HIBMC_PW_MODE_CTL_MODE_SLEEP);
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h
index b63a1ee15ceb..b9e20cfcfb5a 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h
@@ -68,6 +68,12 @@

 #define HIBMC_CRT_DISP_CTL                     0x80200

+#define HIBMC_CRT_DISP_CTL_DPMS(x)             ((x) << 30)
+#define HIBMC_CRT_DISP_CTL_DPMS_MASK           0xc0000000
+
+#define HIBMC_CRT_DPMS_ON                      0
+#define HIBMC_CRT_DPMS_OFF                     3
+
 #define HIBMC_CRT_DISP_CTL_CRTSELECT(x)                ((x) << 25)
 #define HIBMC_CRT_DISP_CTL_CRTSELECT_MASK      0x2000000

--
2.20.1


_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel

[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux