|
@@ -615,10 +615,10 @@ static const struct attribute_group tmp432_group = {
|
|
|
* Begin non sysfs callback code (aka Real code)
|
|
|
*/
|
|
|
|
|
|
-static void tmp401_init_client(struct tmp401_data *data,
|
|
|
- struct i2c_client *client)
|
|
|
+static int tmp401_init_client(struct tmp401_data *data,
|
|
|
+ struct i2c_client *client)
|
|
|
{
|
|
|
- int config, config_orig;
|
|
|
+ int config, config_orig, status = 0;
|
|
|
|
|
|
/* Set the conversion rate to 2 Hz */
|
|
|
i2c_smbus_write_byte_data(client, TMP401_CONVERSION_RATE_WRITE, 5);
|
|
@@ -626,16 +626,18 @@ static void tmp401_init_client(struct tmp401_data *data,
|
|
|
|
|
|
/* Start conversions (disable shutdown if necessary) */
|
|
|
config = i2c_smbus_read_byte_data(client, TMP401_CONFIG_READ);
|
|
|
- if (config < 0) {
|
|
|
- dev_warn(&client->dev, "Initialization failed!\n");
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (config < 0)
|
|
|
+ return config;
|
|
|
|
|
|
config_orig = config;
|
|
|
config &= ~TMP401_CONFIG_SHUTDOWN;
|
|
|
|
|
|
if (config != config_orig)
|
|
|
- i2c_smbus_write_byte_data(client, TMP401_CONFIG_WRITE, config);
|
|
|
+ status = i2c_smbus_write_byte_data(client,
|
|
|
+ TMP401_CONFIG_WRITE,
|
|
|
+ config);
|
|
|
+
|
|
|
+ return status;
|
|
|
}
|
|
|
|
|
|
static int tmp401_detect(struct i2c_client *client,
|
|
@@ -718,7 +720,7 @@ static int tmp401_probe(struct i2c_client *client,
|
|
|
struct device *dev = &client->dev;
|
|
|
struct device *hwmon_dev;
|
|
|
struct tmp401_data *data;
|
|
|
- int groups = 0;
|
|
|
+ int groups = 0, status;
|
|
|
|
|
|
data = devm_kzalloc(dev, sizeof(struct tmp401_data), GFP_KERNEL);
|
|
|
if (!data)
|
|
@@ -729,7 +731,9 @@ static int tmp401_probe(struct i2c_client *client,
|
|
|
data->kind = id->driver_data;
|
|
|
|
|
|
/* Initialize the TMP401 chip */
|
|
|
- tmp401_init_client(data, client);
|
|
|
+ status = tmp401_init_client(data, client);
|
|
|
+ if (status < 0)
|
|
|
+ return status;
|
|
|
|
|
|
/* Register sysfs hooks */
|
|
|
data->groups[groups++] = &tmp401_group;
|