/* Either the GPU or display (or both) went idle. Check the busy status here and adjust the CRTC and GPU clocks as necessary.  */
static void intel_idle_update(struct work_struct *work)
/* Either the GPU or display (or both) went idle. Check the busy status here and adjust the CRTC and GPU clocks as necessary.  */
static void intel_idle_update(struct work_struct *work)
{
	drm_i915_private_t *dev_priv = container_of(work, drm_i915_private_t,
						    idle_work);
	struct drm_device *dev = dev_priv->dev;
	struct drm_crtc *crtc;
	struct intel_crtc *intel_crtc;
	if (!i915_powersave)
		return;
	mutex_lock(&dev->struct_mutex);
	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
		if (!crtc->fb)
			continue;
		intel_crtc = to_intel_crtc(crtc);
		if (!intel_crtc->busy)
			intel_decrease_pllclock(crtc);
	}
	mutex_unlock(&dev->struct_mutex);
}