diff options
Diffstat (limited to 'drivers/rtc/rtc-88pm860x.c')
| -rw-r--r-- | drivers/rtc/rtc-88pm860x.c | 31 | 
1 files changed, 29 insertions, 2 deletions
diff --git a/drivers/rtc/rtc-88pm860x.c b/drivers/rtc/rtc-88pm860x.c index f04761e6622..feddefc4210 100644 --- a/drivers/rtc/rtc-88pm860x.c +++ b/drivers/rtc/rtc-88pm860x.c @@ -72,9 +72,9 @@ static int pm860x_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)  	struct pm860x_rtc_info *info = dev_get_drvdata(dev);  	if (enabled) -		pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM, ALARM); +		pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM_EN, ALARM_EN);  	else -		pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM, 0); +		pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM_EN, 0);  	return 0;  } @@ -376,6 +376,9 @@ static int __devinit pm860x_rtc_probe(struct platform_device *pdev)  	INIT_DELAYED_WORK(&info->calib_work, calibrate_vrtc_work);  	schedule_delayed_work(&info->calib_work, VRTC_CALIB_INTERVAL);  #endif	/* VRTC_CALIBRATION */ + +	device_init_wakeup(&pdev->dev, 1); +  	return 0;  out_rtc:  	free_irq(info->irq, info); @@ -401,10 +404,34 @@ static int __devexit pm860x_rtc_remove(struct platform_device *pdev)  	return 0;  } +#ifdef CONFIG_PM_SLEEP +static int pm860x_rtc_suspend(struct device *dev) +{ +	struct platform_device *pdev = to_platform_device(dev); +	struct pm860x_chip *chip = dev_get_drvdata(pdev->dev.parent); + +	if (device_may_wakeup(dev)) +		chip->wakeup_flag |= 1 << PM8607_IRQ_RTC; +	return 0; +} +static int pm860x_rtc_resume(struct device *dev) +{ +	struct platform_device *pdev = to_platform_device(dev); +	struct pm860x_chip *chip = dev_get_drvdata(pdev->dev.parent); + +	if (device_may_wakeup(dev)) +		chip->wakeup_flag &= ~(1 << PM8607_IRQ_RTC); +	return 0; +} +#endif + +static SIMPLE_DEV_PM_OPS(pm860x_rtc_pm_ops, pm860x_rtc_suspend, pm860x_rtc_resume); +  static struct platform_driver pm860x_rtc_driver = {  	.driver		= {  		.name	= "88pm860x-rtc",  		.owner	= THIS_MODULE, +		.pm	= &pm860x_rtc_pm_ops,  	},  	.probe		= pm860x_rtc_probe,  	.remove		= __devexit_p(pm860x_rtc_remove),  |