diff options
| author | Linus Walleij <linus.walleij@stericsson.com> | 2009-11-13 19:03:24 -0500 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-11-16 11:15:49 -0500 |
| commit | 378ce74bee4cb0183489bc0f850790a2264ca975 (patch) | |
| tree | d1999328c0a7ebabf49b0f25909779fa9e7e5966 | |
| parent | 927585f650b51639f0262dad650eafeaf1611197 (diff) | |
ARM: 5787/1: U300 COH 901 331 fixes
This will fix some small issues with the COH 901 331 RTC driver:
- Interrupt is disabled after alarm so that we don't fire
multiple interrupts.
- We return 0 from the coh901331_alarm_irq_enable() ridding
a compile warning.
- We alter the name in the U300 device registry to match that
of the driver so they sucessfully resolve.
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
| -rw-r--r-- | arch/arm/mach-u300/core.c | 2 | ||||
| -rw-r--r-- | drivers/rtc/rtc-coh901331.c | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index be60d6deee8b..653e25be3dd8 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c | |||
| @@ -408,7 +408,7 @@ static struct platform_device keypad_device = { | |||
| 408 | }; | 408 | }; |
| 409 | 409 | ||
| 410 | static struct platform_device rtc_device = { | 410 | static struct platform_device rtc_device = { |
| 411 | .name = "rtc0", | 411 | .name = "rtc-coh901331", |
| 412 | .id = -1, | 412 | .id = -1, |
| 413 | .num_resources = ARRAY_SIZE(rtc_resources), | 413 | .num_resources = ARRAY_SIZE(rtc_resources), |
| 414 | .resource = rtc_resources, | 414 | .resource = rtc_resources, |
diff --git a/drivers/rtc/rtc-coh901331.c b/drivers/rtc/rtc-coh901331.c index 7fe1fa26c52c..03ea530981d1 100644 --- a/drivers/rtc/rtc-coh901331.c +++ b/drivers/rtc/rtc-coh901331.c | |||
| @@ -58,7 +58,16 @@ static irqreturn_t coh901331_interrupt(int irq, void *data) | |||
| 58 | clk_enable(rtap->clk); | 58 | clk_enable(rtap->clk); |
| 59 | /* Ack IRQ */ | 59 | /* Ack IRQ */ |
| 60 | writel(1, rtap->virtbase + COH901331_IRQ_EVENT); | 60 | writel(1, rtap->virtbase + COH901331_IRQ_EVENT); |
| 61 | /* | ||
| 62 | * Disable the interrupt. This is necessary because | ||
| 63 | * the RTC lives on a lower-clocked line and will | ||
| 64 | * not release the IRQ line until after a few (slower) | ||
| 65 | * clock cycles. The interrupt will be re-enabled when | ||
| 66 | * a new alarm is set anyway. | ||
| 67 | */ | ||
| 68 | writel(0, rtap->virtbase + COH901331_IRQ_MASK); | ||
| 61 | clk_disable(rtap->clk); | 69 | clk_disable(rtap->clk); |
| 70 | |||
| 62 | /* Set alarm flag */ | 71 | /* Set alarm flag */ |
| 63 | rtc_update_irq(rtap->rtc, 1, RTC_AF); | 72 | rtc_update_irq(rtap->rtc, 1, RTC_AF); |
| 64 | 73 | ||
| @@ -128,6 +137,8 @@ static int coh901331_alarm_irq_enable(struct device *dev, unsigned int enabled) | |||
| 128 | else | 137 | else |
| 129 | writel(0, rtap->virtbase + COH901331_IRQ_MASK); | 138 | writel(0, rtap->virtbase + COH901331_IRQ_MASK); |
| 130 | clk_disable(rtap->clk); | 139 | clk_disable(rtap->clk); |
| 140 | |||
| 141 | return 0; | ||
| 131 | } | 142 | } |
| 132 | 143 | ||
| 133 | static struct rtc_class_ops coh901331_ops = { | 144 | static struct rtc_class_ops coh901331_ops = { |
