From 39c4652d49eba403f39cedfab2cd1b5b26a416de Mon Sep 17 00:00:00 2001 From: venu byravarasu Date: Fri, 13 May 2011 17:51:27 +0530 Subject: 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 Change-Id: Idffb99f24718cd8b15f38b6ca8109969ef47be81 Reviewed-on: http://git-master/r/31522 Tested-by: Venu Byravarasu Reviewed-by: Gaurav Sarode Reviewed-by: Sachin Nikam Reviewed-by: Narendra Damahe Reviewed-by: Scott Williams --- drivers/rtc/rtc-tps6591x.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) mode change 100755 => 100644 drivers/rtc/rtc-tps6591x.c diff --git a/drivers/rtc/rtc-tps6591x.c b/drivers/rtc/rtc-tps6591x.c old mode 100755 new mode 100644 index abfb7c20af7d..db3208494571 --- 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; @@ -448,6 +452,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, ®); + 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, ®); if (err) { @@ -455,13 +466,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); + } dev_set_drvdata(&pdev->dev, rtc); if (pdata && (pdata->irq >= 0)) { -- cgit v1.2.3