aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/tilcdc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/tilcdc')
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_crtc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 4605942b0ab9..1ed65dd5befe 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -237,7 +237,9 @@ static void tilcdc_crtc_enable(struct drm_crtc *crtc)
237 tilcdc_crtc_enable_irqs(dev); 237 tilcdc_crtc_enable_irqs(dev);
238 238
239 tilcdc_clear(dev, LCDC_DMA_CTRL_REG, LCDC_DUAL_FRAME_BUFFER_ENABLE); 239 tilcdc_clear(dev, LCDC_DMA_CTRL_REG, LCDC_DUAL_FRAME_BUFFER_ENABLE);
240 tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_PALETTE_LOAD_MODE(DATA_ONLY)); 240 tilcdc_write_mask(dev, LCDC_RASTER_CTRL_REG,
241 LCDC_PALETTE_LOAD_MODE(DATA_ONLY),
242 LCDC_PALETTE_LOAD_MODE_MASK);
241 tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE); 243 tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
242 244
243 drm_crtc_vblank_on(crtc); 245 drm_crtc_vblank_on(crtc);
m"> * only really necessary for 18, 16-14 and sometimes 3:0 (since * these can be edge sensitive) but it doesn't hurt for the others. */ /* check for PER interrupt range */ if (irq < MSP_PER_INTBASE) *SLP_INT_STS_REG = (1 << (irq - MSP_SLP_INTBASE)); else *PER_INT_STS_REG = (1 << (irq - MSP_PER_INTBASE)); } static struct irq_chip msp_slp_irq_controller = { .name = "MSP_SLP", .ack = ack_msp_slp_irq, .mask = ack_msp_slp_irq, .mask_ack = ack_msp_slp_irq, .unmask = unmask_msp_slp_irq, }; void __init msp_slp_irq_init(void) { int i; /* Mask/clear interrupts. */ *SLP_INT_MSK_REG = 0x00000000; *PER_INT_MSK_REG = 0x00000000; *SLP_INT_STS_REG = 0xFFFFFFFF; *PER_INT_STS_REG = 0xFFFFFFFF; /* initialize all the IRQ descriptors */ for (i = MSP_SLP_INTBASE; i < MSP_PER_INTBASE + 32; i++) set_irq_chip_and_handler(i, &msp_slp_irq_controller handle_level_irq); } void msp_slp_irq_dispatch(void) { u32 pending; int intbase; intbase = MSP_SLP_INTBASE; pending = *SLP_INT_STS_REG & *SLP_INT_MSK_REG; /* check for PER interrupt */ if (pending == (1 << (MSP_INT_PER - MSP_SLP_INTBASE))) { intbase = MSP_PER_INTBASE; pending = *PER_INT_STS_REG & *PER_INT_MSK_REG; } /* check for spurious interrupt */ if (pending == 0x00000000) { printk(KERN_ERR "Spurious %s interrupt?\n", (intbase == MSP_SLP_INTBASE) ? "SLP" : "PER"); return; } /* dispatch the irq */ do_IRQ(ffs(pending) + intbase - 1); }