Pull IIO fixes from Greg KH: "Here are a few small IIO fixes for 4.8-rc6. Nothing major, full details are in the shortlog, all of these have been in linux-next with no reported issues" * tag 'staging-4.8-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: iio:core: fix IIO_VAL_FRACTIONAL sign handling iio: ensure ret is initialized to zero before entering do loop iio: accel: kxsd9: Fix scaling bug iio: accel: bmc150: reset chip at init time iio: fix pressure data output unit in hid-sensor-attributes tools:iio:iio_generic_buffer: fix trigger-less mode
Unified · Split
| @@ -67,6 +67,9 @@ · 66 unmodified lines | ||
| 67 | 67 | #define BMC150_ACCEL_REG_PMU_BW 0x10 |
| 68 | 68 | #define BMC150_ACCEL_DEF_BW 125 |
| 69 | 69 | |
| 70 | +#define BMC150_ACCEL_REG_RESET 0x14 | |
| 71 | +#define BMC150_ACCEL_RESET_VAL 0xB6 | |
| 72 | + | |
| 70 | 73 | #define BMC150_ACCEL_REG_INT_MAP_0 0x19 |
| 71 | 74 | #define BMC150_ACCEL_INT_MAP_0_BIT_SLOPE BIT(2) |
| 72 | 75 | |
| @@ -1497,6 +1500,14 @@ static int bmc150_accel_chip_init(struct bmc150_accel_data *data) · 1424 unmodified lines | ||
| 1497 | 1500 | int ret, i; |
| 1498 | 1501 | unsigned int val; |
| 1499 | 1502 | |
| 1503 | + /* | |
| 1504 | + * Reset chip to get it in a known good state. A delay of 1.8ms after | |
| 1505 | + * reset is required according to the data sheets of supported chips. | |
| 1506 | + */ | |
| 1507 | + regmap_write(data->regmap, BMC150_ACCEL_REG_RESET, | |
| 1508 | + BMC150_ACCEL_RESET_VAL); | |
| 1509 | + usleep_range(1800, 2500); | |
| 1510 | + | |
| 1500 | 1511 | ret = regmap_read(data->regmap, BMC150_ACCEL_REG_CHIP_ID, &val); |
| 1501 | 1512 | if (ret < 0) { |
| 1502 | 1513 | dev_err(dev, "Error: Reading chip id\n"); |
| @@ -166,6 +166,7 @@ static int kxsd9_read_raw(struct iio_dev *indio_dev, · 165 unmodified lines | ||
| 166 | 166 | ret = spi_w8r8(st->us, KXSD9_READ(KXSD9_REG_CTRL_C)); |
| 167 | 167 | if (ret < 0) |
| 168 | 168 | goto error_ret; |
| 169 | + *val = 0; | |
| 169 | 170 | *val2 = kxsd9_micro_scales[ret & KXSD9_FS_MASK]; |
| 170 | 171 | ret = IIO_VAL_INT_PLUS_MICRO; |
| 171 | 172 | break; |
| @@ -56,8 +56,8 @@ static struct { · 55 unmodified lines | ||
| 56 | 56 | {HID_USAGE_SENSOR_ALS, 0, 1, 0}, |
| 57 | 57 | {HID_USAGE_SENSOR_ALS, HID_USAGE_SENSOR_UNITS_LUX, 1, 0}, |
| 58 | 58 | |
| 59 | − {HID_USAGE_SENSOR_PRESSURE, 0, 100000, 0}, | |
| 60 | − {HID_USAGE_SENSOR_PRESSURE, HID_USAGE_SENSOR_UNITS_PASCAL, 1, 0}, | |
| 59 | + {HID_USAGE_SENSOR_PRESSURE, 0, 100, 0}, | |
| 60 | + {HID_USAGE_SENSOR_PRESSURE, HID_USAGE_SENSOR_UNITS_PASCAL, 0, 1000}, | |
| 61 | 61 | }; |
| 62 | 62 | |
| 63 | 63 | static int pow_10(unsigned power) |
| @@ -110,7 +110,7 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf, · 109 unmodified lines | ||
| 110 | 110 | DEFINE_WAIT_FUNC(wait, woken_wake_function); |
| 111 | 111 | size_t datum_size; |
| 112 | 112 | size_t to_wait; |
| 113 | − int ret; | |
| 113 | + int ret = 0; | |
| 114 | 114 | |
| 115 | 115 | if (!indio_dev->info) |
| 116 | 116 | return -ENODEV; |
| @@ -153,7 +153,7 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf, · 36 unmodified lines | ||
| 153 | 153 | ret = rb->access->read_first_n(rb, n, buf); |
| 154 | 154 | if (ret == 0 && (filp->f_flags & O_NONBLOCK)) |
| 155 | 155 | ret = -EAGAIN; |
| 156 | − } while (ret == 0); | |
| 156 | + } while (ret == 0); | |
| 157 | 157 | remove_wait_queue(&rb->pollq, &wait); |
| 158 | 158 | |
| 159 | 159 | return ret; |
| @@ -613,9 +613,8 @@ ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals) · 612 unmodified lines | ||
| 613 | 613 | return sprintf(buf, "%d.%09u\n", vals[0], vals[1]); |
| 614 | 614 | case IIO_VAL_FRACTIONAL: |
| 615 | 615 | tmp = div_s64((s64)vals[0] * 1000000000LL, vals[1]); |
| 616 | − vals[1] = do_div(tmp, 1000000000LL); | |
| 617 | − vals[0] = tmp; | |
| 618 | − return sprintf(buf, "%d.%09u\n", vals[0], vals[1]); | |
| 616 | + vals[0] = (int)div_s64_rem(tmp, 1000000000, &vals[1]); | |
| 617 | + return sprintf(buf, "%d.%09u\n", vals[0], abs(vals[1])); | |
| 619 | 618 | case IIO_VAL_FRACTIONAL_LOG2: |
| 620 | 619 | tmp = (s64)vals[0] * 1000000000LL >> vals[1]; |
| 621 | 620 | vals[1] = do_div(tmp, 1000000000LL); |
| @@ -456,7 +456,7 @@ int main(int argc, char **argv) · 455 unmodified lines | ||
| 456 | 456 | |
| 457 | 457 | if (notrigger) { |
| 458 | 458 | printf("trigger-less mode selected\n"); |
| 459 | − } if (trig_num >= 0) { | |
| 459 | + } else if (trig_num >= 0) { | |
| 460 | 460 | char *trig_dev_name; |
| 461 | 461 | ret = asprintf(&trig_dev_name, "%strigger%d", iio_dir, trig_num); |
| 462 | 462 | if (ret < 0) { |