Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 54775
b: refs/heads/master
c: 9b5ef64
h: refs/heads/master
i:
  54773: cd31d9b
  54771: 4a12f6a
  54767: 6be6f82
v: v3
  • Loading branch information
Yoichi Yuasa authored and Linus Torvalds committed May 8, 2007
1 parent 7cc0fd3 commit 7b6fdac
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 09a21e56dc3767ce444e21c1383d587b261af13c
refs/heads/master: 9b5ef64a3a73757f1acdfb8565b5105115fc6e62
28 changes: 26 additions & 2 deletions trunk/drivers/rtc/rtc-vr41xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ static DEFINE_SPINLOCK(rtc_lock);
static char rtc_name[] = "RTC";
static unsigned long periodic_frequency;
static unsigned long periodic_count;
static unsigned int alarm_enabled;

struct resource rtc_resource[2] = {
{ .name = rtc_name,
Expand Down Expand Up @@ -188,6 +189,7 @@ static int vr41xx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *wkalrm)
low = rtc1_read(ECMPLREG);
mid = rtc1_read(ECMPMREG);
high = rtc1_read(ECMPHREG);
wkalrm->enabled = alarm_enabled;

spin_unlock_irq(&rtc_lock);

Expand All @@ -206,10 +208,18 @@ static int vr41xx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *wkalrm)

spin_lock_irq(&rtc_lock);

if (alarm_enabled)
disable_irq(ELAPSEDTIME_IRQ);

rtc1_write(ECMPLREG, (uint16_t)(alarm_sec << 15));
rtc1_write(ECMPMREG, (uint16_t)(alarm_sec >> 1));
rtc1_write(ECMPHREG, (uint16_t)(alarm_sec >> 17));

if (wkalrm->enabled)
enable_irq(ELAPSEDTIME_IRQ);

alarm_enabled = wkalrm->enabled;

spin_unlock_irq(&rtc_lock);

return 0;
Expand All @@ -221,10 +231,24 @@ static int vr41xx_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long

switch (cmd) {
case RTC_AIE_ON:
enable_irq(ELAPSEDTIME_IRQ);
spin_lock_irq(&rtc_lock);

if (!alarm_enabled) {
enable_irq(ELAPSEDTIME_IRQ);
alarm_enabled = 1;
}

spin_unlock_irq(&rtc_lock);
break;
case RTC_AIE_OFF:
disable_irq(ELAPSEDTIME_IRQ);
spin_lock_irq(&rtc_lock);

if (alarm_enabled) {
disable_irq(ELAPSEDTIME_IRQ);
alarm_enabled = 0;
}

spin_unlock_irq(&rtc_lock);
break;
case RTC_PIE_ON:
enable_irq(RTCLONG1_IRQ);
Expand Down

0 comments on commit 7b6fdac

Please sign in to comment.