git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
string: factorize skip_spaces and export it to be generally available
[safe/jmp/linux-2.6]
/
drivers
/
rtc
/
rtc-at32ap700x.c
diff --git
a/drivers/rtc/rtc-at32ap700x.c
b/drivers/rtc/rtc-at32ap700x.c
index
d3b9b14
..
e1ec33e
100644
(file)
--- a/
drivers/rtc/rtc-at32ap700x.c
+++ b/
drivers/rtc/rtc-at32ap700x.c
@@
-94,8
+94,11
@@
static int at32_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
{
struct rtc_at32ap700x *rtc = dev_get_drvdata(dev);
{
struct rtc_at32ap700x *rtc = dev_get_drvdata(dev);
+ spin_lock_irq(&rtc->lock);
rtc_time_to_tm(rtc->alarm_time, &alrm->time);
rtc_time_to_tm(rtc->alarm_time, &alrm->time);
- alrm->pending = rtc_readl(rtc, IMR) & RTC_BIT(IMR_TOPI) ? 1 : 0;
+ alrm->enabled = rtc_readl(rtc, IMR) & RTC_BIT(IMR_TOPI) ? 1 : 0;
+ alrm->pending = rtc_readl(rtc, ISR) & RTC_BIT(ISR_TOPI) ? 1 : 0;
+ spin_unlock_irq(&rtc->lock);
return 0;
}
return 0;
}
@@
-119,7
+122,7
@@
static int at32_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
spin_lock_irq(&rtc->lock);
rtc->alarm_time = alarm_unix_time;
rtc_writel(rtc, TOP, rtc->alarm_time);
spin_lock_irq(&rtc->lock);
rtc->alarm_time = alarm_unix_time;
rtc_writel(rtc, TOP, rtc->alarm_time);
- if (alrm->
pending
)
+ if (alrm->
enabled
)
rtc_writel(rtc, CTRL, rtc_readl(rtc, CTRL)
| RTC_BIT(CTRL_TOPEN));
else
rtc_writel(rtc, CTRL, rtc_readl(rtc, CTRL)
| RTC_BIT(CTRL_TOPEN));
else
@@
-202,7
+205,7
@@
static int __init at32_rtc_probe(struct platform_device *pdev)
{
struct resource *regs;
struct rtc_at32ap700x *rtc;
{
struct resource *regs;
struct rtc_at32ap700x *rtc;
- int irq
= -1
;
+ int irq;
int ret;
rtc = kzalloc(sizeof(struct rtc_at32ap700x), GFP_KERNEL);
int ret;
rtc = kzalloc(sizeof(struct rtc_at32ap700x), GFP_KERNEL);
@@
-219,7
+222,7
@@
static int __init at32_rtc_probe(struct platform_device *pdev)
}
irq = platform_get_irq(pdev, 0);
}
irq = platform_get_irq(pdev, 0);
- if (irq < 0) {
+ if (irq <
=
0) {
dev_dbg(&pdev->dev, "could not get irq\n");
ret = -ENXIO;
goto out;
dev_dbg(&pdev->dev, "could not get irq\n");
ret = -ENXIO;
goto out;
@@
-262,6
+265,7
@@
static int __init at32_rtc_probe(struct platform_device *pdev)
}
platform_set_drvdata(pdev, rtc);
}
platform_set_drvdata(pdev, rtc);
+ device_init_wakeup(&pdev->dev, 1);
dev_info(&pdev->dev, "Atmel RTC for AT32AP700x at %08lx irq %ld\n",
(unsigned long)rtc->regs, rtc->irq);
dev_info(&pdev->dev, "Atmel RTC for AT32AP700x at %08lx irq %ld\n",
(unsigned long)rtc->regs, rtc->irq);
@@
-281,6
+285,8
@@
static int __exit at32_rtc_remove(struct platform_device *pdev)
{
struct rtc_at32ap700x *rtc = platform_get_drvdata(pdev);
{
struct rtc_at32ap700x *rtc = platform_get_drvdata(pdev);
+ device_init_wakeup(&pdev->dev, 0);
+
free_irq(rtc->irq, rtc);
iounmap(rtc->regs);
rtc_device_unregister(rtc->rtc);
free_irq(rtc->irq, rtc);
iounmap(rtc->regs);
rtc_device_unregister(rtc->rtc);
@@
-290,7
+296,7
@@
static int __exit at32_rtc_remove(struct platform_device *pdev)
return 0;
}
return 0;
}
-MODULE_ALIAS("at32ap700x_rtc");
+MODULE_ALIAS("
platform:
at32ap700x_rtc");
static struct platform_driver at32_rtc_driver = {
.remove = __exit_p(at32_rtc_remove),
static struct platform_driver at32_rtc_driver = {
.remove = __exit_p(at32_rtc_remove),