mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 21:44:06 +08:00
drm/hisilicon/hibmc: add DPMS on/off function
add DPMS function to turn on/off signal of monitor Signed-off-by: Zhihui Chen <chenzhihui4@huawei.com> Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org> Acked-by: Xinliang Liu <xinliang.liu@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20191220023112.2728-1-chenzhihui4@huawei.com
This commit is contained in:
parent
f2f8653e0d
commit
5970af8b58
@ -187,6 +187,20 @@ static struct drm_plane *hibmc_plane_init(struct hibmc_drm_private *priv)
|
|||||||
return plane;
|
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,
|
static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||||
struct drm_crtc_state *old_state)
|
struct drm_crtc_state *old_state)
|
||||||
{
|
{
|
||||||
@ -203,6 +217,7 @@ static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc,
|
|||||||
reg |= HIBMC_CURR_GATE_DISPLAY(1);
|
reg |= HIBMC_CURR_GATE_DISPLAY(1);
|
||||||
hibmc_set_current_gate(priv, reg);
|
hibmc_set_current_gate(priv, reg);
|
||||||
drm_crtc_vblank_on(crtc);
|
drm_crtc_vblank_on(crtc);
|
||||||
|
hibmc_crtc_dpms(crtc, HIBMC_CRT_DPMS_ON);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hibmc_crtc_atomic_disable(struct drm_crtc *crtc,
|
static void hibmc_crtc_atomic_disable(struct drm_crtc *crtc,
|
||||||
@ -211,6 +226,7 @@ static void hibmc_crtc_atomic_disable(struct drm_crtc *crtc,
|
|||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
struct hibmc_drm_private *priv = crtc->dev->dev_private;
|
struct hibmc_drm_private *priv = crtc->dev->dev_private;
|
||||||
|
|
||||||
|
hibmc_crtc_dpms(crtc, HIBMC_CRT_DPMS_OFF);
|
||||||
drm_crtc_vblank_off(crtc);
|
drm_crtc_vblank_off(crtc);
|
||||||
|
|
||||||
hibmc_set_power_mode(priv, HIBMC_PW_MODE_CTL_MODE_SLEEP);
|
hibmc_set_power_mode(priv, HIBMC_PW_MODE_CTL_MODE_SLEEP);
|
||||||
|
@ -68,6 +68,12 @@
|
|||||||
|
|
||||||
#define HIBMC_CRT_DISP_CTL 0x80200
|
#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(x) ((x) << 25)
|
||||||
#define HIBMC_CRT_DISP_CTL_CRTSELECT_MASK 0x2000000
|
#define HIBMC_CRT_DISP_CTL_CRTSELECT_MASK 0x2000000
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user