Skip to content
  • Alexandre Courbot's avatar
    gpio: clamp returned values to the boolean range · 23600969
    Alexandre Courbot authored and Linus Walleij's avatar Linus Walleij committed
    
    
    Nothing prevents GPIO drivers from returning values outside the
    boolean range, and as it turns out a few drivers are actually doing so.
    These values were passed as-is to unsuspecting consumers and created
    confusion.
    
    This patch makes the internal _gpiod_get_raw_value() function return a
    bool, effectively clamping the GPIO value to the boolean range no
    matter what the driver does.
    
    While we are at it, we also change the value parameter of
    _gpiod_set_raw_value() to bool type before drivers start doing funny
    things with it as well.
    
    Another way to fix this would be to change the prototypes of the driver
    interface to use bool directly, but this would require a huge
    cross-systems patch so this simpler solution is preferred.
    
    Changes since v1:
    - Change local variable type to bool as well, use boolean values in
      code
    - Also change prototype of open drain/open source setting functions
      since they are only called from _gpiod_set_raw_value()
    
    This probably calls for a larger booleanization of gpiolib, but let's
    keep that for a latter change - right now we need to address the issue
    of non-boolean values returned by drivers.
    
    Signed-off-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    23600969