rtc: pcf85063: preserve control register value between stop and start
authorAlvin Šipraga <alvin@airtame.com>
Sun, 15 Jul 2018 21:31:53 +0000 (23:31 +0200)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Sat, 28 Jul 2018 12:49:25 +0000 (14:49 +0200)
Fix a bug that caused the Control_1 register to get zeroed whenever the
RTC time is set. The problem occurred between stopping and starting the
RTC clock, wherein the return value of a successful I2C write function
would get written to the register.

Also update variables of the start and stop functions to be more
consistent with the rest of the driver.

Signed-off-by: Alvin Šipraga <alvin@airtame.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-pcf85063.c

index 49bcbb3..283c233 100644 (file)
@@ -43,37 +43,38 @@ static struct i2c_driver pcf85063_driver;
 
 static int pcf85063_stop_clock(struct i2c_client *client, u8 *ctrl1)
 {
-       s32 ret;
+       int rc;
+       u8 reg;
 
-       ret = i2c_smbus_read_byte_data(client, PCF85063_REG_CTRL1);
-       if (ret < 0) {
+       rc = i2c_smbus_read_byte_data(client, PCF85063_REG_CTRL1);
+       if (rc < 0) {
                dev_err(&client->dev, "Failing to stop the clock\n");
                return -EIO;
        }
 
        /* stop the clock */
-       ret |= PCF85063_REG_CTRL1_STOP;
+       reg = rc | PCF85063_REG_CTRL1_STOP;
 
-       ret = i2c_smbus_write_byte_data(client, PCF85063_REG_CTRL1, ret);
-       if (ret < 0) {
+       rc = i2c_smbus_write_byte_data(client, PCF85063_REG_CTRL1, reg);
+       if (rc < 0) {
                dev_err(&client->dev, "Failing to stop the clock\n");
                return -EIO;
        }
 
-       *ctrl1 = ret;
+       *ctrl1 = reg;
 
        return 0;
 }
 
 static int pcf85063_start_clock(struct i2c_client *client, u8 ctrl1)
 {
-       s32 ret;
+       int rc;
 
        /* start the clock */
        ctrl1 &= ~PCF85063_REG_CTRL1_STOP;
 
-       ret = i2c_smbus_write_byte_data(client, PCF85063_REG_CTRL1, ctrl1);
-       if (ret < 0) {
+       rc = i2c_smbus_write_byte_data(client, PCF85063_REG_CTRL1, ctrl1);
+       if (rc < 0) {
                dev_err(&client->dev, "Failing to start the clock\n");
                return -EIO;
        }