lkml.org 
[lkml]   [2014]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.11 095/128] hwmon: (adm1021) Fix cache problem when writing temperature limits
    Date
    3.11.10.14 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Axel Lin <axel.lin@ingics.com>

    commit c024044d4da2c9c3b32933b4235df1e409293b84 upstream.

    The module test script for the adm1021 driver exposes a cache problem
    when writing temperature limits. temp_min and temp_max are expected
    to be stored in milli-degrees C but are stored in degrees C.

    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Axel Lin <axel.lin@ingics.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    [ luis: backported to 3.11: adjusted context ]
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    drivers/hwmon/adm1021.c | 14 ++++++++------
    1 file changed, 8 insertions(+), 6 deletions(-)

    diff --git a/drivers/hwmon/adm1021.c b/drivers/hwmon/adm1021.c
    index 29dd9f746dfa..233b374334ed 100644
    --- a/drivers/hwmon/adm1021.c
    +++ b/drivers/hwmon/adm1021.c
    @@ -185,7 +185,7 @@ static ssize_t set_temp_max(struct device *dev,
    struct i2c_client *client = to_i2c_client(dev);
    struct adm1021_data *data = i2c_get_clientdata(client);
    long temp;
    - int err;
    + int reg_val, err;

    err = kstrtol(buf, 10, &temp);
    if (err)
    @@ -193,10 +193,11 @@ static ssize_t set_temp_max(struct device *dev,
    temp /= 1000;

    mutex_lock(&data->update_lock);
    - data->temp_max[index] = clamp_val(temp, -128, 127);
    + reg_val = clamp_val(temp, -128, 127);
    + data->temp_max[index] = reg_val * 1000;
    if (!read_only)
    i2c_smbus_write_byte_data(client, ADM1021_REG_TOS_W(index),
    - data->temp_max[index]);
    + reg_val);
    mutex_unlock(&data->update_lock);

    return count;
    @@ -210,7 +211,7 @@ static ssize_t set_temp_min(struct device *dev,
    struct i2c_client *client = to_i2c_client(dev);
    struct adm1021_data *data = i2c_get_clientdata(client);
    long temp;
    - int err;
    + int reg_val, err;

    err = kstrtol(buf, 10, &temp);
    if (err)
    @@ -218,10 +219,11 @@ static ssize_t set_temp_min(struct device *dev,
    temp /= 1000;

    mutex_lock(&data->update_lock);
    - data->temp_min[index] = clamp_val(temp, -128, 127);
    + reg_val = clamp_val(temp, -128, 127);
    + data->temp_min[index] = reg_val * 1000;
    if (!read_only)
    i2c_smbus_write_byte_data(client, ADM1021_REG_THYST_W(index),
    - data->temp_min[index]);
    + reg_val);
    mutex_unlock(&data->update_lock);

    return count;
    --
    1.9.1


    \
     
     \ /
      Last update: 2014-07-24 12:41    [W:4.023 / U:0.280 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site