Le 29/06/2011 23:39, Rafael J. Wysocki :
> On Wednesday, June 29, 2011, Felipe Balbi wrote:
>> Hi,
>>
>> On Wed, Jun 29, 2011 at 06:54:19PM +0200, Nicolas Ferre wrote:
>>> Take care of slots while going to suspend state.
>>>
>>> Signed-off-by: Nicolas Ferre <nicolas.fe...@atmel.com>
>>> Signed-off-by: Uwe Kleine-König <u.kleine-koe...@pengutronix.de>
>>> ---
>>>  drivers/mmc/host/atmel-mci.c |   51 
>>> ++++++++++++++++++++++++++++++++++++++++++
>>>  1 files changed, 51 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
>>> index aa8039f..c414ebe 100644
>>> --- a/drivers/mmc/host/atmel-mci.c
>>> +++ b/drivers/mmc/host/atmel-mci.c
>>> @@ -1878,8 +1878,59 @@ static int __exit atmci_remove(struct 
>>> platform_device *pdev)
>>>     return 0;
>>>  }
>>>  
>>> +#ifdef CONFIG_PM
>>> +static int atmci_suspend(struct platform_device *pdev, pm_message_t mesg)
>>> +{
>>> +   struct atmel_mci *host = platform_get_drvdata(pdev);
>>> +   struct atmel_mci_slot *slot;
>>> +   int i, ret;
>>> +
>>> +    for (i = 0; i < ATMEL_MCI_MAX_NR_SLOTS; i++) {
>>> +           slot = host->slot[i];
>>> +           if (!slot)
>>> +                   continue;
>>> +           ret = mmc_suspend_host(slot->mmc);
>>> +           if (ret < 0) {
>>> +                   while (--i >= 0) {
>>> +                           slot = host->slot[i];
>>> +                           if (slot)
>>> +                                   mmc_resume_host(host->slot[i]->mmc);
>>> +                   }
>>> +                   return ret;
>>> +           }
>>> +   }
>>> +
>>> +   return 0;
>>> +}
>>> +
>>> +static int atmci_resume(struct platform_device *pdev)
>>> +{
>>> +   struct atmel_mci *host = platform_get_drvdata(pdev);
>>> +   struct atmel_mci_slot *slot;
>>> +   int i, ret;
>>> +
>>> +   for (i = 0; i < ATMEL_MCI_MAX_NR_SLOTS; i++) {
>>> +           slot = host->slot[i];
>>> +           if (!slot)
>>> +                   continue;
>>> +           ret = mmc_resume_host(slot->mmc);
>>> +           if (ret < 0)
>>> +                   return ret;
>>> +   }
>>> +
>>> +   return 0;
>>> +}
>>> +#else
>>> +#define atmci_suspend      NULL
>>> +#define atmci_resume       NULL
>>> +#endif
>>> +
>>> +
>>> +
>>>  static struct platform_driver atmci_driver = {
>>>     .remove         = __exit_p(atmci_remove),
>>> +   .suspend        = atmci_suspend,
>>> +   .resume         = atmci_resume,
>>
>> should this be using dev_pm_ops instead ?
> 
> It should.  Also, please remember to initialize the hibernate callback
> pointers too, e.g. via the SIMPLE_DEV_PM_OPS() macro.

Felipe, Rafael,
Thanks for your feedback. I will implement this in a v2 patch.

BTW, should I use #ifdef CONFIG_PM or #ifdef CONFIG_PM_SLEEP?

Best regards,
-- 
Nicolas Ferre

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to