On 7/9/19 2:50 AM, Iker Perez wrote:
From: Iker Perez del Palomar Sustatxa <[email protected]>

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 <[email protected]>
---
  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;


Reply via email to