diff options
-rw-r--r-- | drivers/rtc/rtc-rv3029c2.c | 132 |
1 files changed, 57 insertions, 75 deletions
diff --git a/drivers/rtc/rtc-rv3029c2.c b/drivers/rtc/rtc-rv3029c2.c index d0cbf08040cd..091be483e3e9 100644 --- a/drivers/rtc/rtc-rv3029c2.c +++ b/drivers/rtc/rtc-rv3029c2.c @@ -116,9 +116,8 @@ #define RV3029_USR2_RAM_PAGE 0x3C #define RV3029_USR2_SECTION_LEN 0x04 -static int -rv3029_i2c_read_regs(struct i2c_client *client, u8 reg, u8 *buf, - unsigned len) +static int rv3029_read_regs(struct i2c_client *client, u8 reg, u8 *buf, + unsigned len) { int ret; @@ -134,9 +133,8 @@ rv3029_i2c_read_regs(struct i2c_client *client, u8 reg, u8 *buf, return 0; } -static int -rv3029_i2c_write_regs(struct i2c_client *client, u8 reg, u8 const buf[], - unsigned len) +static int rv3029_write_regs(struct i2c_client *client, u8 reg, u8 const buf[], + unsigned len) { if ((reg > RV3029_USR1_RAM_PAGE + 7) || (reg + len > RV3029_USR1_RAM_PAGE + 8)) @@ -145,28 +143,27 @@ rv3029_i2c_write_regs(struct i2c_client *client, u8 reg, u8 const buf[], return i2c_smbus_write_i2c_block_data(client, reg, len, buf); } -static int -rv3029_i2c_update_bits(struct i2c_client *client, u8 reg, u8 mask, u8 set) +static int rv3029_update_bits(struct i2c_client *client, u8 reg, u8 mask, + u8 set) { u8 buf; int ret; - ret = rv3029_i2c_read_regs(client, reg, &buf, 1); + ret = rv3029_read_regs(client, reg, &buf, 1); if (ret < 0) return ret; buf &= ~mask; buf |= set & mask; - ret = rv3029_i2c_write_regs(client, reg, &buf, 1); + ret = rv3029_write_regs(client, reg, &buf, 1); if (ret < 0) return ret; return 0; } -static int -rv3029_i2c_get_sr(struct i2c_client *client, u8 *buf) +static int rv3029_get_sr(struct i2c_client *client, u8 *buf) { - int ret = rv3029_i2c_read_regs(client, RV3029_STATUS, buf, 1); + int ret = rv3029_read_regs(client, RV3029_STATUS, buf, 1); if (ret < 0) return -EIO; @@ -174,14 +171,13 @@ rv3029_i2c_get_sr(struct i2c_client *client, u8 *buf) return 0; } -static int -rv3029_i2c_set_sr(struct i2c_client *client, u8 val) +static int rv3029_set_sr(struct i2c_client *client, u8 val) { u8 buf[1]; int sr; buf[0] = val; - sr = rv3029_i2c_write_regs(client, RV3029_STATUS, buf, 1); + sr = rv3029_write_regs(client, RV3029_STATUS, buf, 1); dev_dbg(&client->dev, "status = 0x%.2x (%d)\n", buf[0], buf[0]); if (sr < 0) return -EIO; @@ -194,7 +190,7 @@ static int rv3029_eeprom_busywait(struct i2c_client *client) u8 sr; for (i = 100; i > 0; i--) { - ret = rv3029_i2c_get_sr(client, &sr); + ret = rv3029_get_sr(client, &sr); if (ret < 0) break; if (!(sr & RV3029_STATUS_EEBUSY)) @@ -212,9 +208,9 @@ static int rv3029_eeprom_busywait(struct i2c_client *client) static int rv3029_eeprom_exit(struct i2c_client *client) { /* Re-enable eeprom refresh */ - return rv3029_i2c_update_bits(client, RV3029_ONOFF_CTRL, - RV3029_ONOFF_CTRL_EERE, - RV3029_ONOFF_CTRL_EERE); + return rv3029_update_bits(client, RV3029_ONOFF_CTRL, + RV3029_ONOFF_CTRL_EERE, + RV3029_ONOFF_CTRL_EERE); } static int rv3029_eeprom_enter(struct i2c_client *client) @@ -223,7 +219,7 @@ static int rv3029_eeprom_enter(struct i2c_client *client) u8 sr; /* Check whether we are in the allowed voltage range. */ - ret = rv3029_i2c_get_sr(client, &sr); + ret = rv3029_get_sr(client, &sr); if (ret < 0) return ret; if (sr & (RV3029_STATUS_VLOW1 | RV3029_STATUS_VLOW2)) { @@ -232,11 +228,11 @@ static int rv3029_eeprom_enter(struct i2c_client *client) */ sr &= ~RV3029_STATUS_VLOW1; sr &= ~RV3029_STATUS_VLOW2; - ret = rv3029_i2c_set_sr(client, sr); + ret = rv3029_set_sr(client, sr); if (ret < 0) return ret; usleep_range(1000, 10000); - ret = rv3029_i2c_get_sr(client, &sr); + ret = rv3029_get_sr(client, &sr); if (ret < 0) return ret; if (sr & (RV3029_STATUS_VLOW1 | RV3029_STATUS_VLOW2)) { @@ -247,8 +243,8 @@ static int rv3029_eeprom_enter(struct i2c_client *client) } /* Disable eeprom refresh. */ - ret = rv3029_i2c_update_bits(client, RV3029_ONOFF_CTRL, - RV3029_ONOFF_CTRL_EERE, 0); + ret = rv3029_update_bits(client, RV3029_ONOFF_CTRL, + RV3029_ONOFF_CTRL_EERE, 0); if (ret < 0) return ret; @@ -269,7 +265,7 @@ static int rv3029_eeprom_read(struct i2c_client *client, u8 reg, if (err < 0) return err; - ret = rv3029_i2c_read_regs(client, reg, buf, len); + ret = rv3029_read_regs(client, reg, buf, len); err = rv3029_eeprom_exit(client); if (err < 0) @@ -290,11 +286,11 @@ static int rv3029_eeprom_write(struct i2c_client *client, u8 reg, return err; for (i = 0; i < len; i++, reg++) { - ret = rv3029_i2c_read_regs(client, reg, &tmp, 1); + ret = rv3029_read_regs(client, reg, &tmp, 1); if (ret < 0) break; if (tmp != buf[i]) { - ret = rv3029_i2c_write_regs(client, reg, &buf[i], 1); + ret = rv3029_write_regs(client, reg, &buf[i], 1); if (ret < 0) break; } @@ -328,21 +324,20 @@ static int rv3029_eeprom_update_bits(struct i2c_client *client, return 0; } -static int -rv3029_i2c_read_time(struct i2c_client *client, struct rtc_time *tm) +static int rv3029_read_time(struct i2c_client *client, struct rtc_time *tm) { u8 buf[1]; int ret; u8 regs[RV3029_WATCH_SECTION_LEN] = { 0, }; - ret = rv3029_i2c_get_sr(client, buf); + ret = rv3029_get_sr(client, buf); if (ret < 0) { dev_err(&client->dev, "%s: reading SR failed\n", __func__); return -EIO; } - ret = rv3029_i2c_read_regs(client, RV3029_W_SEC, regs, - RV3029_WATCH_SECTION_LEN); + ret = rv3029_read_regs(client, RV3029_W_SEC, regs, + RV3029_WATCH_SECTION_LEN); if (ret < 0) { dev_err(&client->dev, "%s: reading RTC section failed\n", __func__); @@ -375,24 +370,24 @@ rv3029_i2c_read_time(struct i2c_client *client, struct rtc_time *tm) static int rv3029_rtc_read_time(struct device *dev, struct rtc_time *tm) { - return rv3029_i2c_read_time(to_i2c_client(dev), tm); + return rv3029_read_time(to_i2c_client(dev), tm); } -static int -rv3029_i2c_read_alarm(struct i2c_client *client, struct rtc_wkalrm *alarm) +static int rv3029_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) { + struct i2c_client *client = to_i2c_client(dev); struct rtc_time *const tm = &alarm->time; int ret; u8 regs[8]; - ret = rv3029_i2c_get_sr(client, regs); + ret = rv3029_get_sr(client, regs); if (ret < 0) { dev_err(&client->dev, "%s: reading SR failed\n", __func__); return -EIO; } - ret = rv3029_i2c_read_regs(client, RV3029_A_SC, regs, - RV3029_ALARM_SECTION_LEN); + ret = rv3029_read_regs(client, RV3029_A_SC, regs, + RV3029_ALARM_SECTION_LEN); if (ret < 0) { dev_err(&client->dev, "%s: reading alarm section failed\n", @@ -411,21 +406,14 @@ rv3029_i2c_read_alarm(struct i2c_client *client, struct rtc_wkalrm *alarm) return 0; } -static int -rv3029_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) -{ - return rv3029_i2c_read_alarm(to_i2c_client(dev), alarm); -} - -static int rv3029_rtc_i2c_alarm_set_irq(struct i2c_client *client, - int enable) +static int rv3029_rtc_alarm_set_irq(struct i2c_client *client, int enable) { int ret; /* enable/disable AIE irq */ - ret = rv3029_i2c_update_bits(client, RV3029_IRQ_CTRL, - RV3029_IRQ_CTRL_AIE, - (enable ? RV3029_IRQ_CTRL_AIE : 0)); + ret = rv3029_update_bits(client, RV3029_IRQ_CTRL, + RV3029_IRQ_CTRL_AIE, + (enable ? RV3029_IRQ_CTRL_AIE : 0)); if (ret < 0) { dev_err(&client->dev, "can't update INT reg\n"); return ret; @@ -434,9 +422,9 @@ static int rv3029_rtc_i2c_alarm_set_irq(struct i2c_client *client, return 0; } -static int rv3029_rtc_i2c_set_alarm(struct i2c_client *client, - struct rtc_wkalrm *alarm) +static int rv3029_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) { + struct i2c_client *client = to_i2c_client(dev); struct rtc_time *const tm = &alarm->time; int ret; u8 regs[8]; @@ -449,7 +437,7 @@ static int rv3029_rtc_i2c_set_alarm(struct i2c_client *client, if (tm->tm_year < 100) return -EINVAL; - ret = rv3029_i2c_get_sr(client, regs); + ret = rv3029_get_sr(client, regs); if (ret < 0) { dev_err(&client->dev, "%s: reading SR failed\n", __func__); return -EIO; @@ -462,28 +450,28 @@ static int rv3029_rtc_i2c_set_alarm(struct i2c_client *client, regs[RV3029_A_DW-RV3029_A_SC] = bin2bcd((tm->tm_wday & 7) - 1); regs[RV3029_A_YR-RV3029_A_SC] = bin2bcd((tm->tm_year & 0x7f) - 100); - ret = rv3029_i2c_write_regs(client, RV3029_A_SC, regs, - RV3029_ALARM_SECTION_LEN); + ret = rv3029_write_regs(client, RV3029_A_SC, regs, + RV3029_ALARM_SECTION_LEN); if (ret < 0) return ret; if (alarm->enabled) { /* clear AF flag */ - ret = rv3029_i2c_update_bits(client, RV3029_IRQ_FLAGS, - RV3029_IRQ_FLAGS_AF, 0); + ret = rv3029_update_bits(client, RV3029_IRQ_FLAGS, + RV3029_IRQ_FLAGS_AF, 0); if (ret < 0) { dev_err(&client->dev, "can't clear alarm flag\n"); return ret; } /* enable AIE irq */ - ret = rv3029_rtc_i2c_alarm_set_irq(client, 1); + ret = rv3029_rtc_alarm_set_irq(client, 1); if (ret) return ret; dev_dbg(&client->dev, "alarm IRQ armed\n"); } else { /* disable AIE irq */ - ret = rv3029_rtc_i2c_alarm_set_irq(client, 0); + ret = rv3029_rtc_alarm_set_irq(client, 0); if (ret) return ret; @@ -493,13 +481,7 @@ static int rv3029_rtc_i2c_set_alarm(struct i2c_client *client, return 0; } -static int rv3029_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) -{ - return rv3029_rtc_i2c_set_alarm(to_i2c_client(dev), alarm); -} - -static int -rv3029_i2c_set_time(struct i2c_client *client, struct rtc_time const *tm) +static int rv3029_set_time(struct i2c_client *client, struct rtc_time const *tm) { u8 regs[8]; int ret; @@ -520,18 +502,18 @@ rv3029_i2c_set_time(struct i2c_client *client, struct rtc_time const *tm) regs[RV3029_W_DAYS-RV3029_W_SEC] = bin2bcd((tm->tm_wday & 7)+1); regs[RV3029_W_YEARS-RV3029_W_SEC] = bin2bcd(tm->tm_year - 100); - ret = rv3029_i2c_write_regs(client, RV3029_W_SEC, regs, - RV3029_WATCH_SECTION_LEN); + ret = rv3029_write_regs(client, RV3029_W_SEC, regs, + RV3029_WATCH_SECTION_LEN); if (ret < 0) return ret; - ret = rv3029_i2c_get_sr(client, regs); + ret = rv3029_get_sr(client, regs); if (ret < 0) { dev_err(&client->dev, "%s: reading SR failed\n", __func__); return ret; } /* clear PON bit */ - ret = rv3029_i2c_set_sr(client, (regs[0] & ~RV3029_STATUS_PON)); + ret = rv3029_set_sr(client, (regs[0] & ~RV3029_STATUS_PON)); if (ret < 0) { dev_err(&client->dev, "%s: reading SR failed\n", __func__); return ret; @@ -542,7 +524,7 @@ rv3029_i2c_set_time(struct i2c_client *client, struct rtc_time const *tm) static int rv3029_rtc_set_time(struct device *dev, struct rtc_time *tm) { - return rv3029_i2c_set_time(to_i2c_client(dev), tm); + return rv3029_set_time(to_i2c_client(dev), tm); } static const struct rv3029_trickle_tab_elem { @@ -646,7 +628,7 @@ static int rv3029_read_temp(struct i2c_client *client, int *temp_mC) int ret; u8 temp; - ret = rv3029_i2c_read_regs(client, RV3029_TEMP_PAGE, &temp, 1); + ret = rv3029_read_regs(client, RV3029_TEMP_PAGE, &temp, 1); if (ret < 0) return ret; @@ -743,8 +725,8 @@ static void rv3029_hwmon_register(struct i2c_client *client) &client->dev, client->name, client, rv3029_hwmon_groups); if (IS_ERR(hwmon_dev)) { dev_warn(&client->dev, - "unable to register hwmon device %ld\n", - PTR_ERR(hwmon_dev)); + "unable to register hwmon device %ld\n", + PTR_ERR(hwmon_dev)); } } @@ -780,7 +762,7 @@ static int rv3029_probe(struct i2c_client *client, if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_EMUL)) return -ENODEV; - rc = rv3029_i2c_get_sr(client, buf); + rc = rv3029_get_sr(client, buf); if (rc < 0) { dev_err(&client->dev, "reading status failed\n"); return rc; |