diff options
author | Dave Airlie <airlied@redhat.com> | 2012-09-12 22:02:30 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-11-01 12:43:14 -0400 |
commit | 7473e830c400b2ebf54937a4f075279f7713a2b7 (patch) | |
tree | d01d08dd598c3710df68d806a8e2003fb19457c1 /drivers/gpu/drm/radeon/radeon_drv.c | |
parent | 6214bb748783e65466d864c992770c07293ee820 (diff) |
drm/radeon: convert to pmops
This is a pre-requisite for runtime pm on powerxpress systems.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_drv.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 22f685827b7e..59f067e857db 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -87,8 +87,8 @@ void radeon_driver_postclose_kms(struct drm_device *dev, | |||
87 | struct drm_file *file_priv); | 87 | struct drm_file *file_priv); |
88 | void radeon_driver_preclose_kms(struct drm_device *dev, | 88 | void radeon_driver_preclose_kms(struct drm_device *dev, |
89 | struct drm_file *file_priv); | 89 | struct drm_file *file_priv); |
90 | int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); | 90 | int radeon_suspend_kms(struct drm_device *dev, bool suspend); |
91 | int radeon_resume_kms(struct drm_device *dev); | 91 | int radeon_resume_kms(struct drm_device *dev, bool resume); |
92 | u32 radeon_get_vblank_counter_kms(struct drm_device *dev, int crtc); | 92 | u32 radeon_get_vblank_counter_kms(struct drm_device *dev, int crtc); |
93 | int radeon_enable_vblank_kms(struct drm_device *dev, int crtc); | 93 | int radeon_enable_vblank_kms(struct drm_device *dev, int crtc); |
94 | void radeon_disable_vblank_kms(struct drm_device *dev, int crtc); | 94 | void radeon_disable_vblank_kms(struct drm_device *dev, int crtc); |
@@ -352,20 +352,43 @@ radeon_pci_remove(struct pci_dev *pdev) | |||
352 | drm_put_dev(dev); | 352 | drm_put_dev(dev); |
353 | } | 353 | } |
354 | 354 | ||
355 | static int | 355 | static int radeon_pmops_suspend(struct device *dev) |
356 | radeon_pci_suspend(struct pci_dev *pdev, pm_message_t state) | ||
357 | { | 356 | { |
358 | struct drm_device *dev = pci_get_drvdata(pdev); | 357 | struct pci_dev *pdev = to_pci_dev(dev); |
359 | return radeon_suspend_kms(dev, state); | 358 | struct drm_device *drm_dev = pci_get_drvdata(pdev); |
359 | return radeon_suspend_kms(drm_dev, 1); | ||
360 | } | 360 | } |
361 | 361 | ||
362 | static int | 362 | static int radeon_pmops_resume(struct device *dev) |
363 | radeon_pci_resume(struct pci_dev *pdev) | ||
364 | { | 363 | { |
365 | struct drm_device *dev = pci_get_drvdata(pdev); | 364 | struct pci_dev *pdev = to_pci_dev(dev); |
366 | return radeon_resume_kms(dev); | 365 | struct drm_device *drm_dev = pci_get_drvdata(pdev); |
366 | return radeon_resume_kms(drm_dev, 1); | ||
367 | } | ||
368 | |||
369 | static int radeon_pmops_freeze(struct device *dev) | ||
370 | { | ||
371 | struct pci_dev *pdev = to_pci_dev(dev); | ||
372 | struct drm_device *drm_dev = pci_get_drvdata(pdev); | ||
373 | return radeon_suspend_kms(drm_dev, 0); | ||
367 | } | 374 | } |
368 | 375 | ||
376 | static int radeon_pmops_thaw(struct device *dev) | ||
377 | { | ||
378 | struct pci_dev *pdev = to_pci_dev(dev); | ||
379 | struct drm_device *drm_dev = pci_get_drvdata(pdev); | ||
380 | return radeon_resume_kms(drm_dev, 0); | ||
381 | } | ||
382 | |||
383 | static const struct dev_pm_ops radeon_pm_ops = { | ||
384 | .suspend = radeon_pmops_suspend, | ||
385 | .resume = radeon_pmops_resume, | ||
386 | .freeze = radeon_pmops_freeze, | ||
387 | .thaw = radeon_pmops_thaw, | ||
388 | .poweroff = radeon_pmops_freeze, | ||
389 | .restore = radeon_pmops_resume, | ||
390 | }; | ||
391 | |||
369 | static const struct file_operations radeon_driver_kms_fops = { | 392 | static const struct file_operations radeon_driver_kms_fops = { |
370 | .owner = THIS_MODULE, | 393 | .owner = THIS_MODULE, |
371 | .open = drm_open, | 394 | .open = drm_open, |
@@ -391,8 +414,6 @@ static struct drm_driver kms_driver = { | |||
391 | .postclose = radeon_driver_postclose_kms, | 414 | .postclose = radeon_driver_postclose_kms, |
392 | .lastclose = radeon_driver_lastclose_kms, | 415 | .lastclose = radeon_driver_lastclose_kms, |
393 | .unload = radeon_driver_unload_kms, | 416 | .unload = radeon_driver_unload_kms, |
394 | .suspend = radeon_suspend_kms, | ||
395 | .resume = radeon_resume_kms, | ||
396 | .get_vblank_counter = radeon_get_vblank_counter_kms, | 417 | .get_vblank_counter = radeon_get_vblank_counter_kms, |
397 | .enable_vblank = radeon_enable_vblank_kms, | 418 | .enable_vblank = radeon_enable_vblank_kms, |
398 | .disable_vblank = radeon_disable_vblank_kms, | 419 | .disable_vblank = radeon_disable_vblank_kms, |
@@ -449,8 +470,7 @@ static struct pci_driver radeon_kms_pci_driver = { | |||
449 | .id_table = pciidlist, | 470 | .id_table = pciidlist, |
450 | .probe = radeon_pci_probe, | 471 | .probe = radeon_pci_probe, |
451 | .remove = radeon_pci_remove, | 472 | .remove = radeon_pci_remove, |
452 | .suspend = radeon_pci_suspend, | 473 | .driver.pm = &radeon_pm_ops, |
453 | .resume = radeon_pci_resume, | ||
454 | }; | 474 | }; |
455 | 475 | ||
456 | static int __init radeon_init(void) | 476 | static int __init radeon_init(void) |