diff options
Diffstat (limited to 'drivers/rtc')
-rw-r--r-- | drivers/rtc/rtc-pcf85363.c | 20 |
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 | ||
111 | static struct i2c_driver pcf85363_driver; | 115 | static struct i2c_driver pcf85363_driver; |
@@ -148,8 +152,12 @@ static int pcf85363_rtc_read_time(struct device *dev, struct rtc_time *tm) | |||
148 | static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm) | 152 | static 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 | ||
167 | static int pcf85363_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) | 179 | static int pcf85363_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) |