summaryrefslogtreecommitdiff
path: root/drivers/rtc
diff options
context:
space:
mode:
authorvenu byravarasu <vbyravarasu@nvidia.com>2011-05-13 17:51:27 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:43:15 -0800
commit755bcb6dd81a3669a6109b08f9ba361c0427d6ac (patch)
tree54bb8359afa86156ac37a0b00a98a9fa3d997020 /drivers/rtc
parent6fda10401207854eba72bfbcbc51e32237b6fbd8 (diff)
rtc: tps6591x: enabling backup battery charging
With this change: 1. Enabled backup battery charging 2. Setting RTC default time, if it is not set previously. bug 796507 Original-Change-Id: Idffb99f24718cd8b15f38b6ca8109969ef47be81 Reviewed-on: http://git-master/r/31522 Tested-by: Venu Byravarasu <vbyravarasu@nvidia.com> Reviewed-by: Gaurav Sarode <gsarode@nvidia.com> Reviewed-by: Sachin Nikam <snikam@nvidia.com> Reviewed-by: Narendra Damahe <ndamahe@nvidia.com> Reviewed-by: Scott Williams <scwilliams@nvidia.com> Rebase-Id: R6a38294f28a7efb288b89b5d8ad39daae73bd5ca
Diffstat (limited to 'drivers/rtc')
-rw-r--r--[-rwxr-xr-x]drivers/rtc/rtc-tps6591x.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/drivers/rtc/rtc-tps6591x.c b/drivers/rtc/rtc-tps6591x.c
index 30d6b4f1842a..b22aa4a9be0d 100755..100644
--- a/drivers/rtc/rtc-tps6591x.c
+++ b/drivers/rtc/rtc-tps6591x.c
@@ -38,7 +38,10 @@
#define RTC_ALARM 0x8
#define RTC_INT 0x12
#define RTC_RESET_STATUS 0x16
+#define RTC_BBCH_REG 0x39
+#define RTC_BBCH_SEL 0x02
+#define RTC_BBCH_EN 0x01
#define ENABLE_ALARM_INT 0x8
#define RTC_RESET_VALUE 0x80
#define ALARM_INT_STATUS 0x40
@@ -411,6 +414,7 @@ static int __devinit tps6591x_rtc_probe(struct platform_device *pdev)
{
struct tps6591x_rtc_platform_data *pdata = pdev->dev.platform_data;
struct tps6591x_rtc *rtc;
+ struct rtc_time tm;
int err;
u8 reg;
@@ -449,6 +453,13 @@ static int __devinit tps6591x_rtc_probe(struct platform_device *pdev)
return -EBUSY;
}
+ reg = RTC_BBCH_SEL | RTC_BBCH_EN;
+ tps6591x_write_regs(&pdev->dev, RTC_BBCH_REG, 1, &reg);
+ if (err) {
+ dev_err(&pdev->dev, "unable to program Charger reg\n");
+ return -EBUSY;
+ }
+
reg = ENABLE_ALARM_INT;
tps6591x_write_regs(&pdev->dev, RTC_INT, 1, &reg);
if (err) {
@@ -456,13 +467,16 @@ static int __devinit tps6591x_rtc_probe(struct platform_device *pdev)
return -EBUSY;
}
- if (pdata->time.tm_year < 2000 || pdata->time.tm_year > 2100) {
- memset(&pdata->time, 0, sizeof(pdata->time));
- pdata->time.tm_year = RTC_YEAR_OFFSET;
- pdata->time.tm_mday = 1;
- } else
- pdata->time.tm_year -= OS_REF_YEAR;
- tps6591x_rtc_set_time(&pdev->dev, &pdata->time);
+ tps6591x_rtc_read_time(&pdev->dev, &tm);
+ if ((tm.tm_year < RTC_YEAR_OFFSET || tm.tm_year > (RTC_YEAR_OFFSET + 99))){
+ if (pdata->time.tm_year < 2000 || pdata->time.tm_year > 2100) {
+ memset(&pdata->time, 0, sizeof(pdata->time));
+ pdata->time.tm_year = RTC_YEAR_OFFSET;
+ pdata->time.tm_mday = 1;
+ } else
+ pdata->time.tm_year -= OS_REF_YEAR;
+ tps6591x_rtc_set_time(&pdev->dev, &pdata->time);
+ }
if (pdata && (pdata->irq >= 0)) {
rtc->irq = pdata->irq;