Commit b3a753f5 authored by Jyri Sarha's avatar Jyri Sarha

drm/tilcdc: Do not keep vblank interrupts enabled all the time

END_OF_FRAME interrupts have been enabled all the time since the
beginning of this driver. It is about time to add this feature.
Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/fb87adebaffe8c7cb4fe7e909a45d47af08d7c6e.1602349100.git.jsarha@ti.com
parent ec5722ad
...@@ -147,12 +147,9 @@ static void tilcdc_crtc_enable_irqs(struct drm_device *dev) ...@@ -147,12 +147,9 @@ static void tilcdc_crtc_enable_irqs(struct drm_device *dev)
tilcdc_set(dev, LCDC_RASTER_CTRL_REG, tilcdc_set(dev, LCDC_RASTER_CTRL_REG,
LCDC_V1_SYNC_LOST_INT_ENA | LCDC_V1_FRAME_DONE_INT_ENA | LCDC_V1_SYNC_LOST_INT_ENA | LCDC_V1_FRAME_DONE_INT_ENA |
LCDC_V1_UNDERFLOW_INT_ENA); LCDC_V1_UNDERFLOW_INT_ENA);
tilcdc_set(dev, LCDC_DMA_CTRL_REG,
LCDC_V1_END_OF_FRAME_INT_ENA);
} else { } else {
tilcdc_write(dev, LCDC_INT_ENABLE_SET_REG, tilcdc_write(dev, LCDC_INT_ENABLE_SET_REG,
LCDC_V2_UNDERFLOW_INT_ENA | LCDC_V2_UNDERFLOW_INT_ENA |
LCDC_V2_END_OF_FRAME0_INT_ENA |
LCDC_FRAME_DONE | LCDC_SYNC_LOST); LCDC_FRAME_DONE | LCDC_SYNC_LOST);
} }
} }
...@@ -678,11 +675,44 @@ static int tilcdc_crtc_atomic_check(struct drm_crtc *crtc, ...@@ -678,11 +675,44 @@ static int tilcdc_crtc_atomic_check(struct drm_crtc *crtc,
static int tilcdc_crtc_enable_vblank(struct drm_crtc *crtc) static int tilcdc_crtc_enable_vblank(struct drm_crtc *crtc)
{ {
struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
struct drm_device *dev = crtc->dev;
struct tilcdc_drm_private *priv = dev->dev_private;
unsigned long flags;
spin_lock_irqsave(&tilcdc_crtc->irq_lock, flags);
tilcdc_clear_irqstatus(dev, LCDC_END_OF_FRAME0);
if (priv->rev == 1)
tilcdc_set(dev, LCDC_DMA_CTRL_REG,
LCDC_V1_END_OF_FRAME_INT_ENA);
else
tilcdc_set(dev, LCDC_INT_ENABLE_SET_REG,
LCDC_V2_END_OF_FRAME0_INT_ENA);
spin_unlock_irqrestore(&tilcdc_crtc->irq_lock, flags);
return 0; return 0;
} }
static void tilcdc_crtc_disable_vblank(struct drm_crtc *crtc) static void tilcdc_crtc_disable_vblank(struct drm_crtc *crtc)
{ {
struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
struct drm_device *dev = crtc->dev;
struct tilcdc_drm_private *priv = dev->dev_private;
unsigned long flags;
spin_lock_irqsave(&tilcdc_crtc->irq_lock, flags);
if (priv->rev == 1)
tilcdc_clear(dev, LCDC_DMA_CTRL_REG,
LCDC_V1_END_OF_FRAME_INT_ENA);
else
tilcdc_clear(dev, LCDC_INT_ENABLE_SET_REG,
LCDC_V2_END_OF_FRAME0_INT_ENA);
spin_unlock_irqrestore(&tilcdc_crtc->irq_lock, flags);
} }
static void tilcdc_crtc_reset(struct drm_crtc *crtc) static void tilcdc_crtc_reset(struct drm_crtc *crtc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment