From 85efdf1c39653cbc505ce39ffb057babdc4e3cbf Mon Sep 17 00:00:00 2001 From: Saurabh Sengar Date: Mon, 30 Oct 2017 23:46:40 +0530 Subject: [PATCH] drm: xilinx: vtc: exporting interrupt APIs Exporting interrupt APIs outside of vtc driver. Also adding new vblank specific enable/disable APIs Signed-off-by: Saurabh Sengar Acked-by: Hyun Kwon Signed-off-by: Michal Simek --- drivers/gpu/drm/xilinx/xilinx_vtc.c | 22 ++++++++++++++++++++-- drivers/gpu/drm/xilinx/xilinx_vtc.h | 4 ++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/xilinx/xilinx_vtc.c b/drivers/gpu/drm/xilinx/xilinx_vtc.c index 0f3a1780fbe9..67a7e4fa14bf 100644 --- a/drivers/gpu/drm/xilinx/xilinx_vtc.c +++ b/drivers/gpu/drm/xilinx/xilinx_vtc.c @@ -513,6 +513,14 @@ void xilinx_vtc_reset(struct xilinx_vtc *vtc) xilinx_drm_writel(vtc->base, VTC_CTL, reg | VTC_CTL_RU); } +/* enable vblank interrupt */ +void xilinx_vtc_vblank_enable(struct xilinx_vtc *vtc) +{ + xilinx_drm_writel(vtc->base, VTC_IER, VTC_IXR_G_VBLANK | + xilinx_drm_readl(vtc->base, VTC_IER)); +} +EXPORT_SYMBOL_GPL(xilinx_vtc_vblank_enable); + /* enable interrupt */ static inline void xilinx_vtc_intr_enable(struct xilinx_vtc *vtc, u32 intr) { @@ -527,18 +535,28 @@ static inline void xilinx_vtc_intr_disable(struct xilinx_vtc *vtc, u32 intr) xilinx_drm_readl(vtc->base, VTC_IER)); } +/* disable vblank interrupt */ +void xilinx_vtc_vblank_disable(struct xilinx_vtc *vtc) +{ + xilinx_drm_writel(vtc->base, VTC_IER, ~(VTC_IXR_G_VBLANK) & + xilinx_drm_readl(vtc->base, VTC_IER)); +} +EXPORT_SYMBOL_GPL(xilinx_vtc_vblank_disable); + /* get interrupt */ -static inline u32 xilinx_vtc_intr_get(struct xilinx_vtc *vtc) +u32 xilinx_vtc_intr_get(struct xilinx_vtc *vtc) { return xilinx_drm_readl(vtc->base, VTC_IER) & xilinx_drm_readl(vtc->base, VTC_ISR) & VTC_IXR_ALLINTR_MASK; } +EXPORT_SYMBOL_GPL(xilinx_vtc_intr_get); /* clear interrupt */ -static inline void xilinx_vtc_intr_clear(struct xilinx_vtc *vtc, u32 intr) +void xilinx_vtc_intr_clear(struct xilinx_vtc *vtc, u32 intr) { xilinx_drm_writel(vtc->base, VTC_ISR, intr & VTC_IXR_ALLINTR_MASK); } +EXPORT_SYMBOL_GPL(xilinx_vtc_intr_clear); /* interrupt handler */ static irqreturn_t xilinx_vtc_intr_handler(int irq, void *data) diff --git a/drivers/gpu/drm/xilinx/xilinx_vtc.h b/drivers/gpu/drm/xilinx/xilinx_vtc.h index 53a93d24ec22..33b4eb43513d 100644 --- a/drivers/gpu/drm/xilinx/xilinx_vtc.h +++ b/drivers/gpu/drm/xilinx/xilinx_vtc.h @@ -36,5 +36,9 @@ struct device_node; struct xilinx_vtc *xilinx_vtc_probe(struct device *dev, struct device_node *node); +void xilinx_vtc_vblank_enable(struct xilinx_vtc *vtc); +void xilinx_vtc_vblank_disable(struct xilinx_vtc *vtc); +u32 xilinx_vtc_intr_get(struct xilinx_vtc *vtc); +void xilinx_vtc_intr_clear(struct xilinx_vtc *vtc, u32 intr); #endif /* _XILINX_VTC_H_ */ -- 2.39.2