aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/tilcdc/tilcdc_drv.c
diff options
context:
space:
mode:
authorJyri Sarha <jsarha@ti.com>2016-06-21 09:00:44 -0400
committerJyri Sarha <jsarha@ti.com>2016-08-08 16:05:15 -0400
commitafaf833dd5d7793e9441f122bbe3e37a09a0c743 (patch)
treec56baf55c9c6dfdbcd820d28047390e4a7384427 /drivers/gpu/drm/tilcdc/tilcdc_drv.c
parent018cfbde63a4b1cb7ca4cb0c0b1d4286f7708236 (diff)
drm/tilcdc: Enable and disable interrupts in crtc start() and stop()
Enable and disable interrupts in crtc start() and stop(). None of the interrupts can fire if CRTC is disabled, so it is cleaner - when considering suspend/resume code etc. - to enable the interrupts when CRTC is turned on and to disable them when CRTC is turned off. Signed-off-by: Jyri Sarha <jsarha@ti.com>
Diffstat (limited to 'drivers/gpu/drm/tilcdc/tilcdc_drv.c')
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_drv.c48
1 files changed, 0 insertions, 48 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 576e4e1c17e4..d612d03460ae 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -192,9 +192,7 @@ static int tilcdc_unload(struct drm_device *dev)
192 drm_mode_config_cleanup(dev); 192 drm_mode_config_cleanup(dev);
193 drm_vblank_cleanup(dev); 193 drm_vblank_cleanup(dev);
194 194
195 pm_runtime_get_sync(dev->dev);
196 drm_irq_uninstall(dev); 195 drm_irq_uninstall(dev);
197 pm_runtime_put_sync(dev->dev);
198 196
199#ifdef CONFIG_CPU_FREQ 197#ifdef CONFIG_CPU_FREQ
200 cpufreq_unregister_notifier(&priv->freq_transition, 198 cpufreq_unregister_notifier(&priv->freq_transition,
@@ -350,9 +348,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
350 goto fail_external_cleanup; 348 goto fail_external_cleanup;
351 } 349 }
352 350
353 pm_runtime_get_sync(dev->dev);
354 ret = drm_irq_install(dev, platform_get_irq(dev->platformdev, 0)); 351 ret = drm_irq_install(dev, platform_get_irq(dev->platformdev, 0));
355 pm_runtime_put_sync(dev->dev);
356 if (ret < 0) { 352 if (ret < 0) {
357 dev_err(dev->dev, "failed to install IRQ handler\n"); 353 dev_err(dev->dev, "failed to install IRQ handler\n");
358 goto fail_vblank_cleanup; 354 goto fail_vblank_cleanup;
@@ -382,9 +378,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
382 return 0; 378 return 0;
383 379
384fail_irq_uninstall: 380fail_irq_uninstall:
385 pm_runtime_get_sync(dev->dev);
386 drm_irq_uninstall(dev); 381 drm_irq_uninstall(dev);
387 pm_runtime_put_sync(dev->dev);
388 382
389fail_vblank_cleanup: 383fail_vblank_cleanup:
390 drm_vblank_cleanup(dev); 384 drm_vblank_cleanup(dev);
@@ -435,45 +429,6 @@ static irqreturn_t tilcdc_irq(int irq, void *arg)
435 return tilcdc_crtc_irq(priv->crtc); 429 return tilcdc_crtc_irq(priv->crtc);
436} 430}
437 431
438static void tilcdc_irq_preinstall(struct drm_device *dev)
439{
440 tilcdc_clear_irqstatus(dev, 0xffffffff);
441}
442
443static int tilcdc_irq_postinstall(struct drm_device *dev)
444{
445 struct tilcdc_drm_private *priv = dev->dev_private;
446
447 /* enable FIFO underflow irq: */
448 if (priv->rev == 1) {
449 tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_V1_UNDERFLOW_INT_ENA);
450 } else {
451 tilcdc_write(dev, LCDC_INT_ENABLE_SET_REG,
452 LCDC_V2_UNDERFLOW_INT_ENA |
453 LCDC_V2_END_OF_FRAME0_INT_ENA |
454 LCDC_FRAME_DONE | LCDC_SYNC_LOST);
455 }
456
457 return 0;
458}
459
460static void tilcdc_irq_uninstall(struct drm_device *dev)
461{
462 struct tilcdc_drm_private *priv = dev->dev_private;
463
464 /* disable irqs that we might have enabled: */
465 if (priv->rev == 1) {
466 tilcdc_clear(dev, LCDC_RASTER_CTRL_REG,
467 LCDC_V1_UNDERFLOW_INT_ENA | LCDC_V1_PL_INT_ENA);
468 tilcdc_clear(dev, LCDC_DMA_CTRL_REG, LCDC_V1_END_OF_FRAME_INT_ENA);
469 } else {
470 tilcdc_write(dev, LCDC_INT_ENABLE_CLR_REG,
471 LCDC_V2_UNDERFLOW_INT_ENA | LCDC_V2_PL_INT_ENA |
472 LCDC_V2_END_OF_FRAME0_INT_ENA |
473 LCDC_FRAME_DONE | LCDC_SYNC_LOST);
474 }
475}
476
477static int tilcdc_enable_vblank(struct drm_device *dev, unsigned int pipe) 432static int tilcdc_enable_vblank(struct drm_device *dev, unsigned int pipe)
478{ 433{
479 return 0; 434 return 0;
@@ -616,9 +571,6 @@ static struct drm_driver tilcdc_driver = {
616 .unload = tilcdc_unload, 571 .unload = tilcdc_unload,
617 .lastclose = tilcdc_lastclose, 572 .lastclose = tilcdc_lastclose,
618 .irq_handler = tilcdc_irq, 573 .irq_handler = tilcdc_irq,
619 .irq_preinstall = tilcdc_irq_preinstall,
620 .irq_postinstall = tilcdc_irq_postinstall,
621 .irq_uninstall = tilcdc_irq_uninstall,
622 .get_vblank_counter = drm_vblank_no_hw_counter, 574 .get_vblank_counter = drm_vblank_no_hw_counter,
623 .enable_vblank = tilcdc_enable_vblank, 575 .enable_vblank = tilcdc_enable_vblank,
624 .disable_vblank = tilcdc_disable_vblank, 576 .disable_vblank = tilcdc_disable_vblank,