Signed-off-by: Guenter Roeck <[email protected]>
---
The main rationale for this cleanup is to prepare the driver for adding max6696
support.

 drivers/hwmon/lm90.c |  110 +++++++++++++++++++++++++++++++++----------------
 1 files changed, 74 insertions(+), 36 deletions(-)

diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
index 760ef72..58a5605 100644
--- a/drivers/hwmon/lm90.c
+++ b/drivers/hwmon/lm90.c
@@ -387,8 +387,13 @@ static ssize_t set_temp8(struct device *dev, struct 
device_attribute *devattr,
        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
        struct i2c_client *client = to_i2c_client(dev);
        struct lm90_data *data = i2c_get_clientdata(client);
-       long val = simple_strtol(buf, NULL, 10);
        int nr = attr->index;
+       long val;
+       int err;
+
+       err = strict_strtol(buf, 10, &val);
+       if (err < 0)
+               return err;
 
        /* +16 degrees offset for temp2 for the LM99 */
        if (data->kind == lm99 && attr->index == 3)
@@ -442,8 +447,13 @@ static ssize_t set_temp11(struct device *dev, struct 
device_attribute *devattr,
        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
        struct i2c_client *client = to_i2c_client(dev);
        struct lm90_data *data = i2c_get_clientdata(client);
-       long val = simple_strtol(buf, NULL, 10);
        int nr = attr->index;
+       long val;
+       int err;
+
+       err = strict_strtol(buf, 10, &val);
+       if (err < 0)
+               return err;
 
        /* +16 degrees offset for temp2 for the LM99 */
        if (data->kind == lm99 && attr->index <= 2)
@@ -469,7 +479,8 @@ static ssize_t set_temp11(struct device *dev, struct 
device_attribute *devattr,
        return count;
 }
 
-static ssize_t show_temphyst(struct device *dev, struct device_attribute 
*devattr,
+static ssize_t show_temphyst(struct device *dev,
+                            struct device_attribute *devattr,
                             char *buf)
 {
        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
@@ -495,9 +506,14 @@ static ssize_t set_temphyst(struct device *dev, struct 
device_attribute *dummy,
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct lm90_data *data = i2c_get_clientdata(client);
-       long val = simple_strtol(buf, NULL, 10);
+       long val;
+       int err;
        int temp;
 
+       err = strict_strtol(buf, 10, &val);
+       if (err < 0)
+               return err;
+
        mutex_lock(&data->update_lock);
        if (data->kind == adt7461)
                temp = temp_from_u8_adt7461(data, data->temp8[2]);
@@ -600,7 +616,12 @@ static ssize_t set_pec(struct device *dev, struct 
device_attribute *dummy,
                       const char *buf, size_t count)
 {
        struct i2c_client *client = to_i2c_client(dev);
-       long val = simple_strtol(buf, NULL, 10);
+       long val;
+       int err;
+
+       err = strict_strtol(buf, 10, &val);
+       if (err < 0)
+               return err;
 
        switch (val) {
        case 0:
@@ -622,8 +643,10 @@ static DEVICE_ATTR(pec, S_IWUSR | S_IRUGO, show_pec, 
set_pec);
  * Real code
  */
 
-/* The ADM1032 supports PEC but not on write byte transactions, so we need
-   to explicitly ask for a transaction without PEC. */
+/*
+ * The ADM1032 supports PEC but not on write byte transactions, so we need
+ * to explicitly ask for a transaction without PEC.
+ */
 static inline s32 adm1032_write_byte(struct i2c_client *client, u8 value)
 {
        return i2c_smbus_xfer(client->adapter, client->addr,
@@ -631,20 +654,22 @@ static inline s32 adm1032_write_byte(struct i2c_client 
*client, u8 value)
                              I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
 }
 
-/* It is assumed that client->update_lock is held (unless we are in
-   detection or initialization steps). This matters when PEC is enabled,
-   because we don't want the address pointer to change between the write
-   byte and the read byte transactions. */
-static int lm90_read_reg(struct i2c_client* client, u8 reg, u8 *value)
+/*
+ * It is assumed that client->update_lock is held (unless we are in
+ * detection or initialization steps). This matters when PEC is enabled,
+ * because we don't want the address pointer to change between the write
+ * byte and the read byte transactions.
+ */
+static int lm90_read_reg(struct i2c_client *client, u8 reg, u8 *value)
 {
        int err;
 
-       if (client->flags & I2C_CLIENT_PEC) {
-               err = adm1032_write_byte(client, reg);
-               if (err >= 0)
-                       err = i2c_smbus_read_byte(client);
-       } else
-               err = i2c_smbus_read_byte_data(client, reg);
+       if (client->flags & I2C_CLIENT_PEC) {
+               err = adm1032_write_byte(client, reg);
+               if (err >= 0)
+                       err = i2c_smbus_read_byte(client);
+       } else
+               err = i2c_smbus_read_byte_data(client, reg);
 
        if (err < 0) {
                dev_warn(&client->dev, "Register %#02x read failed (%d)\n",
@@ -669,14 +694,21 @@ static int lm90_detect(struct i2c_client *new_client,
                return -ENODEV;
 
        /* detection and identification */
-       if ((man_id = i2c_smbus_read_byte_data(new_client,
-                                               LM90_REG_R_MAN_ID)) < 0
-        || (chip_id = i2c_smbus_read_byte_data(new_client,
-                                               LM90_REG_R_CHIP_ID)) < 0
-        || (reg_config1 = i2c_smbus_read_byte_data(new_client,
-                                               LM90_REG_R_CONFIG1)) < 0
-        || (reg_convrate = i2c_smbus_read_byte_data(new_client,
-                                               LM90_REG_R_CONVRATE)) < 0)
+       man_id = i2c_smbus_read_byte_data(new_client, LM90_REG_R_MAN_ID);
+       if (man_id < 0)
+               return -ENODEV;
+
+       chip_id = i2c_smbus_read_byte_data(new_client, LM90_REG_R_CHIP_ID);
+       if (chip_id < 0)
+               return -ENODEV;
+
+       reg_config1 = i2c_smbus_read_byte_data(new_client, LM90_REG_R_CONFIG1);
+       if (reg_config1 < 0)
+               return -ENODEV;
+
+       reg_convrate = i2c_smbus_read_byte_data(new_client,
+                                               LM90_REG_R_CONVRATE);
+       if (reg_convrate < 0)
                return -ENODEV;
 
        if ((address == 0x4C || address == 0x4D)
@@ -826,16 +858,18 @@ static int lm90_probe(struct i2c_client *new_client,
        lm90_init_client(new_client);
 
        /* Register sysfs hooks */
-       if ((err = sysfs_create_group(&new_client->dev.kobj, &lm90_group)))
+       err = sysfs_create_group(&new_client->dev.kobj, &lm90_group);
+       if (err)
                goto exit_free;
        if (new_client->flags & I2C_CLIENT_PEC) {
-               if ((err = device_create_file(&new_client->dev,
-                                             &dev_attr_pec)))
+               err = device_create_file(&new_client->dev, &dev_attr_pec);
+               if (err)
                        goto exit_remove_files;
        }
        if (data->kind != max6657 && data->kind != max6646) {
-               if ((err = device_create_file(&new_client->dev,
-                               &sensor_dev_attr_temp2_offset.dev_attr)))
+               err = device_create_file(&new_client->dev,
+                                       &sensor_dev_attr_temp2_offset.dev_attr);
+               if (err)
                        goto exit_remove_files;
        }
 
@@ -883,9 +917,8 @@ static void lm90_init_client(struct i2c_client *client)
         * 0.125 degree resolution) and range (0x08, extend range
         * to -64 degree) mode for the remote temperature sensor.
         */
-       if (data->kind == max6680) {
+       if (data->kind == max6680)
                config |= 0x18;
-       }
 
        config &= 0xBF; /* run */
        if (config != data->config_orig) /* Only write if changed */
@@ -961,9 +994,14 @@ static int lm90_read16(struct i2c_client *client, u8 regh, 
u8 regl, u16 *value)
         * we have to read the low byte again, and now we believe we have a
         * correct reading.
         */
-       if ((err = lm90_read_reg(client, regh, &oldh))
-        || (err = lm90_read_reg(client, regl, &l))
-        || (err = lm90_read_reg(client, regh, &newh)))
+       err = lm90_read_reg(client, regh, &oldh);
+       if (err)
+               return err;
+       err = lm90_read_reg(client, regl, &l);
+       if (err)
+               return err;
+       err = lm90_read_reg(client, regh, &newh);
+       if (err)
                return err;
        if (oldh != newh) {
                err = lm90_read_reg(client, regl, &l);
-- 
1.7.0.87.g0901d

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to