/** * Sets the power state for the panel. */ static void mrst_lvds_set_power(struct drm_device *dev, struct psb_intel_output *output, bool on) { u32 pp_status; struct drm_psb_private *dev_priv = dev->dev_private; if (!gma_power_begin(dev, true)) return; if (on) { REG_WRITE(PP_CONTROL, REG_READ(PP_CONTROL) | POWER_TARGET_ON); do { pp_status = REG_READ(PP_STATUS); } while ((pp_status & (PP_ON | PP_READY)) == PP_READY); dev_priv->is_lvds_on = true; if (dev_priv->ops->lvds_bl_power) dev_priv->ops->lvds_bl_power(dev, true); } else { if (dev_priv->ops->lvds_bl_power) dev_priv->ops->lvds_bl_power(dev, false); REG_WRITE(PP_CONTROL, REG_READ(PP_CONTROL) & ~POWER_TARGET_ON); do { pp_status = REG_READ(PP_STATUS); } while (pp_status & PP_ON); dev_priv->is_lvds_on = false; pm_request_idle(&dev->pdev->dev); } gma_power_end(dev); }
/** * pm_generic_complete - Generic routine completing a device power transition. * @dev: Device to handle. * * Complete a device power transition during a system-wide power transition. */ void pm_generic_complete(struct device *dev) { struct device_driver *drv = dev->driver; if (drv && drv->pm && drv->pm->complete) drv->pm->complete(dev); /* * Let runtime PM try to suspend devices that haven't been in use before * going into the system-wide sleep state we're resuming from. */ pm_request_idle(dev); }