int *val, int *val2, long mask)
 {
        struct rescale *rescale = iio_priv(indio_dev);
-       unsigned long long tmp;
+       s64 tmp;
        int ret;
 
        switch (mask) {
                        *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: