lkml.org 
[lkml]   [2016]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.8 67/67] gpio: pca953x: Fix corruption of other gpios in set_multiple.
    Date
    4.8-stable review patch.  If anyone has any objections, please let me know.

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

    From: Phil Reid <preid@electromag.com.au>

    commit 53f8d322234649b4d6f1515b20c127a577efd164 upstream.

    gpiod_set_array_value_complex does not clear the bits field.
    Therefore when the drivers set_multiple funciton is called bits outside
    the mask are undefined and can be either set or not. So bank_val needs
    to be masked with bank_mask before or with the reg_val cache.

    Fixes: b4818afeacbd ("gpio: pca953x: Add set_multiple to allow multiple")
    Signed-off-by: Phil Reid <preid@electromag.com.au>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpio/gpio-pca953x.c | 1 +
    1 file changed, 1 insertion(+)

    --- a/drivers/gpio/gpio-pca953x.c
    +++ b/drivers/gpio/gpio-pca953x.c
    @@ -380,6 +380,7 @@ static void pca953x_gpio_set_multiple(st
    if(bankmask) {
    unsigned bankval = bits[bank / sizeof(*bits)] >>
    ((bank % sizeof(*bits)) * 8);
    + bankval &= bankmask;
    reg_val[bank] = (reg_val[bank] & ~bankmask) | bankval;
    }
    }

    \
     
     \ /
      Last update: 2016-11-24 16:36    [W:4.138 / U:1.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site