Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 614b3cfe authored by Darren Etheridge's avatar Darren Etheridge Committed by Jyri Sarha
Browse files

drm/tilcdc: disable the lcd controller/dma engine when suspend invoked



The LCD controller must be deactivated and all DMA transactions stopped
when the suspend power state is entered otherwise the PRCM causes the L3
bus to get stuck in transition state.

This commit forces the lcdc to be shut down and waits for all pending DMA
transactions to complete as part of the suspend handler for this driver.

Signed-off-by: default avatarDarren Etheridge <detheridge@ti.com>
Tested-by: default avatarDave Gerlach <d-gerlach@ti.com>
Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent b62222fc
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -138,7 +138,6 @@ static void stop(struct drm_crtc *crtc)
	tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
}

static void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode);
static void tilcdc_crtc_destroy(struct drm_crtc *crtc)
{
	struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
@@ -192,7 +191,7 @@ static int tilcdc_crtc_page_flip(struct drm_crtc *crtc,
	return 0;
}

static void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode)
void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode)
{
	struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
	struct drm_device *dev = crtc->dev;
+3 −0
Original line number Diff line number Diff line
@@ -592,6 +592,9 @@ static int tilcdc_pm_suspend(struct device *dev)
		return 0;
	}

	/* Disable the LCDC controller, to avoid locking up the PRCM */
	tilcdc_crtc_dpms(priv->crtc, DRM_MODE_DPMS_OFF);

	/* Save register state: */
	for (i = 0; i < ARRAY_SIZE(registers); i++)
		if (registers[i].save && (priv->rev >= registers[i].rev))
+1 −0
Original line number Diff line number Diff line
@@ -171,5 +171,6 @@ void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc,
					bool simulate_vesa_sync);
int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode);
int tilcdc_crtc_max_width(struct drm_crtc *crtc);
void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode);

#endif /* __TILCDC_DRV_H__ */