aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hwmon/tmp401.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/hwmon/tmp401.c b/drivers/hwmon/tmp401.c
index ccd993880d74..f2182ee80830 100644
--- a/drivers/hwmon/tmp401.c
+++ b/drivers/hwmon/tmp401.c
@@ -615,10 +615,10 @@ static const struct attribute_group tmp432_group = {
615 * Begin non sysfs callback code (aka Real code) 615 * Begin non sysfs callback code (aka Real code)
616 */ 616 */
617 617
618static void tmp401_init_client(struct tmp401_data *data, 618static int tmp401_init_client(struct tmp401_data *data,
619 struct i2c_client *client) 619 struct i2c_client *client)
620{ 620{
621 int config, config_orig; 621 int config, config_orig, status = 0;
622 622
623 /* Set the conversion rate to 2 Hz */ 623 /* Set the conversion rate to 2 Hz */
624 i2c_smbus_write_byte_data(client, TMP401_CONVERSION_RATE_WRITE, 5); 624 i2c_smbus_write_byte_data(client, TMP401_CONVERSION_RATE_WRITE, 5);
@@ -626,16 +626,18 @@ static void tmp401_init_client(struct tmp401_data *data,
626 626
627 /* Start conversions (disable shutdown if necessary) */ 627 /* Start conversions (disable shutdown if necessary) */
628 config = i2c_smbus_read_byte_data(client, TMP401_CONFIG_READ); 628 config = i2c_smbus_read_byte_data(client, TMP401_CONFIG_READ);
629 if (config < 0) { 629 if (config < 0)
630 dev_warn(&client->dev, "Initialization failed!\n"); 630 return config;
631 return;
632 }
633 631
634 config_orig = config; 632 config_orig = config;
635 config &= ~TMP401_CONFIG_SHUTDOWN; 633 config &= ~TMP401_CONFIG_SHUTDOWN;
636 634
637 if (config != config_orig) 635 if (config != config_orig)
638 i2c_smbus_write_byte_data(client, TMP401_CONFIG_WRITE, config); 636 status = i2c_smbus_write_byte_data(client,
637 TMP401_CONFIG_WRITE,
638 config);
639
640 return status;
639} 641}
640 642
641static int tmp401_detect(struct i2c_client *client, 643static int tmp401_detect(struct i2c_client *client,
@@ -718,7 +720,7 @@ static int tmp401_probe(struct i2c_client *client,
718 struct device *dev = &client->dev; 720 struct device *dev = &client->dev;
719 struct device *hwmon_dev; 721 struct device *hwmon_dev;
720 struct tmp401_data *data; 722 struct tmp401_data *data;
721 int groups = 0; 723 int groups = 0, status;
722 724
723 data = devm_kzalloc(dev, sizeof(struct tmp401_data), GFP_KERNEL); 725 data = devm_kzalloc(dev, sizeof(struct tmp401_data), GFP_KERNEL);
724 if (!data) 726 if (!data)
@@ -729,7 +731,9 @@ static int tmp401_probe(struct i2c_client *client,
729 data->kind = id->driver_data; 731 data->kind = id->driver_data;
730 732
731 /* Initialize the TMP401 chip */ 733 /* Initialize the TMP401 chip */
732 tmp401_init_client(data, client); 734 status = tmp401_init_client(data, client);
735 if (status < 0)
736 return status;
733 737
734 /* Register sysfs hooks */ 738 /* Register sysfs hooks */
735 data->groups[groups++] = &tmp401_group; 739 data->groups[groups++] = &tmp401_group;