diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2016-03-06 10:27:50 -0500 |
---|---|---|
committer | Alexandre Belloni <alexandre.belloni@free-electrons.com> | 2016-03-14 12:08:36 -0400 |
commit | 7b4393a62f784bdd295c397c640cd93238ded0be (patch) | |
tree | 1434700a1d287f380515f953473fe5b73b7c2d14 | |
parent | dfc2532b55a4989930d0d67cdf83da9ccb2a1b5b (diff) |
rtc: ds3232: add register access error checks
Add missing register access error checks and make it return error code
or print error message.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
-rw-r--r-- | drivers/rtc/rtc-ds3232.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/drivers/rtc/rtc-ds3232.c b/drivers/rtc/rtc-ds3232.c index 6bf7848c1576..321b8670ff7a 100644 --- a/drivers/rtc/rtc-ds3232.c +++ b/drivers/rtc/rtc-ds3232.c | |||
@@ -262,6 +262,8 @@ static int ds3232_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) | |||
262 | goto out; | 262 | goto out; |
263 | 263 | ||
264 | ret = regmap_bulk_write(ds3232->regmap, DS3232_REG_ALARM1, buf, 4); | 264 | ret = regmap_bulk_write(ds3232->regmap, DS3232_REG_ALARM1, buf, 4); |
265 | if (ret) | ||
266 | goto out; | ||
265 | 267 | ||
266 | if (alarm->enabled) { | 268 | if (alarm->enabled) { |
267 | control |= DS3232_REG_CR_A1IE; | 269 | control |= DS3232_REG_CR_A1IE; |
@@ -272,7 +274,7 @@ out: | |||
272 | return ret; | 274 | return ret; |
273 | } | 275 | } |
274 | 276 | ||
275 | static void ds3232_update_alarm(struct device *dev, unsigned int enabled) | 277 | static int ds3232_update_alarm(struct device *dev, unsigned int enabled) |
276 | { | 278 | { |
277 | struct ds3232 *ds3232 = dev_get_drvdata(dev); | 279 | struct ds3232 *ds3232 = dev_get_drvdata(dev); |
278 | int control; | 280 | int control; |
@@ -308,10 +310,12 @@ static void ds3232_update_alarm(struct device *dev, unsigned int enabled) | |||
308 | else | 310 | else |
309 | /* disable alarm1 interrupt */ | 311 | /* disable alarm1 interrupt */ |
310 | control &= ~(DS3232_REG_CR_A1IE); | 312 | control &= ~(DS3232_REG_CR_A1IE); |
311 | regmap_write(ds3232->regmap, DS3232_REG_CR, control); | 313 | ret = regmap_write(ds3232->regmap, DS3232_REG_CR, control); |
312 | 314 | ||
313 | unlock: | 315 | unlock: |
314 | mutex_unlock(&ds3232->mutex); | 316 | mutex_unlock(&ds3232->mutex); |
317 | |||
318 | return ret; | ||
315 | } | 319 | } |
316 | 320 | ||
317 | static int ds3232_alarm_irq_enable(struct device *dev, unsigned int enabled) | 321 | static int ds3232_alarm_irq_enable(struct device *dev, unsigned int enabled) |
@@ -321,9 +325,7 @@ static int ds3232_alarm_irq_enable(struct device *dev, unsigned int enabled) | |||
321 | if (ds3232->irq <= 0) | 325 | if (ds3232->irq <= 0) |
322 | return -EINVAL; | 326 | return -EINVAL; |
323 | 327 | ||
324 | ds3232_update_alarm(dev, enabled); | 328 | return ds3232_update_alarm(dev, enabled); |
325 | |||
326 | return 0; | ||
327 | } | 329 | } |
328 | 330 | ||
329 | static irqreturn_t ds3232_irq(int irq, void *dev_id) | 331 | static irqreturn_t ds3232_irq(int irq, void *dev_id) |
@@ -364,11 +366,24 @@ static void ds3232_work(struct work_struct *work) | |||
364 | } else { | 366 | } else { |
365 | /* disable alarm1 interrupt */ | 367 | /* disable alarm1 interrupt */ |
366 | control &= ~(DS3232_REG_CR_A1IE); | 368 | control &= ~(DS3232_REG_CR_A1IE); |
367 | regmap_write(ds3232->regmap, DS3232_REG_CR, control); | 369 | ret = regmap_write(ds3232->regmap, DS3232_REG_CR, |
370 | control); | ||
371 | if (ret) { | ||
372 | dev_warn(ds3232->dev, | ||
373 | "Write Control Register error %d\n", | ||
374 | ret); | ||
375 | goto unlock; | ||
376 | } | ||
368 | 377 | ||
369 | /* clear the alarm pend flag */ | 378 | /* clear the alarm pend flag */ |
370 | stat &= ~DS3232_REG_SR_A1F; | 379 | stat &= ~DS3232_REG_SR_A1F; |
371 | regmap_write(ds3232->regmap, DS3232_REG_SR, stat); | 380 | ret = regmap_write(ds3232->regmap, DS3232_REG_SR, stat); |
381 | if (ret) { | ||
382 | dev_warn(ds3232->dev, | ||
383 | "Write Status Register error %d\n", | ||
384 | ret); | ||
385 | goto unlock; | ||
386 | } | ||
372 | 387 | ||
373 | rtc_update_irq(ds3232->rtc, 1, RTC_AF | RTC_IRQF); | 388 | rtc_update_irq(ds3232->rtc, 1, RTC_AF | RTC_IRQF); |
374 | 389 | ||