summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
diff options
context:
space:
mode:
authorBoris Brezillon2017-03-01 13:31:01 +0100
committerBoris Brezillon2017-03-16 11:23:59 +0100
commit99ed4d7eb2870ef114b3a1309836d021005e4292 (patch)
tree07635d2867ad18187ca2bcc8bb22709e33fb6656 /drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
parentdrm: Skip the waitqueue setup for vblank queries (diff)
downloadkernel-qcow2-linux-99ed4d7eb2870ef114b3a1309836d021005e4292.tar.gz
kernel-qcow2-linux-99ed4d7eb2870ef114b3a1309836d021005e4292.tar.xz
kernel-qcow2-linux-99ed4d7eb2870ef114b3a1309836d021005e4292.zip
drm/atmel-hlcdc: Fix suspend/resume implementation
The current suspend resume implementation is assuming register values are kept when entering suspend, which is no longer the case with the suspend-to-RAM on the sama5d2. While at it, switch to the generic infrastructure to enter suspend mode (drm_atomic_helper_suspend/resume()). Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Tested-by: Sylvain Rochet <sylvain.rochet@finsecur.com> Link: http://patchwork.freedesktop.org/patch/msgid/1488371461-22243-1-git-send-email-boris.brezillon@free-electrons.com
Diffstat (limited to 'drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h')
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
index da7f25a59be5..433641b6e23b 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
@@ -358,6 +358,7 @@ struct atmel_hlcdc_plane_properties {
* @planes: instantiated planes
* @layers: active HLCDC layers
* @wq: display controller workqueue
+ * @suspend: used to store the HLCDC state when entering suspend
* @commit: used for async commit handling
*/
struct atmel_hlcdc_dc {
@@ -369,6 +370,10 @@ struct atmel_hlcdc_dc {
struct atmel_hlcdc_layer *layers[ATMEL_HLCDC_MAX_LAYERS];
struct workqueue_struct *wq;
struct {
+ u32 imr;
+ struct drm_atomic_state *state;
+ } suspend;
+ struct {
wait_queue_head_t wait;
bool pending;
} commit;
@@ -428,9 +433,6 @@ int atmel_hlcdc_plane_prepare_ahb_routing(struct drm_crtc_state *c_state);
void atmel_hlcdc_crtc_irq(struct drm_crtc *c);
-void atmel_hlcdc_crtc_suspend(struct drm_crtc *crtc);
-void atmel_hlcdc_crtc_resume(struct drm_crtc *crtc);
-
int atmel_hlcdc_crtc_create(struct drm_device *dev);
int atmel_hlcdc_create_outputs(struct drm_device *dev);