* [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops @ 2009-07-25 13:04 Arnaud Faucher 2009-07-25 17:43 ` Dmitry Torokhov 0 siblings, 1 reply; 18+ messages in thread From: Arnaud Faucher @ 2009-07-25 13:04 UTC (permalink / raw) To: linux-kernel; +Cc: Arnaud Faucher, Carlos Corbacho Gets rid of the following warning: Platform driver 'acer-wmi' needs updating - please use dev_pm_ops Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> --- drivers/platform/x86/acer-wmi.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c index be2fd6f..b2b6aef 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct platform_device *device) return 0; } -static int acer_platform_suspend(struct platform_device *dev, -pm_message_t state) +static int acer_platform_suspend(struct device *dev) { u32 value; struct acer_data *data = &interface->data; @@ -1174,7 +1173,7 @@ pm_message_t state) return 0; } -static int acer_platform_resume(struct platform_device *device) +static int acer_platform_resume(struct device *dev) { struct acer_data *data = &interface->data; @@ -1190,15 +1189,19 @@ static int acer_platform_resume(struct platform_device *device) return 0; } +static struct dev_pm_ops acer_platform_pm_ops = { + .suspend = acer_platform_suspend, + .resume = acer_platform_resume, +}; + static struct platform_driver acer_platform_driver = { .driver = { .name = "acer-wmi", .owner = THIS_MODULE, + .pm = &acer_platform_pm_ops, }, .probe = acer_platform_probe, .remove = acer_platform_remove, - .suspend = acer_platform_suspend, - .resume = acer_platform_resume, }; static struct platform_device *acer_platform_device; -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-25 13:04 [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops Arnaud Faucher @ 2009-07-25 17:43 ` Dmitry Torokhov 2009-07-25 20:04 ` Rafael J. Wysocki 2009-07-25 20:10 ` Arnaud Faucher 0 siblings, 2 replies; 18+ messages in thread From: Dmitry Torokhov @ 2009-07-25 17:43 UTC (permalink / raw) To: Arnaud Faucher, Rafael J. Wysocki; +Cc: linux-kernel, Carlos Corbacho Hi Arnaud, On Sat, Jul 25, 2009 at 09:04:51AM -0400, Arnaud Faucher wrote: > Gets rid of the following warning: > Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > Have you tested it with Suspend to disk? You are [potentially] breaking it since the new suspend and resume methods are not used by it, it calls freeze() and thaw() instead. Rafael, I wonder if PM core should automatically use suspend()/resume() in place of freeze()/thaw() when the latter pair is missing. > Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > --- > drivers/platform/x86/acer-wmi.c | 13 ++++++++----- > 1 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c > index be2fd6f..b2b6aef 100644 > --- a/drivers/platform/x86/acer-wmi.c > +++ b/drivers/platform/x86/acer-wmi.c > @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct platform_device *device) > return 0; > } > > -static int acer_platform_suspend(struct platform_device *dev, > -pm_message_t state) > +static int acer_platform_suspend(struct device *dev) > { > u32 value; > struct acer_data *data = &interface->data; > @@ -1174,7 +1173,7 @@ pm_message_t state) > return 0; > } > > -static int acer_platform_resume(struct platform_device *device) > +static int acer_platform_resume(struct device *dev) > { > struct acer_data *data = &interface->data; > > @@ -1190,15 +1189,19 @@ static int acer_platform_resume(struct platform_device *device) > return 0; > } > > +static struct dev_pm_ops acer_platform_pm_ops = { > + .suspend = acer_platform_suspend, > + .resume = acer_platform_resume, > +}; > + > static struct platform_driver acer_platform_driver = { > .driver = { > .name = "acer-wmi", > .owner = THIS_MODULE, > + .pm = &acer_platform_pm_ops, > }, > .probe = acer_platform_probe, > .remove = acer_platform_remove, > - .suspend = acer_platform_suspend, > - .resume = acer_platform_resume, > }; > > static struct platform_device *acer_platform_device; > -- > 1.6.3.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- Dmitry ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-25 17:43 ` Dmitry Torokhov @ 2009-07-25 20:04 ` Rafael J. Wysocki 2009-07-26 13:53 ` Arnaud Faucher 2009-07-25 20:10 ` Arnaud Faucher 1 sibling, 1 reply; 18+ messages in thread From: Rafael J. Wysocki @ 2009-07-25 20:04 UTC (permalink / raw) To: Dmitry Torokhov Cc: Arnaud Faucher, linux-kernel, Carlos Corbacho, pm list, Alan Stern On Saturday 25 July 2009, Dmitry Torokhov wrote: > Hi Arnaud, > > On Sat, Jul 25, 2009 at 09:04:51AM -0400, Arnaud Faucher wrote: > > Gets rid of the following warning: > > Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > > > > Have you tested it with Suspend to disk? You are [potentially] breaking > it since the new suspend and resume methods are not used by it, it calls > freeze() and thaw() instead. > > Rafael, > > I wonder if PM core should automatically use suspend()/resume() in place of > freeze()/thaw() when the latter pair is missing. Well, in fact it often is not necessary to do .thaw() at all, because the state of the device doesn't change in .freeze(). Also, PCI drivers should not need .thaw(), unless they manipulate the standard PM registers of the device themselves. That said, if .suspend() is defined, then most probably .freeze() is necessary as well. Also, if .resume() is defined, .restore() is most probably necessary and it should be safe to use .suspend() as .freeze() and .resume() as .restore(). OTOH, it's really easy to point .restore() to the same routine as .resume() etc., so I'm not sure. Best, Rafael ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-25 20:04 ` Rafael J. Wysocki @ 2009-07-26 13:53 ` Arnaud Faucher 2009-07-26 14:23 ` Carlos Corbacho 0 siblings, 1 reply; 18+ messages in thread From: Arnaud Faucher @ 2009-07-26 13:53 UTC (permalink / raw) To: linux-kernel Cc: Carlos Corbacho, Dmitry Torokhov, Rafael J. Wysocki, Frans Pop, linux-mips@linux-mips.org, Manuel Lauss, Erik Ekman, Mark Brown Gets rid of the following warning: Platform driver 'acer-wmi' needs updating - please use dev_pm_ops Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM issue on hibernation when using dev_pm_ops blindly. This patch was tested against suspendand hibernation (Acer mail led status). Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> --- drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c index be2fd6f..29374bc 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct platform_device *device) return 0; } -static int acer_platform_suspend(struct platform_device *dev, -pm_message_t state) +static int acer_platform_suspend(struct device *dev) { u32 value; struct acer_data *data = &interface->data; @@ -1174,7 +1173,7 @@ pm_message_t state) return 0; } -static int acer_platform_resume(struct platform_device *device) +static int acer_platform_resume(struct device *dev) { struct acer_data *data = &interface->data; @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct platform_device *device) return 0; } +static struct dev_pm_ops acer_platform_pm_ops = { + .suspend = acer_platform_suspend, + .resume = acer_platform_resume, + .freeze = acer_platform_suspend, + .thaw = acer_platform_resume, + .poweroff = acer_platform_suspend, + .restore = acer_platform_resume, +}; + static struct platform_driver acer_platform_driver = { .driver = { .name = "acer-wmi", .owner = THIS_MODULE, + .pm = &acer_platform_pm_ops, }, .probe = acer_platform_probe, .remove = acer_platform_remove, - .suspend = acer_platform_suspend, - .resume = acer_platform_resume, }; static struct platform_device *acer_platform_device; -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-26 13:53 ` Arnaud Faucher @ 2009-07-26 14:23 ` Carlos Corbacho 2009-07-26 18:08 ` Dmitry Torokhov 0 siblings, 1 reply; 18+ messages in thread From: Carlos Corbacho @ 2009-07-26 14:23 UTC (permalink / raw) To: Arnaud Faucher Cc: linux-kernel, Dmitry Torokhov, Rafael J. Wysocki, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown [Removing linux-mips from CC - I don't know why they'd be interested in an x86 only platform driver...] On Sunday 26 July 2009 14:53:33 Arnaud Faucher wrote: > Gets rid of the following warning: > Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > > Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM issue on > hibernation when using dev_pm_ops blindly. > > This patch was tested against suspendand hibernation (Acer mail led > status). > > Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > --- > drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- > 1 files changed, 12 insertions(+), 5 deletions(-) > > diff --git a/drivers/platform/x86/acer-wmi.c > b/drivers/platform/x86/acer-wmi.c > index be2fd6f..29374bc 100644 > --- a/drivers/platform/x86/acer-wmi.c > +++ b/drivers/platform/x86/acer-wmi.c > @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct > platform_device *device) > return 0; > } > > -static int acer_platform_suspend(struct platform_device *dev, > -pm_message_t state) > +static int acer_platform_suspend(struct device *dev) > { > u32 value; > struct acer_data *data = &interface->data; > @@ -1174,7 +1173,7 @@ pm_message_t state) > return 0; > } > > -static int acer_platform_resume(struct platform_device *device) > +static int acer_platform_resume(struct device *dev) > { > struct acer_data *data = &interface->data; > > @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct > platform_device *device) > return 0; > } > > +static struct dev_pm_ops acer_platform_pm_ops = { > + .suspend = acer_platform_suspend, > + .resume = acer_platform_resume, Are these necessary? For suspend-to-RAM, I've never needed these. The old callbacks here were just for suspend-to-disk. > + .freeze = acer_platform_suspend, > + .thaw = acer_platform_resume, If we only need these callbacks for freeze & thaw, they should be rebamed. > + .poweroff = acer_platform_suspend, > + .restore = acer_platform_resume, What do poweroff and restore mean in this context. Do my comments above apply again (i.e. are the callbacks necessary here)? > +}; > + > static struct platform_driver acer_platform_driver = { > .driver = { > .name = "acer-wmi", > .owner = THIS_MODULE, > + .pm = &acer_platform_pm_ops, > }, > .probe = acer_platform_probe, > .remove = acer_platform_remove, > - .suspend = acer_platform_suspend, > - .resume = acer_platform_resume, > }; > > static struct platform_device *acer_platform_device; -Carlos -- E-Mail: carlos@strangeworlds.co.uk Web: strangeworlds.co.uk GPG Key ID: 0x23EE722D ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-26 14:23 ` Carlos Corbacho @ 2009-07-26 18:08 ` Dmitry Torokhov 2009-07-26 18:35 ` Carlos Corbacho 0 siblings, 1 reply; 18+ messages in thread From: Dmitry Torokhov @ 2009-07-26 18:08 UTC (permalink / raw) To: Carlos Corbacho Cc: Arnaud Faucher, linux-kernel, Rafael J. Wysocki, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Sun, Jul 26, 2009 at 03:23:29PM +0100, Carlos Corbacho wrote: > [Removing linux-mips from CC - I don't know why they'd be interested in an x86 > only platform driver...] > > On Sunday 26 July 2009 14:53:33 Arnaud Faucher wrote: > > Gets rid of the following warning: > > Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > > > > Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM issue on > > hibernation when using dev_pm_ops blindly. > > > > This patch was tested against suspendand hibernation (Acer mail led > > status). > > > > Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > > --- > > drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- > > 1 files changed, 12 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/platform/x86/acer-wmi.c > > b/drivers/platform/x86/acer-wmi.c > > index be2fd6f..29374bc 100644 > > --- a/drivers/platform/x86/acer-wmi.c > > +++ b/drivers/platform/x86/acer-wmi.c > > @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct > > platform_device *device) > > return 0; > > } > > > > -static int acer_platform_suspend(struct platform_device *dev, > > -pm_message_t state) > > +static int acer_platform_suspend(struct device *dev) > > { > > u32 value; > > struct acer_data *data = &interface->data; > > @@ -1174,7 +1173,7 @@ pm_message_t state) > > return 0; > > } > > > > -static int acer_platform_resume(struct platform_device *device) > > +static int acer_platform_resume(struct device *dev) > > { > > struct acer_data *data = &interface->data; > > > > @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct > > platform_device *device) > > return 0; > > } > > > > +static struct dev_pm_ops acer_platform_pm_ops = { > > + .suspend = acer_platform_suspend, > > + .resume = acer_platform_resume, > > Are these necessary? For suspend-to-RAM, I've never needed these. The old > callbacks here were just for suspend-to-disk. > That is not correct. Old suspend and resume callbacks were called for both S2R and S2D. Whether it is actually needed for S2R I don't know but looking at the code they should not hurt. > > + .freeze = acer_platform_suspend, > > + .thaw = acer_platform_resume, > > If we only need these callbacks for freeze & thaw, they should be rebamed. > > > + .poweroff = acer_platform_suspend, > > + .restore = acer_platform_resume, > > What do poweroff and restore mean in this context. Do my comments above apply > again (i.e. are the callbacks necessary here)? > I don't think poweroff handler is needed. BTW, why so we retuen -ENOMEM from these methods if interface->data is missing? I'd say we should not fail suspend resume in that case or if we fail then with somethig like -EINVAL - we did not have mempry allocation failure. -- Dmitry ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-26 18:08 ` Dmitry Torokhov @ 2009-07-26 18:35 ` Carlos Corbacho 2009-07-26 20:28 ` Arnaud Faucher 0 siblings, 1 reply; 18+ messages in thread From: Carlos Corbacho @ 2009-07-26 18:35 UTC (permalink / raw) To: Dmitry Torokhov Cc: Arnaud Faucher, linux-kernel, Rafael J. Wysocki, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Sunday 26 July 2009 19:08:09 Dmitry Torokhov wrote: > On Sun, Jul 26, 2009 at 03:23:29PM +0100, Carlos Corbacho wrote: > > [Removing linux-mips from CC - I don't know why they'd be interested in > > an x86 only platform driver...] > > > > On Sunday 26 July 2009 14:53:33 Arnaud Faucher wrote: > > > Gets rid of the following warning: > > > Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > > > > > > Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM issue on > > > hibernation when using dev_pm_ops blindly. > > > > > > This patch was tested against suspendand hibernation (Acer mail led > > > status). > > > > > > Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > > > --- > > > drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- > > > 1 files changed, 12 insertions(+), 5 deletions(-) > > > > > > diff --git a/drivers/platform/x86/acer-wmi.c > > > b/drivers/platform/x86/acer-wmi.c > > > index be2fd6f..29374bc 100644 > > > --- a/drivers/platform/x86/acer-wmi.c > > > +++ b/drivers/platform/x86/acer-wmi.c > > > @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct > > > platform_device *device) > > > return 0; > > > } > > > > > > -static int acer_platform_suspend(struct platform_device *dev, > > > -pm_message_t state) > > > +static int acer_platform_suspend(struct device *dev) > > > { > > > u32 value; > > > struct acer_data *data = &interface->data; > > > @@ -1174,7 +1173,7 @@ pm_message_t state) > > > return 0; > > > } > > > > > > -static int acer_platform_resume(struct platform_device *device) > > > +static int acer_platform_resume(struct device *dev) > > > { > > > struct acer_data *data = &interface->data; > > > > > > @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct > > > platform_device *device) > > > return 0; > > > } > > > > > > +static struct dev_pm_ops acer_platform_pm_ops = { > > > + .suspend = acer_platform_suspend, > > > + .resume = acer_platform_resume, > > > > Are these necessary? For suspend-to-RAM, I've never needed these. The old > > callbacks here were just for suspend-to-disk. > > That is not correct. Old suspend and resume callbacks were called for > both S2R and S2D. Whether it is actually needed for S2R I don't know but > looking at the code they should not hurt. I'm aware they were called for S2RAM as well, but that was just a limitation of the old calls - as I say, they're not needed for it (at least on my hardware anyway). > > > + .freeze = acer_platform_suspend, > > > + .thaw = acer_platform_resume, > > > > If we only need these callbacks for freeze & thaw, they should be > > rebamed. > > > > > + .poweroff = acer_platform_suspend, > > > + .restore = acer_platform_resume, > > > > What do poweroff and restore mean in this context. Do my comments above > > apply again (i.e. are the callbacks necessary here)? > > I don't think poweroff handler is needed. > > BTW, why so we retuen -ENOMEM from these methods if interface->data is > missing? I'd say we should not fail suspend resume in that case or if we > fail then with somethig like -EINVAL - we did not have mempry allocation > failure. Ok. -Carlos -- E-Mail: carlos@strangeworlds.co.uk Web: strangeworlds.co.uk GPG Key ID: 0x23EE722D ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-26 18:35 ` Carlos Corbacho @ 2009-07-26 20:28 ` Arnaud Faucher 2009-07-26 21:33 ` Dmitry Torokhov 0 siblings, 1 reply; 18+ messages in thread From: Arnaud Faucher @ 2009-07-26 20:28 UTC (permalink / raw) To: Carlos Corbacho Cc: Dmitry Torokhov, linux-kernel, Rafael J. Wysocki, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On dim, 2009-07-26 at 19:35 +0100, Carlos Corbacho wrote: > On Sunday 26 July 2009 19:08:09 Dmitry Torokhov wrote: > > On Sun, Jul 26, 2009 at 03:23:29PM +0100, Carlos Corbacho wrote: > > > [Removing linux-mips from CC - I don't know why they'd be interested in > > > an x86 only platform driver...] > > > > > > On Sunday 26 July 2009 14:53:33 Arnaud Faucher wrote: > > > > Gets rid of the following warning: > > > > Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > > > > > > > > Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM issue on > > > > hibernation when using dev_pm_ops blindly. > > > > > > > > This patch was tested against suspendand hibernation (Acer mail led > > > > status). > > > > > > > > Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > > > > --- > > > > drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- > > > > 1 files changed, 12 insertions(+), 5 deletions(-) > > > > > > > > diff --git a/drivers/platform/x86/acer-wmi.c > > > > b/drivers/platform/x86/acer-wmi.c > > > > index be2fd6f..29374bc 100644 > > > > --- a/drivers/platform/x86/acer-wmi.c > > > > +++ b/drivers/platform/x86/acer-wmi.c > > > > @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct > > > > platform_device *device) > > > > return 0; > > > > } > > > > > > > > -static int acer_platform_suspend(struct platform_device *dev, > > > > -pm_message_t state) > > > > +static int acer_platform_suspend(struct device *dev) > > > > { > > > > u32 value; > > > > struct acer_data *data = &interface->data; > > > > @@ -1174,7 +1173,7 @@ pm_message_t state) > > > > return 0; > > > > } > > > > > > > > -static int acer_platform_resume(struct platform_device *device) > > > > +static int acer_platform_resume(struct device *dev) > > > > { > > > > struct acer_data *data = &interface->data; > > > > > > > > @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct > > > > platform_device *device) > > > > return 0; > > > > } > > > > > > > > +static struct dev_pm_ops acer_platform_pm_ops = { > > > > + .suspend = acer_platform_suspend, > > > > + .resume = acer_platform_resume, > > > > > > Are these necessary? For suspend-to-RAM, I've never needed these. The old > > > callbacks here were just for suspend-to-disk. > > > > That is not correct. Old suspend and resume callbacks were called for > > both S2R and S2D. Whether it is actually needed for S2R I don't know but > > looking at the code they should not hurt. > > I'm aware they were called for S2RAM as well, but that was just a limitation > of the old calls - as I say, they're not needed for it (at least on my > hardware anyway). > I was looking for similar functionality. > > > > + .freeze = acer_platform_suspend, > > > > + .thaw = acer_platform_resume, > > > > > > If we only need these callbacks for freeze & thaw, they should be > > > rebamed. > > > > > > > + .poweroff = acer_platform_suspend, > > > > + .restore = acer_platform_resume, > > > > > > What do poweroff and restore mean in this context. Do my comments above > > > apply again (i.e. are the callbacks necessary here)? > > > > I don't think poweroff handler is needed. After testing many combinations, I observed that I had to use that much callbacks. For example, when omitting to wire .poweroff/.restore, with .freeze/.thaw linked to suspend()/resume(), the state (of the mail led) is not restored correctly after S2D. > > > > BTW, why so we retuen -ENOMEM from these methods if interface->data is > > missing? I'd say we should not fail suspend resume in that case or if we > > fail then with somethig like -EINVAL - we did not have mempry allocation > > failure. > > Ok. > > -Carlos ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-26 20:28 ` Arnaud Faucher @ 2009-07-26 21:33 ` Dmitry Torokhov 2009-07-26 22:51 ` Arnaud Faucher 0 siblings, 1 reply; 18+ messages in thread From: Dmitry Torokhov @ 2009-07-26 21:33 UTC (permalink / raw) To: Arnaud Faucher Cc: Carlos Corbacho, linux-kernel@vger.kernel.org, Rafael J. Wysocki, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Jul 26, 2009, at 1:28 PM, Arnaud Faucher <arnaud.faucher@gmail.com> wrote: > On dim, 2009-07-26 at 19:35 +0100, Carlos Corbacho wrote: >> On Sunday 26 July 2009 19:08:09 Dmitry Torokhov wrote: >>> On Sun, Jul 26, 2009 at 03:23:29PM +0100, Carlos Corbacho wrote: >>>> [Removing linux-mips from CC - I don't know why they'd be >>>> interested in >>>> an x86 only platform driver...] >>>> >>>> On Sunday 26 July 2009 14:53:33 Arnaud Faucher wrote: >>>>> Gets rid of the following warning: >>>>> Platform driver 'acer-wmi' needs updating - please use dev_pm_ops >>>>> >>>>> Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM >>>>> issue on >>>>> hibernation when using dev_pm_ops blindly. >>>>> >>>>> This patch was tested against suspendand hibernation (Acer mail >>>>> led >>>>> status). >>>>> >>>>> Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> >>>>> --- >>>>> drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- >>>>> 1 files changed, 12 insertions(+), 5 deletions(-) >>>>> >>>>> diff --git a/drivers/platform/x86/acer-wmi.c >>>>> b/drivers/platform/x86/acer-wmi.c >>>>> index be2fd6f..29374bc 100644 >>>>> --- a/drivers/platform/x86/acer-wmi.c >>>>> +++ b/drivers/platform/x86/acer-wmi.c >>>>> @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct >>>>> platform_device *device) >>>>> return 0; >>>>> } >>>>> >>>>> -static int acer_platform_suspend(struct platform_device *dev, >>>>> -pm_message_t state) >>>>> +static int acer_platform_suspend(struct device *dev) >>>>> { >>>>> u32 value; >>>>> struct acer_data *data = &interface->data; >>>>> @@ -1174,7 +1173,7 @@ pm_message_t state) >>>>> return 0; >>>>> } >>>>> >>>>> -static int acer_platform_resume(struct platform_device *device) >>>>> +static int acer_platform_resume(struct device *dev) >>>>> { >>>>> struct acer_data *data = &interface->data; >>>>> >>>>> @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct >>>>> platform_device *device) >>>>> return 0; >>>>> } >>>>> >>>>> +static struct dev_pm_ops acer_platform_pm_ops = { >>>>> + .suspend = acer_platform_suspend, >>>>> + .resume = acer_platform_resume, >>>> >>>> Are these necessary? For suspend-to-RAM, I've never needed these. >>>> The old >>>> callbacks here were just for suspend-to-disk. >>> >>> That is not correct. Old suspend and resume callbacks were called >>> for >>> both S2R and S2D. Whether it is actually needed for S2R I don't >>> know but >>> looking at the code they should not hurt. >> >> I'm aware they were called for S2RAM as well, but that was just a >> limitation >> of the old calls - as I say, they're not needed for it (at least on >> my >> hardware anyway). >> > > I was looking for similar functionality. > >>>>> + .freeze = acer_platform_suspend, >>>>> + .thaw = acer_platform_resume, >>>> >>>> If we only need these callbacks for freeze & thaw, they should be >>>> rebamed. >>>> >>>>> + .poweroff = acer_platform_suspend, >>>>> + .restore = acer_platform_resume, >>>> >>>> What do poweroff and restore mean in this context. Do my comments >>>> above >>>> apply again (i.e. are the callbacks necessary here)? >>> >>> I don't think poweroff handler is needed. > > After testing many combinations, I observed that I had to use that > much > callbacks. For example, when omitting to wire .poweroff/.restore, > with .freeze/.thaw linked to suspend()/resume(), the state (of the > mail > led) is not restored correctly after S2D. Have you tried with just 3 - freeze, thaw and restore? > -- Dmitry ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-26 21:33 ` Dmitry Torokhov @ 2009-07-26 22:51 ` Arnaud Faucher 2009-07-28 23:39 ` Arnaud Faucher 0 siblings, 1 reply; 18+ messages in thread From: Arnaud Faucher @ 2009-07-26 22:51 UTC (permalink / raw) To: Dmitry Torokhov Cc: Carlos Corbacho, linux-kernel@vger.kernel.org, Rafael J. Wysocki, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On dim, 2009-07-26 at 14:33 -0700, Dmitry Torokhov wrote: > On Jul 26, 2009, at 1:28 PM, Arnaud Faucher <arnaud.faucher@gmail.com> > wrote: > > > On dim, 2009-07-26 at 19:35 +0100, Carlos Corbacho wrote: > >> On Sunday 26 July 2009 19:08:09 Dmitry Torokhov wrote: > >>> On Sun, Jul 26, 2009 at 03:23:29PM +0100, Carlos Corbacho wrote: > >>>> [Removing linux-mips from CC - I don't know why they'd be > >>>> interested in > >>>> an x86 only platform driver...] > >>>> > >>>> On Sunday 26 July 2009 14:53:33 Arnaud Faucher wrote: > >>>>> Gets rid of the following warning: > >>>>> Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > >>>>> > >>>>> Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM > >>>>> issue on > >>>>> hibernation when using dev_pm_ops blindly. > >>>>> > >>>>> This patch was tested against suspendand hibernation (Acer mail > >>>>> led > >>>>> status). > >>>>> > >>>>> Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > >>>>> --- > >>>>> drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- > >>>>> 1 files changed, 12 insertions(+), 5 deletions(-) > >>>>> > >>>>> diff --git a/drivers/platform/x86/acer-wmi.c > >>>>> b/drivers/platform/x86/acer-wmi.c > >>>>> index be2fd6f..29374bc 100644 > >>>>> --- a/drivers/platform/x86/acer-wmi.c > >>>>> +++ b/drivers/platform/x86/acer-wmi.c > >>>>> @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct > >>>>> platform_device *device) > >>>>> return 0; > >>>>> } > >>>>> > >>>>> -static int acer_platform_suspend(struct platform_device *dev, > >>>>> -pm_message_t state) > >>>>> +static int acer_platform_suspend(struct device *dev) > >>>>> { > >>>>> u32 value; > >>>>> struct acer_data *data = &interface->data; > >>>>> @@ -1174,7 +1173,7 @@ pm_message_t state) > >>>>> return 0; > >>>>> } > >>>>> > >>>>> -static int acer_platform_resume(struct platform_device *device) > >>>>> +static int acer_platform_resume(struct device *dev) > >>>>> { > >>>>> struct acer_data *data = &interface->data; > >>>>> > >>>>> @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct > >>>>> platform_device *device) > >>>>> return 0; > >>>>> } > >>>>> > >>>>> +static struct dev_pm_ops acer_platform_pm_ops = { > >>>>> + .suspend = acer_platform_suspend, > >>>>> + .resume = acer_platform_resume, > >>>> > >>>> Are these necessary? For suspend-to-RAM, I've never needed these. > >>>> The old > >>>> callbacks here were just for suspend-to-disk. > >>> > >>> That is not correct. Old suspend and resume callbacks were called > >>> for > >>> both S2R and S2D. Whether it is actually needed for S2R I don't > >>> know but > >>> looking at the code they should not hurt. > >> > >> I'm aware they were called for S2RAM as well, but that was just a > >> limitation > >> of the old calls - as I say, they're not needed for it (at least on > >> my > >> hardware anyway). > >> > > > > I was looking for similar functionality. > > > >>>>> + .freeze = acer_platform_suspend, > >>>>> + .thaw = acer_platform_resume, > >>>> > >>>> If we only need these callbacks for freeze & thaw, they should be > >>>> rebamed. > >>>> > >>>>> + .poweroff = acer_platform_suspend, > >>>>> + .restore = acer_platform_resume, > >>>> > >>>> What do poweroff and restore mean in this context. Do my comments > >>>> above > >>>> apply again (i.e. are the callbacks necessary here)? > >>> > >>> I don't think poweroff handler is needed. > > > > After testing many combinations, I observed that I had to use that > > much > > callbacks. For example, when omitting to wire .poweroff/.restore, > > with .freeze/.thaw linked to suspend()/resume(), the state (of the > > mail > > led) is not restored correctly after S2D. > > > Have you tried with just 3 - freeze, thaw and restore? > State restoration seems to be OK with only those three ones (tested against both S2RAM and S2D on my Acer Aspire 5680). BTW, in the "struct dev_pm_ops" documentation, it would be interesting to know which callback sequence occurs in case of S2RAM and S2D events. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-26 22:51 ` Arnaud Faucher @ 2009-07-28 23:39 ` Arnaud Faucher 2009-07-29 20:49 ` Rafael J. Wysocki 0 siblings, 1 reply; 18+ messages in thread From: Arnaud Faucher @ 2009-07-28 23:39 UTC (permalink / raw) To: Carlos Corbacho, Dmitry Torokhov Cc: linux-kernel@vger.kernel.org, Rafael J. Wysocki, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Sun, Jul 26, 2009 at 18:51 -0400, Arnaud Faucher wrote : > On dim, 2009-07-26 at 14:33 -0700, Dmitry Torokhov wrote: > > On Jul 26, 2009, at 1:28 PM, Arnaud Faucher <arnaud.faucher@gmail.com> > > wrote: > > > > > On dim, 2009-07-26 at 19:35 +0100, Carlos Corbacho wrote: > > >> On Sunday 26 July 2009 19:08:09 Dmitry Torokhov wrote: > > >>> On Sun, Jul 26, 2009 at 03:23:29PM +0100, Carlos Corbacho wrote: > > >>>> [Removing linux-mips from CC - I don't know why they'd be > > >>>> interested in > > >>>> an x86 only platform driver...] > > >>>> > > >>>> On Sunday 26 July 2009 14:53:33 Arnaud Faucher wrote: > > >>>>> Gets rid of the following warning: > > >>>>> Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > > >>>>> > > >>>>> Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM > > >>>>> issue on > > >>>>> hibernation when using dev_pm_ops blindly. > > >>>>> > > >>>>> This patch was tested against suspendand hibernation (Acer mail > > >>>>> led > > >>>>> status). > > >>>>> > > >>>>> Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > > >>>>> --- > > >>>>> drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- > > >>>>> 1 files changed, 12 insertions(+), 5 deletions(-) > > >>>>> > > >>>>> diff --git a/drivers/platform/x86/acer-wmi.c > > >>>>> b/drivers/platform/x86/acer-wmi.c > > >>>>> index be2fd6f..29374bc 100644 > > >>>>> --- a/drivers/platform/x86/acer-wmi.c > > >>>>> +++ b/drivers/platform/x86/acer-wmi.c > > >>>>> @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct > > >>>>> platform_device *device) > > >>>>> return 0; > > >>>>> } > > >>>>> > > >>>>> -static int acer_platform_suspend(struct platform_device *dev, > > >>>>> -pm_message_t state) > > >>>>> +static int acer_platform_suspend(struct device *dev) > > >>>>> { > > >>>>> u32 value; > > >>>>> struct acer_data *data = &interface->data; > > >>>>> @@ -1174,7 +1173,7 @@ pm_message_t state) > > >>>>> return 0; > > >>>>> } > > >>>>> > > >>>>> -static int acer_platform_resume(struct platform_device *device) > > >>>>> +static int acer_platform_resume(struct device *dev) > > >>>>> { > > >>>>> struct acer_data *data = &interface->data; > > >>>>> > > >>>>> @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct > > >>>>> platform_device *device) > > >>>>> return 0; > > >>>>> } > > >>>>> > > >>>>> +static struct dev_pm_ops acer_platform_pm_ops = { > > >>>>> + .suspend = acer_platform_suspend, > > >>>>> + .resume = acer_platform_resume, > > >>>> > > >>>> Are these necessary? For suspend-to-RAM, I've never needed these. > > >>>> The old > > >>>> callbacks here were just for suspend-to-disk. > > >>> > > >>> That is not correct. Old suspend and resume callbacks were called > > >>> for > > >>> both S2R and S2D. Whether it is actually needed for S2R I don't > > >>> know but > > >>> looking at the code they should not hurt. > > >> > > >> I'm aware they were called for S2RAM as well, but that was just a > > >> limitation > > >> of the old calls - as I say, they're not needed for it (at least on > > >> my > > >> hardware anyway). > > >> > > > > > > I was looking for similar functionality. > > > > > >>>>> + .freeze = acer_platform_suspend, > > >>>>> + .thaw = acer_platform_resume, > > >>>> > > >>>> If we only need these callbacks for freeze & thaw, they should be > > >>>> rebamed. > > >>>> > > >>>>> + .poweroff = acer_platform_suspend, > > >>>>> + .restore = acer_platform_resume, > > >>>> > > >>>> What do poweroff and restore mean in this context. Do my comments > > >>>> above > > >>>> apply again (i.e. are the callbacks necessary here)? > > >>> > > >>> I don't think poweroff handler is needed. > > > > > > After testing many combinations, I observed that I had to use that > > > much > > > callbacks. For example, when omitting to wire .poweroff/.restore, > > > with .freeze/.thaw linked to suspend()/resume(), the state (of the > > > mail > > > led) is not restored correctly after S2D. > > > > > > Have you tried with just 3 - freeze, thaw and restore? > > > > State restoration seems to be OK with only those three ones (tested > against both S2RAM and S2D on my Acer Aspire 5680). > > BTW, in the "struct dev_pm_ops" documentation, it would be interesting > to know which callback sequence occurs in case of S2RAM and S2D events. > > Here are my observations regarding PM events and callbacks: S2RAM ("Suspend"): event trigged -> .suspend gets called recover from S2RAM -> .resume gets called For *this module*, these callbacks seem not necessary, because the state of hardware seems to be automatically restored on resume from S2RAM (by BIOS ???). S2DISK ("Hibernation"): event trigged -> .freeze, then .thaw gets called recover from S2DISK -> .restore gets called As per the pm.h documentation .thaw is called after RAM image has been created, in order to restore hardware state in case RAM image failed and the system cannot power off. So this callback should be linked to something similar to the .restore callback. For *this module*, though it may not be necessary because the state of both LCD backlight and mail LED persist after RAM image creation, I have linked this callback anyway. After around 2 days of testing, here is a third attempt for this patch. Please note that I renamed the functions to better reflect their use. Can you please stress it ? Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> --- drivers/platform/x86/acer-wmi.c | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c index fb45f5e..331771d 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct platform_device *device) return 0; } -static int acer_platform_suspend(struct platform_device *dev, -pm_message_t state) +static int acer_platform_freeze(struct device *dev) { u32 value; struct acer_data *data = &interface->data; @@ -1174,7 +1173,7 @@ pm_message_t state) return 0; } -static int acer_platform_resume(struct platform_device *device) +static int acer_platform_restore(struct device *dev) { struct acer_data *data = &interface->data; @@ -1190,15 +1189,20 @@ static int acer_platform_resume(struct platform_device *device) return 0; } +static struct dev_pm_ops acer_platform_pm_ops = { + .freeze = acer_platform_freeze, + .thaw = acer_platform_restore, + .restore = acer_platform_restore, +}; + static struct platform_driver acer_platform_driver = { .driver = { .name = "acer-wmi", .owner = THIS_MODULE, + .pm = &acer_platform_pm_ops, }, .probe = acer_platform_probe, .remove = acer_platform_remove, - .suspend = acer_platform_suspend, - .resume = acer_platform_resume, }; static struct platform_device *acer_platform_device; -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-28 23:39 ` Arnaud Faucher @ 2009-07-29 20:49 ` Rafael J. Wysocki 2009-07-29 21:03 ` Dmitry Torokhov 0 siblings, 1 reply; 18+ messages in thread From: Rafael J. Wysocki @ 2009-07-29 20:49 UTC (permalink / raw) To: Arnaud Faucher Cc: Carlos Corbacho, Dmitry Torokhov, linux-kernel@vger.kernel.org, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Wednesday 29 July 2009, Arnaud Faucher wrote: > On Sun, Jul 26, 2009 at 18:51 -0400, Arnaud Faucher wrote : > > On dim, 2009-07-26 at 14:33 -0700, Dmitry Torokhov wrote: > > > On Jul 26, 2009, at 1:28 PM, Arnaud Faucher <arnaud.faucher@gmail.com> > > > wrote: > > > > > > > On dim, 2009-07-26 at 19:35 +0100, Carlos Corbacho wrote: > > > >> On Sunday 26 July 2009 19:08:09 Dmitry Torokhov wrote: > > > >>> On Sun, Jul 26, 2009 at 03:23:29PM +0100, Carlos Corbacho wrote: > > > >>>> [Removing linux-mips from CC - I don't know why they'd be > > > >>>> interested in > > > >>>> an x86 only platform driver...] > > > >>>> > > > >>>> On Sunday 26 July 2009 14:53:33 Arnaud Faucher wrote: > > > >>>>> Gets rid of the following warning: > > > >>>>> Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > > > >>>>> > > > >>>>> Take 2, thanks to Dmitry, Rafael and Frans for pointing out PM > > > >>>>> issue on > > > >>>>> hibernation when using dev_pm_ops blindly. > > > >>>>> > > > >>>>> This patch was tested against suspendand hibernation (Acer mail > > > >>>>> led > > > >>>>> status). > > > >>>>> > > > >>>>> Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > > > >>>>> --- > > > >>>>> drivers/platform/x86/acer-wmi.c | 17 ++++++++++++----- > > > >>>>> 1 files changed, 12 insertions(+), 5 deletions(-) > > > >>>>> > > > >>>>> diff --git a/drivers/platform/x86/acer-wmi.c > > > >>>>> b/drivers/platform/x86/acer-wmi.c > > > >>>>> index be2fd6f..29374bc 100644 > > > >>>>> --- a/drivers/platform/x86/acer-wmi.c > > > >>>>> +++ b/drivers/platform/x86/acer-wmi.c > > > >>>>> @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct > > > >>>>> platform_device *device) > > > >>>>> return 0; > > > >>>>> } > > > >>>>> > > > >>>>> -static int acer_platform_suspend(struct platform_device *dev, > > > >>>>> -pm_message_t state) > > > >>>>> +static int acer_platform_suspend(struct device *dev) > > > >>>>> { > > > >>>>> u32 value; > > > >>>>> struct acer_data *data = &interface->data; > > > >>>>> @@ -1174,7 +1173,7 @@ pm_message_t state) > > > >>>>> return 0; > > > >>>>> } > > > >>>>> > > > >>>>> -static int acer_platform_resume(struct platform_device *device) > > > >>>>> +static int acer_platform_resume(struct device *dev) > > > >>>>> { > > > >>>>> struct acer_data *data = &interface->data; > > > >>>>> > > > >>>>> @@ -1190,15 +1189,23 @@ static int acer_platform_resume(struct > > > >>>>> platform_device *device) > > > >>>>> return 0; > > > >>>>> } > > > >>>>> > > > >>>>> +static struct dev_pm_ops acer_platform_pm_ops = { > > > >>>>> + .suspend = acer_platform_suspend, > > > >>>>> + .resume = acer_platform_resume, > > > >>>> > > > >>>> Are these necessary? For suspend-to-RAM, I've never needed these. > > > >>>> The old > > > >>>> callbacks here were just for suspend-to-disk. > > > >>> > > > >>> That is not correct. Old suspend and resume callbacks were called > > > >>> for > > > >>> both S2R and S2D. Whether it is actually needed for S2R I don't > > > >>> know but > > > >>> looking at the code they should not hurt. > > > >> > > > >> I'm aware they were called for S2RAM as well, but that was just a > > > >> limitation > > > >> of the old calls - as I say, they're not needed for it (at least on > > > >> my > > > >> hardware anyway). > > > >> > > > > > > > > I was looking for similar functionality. > > > > > > > >>>>> + .freeze = acer_platform_suspend, > > > >>>>> + .thaw = acer_platform_resume, > > > >>>> > > > >>>> If we only need these callbacks for freeze & thaw, they should be > > > >>>> rebamed. > > > >>>> > > > >>>>> + .poweroff = acer_platform_suspend, > > > >>>>> + .restore = acer_platform_resume, > > > >>>> > > > >>>> What do poweroff and restore mean in this context. Do my comments > > > >>>> above > > > >>>> apply again (i.e. are the callbacks necessary here)? > > > >>> > > > >>> I don't think poweroff handler is needed. > > > > > > > > After testing many combinations, I observed that I had to use that > > > > much > > > > callbacks. For example, when omitting to wire .poweroff/.restore, > > > > with .freeze/.thaw linked to suspend()/resume(), the state (of the > > > > mail > > > > led) is not restored correctly after S2D. > > > > > > > > > Have you tried with just 3 - freeze, thaw and restore? > > > > > > > State restoration seems to be OK with only those three ones (tested > > against both S2RAM and S2D on my Acer Aspire 5680). > > > > BTW, in the "struct dev_pm_ops" documentation, it would be interesting > > to know which callback sequence occurs in case of S2RAM and S2D events. > > > > > > Here are my observations regarding PM events and callbacks: > > S2RAM ("Suspend"): > event trigged -> .suspend gets called > recover from S2RAM -> .resume gets called That's correct, plus there are .suspend_noirq() which is called during suspend, after suspend_device_irqs(), and .resume_noirq() which is called during resume, before resume_device_irqs(). > For *this module*, What's *this module*? acer-wmi? > these callbacks seem not necessary, because the state > of hardware seems to be automatically restored on resume from S2RAM (by > BIOS ???). > > S2DISK ("Hibernation"): > event trigged -> .freeze, then .thaw gets called To be precise, the ordering is .freeze() .freeze_noirq() create image .thaw_noirq() .thaw() save image .poweroff() .poweroff_noirq() enter sleep state > recover from S2DISK -> .restore gets called To be precise, the ordering is: Boot kernel: load image .freeze() .freeze_noirq() pass control to the image kernel Image kernel: .restore_noirq() .restore() > As per the pm.h documentation .thaw is called after RAM image has been > created, in order to restore hardware state in case RAM image failed and > the system cannot power off. That's not correct (please see above). .thaw() is called after creating the image in case .freeze() has changed the state of the device. This often is not necessary, though, so .thaw() may be skipped in many cases. Of course, you should know exactly what you're doing. > So this callback should be linked to > something similar to the .restore callback. For *this module*, though it > may not be necessary because the state of both LCD backlight and mail > LED persist after RAM image creation, I have linked this callback > anyway. > > After around 2 days of testing, here is a third attempt for this patch. > Please note that I renamed the functions to better reflect their use. > Can you please stress it ? > > Signed-off-by: Arnaud Faucher <arnaud.faucher@gmail.com> > --- > drivers/platform/x86/acer-wmi.c | 14 +++++++++----- > 1 files changed, 9 insertions(+), 5 deletions(-) > > diff --git a/drivers/platform/x86/acer-wmi.c > b/drivers/platform/x86/acer-wmi.c > index fb45f5e..331771d 100644 > --- a/drivers/platform/x86/acer-wmi.c > +++ b/drivers/platform/x86/acer-wmi.c > @@ -1152,8 +1152,7 @@ static int acer_platform_remove(struct > platform_device *device) > return 0; > } > > -static int acer_platform_suspend(struct platform_device *dev, > -pm_message_t state) > +static int acer_platform_freeze(struct device *dev) > { > u32 value; > struct acer_data *data = &interface->data; > @@ -1174,7 +1173,7 @@ pm_message_t state) > return 0; > } > > -static int acer_platform_resume(struct platform_device *device) > +static int acer_platform_restore(struct device *dev) > { > struct acer_data *data = &interface->data; > > @@ -1190,15 +1189,20 @@ static int acer_platform_resume(struct > platform_device *device) > return 0; > } > > +static struct dev_pm_ops acer_platform_pm_ops = { > + .freeze = acer_platform_freeze, + .suspend = acer_platform_freeze, > + .thaw = acer_platform_restore, .thaw is not necessary AFAICS. > + .restore = acer_platform_restore, + .resume = acer_platform_restore, > +}; > + > static struct platform_driver acer_platform_driver = { > .driver = { > .name = "acer-wmi", > .owner = THIS_MODULE, > + .pm = &acer_platform_pm_ops, > }, > .probe = acer_platform_probe, > .remove = acer_platform_remove, > - .suspend = acer_platform_suspend, > - .resume = acer_platform_resume, > }; > > static struct platform_device *acer_platform_device; Thanks, Rafael ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-29 20:49 ` Rafael J. Wysocki @ 2009-07-29 21:03 ` Dmitry Torokhov 2009-07-29 22:53 ` Arnaud Faucher 2009-07-29 23:27 ` Rafael J. Wysocki 0 siblings, 2 replies; 18+ messages in thread From: Dmitry Torokhov @ 2009-07-29 21:03 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Arnaud Faucher, Carlos Corbacho, linux-kernel@vger.kernel.org, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Wed, Jul 29, 2009 at 10:49:46PM +0200, Rafael J. Wysocki wrote: > On Wednesday 29 July 2009, Arnaud Faucher wrote: > > > As per the pm.h documentation .thaw is called after RAM image has been > > created, in order to restore hardware state in case RAM image failed and > > the system cannot power off. > > That's not correct (please see above). .thaw() is called after creating the > image in case .freeze() has changed the state of the device. This often is not > necessary, though, so .thaw() may be skipped in many cases. Of course, you > should know exactly what you're doing. > Umm, but thaw() _is_ called in case of hibernate failure: case PM_EVENT_THAW: case PM_EVENT_RECOVER: if (ops->thaw) { error = ops->thaw(dev); suspend_report_result(ops->thaw, error); } break; so I don't believe you can easily skip thaw() if you have freeze() that stops/resets device. -- Dmitry ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-29 21:03 ` Dmitry Torokhov @ 2009-07-29 22:53 ` Arnaud Faucher 2009-07-30 22:05 ` Arnaud Faucher 2009-07-29 23:27 ` Rafael J. Wysocki 1 sibling, 1 reply; 18+ messages in thread From: Arnaud Faucher @ 2009-07-29 22:53 UTC (permalink / raw) To: Dmitry Torokhov Cc: Rafael J. Wysocki, Carlos Corbacho, linux-kernel@vger.kernel.org, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Wed, Jul 29, 2009 at 14:03 -0700, Dmitry Torokhov wrote: > On Wed, Jul 29, 2009 at 10:49:46PM +0200, Rafael J. Wysocki wrote: > > On Wednesday 29 July 2009, Arnaud Faucher wrote: > > > > > As per the pm.h documentation .thaw is called after RAM image has been > > > created, in order to restore hardware state in case RAM image failed and > > > the system cannot power off. > > > > That's not correct (please see above). .thaw() is called after creating the > > image in case .freeze() has changed the state of the device. This often is not > > necessary, though, so .thaw() may be skipped in many cases. Of course, you > > should know exactly what you're doing. > > > > Umm, but thaw() _is_ called in case of hibernate failure: > > case PM_EVENT_THAW: > case PM_EVENT_RECOVER: > if (ops->thaw) { > error = ops->thaw(dev); > suspend_report_result(ops->thaw, error); > } > break; > > so I don't believe you can easily skip thaw() if you have freeze() that > stops/resets device. > As of today, acer_platform_freeze() does not stop/reset any device, so, I agree with Rafael that for acer-wmi, .thaw() can be skipped. I had also tested this configuration and it was working like the non-patched code. Carlos, do you think that any acer-specific hardware could be switched off or reset inside acer_platform_freeze() ? If this was the case, we would have to wire .thaw()... ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-29 22:53 ` Arnaud Faucher @ 2009-07-30 22:05 ` Arnaud Faucher 2009-07-31 11:56 ` Rafael J. Wysocki 0 siblings, 1 reply; 18+ messages in thread From: Arnaud Faucher @ 2009-07-30 22:05 UTC (permalink / raw) To: Carlos Corbacho Cc: Rafael J. Wysocki, Dmitry Torokhov, linux-kernel@vger.kernel.org, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Wed, Jul 29, 2009 at 18:53 -0400, Arnaud Faucher wrote : > As of today, acer_platform_freeze() does not stop/reset any device, so, > I agree with Rafael that for acer-wmi, .thaw() can be skipped. I had > also tested this configuration and it was working like the non-patched > code. > > Carlos, do you think that any acer-specific hardware could be switched > off or reset inside acer_platform_freeze() ? If this was the case, we > would have to wire .thaw()... > Should I send a new patch with only .freeze() and .restore() wired ? --- Hope to see Cox and Torvalds reconcile... ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-30 22:05 ` Arnaud Faucher @ 2009-07-31 11:56 ` Rafael J. Wysocki 0 siblings, 0 replies; 18+ messages in thread From: Rafael J. Wysocki @ 2009-07-31 11:56 UTC (permalink / raw) To: Arnaud Faucher Cc: Carlos Corbacho, Dmitry Torokhov, linux-kernel@vger.kernel.org, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Friday 31 July 2009, Arnaud Faucher wrote: > On Wed, Jul 29, 2009 at 18:53 -0400, Arnaud Faucher wrote : > > As of today, acer_platform_freeze() does not stop/reset any device, so, > > I agree with Rafael that for acer-wmi, .thaw() can be skipped. I had > > also tested this configuration and it was working like the non-patched > > code. > > > > Carlos, do you think that any acer-specific hardware could be switched > > off or reset inside acer_platform_freeze() ? If this was the case, we > > would have to wire .thaw()... > > > > Should I send a new patch with only .freeze() and .restore() wired ? Just for clarification. If you need .freeze(), then you need .suspend() as well (they can both point to the same function). Similarly, if you .restore(), then .resume() is needed as well. Otherwise the driver is going to break suspend to RAM (or resume). Best, Rafael ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-29 21:03 ` Dmitry Torokhov 2009-07-29 22:53 ` Arnaud Faucher @ 2009-07-29 23:27 ` Rafael J. Wysocki 1 sibling, 0 replies; 18+ messages in thread From: Rafael J. Wysocki @ 2009-07-29 23:27 UTC (permalink / raw) To: Dmitry Torokhov Cc: Arnaud Faucher, Carlos Corbacho, linux-kernel@vger.kernel.org, Frans Pop, Manuel Lauss, Erik Ekman, Mark Brown On Wednesday 29 July 2009, Dmitry Torokhov wrote: > On Wed, Jul 29, 2009 at 10:49:46PM +0200, Rafael J. Wysocki wrote: > > On Wednesday 29 July 2009, Arnaud Faucher wrote: > > > > > As per the pm.h documentation .thaw is called after RAM image has been > > > created, in order to restore hardware state in case RAM image failed and > > > the system cannot power off. > > > > That's not correct (please see above). .thaw() is called after creating the > > image in case .freeze() has changed the state of the device. This often is not > > necessary, though, so .thaw() may be skipped in many cases. Of course, you > > should know exactly what you're doing. > > > > Umm, but thaw() _is_ called in case of hibernate failure: > > case PM_EVENT_THAW: > case PM_EVENT_RECOVER: > if (ops->thaw) { > error = ops->thaw(dev); > suspend_report_result(ops->thaw, error); > } > break; > > so I don't believe you can easily skip thaw() if you have freeze() that > stops/resets device. _RECOVER means "image creation failed or unable to run the image kernel", so from the devices' point of view it's the same as _THAW. Still, if your .freeze() modifies the device's registers, then most likely .thaw() _is_ necessary. Best, Rafael ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops 2009-07-25 17:43 ` Dmitry Torokhov 2009-07-25 20:04 ` Rafael J. Wysocki @ 2009-07-25 20:10 ` Arnaud Faucher 1 sibling, 0 replies; 18+ messages in thread From: Arnaud Faucher @ 2009-07-25 20:10 UTC (permalink / raw) To: Dmitry Torokhov; +Cc: Rafael J. Wysocki, linux-kernel, Carlos Corbacho On Sat, 2009-07-25 at 10:43 -0700, Dmitry Torokhov wrote: > Hi Arnaud, > > On Sat, Jul 25, 2009 at 09:04:51AM -0400, Arnaud Faucher wrote: > > Gets rid of the following warning: > > Platform driver 'acer-wmi' needs updating - please use dev_pm_ops > > > > Have you tested it with Suspend to disk? You are [potentially] breaking > it since the new suspend and resume methods are not used by it, it calls > freeze() and thaw() instead. > > Rafael, > > I wonder if PM core should automatically use suspend()/resume() in place of > freeze()/thaw() when the latter pair is missing. > By studying drivers/base/platform.c, suspend()/resume() are not called when freeze()/thaw() are missing. So you're right, this patch breaks something. I am testing right now a new patch against hibernation. ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2009-07-31 11:56 UTC | newest] Thread overview: 18+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-25 13:04 [PATCH 1/1] acer-wmi: switch driver to dev_pm_ops Arnaud Faucher 2009-07-25 17:43 ` Dmitry Torokhov 2009-07-25 20:04 ` Rafael J. Wysocki 2009-07-26 13:53 ` Arnaud Faucher 2009-07-26 14:23 ` Carlos Corbacho 2009-07-26 18:08 ` Dmitry Torokhov 2009-07-26 18:35 ` Carlos Corbacho 2009-07-26 20:28 ` Arnaud Faucher 2009-07-26 21:33 ` Dmitry Torokhov 2009-07-26 22:51 ` Arnaud Faucher 2009-07-28 23:39 ` Arnaud Faucher 2009-07-29 20:49 ` Rafael J. Wysocki 2009-07-29 21:03 ` Dmitry Torokhov 2009-07-29 22:53 ` Arnaud Faucher 2009-07-30 22:05 ` Arnaud Faucher 2009-07-31 11:56 ` Rafael J. Wysocki 2009-07-29 23:27 ` Rafael J. Wysocki 2009-07-25 20:10 ` Arnaud Faucher
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox