From c864da01d45ed9408ab8a0e7ee5c78f5bbab5b37 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
Date: Fri, 11 Sep 2009 20:23:10 +0200
Subject: [PATCH] drm/radeon/kms: downclock to minimum on DPMS_OFF

---
 drivers/gpu/drm/radeon/atombios_crtc.c |    2 ++
 drivers/gpu/drm/radeon/radeon.h        |    1 +
 drivers/gpu/drm/radeon/radeon_pm.c     |   21 +++++++++++++++++++++
 3 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index a7edd0f..1f96b43 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -266,6 +266,8 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)
 	if (mode != DRM_MODE_DPMS_OFF) {
 		radeon_crtc_load_lut(crtc);
 	}
+
+	radeon_pm_adjust(rdev);
 }
 
 static void
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 28a10d1..bfd8ab1 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -575,6 +575,7 @@ struct radeon_pm {
 };
 
 void radeon_pm_init(struct radeon_device *rdev);
+void radeon_pm_adjust(struct radeon_device *rdev);
 
 
 /*
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
index 712f5d5..f6a79ce 100644
--- a/drivers/gpu/drm/radeon/radeon_pm.c
+++ b/drivers/gpu/drm/radeon/radeon_pm.c
@@ -98,3 +98,24 @@ static void radeon_pm_set_state(struct radeon_device *rdev, char *name, struct r
 
 	rdev->pm.last_set = state;
 }
+
+void radeon_pm_adjust(struct radeon_device *rdev)
+{
+	struct drm_device *ddev = rdev->ddev;
+	struct drm_connector *connector;
+	int count;
+
+	count = 0;
+	list_for_each_entry(connector, &ddev->mode_config.connector_list, head) {
+		if (connector->encoder && connector->dpms != DRM_MODE_DPMS_OFF)
+			++count;
+	}
+	DRM_INFO("[ZAJEC] active: %d\n", count);
+
+	if (!count) {
+		radeon_pm_set_state(rdev, "Minimum", &rdev->pm.chip_minimum);
+	}
+	else {
+		radeon_pm_set_state(rdev, "Default", &rdev->pm.chip_default);
+	}
+}
-- 
1.6.0.2

