lkml.org 
[lkml]   [2022]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v12 04/16] iio: afe: rescale: use s64 for temporary scale calculations
    Date
    All four scaling coefficients can take signed values.
    Make tmp a signed 64-bit integer and switch to div_s64() to preserve
    signs during 64-bit divisions.

    Fixes: 8b74816b5a9a ("iio: afe: rescale: new driver")
    Signed-off-by: Liam Beguin <liambeguin@gmail.com>
    Reviewed-by: Peter Rosin <peda@axentia.se>
    ---
    drivers/iio/afe/iio-rescale.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    diff --git a/drivers/iio/afe/iio-rescale.c b/drivers/iio/afe/iio-rescale.c
    index 774eb3044edd..271d73e420c4 100644
    --- a/drivers/iio/afe/iio-rescale.c
    +++ b/drivers/iio/afe/iio-rescale.c
    @@ -39,7 +39,7 @@ static int rescale_read_raw(struct iio_dev *indio_dev,
    int *val, int *val2, long mask)
    {
    struct rescale *rescale = iio_priv(indio_dev);
    - unsigned long long tmp;
    + s64 tmp;
    int ret;

    switch (mask) {
    @@ -77,10 +77,10 @@ static int rescale_read_raw(struct iio_dev *indio_dev,
    *val2 = rescale->denominator;
    return IIO_VAL_FRACTIONAL;
    case IIO_VAL_FRACTIONAL_LOG2:
    - tmp = *val * 1000000000LL;
    - do_div(tmp, rescale->denominator);
    + tmp = (s64)*val * 1000000000LL;
    + tmp = div_s64(tmp, rescale->denominator);
    tmp *= rescale->numerator;
    - do_div(tmp, 1000000000LL);
    + tmp = div_s64(tmp, 1000000000LL);
    *val = tmp;
    return ret;
    default:
    --
    2.34.0
    \
     
     \ /
      Last update: 2022-01-08 21:55    [W:4.219 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site