lkml.org 
[lkml]   [2010]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[102/289] olpc_battery: Fix endian neutral breakage for s16 values
    2.6.36-stable review patch.  If anyone has any objections, please let us know.

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

    From: Richard A. Smith <richard@laptop.org>

    commit 7cfbb29466633e6ecdc14f76a693c8478c2b22af upstream.

    When the driver was updated to be endian neutral (8e9c7716c)
    the signed part of the s16 values was lost. This is because be16_to_cpu()
    returns an unsigned value. This patch casts the values back to a s16
    number prior to the the implicit cast up to an int.

    Signed-off-by: Richard A. Smith <richard@laptop.org>
    Signed-off-by: Daniel Drake <dsd@laptop.org>
    Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/power/olpc_battery.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/drivers/power/olpc_battery.c
    +++ b/drivers/power/olpc_battery.c
    @@ -271,14 +271,14 @@ static int olpc_bat_get_property(struct
    if (ret)
    return ret;

    - val->intval = (int)be16_to_cpu(ec_word) * 9760L / 32;
    + val->intval = (s16)be16_to_cpu(ec_word) * 9760L / 32;
    break;
    case POWER_SUPPLY_PROP_CURRENT_AVG:
    ret = olpc_ec_cmd(EC_BAT_CURRENT, NULL, 0, (void *)&ec_word, 2);
    if (ret)
    return ret;

    - val->intval = (int)be16_to_cpu(ec_word) * 15625L / 120;
    + val->intval = (s16)be16_to_cpu(ec_word) * 15625L / 120;
    break;
    case POWER_SUPPLY_PROP_CAPACITY:
    ret = olpc_ec_cmd(EC_BAT_SOC, NULL, 0, &ec_byte, 1);
    @@ -299,7 +299,7 @@ static int olpc_bat_get_property(struct
    if (ret)
    return ret;

    - val->intval = (int)be16_to_cpu(ec_word) * 100 / 256;
    + val->intval = (s16)be16_to_cpu(ec_word) * 100 / 256;
    break;
    case POWER_SUPPLY_PROP_TEMP_AMBIENT:
    ret = olpc_ec_cmd(EC_AMB_TEMP, NULL, 0, (void *)&ec_word, 2);
    @@ -313,7 +313,7 @@ static int olpc_bat_get_property(struct
    if (ret)
    return ret;

    - val->intval = (int)be16_to_cpu(ec_word) * 6250 / 15;
    + val->intval = (s16)be16_to_cpu(ec_word) * 6250 / 15;
    break;
    case POWER_SUPPLY_PROP_SERIAL_NUMBER:
    ret = olpc_ec_cmd(EC_BAT_SERIAL, NULL, 0, (void *)&ser_buf, 8);



    \
     
     \ /
      Last update: 2010-12-08 02:43    [W:0.020 / U:61.844 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site