aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/rtc-pcf85363.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/rtc/rtc-pcf85363.c b/drivers/rtc/rtc-pcf85363.c
index 3fa5bda59987..c04a1edcd571 100644
--- a/drivers/rtc/rtc-pcf85363.c
+++ b/drivers/rtc/rtc-pcf85363.c
@@ -106,6 +106,10 @@
106#define PIN_IO_INTA_OUT 2 106#define PIN_IO_INTA_OUT 2
107#define PIN_IO_INTA_HIZ 3 107#define PIN_IO_INTA_HIZ 3
108 108
109#define STOP_EN_STOP BIT(0)
110
111#define RESET_CPR 0xa4
112
109#define NVRAM_SIZE 0x40 113#define NVRAM_SIZE 0x40
110 114
111static struct i2c_driver pcf85363_driver; 115static struct i2c_driver pcf85363_driver;
@@ -148,8 +152,12 @@ static int pcf85363_rtc_read_time(struct device *dev, struct rtc_time *tm)
148static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm) 152static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm)
149{ 153{
150 struct pcf85363 *pcf85363 = dev_get_drvdata(dev); 154 struct pcf85363 *pcf85363 = dev_get_drvdata(dev);
151 unsigned char buf[DT_YEARS + 1]; 155 unsigned char tmp[11];
152 int len = sizeof(buf); 156 unsigned char *buf = &tmp[2];
157 int ret;
158
159 tmp[0] = STOP_EN_STOP;
160 tmp[1] = RESET_CPR;
153 161
154 buf[DT_100THS] = 0; 162 buf[DT_100THS] = 0;
155 buf[DT_SECS] = bin2bcd(tm->tm_sec); 163 buf[DT_SECS] = bin2bcd(tm->tm_sec);
@@ -160,8 +168,12 @@ static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm)
160 buf[DT_MONTHS] = bin2bcd(tm->tm_mon + 1); 168 buf[DT_MONTHS] = bin2bcd(tm->tm_mon + 1);
161 buf[DT_YEARS] = bin2bcd(tm->tm_year % 100); 169 buf[DT_YEARS] = bin2bcd(tm->tm_year % 100);
162 170
163 return regmap_bulk_write(pcf85363->regmap, DT_100THS, 171 ret = regmap_bulk_write(pcf85363->regmap, CTRL_STOP_EN,
164 buf, len); 172 tmp, sizeof(tmp));
173 if (ret)
174 return ret;
175
176 return regmap_write(pcf85363->regmap, CTRL_STOP_EN, 0);
165} 177}
166 178
167static int pcf85363_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) 179static int pcf85363_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)