aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSylvain Rochet <sylvain.rochet@finsecur.com>2015-03-12 14:47:19 -0400
committerBoris Brezillon <boris.brezillon@free-electrons.com>2015-03-16 11:10:42 -0400
commitf026eb6e031f704fad991fdeb76c40d7c4a301bd (patch)
tree9e757b381a444d11bbe365362d723c2cdff679d3 /drivers
parent03be70050c85768e9ce7c0d0887110d1b629e127 (diff)
drm: atmel-hlcdc: use appropriate enabled flag in suspend/resume
Unfortunately we used the enabled flag in struct drm_crtc instead of the enabled flag in struct atmel_hlcdc_crtc. This obviously leads to discrepancies on crtc enable state. This patch fixes the issue by using the struct atmel_hlcdc_crtc enabled flag in PM support. Signed-off-by: Sylvain Rochet <sylvain.rochet@finsecur.com> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c21
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c19
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h3
3 files changed, 28 insertions, 15 deletions
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index d55c0c232e1d..f69b92535505 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -207,6 +207,27 @@ static void atmel_hlcdc_crtc_enable(struct drm_crtc *c)
207 crtc->enabled = true; 207 crtc->enabled = true;
208} 208}
209 209
210void atmel_hlcdc_crtc_suspend(struct drm_crtc *c)
211{
212 struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c);
213
214 if (crtc->enabled) {
215 atmel_hlcdc_crtc_disable(c);
216 /* save enable state for resume */
217 crtc->enabled = true;
218 }
219}
220
221void atmel_hlcdc_crtc_resume(struct drm_crtc *c)
222{
223 struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c);
224
225 if (crtc->enabled) {
226 crtc->enabled = false;
227 atmel_hlcdc_crtc_enable(c);
228 }
229}
230
210static int atmel_hlcdc_crtc_atomic_check(struct drm_crtc *c, 231static int atmel_hlcdc_crtc_atomic_check(struct drm_crtc *c,
211 struct drm_crtc_state *s) 232 struct drm_crtc_state *s)
212{ 233{
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index c4bb1f9f95c6..60b0c13d7ff5 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -569,14 +569,8 @@ static int atmel_hlcdc_dc_drm_suspend(struct device *dev)
569 return 0; 569 return 0;
570 570
571 drm_modeset_lock_all(drm_dev); 571 drm_modeset_lock_all(drm_dev);
572 list_for_each_entry(crtc, &drm_dev->mode_config.crtc_list, head) { 572 list_for_each_entry(crtc, &drm_dev->mode_config.crtc_list, head)
573 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; 573 atmel_hlcdc_crtc_suspend(crtc);
574 if (crtc->enabled) {
575 crtc_funcs->disable(crtc);
576 /* save enable state for resume */
577 crtc->enabled = true;
578 }
579 }
580 drm_modeset_unlock_all(drm_dev); 574 drm_modeset_unlock_all(drm_dev);
581 return 0; 575 return 0;
582} 576}
@@ -590,13 +584,8 @@ static int atmel_hlcdc_dc_drm_resume(struct device *dev)
590 return 0; 584 return 0;
591 585
592 drm_modeset_lock_all(drm_dev); 586 drm_modeset_lock_all(drm_dev);
593 list_for_each_entry(crtc, &drm_dev->mode_config.crtc_list, head) { 587 list_for_each_entry(crtc, &drm_dev->mode_config.crtc_list, head)
594 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; 588 atmel_hlcdc_crtc_resume(crtc);
595 if (crtc->enabled) {
596 crtc->enabled = false;
597 crtc_funcs->enable(crtc);
598 }
599 }
600 drm_modeset_unlock_all(drm_dev); 589 drm_modeset_unlock_all(drm_dev);
601 return 0; 590 return 0;
602} 591}
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
index 1ea9c2ccd8a7..cf6b375bc38d 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
@@ -155,6 +155,9 @@ void atmel_hlcdc_crtc_irq(struct drm_crtc *c);
155void atmel_hlcdc_crtc_cancel_page_flip(struct drm_crtc *crtc, 155void atmel_hlcdc_crtc_cancel_page_flip(struct drm_crtc *crtc,
156 struct drm_file *file); 156 struct drm_file *file);
157 157
158void atmel_hlcdc_crtc_suspend(struct drm_crtc *crtc);
159void atmel_hlcdc_crtc_resume(struct drm_crtc *crtc);
160
158int atmel_hlcdc_crtc_create(struct drm_device *dev); 161int atmel_hlcdc_crtc_create(struct drm_device *dev);
159 162
160int atmel_hlcdc_create_outputs(struct drm_device *dev); 163int atmel_hlcdc_create_outputs(struct drm_device *dev);