Merge tag 'staging-4.8-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging

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

+11
drivers/iio/accel/bmc150-accel-core.c
··· 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 ··· 1499 1496 struct device *dev = regmap_get_device(data->regmap); 1500 1497 int ret, i; 1501 1498 unsigned int val; 1499 + 1500 + /* 1501 + * Reset chip to get it in a known good state. A delay of 1.8ms after 1502 + * reset is required according to the data sheets of supported chips. 1503 + */ 1504 + regmap_write(data->regmap, BMC150_ACCEL_REG_RESET, 1505 + BMC150_ACCEL_RESET_VAL); 1506 + usleep_range(1800, 2500); 1502 1507 1503 1508 ret = regmap_read(data->regmap, BMC150_ACCEL_REG_CHIP_ID, &val); 1504 1509 if (ret < 0) {
+1
drivers/iio/accel/kxsd9.c
··· 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;
+2 -2
drivers/iio/common/hid-sensors/hid-sensor-attributes.c
··· 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)
+2 -2
drivers/iio/industrialio-buffer.c
··· 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 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;
+2 -3
drivers/iio/industrialio-core.c
··· 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);
+1 -1
tools/iio/iio_generic_buffer.c
··· 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) {