On 7/9/19 2:50 AM, Iker Perez wrote:
From: Iker Perez del Palomar Sustatxa <iker.perez@xxxxxxxxxxxxxxx>
The purpose of this change is to store the kind of device the
kernel is working with.
Signed-off-by: Iker Perez del Palomar Sustatxa <iker.perez@xxxxxxxxxxxxxxx>
---
drivers/hwmon/lm75.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c
index 3fb9c0a2d6d0..0209e0719784 100644
--- a/drivers/hwmon/lm75.c
+++ b/drivers/hwmon/lm75.c
@@ -68,6 +68,7 @@ struct lm75_data {
u8 resolution; /* In bits, between 9 and 16 */
u8 resolution_limits;
unsigned int sample_time; /* In ms */
+ enum lm75_type kind;
};
/*-----------------------------------------------------------------------*/
@@ -237,15 +238,16 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
struct device *dev = &client->dev;
struct device *hwmon_dev;
struct lm75_data *data;
+ struct lm75_data device_data;
int status, err;
u8 set_mask, clr_mask;
int new;
- enum lm75_type kind;
+ data = &device_data;
This makes no sense.
if (client->dev.of_node)
- kind = (enum lm75_type)of_device_get_match_data(&client->dev);
+ data->kind = (enum lm75_type)of_device_get_match_data(&client->dev);
else
- kind = id->driver_data;
+ data->kind = id->driver_data;
... because data is overwritten a couple of lines below when it is allocated.
You would do something like
data->kind = kind;
after data was allocated. Looking at the above code, though, I really wonder if
and how you tested it.
Guenter
if (!i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA))
@@ -267,7 +269,7 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
set_mask = 0;
clr_mask = LM75_SHUTDOWN; /* continuous conversions */
- switch (kind) {
+ switch (data->kind) {
case adt75:
clr_mask |= 1 << 5; /* not one-shot mode */
data->resolution = 12;