[Intel-gfx] [PATCH] drm/i915 : Turn off/on connector dpms across suspend/resume
Li Peng
peng.li at linux.intel.com
Mon Jun 29 04:44:09 CEST 2009
On Fri, 2009-06-26 at 16:41 +0800, yakui_zhao wrote:
> On Fri, 2009-06-26 at 11:32 +0800, Li Peng wrote:
> > >From f8858c66fb2729c7a8fbaf00f34d0706e5bff11b Mon Sep 17 00:00:00 2001
> > From: Li Peng <peng.li at intel.com>
> > Date: Fri, 26 Jun 2009 11:39:20 +0800
> > Subject: Turn off/on connector dpms across suspend/resume
> >
> > For SDVO output, save/restore registers is not enough to
> > make suspend/resume work. we need to call connector's dpms
> > func to enable the output, This fixes suspend/resume from
> > console on Asus Eeetop, which has a SDVO-LVDS output.
> Is it necessary to call the dpms hook functin for every output
> connector?
I have test VGA and LVDS output, both works well with this patch
> Is it enough to call it for the connector that uses the crtc?
sorry, what would you mean ?
> how about the crtc register?
Actually, all connector's dpms func are drm_helper_connector_dpms.
it will first call crtc dpms, then encoder dpms.
> Thanks.
> >
> > Signed-off-by: Li Peng <peng.li at intel.com>
> > ---
> > drivers/gpu/drm/i915/i915_drv.c | 8 ++++++++
> > 1 files changed, 8 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> > index e3cb402..b3d8ef8 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.c
> > +++ b/drivers/gpu/drm/i915/i915_drv.c
> > @@ -55,6 +55,7 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
> > static int i915_suspend(struct drm_device *dev, pm_message_t state)
> > {
> > struct drm_i915_private *dev_priv = dev->dev_private;
> > + struct drm_connector *connector;
> >
> > if (!dev || !dev_priv) {
> > printk(KERN_ERR "dev: %p, dev_priv: %p\n", dev, dev_priv);
> > @@ -75,6 +76,9 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state)
> > drm_irq_uninstall(dev);
> > }
> >
> > + list_for_each_entry(connector, &dev->mode_config.connector_list, head)
> > + connector->funcs->dpms(connector, DRM_MODE_DPMS_OFF);
> > +
> > i915_save_state(dev);
> >
> > intel_opregion_free(dev, 1);
> > @@ -91,6 +95,7 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state)
> > static int i915_resume(struct drm_device *dev)
> > {
> > struct drm_i915_private *dev_priv = dev->dev_private;
> > + struct drm_connector *connector;
> > int ret = 0;
> >
> > pci_set_power_state(dev->pdev, PCI_D0);
> > @@ -101,6 +106,9 @@ static int i915_resume(struct drm_device *dev)
> >
> > i915_restore_state(dev);
> >
> > + list_for_each_entry(connector, &dev->mode_config.connector_list, head)
> > + connector->funcs->dpms(connector, DRM_MODE_DPMS_ON);
> > +
> > intel_opregion_init(dev, 1);
> >
> > /* KMS EnterVT equivalent */
>
More information about the Intel-gfx
mailing list