diff options
Diffstat (limited to 'drivers/rtc/rtc-sh.c')
| -rw-r--r-- | drivers/rtc/rtc-sh.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c index 78277a118b67..c1d6a1880ccf 100644 --- a/drivers/rtc/rtc-sh.c +++ b/drivers/rtc/rtc-sh.c | |||
| @@ -26,17 +26,7 @@ | |||
| 26 | #include <asm/rtc.h> | 26 | #include <asm/rtc.h> |
| 27 | 27 | ||
| 28 | #define DRV_NAME "sh-rtc" | 28 | #define DRV_NAME "sh-rtc" |
| 29 | #define DRV_VERSION "0.1.3" | 29 | #define DRV_VERSION "0.1.6" |
| 30 | |||
| 31 | #ifdef CONFIG_CPU_SH3 | ||
| 32 | #define rtc_reg_size sizeof(u16) | ||
| 33 | #define RTC_BIT_INVERTED 0 /* No bug on SH7708, SH7709A */ | ||
| 34 | #define RTC_DEF_CAPABILITIES 0UL | ||
| 35 | #elif defined(CONFIG_CPU_SH4) | ||
| 36 | #define rtc_reg_size sizeof(u32) | ||
| 37 | #define RTC_BIT_INVERTED 0x40 /* bug on SH7750, SH7750S */ | ||
| 38 | #define RTC_DEF_CAPABILITIES RTC_CAP_4_DIGIT_YEAR | ||
| 39 | #endif | ||
| 40 | 30 | ||
| 41 | #define RTC_REG(r) ((r) * rtc_reg_size) | 31 | #define RTC_REG(r) ((r) * rtc_reg_size) |
| 42 | 32 | ||
| @@ -58,6 +48,18 @@ | |||
| 58 | #define RCR1 RTC_REG(14) /* Control */ | 48 | #define RCR1 RTC_REG(14) /* Control */ |
| 59 | #define RCR2 RTC_REG(15) /* Control */ | 49 | #define RCR2 RTC_REG(15) /* Control */ |
| 60 | 50 | ||
| 51 | /* | ||
| 52 | * Note on RYRAR and RCR3: Up until this point most of the register | ||
| 53 | * definitions are consistent across all of the available parts. However, | ||
| 54 | * the placement of the optional RYRAR and RCR3 (the RYRAR control | ||
| 55 | * register used to control RYRCNT/RYRAR compare) varies considerably | ||
| 56 | * across various parts, occasionally being mapped in to a completely | ||
| 57 | * unrelated address space. For proper RYRAR support a separate resource | ||
| 58 | * would have to be handed off, but as this is purely optional in | ||
| 59 | * practice, we simply opt not to support it, thereby keeping the code | ||
| 60 | * quite a bit more simplified. | ||
| 61 | */ | ||
| 62 | |||
| 61 | /* ALARM Bits - or with BCD encoded value */ | 63 | /* ALARM Bits - or with BCD encoded value */ |
| 62 | #define AR_ENB 0x80 /* Enable for alarm cmp */ | 64 | #define AR_ENB 0x80 /* Enable for alarm cmp */ |
| 63 | 65 | ||
| @@ -351,8 +353,10 @@ static int sh_rtc_read_time(struct device *dev, struct rtc_time *tm) | |||
| 351 | tm->tm_sec, tm->tm_min, tm->tm_hour, | 353 | tm->tm_sec, tm->tm_min, tm->tm_hour, |
| 352 | tm->tm_mday, tm->tm_mon + 1, tm->tm_year, tm->tm_wday); | 354 | tm->tm_mday, tm->tm_mon + 1, tm->tm_year, tm->tm_wday); |
| 353 | 355 | ||
| 354 | if (rtc_valid_tm(tm) < 0) | 356 | if (rtc_valid_tm(tm) < 0) { |
| 355 | dev_err(dev, "invalid date\n"); | 357 | dev_err(dev, "invalid date\n"); |
| 358 | rtc_time_to_tm(0, tm); | ||
| 359 | } | ||
| 356 | 360 | ||
| 357 | return 0; | 361 | return 0; |
| 358 | } | 362 | } |
| @@ -588,7 +592,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
| 588 | 592 | ||
| 589 | rtc->rtc_dev = rtc_device_register("sh", &pdev->dev, | 593 | rtc->rtc_dev = rtc_device_register("sh", &pdev->dev, |
| 590 | &sh_rtc_ops, THIS_MODULE); | 594 | &sh_rtc_ops, THIS_MODULE); |
| 591 | if (IS_ERR(rtc)) { | 595 | if (IS_ERR(rtc->rtc_dev)) { |
| 592 | ret = PTR_ERR(rtc->rtc_dev); | 596 | ret = PTR_ERR(rtc->rtc_dev); |
| 593 | goto err_badmap; | 597 | goto err_badmap; |
| 594 | } | 598 | } |
