diff options
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-ab8500.c | 10 | ||||
| -rw-r--r-- | drivers/rtc/rtc-at91rm9200.c | 1 | ||||
| -rw-r--r-- | drivers/rtc/rtc-cmos.c | 1 | ||||
| -rw-r--r-- | drivers/rtc/rtc-mxc.c | 5 | ||||
| -rw-r--r-- | drivers/rtc/rtc-spear.c | 2 | ||||
| -rw-r--r-- | drivers/rtc/rtc-stmp3xxx.c | 8 | ||||
| -rw-r--r-- | drivers/rtc/rtc-twl.c | 2 | 
7 files changed, 23 insertions, 6 deletions
diff --git a/drivers/rtc/rtc-ab8500.c b/drivers/rtc/rtc-ab8500.c index 4bcf9ca2818..370889d0489 100644 --- a/drivers/rtc/rtc-ab8500.c +++ b/drivers/rtc/rtc-ab8500.c @@ -17,6 +17,7 @@  #include <linux/mfd/abx500.h>  #include <linux/mfd/abx500/ab8500.h>  #include <linux/delay.h> +#include <linux/of.h>  #define AB8500_RTC_SOFF_STAT_REG	0x00  #define AB8500_RTC_CC_CONF_REG		0x01 @@ -422,7 +423,7 @@ static int __devinit ab8500_rtc_probe(struct platform_device *pdev)  	}  	err = request_threaded_irq(irq, NULL, rtc_alarm_handler, -		IRQF_NO_SUSPEND, "ab8500-rtc", rtc); +		IRQF_NO_SUSPEND | IRQF_ONESHOT, "ab8500-rtc", rtc);  	if (err < 0) {  		rtc_device_unregister(rtc);  		return err; @@ -430,7 +431,6 @@ static int __devinit ab8500_rtc_probe(struct platform_device *pdev)  	platform_set_drvdata(pdev, rtc); -  	err = ab8500_sysfs_rtc_register(&pdev->dev);  	if (err) {  		dev_err(&pdev->dev, "sysfs RTC failed to register\n"); @@ -454,10 +454,16 @@ static int __devexit ab8500_rtc_remove(struct platform_device *pdev)  	return 0;  } +static const struct of_device_id ab8500_rtc_match[] = { +	{ .compatible = "stericsson,ab8500-rtc", }, +	{} +}; +  static struct platform_driver ab8500_rtc_driver = {  	.driver = {  		.name = "ab8500-rtc",  		.owner = THIS_MODULE, +		.of_match_table = ab8500_rtc_match,  	},  	.probe	= ab8500_rtc_probe,  	.remove = __devexit_p(ab8500_rtc_remove), diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c index dc474bc6522..fca9790c7de 100644 --- a/drivers/rtc/rtc-at91rm9200.c +++ b/drivers/rtc/rtc-at91rm9200.c @@ -27,6 +27,7 @@  #include <linux/interrupt.h>  #include <linux/ioctl.h>  #include <linux/completion.h> +#include <linux/io.h>  #include <asm/uaccess.h> diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index 4267789ca99..132333d7540 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c @@ -568,6 +568,7 @@ static irqreturn_t cmos_interrupt(int irq, void *p)  		hpet_mask_rtc_irq_bit(RTC_AIE);  		CMOS_READ(RTC_INTR_FLAGS); +		pm_wakeup_event(cmos_rtc.dev, 0);  	}  	spin_unlock(&rtc_lock); diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c index 5e1d64ee522..e3e50d69baf 100644 --- a/drivers/rtc/rtc-mxc.c +++ b/drivers/rtc/rtc-mxc.c @@ -202,10 +202,11 @@ static irqreturn_t mxc_rtc_interrupt(int irq, void *dev_id)  	struct platform_device *pdev = dev_id;  	struct rtc_plat_data *pdata = platform_get_drvdata(pdev);  	void __iomem *ioaddr = pdata->ioaddr; +	unsigned long flags;  	u32 status;  	u32 events = 0; -	spin_lock_irq(&pdata->rtc->irq_lock); +	spin_lock_irqsave(&pdata->rtc->irq_lock, flags);  	status = readw(ioaddr + RTC_RTCISR) & readw(ioaddr + RTC_RTCIENR);  	/* clear interrupt sources */  	writew(status, ioaddr + RTC_RTCISR); @@ -224,7 +225,7 @@ static irqreturn_t mxc_rtc_interrupt(int irq, void *dev_id)  		events |= (RTC_PF | RTC_IRQF);  	rtc_update_irq(pdata->rtc, 1, events); -	spin_unlock_irq(&pdata->rtc->irq_lock); +	spin_unlock_irqrestore(&pdata->rtc->irq_lock, flags);  	return IRQ_HANDLED;  } diff --git a/drivers/rtc/rtc-spear.c b/drivers/rtc/rtc-spear.c index 1f76320e545..e2785479113 100644 --- a/drivers/rtc/rtc-spear.c +++ b/drivers/rtc/rtc-spear.c @@ -458,12 +458,12 @@ static int __devexit spear_rtc_remove(struct platform_device *pdev)  	clk_disable(config->clk);  	clk_put(config->clk);  	iounmap(config->ioaddr); -	kfree(config);  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (res)  		release_mem_region(res->start, resource_size(res));  	platform_set_drvdata(pdev, NULL);  	rtc_device_unregister(config->rtc); +	kfree(config);  	return 0;  } diff --git a/drivers/rtc/rtc-stmp3xxx.c b/drivers/rtc/rtc-stmp3xxx.c index 10287865e33..739ef55694f 100644 --- a/drivers/rtc/rtc-stmp3xxx.c +++ b/drivers/rtc/rtc-stmp3xxx.c @@ -25,6 +25,7 @@  #include <linux/interrupt.h>  #include <linux/rtc.h>  #include <linux/slab.h> +#include <linux/of_device.h>  #include <mach/common.h> @@ -265,6 +266,12 @@ static int stmp3xxx_rtc_resume(struct platform_device *dev)  #define stmp3xxx_rtc_resume	NULL  #endif +static const struct of_device_id rtc_dt_ids[] = { +	{ .compatible = "fsl,stmp3xxx-rtc", }, +	{ /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, rtc_dt_ids); +  static struct platform_driver stmp3xxx_rtcdrv = {  	.probe		= stmp3xxx_rtc_probe,  	.remove		= stmp3xxx_rtc_remove, @@ -273,6 +280,7 @@ static struct platform_driver stmp3xxx_rtcdrv = {  	.driver		= {  		.name	= "stmp3xxx-rtc",  		.owner	= THIS_MODULE, +		.of_match_table = rtc_dt_ids,  	},  }; diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c index 258abeabf62..c5d06fe83bb 100644 --- a/drivers/rtc/rtc-twl.c +++ b/drivers/rtc/rtc-twl.c @@ -510,7 +510,7 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)  	}  	ret = request_threaded_irq(irq, NULL, twl_rtc_interrupt, -				   IRQF_TRIGGER_RISING, +				   IRQF_TRIGGER_RISING | IRQF_ONESHOT,  				   dev_name(&rtc->dev), rtc);  	if (ret < 0) {  		dev_err(&pdev->dev, "IRQ is not free.\n");  | 
