aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkinobu Mita <akinobu.mita@gmail.com>2016-03-06 10:27:50 -0500
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>2016-03-14 12:08:36 -0400
commit7b4393a62f784bdd295c397c640cd93238ded0be (patch)
tree1434700a1d287f380515f953473fe5b73b7c2d14
parentdfc2532b55a4989930d0d67cdf83da9ccb2a1b5b (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.c29
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
275static void ds3232_update_alarm(struct device *dev, unsigned int enabled) 277static 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
313unlock: 315unlock:
314 mutex_unlock(&ds3232->mutex); 316 mutex_unlock(&ds3232->mutex);
317
318 return ret;
315} 319}
316 320
317static int ds3232_alarm_irq_enable(struct device *dev, unsigned int enabled) 321static 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
329static irqreturn_t ds3232_irq(int irq, void *dev_id) 331static 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