Merge tag 'iio-fixes-5.13a' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-linus

Jonathan writes:

First set of IIO fixes for the 5.13 cycle

A couple of high priority core fixes and the usual bits scattered
across individual drivers.

core:
* Fix ioctl handler double free.
* Fix an accidental ABI change wrt to error codes when an IOCTL is not
supported.

gp2ap002:
* Runtime pm imbalance on error.
hid-sensors:
* Fix a Kconfig dependency issue in a particularly crazy config.
mpu3050:
* Fix wrong temperature calculation due to a type needing to be signed.
pulsedlight:
* Runtime pm imbalance on error.
tsl2583
* Fix a potential division by zero.

* tag 'iio-fixes-5.13a' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio:
iio: tsl2583: Fix division by a zero lux_val
iio: core: return ENODEV if ioctl is unknown
iio: core: fix ioctl handlers removal
iio: gyro: mpu3050: Fix reported temperature value
iio: hid-sensors: select IIO_TRIGGERED_BUFFER under HID_SENSOR_IIO_TRIGGER
iio: proximity: pulsedlight: Fix rumtime PM imbalance on error
iio: light: gp2ap002: Fix rumtime PM imbalance on error

Changed files
+25 -22
drivers
iio
accel
common
hid-sensors
gyro
humidity
light
magnetometer
orientation
pressure
proximity
temperature
-1
drivers/iio/accel/Kconfig
··· 229 229 config HID_SENSOR_ACCEL_3D 230 230 depends on HID_SENSOR_HUB 231 231 select IIO_BUFFER 232 - select IIO_TRIGGERED_BUFFER 233 232 select HID_SENSOR_IIO_COMMON 234 233 select HID_SENSOR_IIO_TRIGGER 235 234 tristate "HID Accelerometers 3D"
+1
drivers/iio/common/hid-sensors/Kconfig
··· 19 19 tristate "Common module (trigger) for all HID Sensor IIO drivers" 20 20 depends on HID_SENSOR_HUB && HID_SENSOR_IIO_COMMON && IIO_BUFFER 21 21 select IIO_TRIGGER 22 + select IIO_TRIGGERED_BUFFER 22 23 help 23 24 Say yes here to build trigger support for HID sensors. 24 25 Triggers will be send if all requested attributes were read.
-1
drivers/iio/gyro/Kconfig
··· 111 111 config HID_SENSOR_GYRO_3D 112 112 depends on HID_SENSOR_HUB 113 113 select IIO_BUFFER 114 - select IIO_TRIGGERED_BUFFER 115 114 select HID_SENSOR_IIO_COMMON 116 115 select HID_SENSOR_IIO_TRIGGER 117 116 tristate "HID Gyroscope 3D"
+11 -2
drivers/iio/gyro/mpu3050-core.c
··· 272 272 case IIO_CHAN_INFO_OFFSET: 273 273 switch (chan->type) { 274 274 case IIO_TEMP: 275 - /* The temperature scaling is (x+23000)/280 Celsius */ 275 + /* 276 + * The temperature scaling is (x+23000)/280 Celsius 277 + * for the "best fit straight line" temperature range 278 + * of -30C..85C. The 23000 includes room temperature 279 + * offset of +35C, 280 is the precision scale and x is 280 + * the 16-bit signed integer reported by hardware. 281 + * 282 + * Temperature value itself represents temperature of 283 + * the sensor die. 284 + */ 276 285 *val = 23000; 277 286 return IIO_VAL_INT; 278 287 default: ··· 338 329 goto out_read_raw_unlock; 339 330 } 340 331 341 - *val = be16_to_cpu(raw_val); 332 + *val = (s16)be16_to_cpu(raw_val); 342 333 ret = IIO_VAL_INT; 343 334 344 335 goto out_read_raw_unlock;
-1
drivers/iio/humidity/Kconfig
··· 52 52 tristate "HID Environmental humidity sensor" 53 53 depends on HID_SENSOR_HUB 54 54 select IIO_BUFFER 55 - select IIO_TRIGGERED_BUFFER 56 55 select HID_SENSOR_IIO_COMMON 57 56 select HID_SENSOR_IIO_TRIGGER 58 57 help
+1 -8
drivers/iio/industrialio-core.c
··· 1778 1778 if (!indio_dev->info) 1779 1779 goto out_unlock; 1780 1780 1781 - ret = -EINVAL; 1782 1781 list_for_each_entry(h, &iio_dev_opaque->ioctl_handlers, entry) { 1783 1782 ret = h->ioctl(indio_dev, filp, cmd, arg); 1784 1783 if (ret != IIO_IOCTL_UNHANDLED) ··· 1785 1786 } 1786 1787 1787 1788 if (ret == IIO_IOCTL_UNHANDLED) 1788 - ret = -EINVAL; 1789 + ret = -ENODEV; 1789 1790 1790 1791 out_unlock: 1791 1792 mutex_unlock(&indio_dev->info_exist_lock); ··· 1925 1926 **/ 1926 1927 void iio_device_unregister(struct iio_dev *indio_dev) 1927 1928 { 1928 - struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1929 - struct iio_ioctl_handler *h, *t; 1930 - 1931 1929 cdev_device_del(&indio_dev->chrdev, &indio_dev->dev); 1932 1930 1933 1931 mutex_lock(&indio_dev->info_exist_lock); ··· 1934 1938 iio_disable_all_buffers(indio_dev); 1935 1939 1936 1940 indio_dev->info = NULL; 1937 - 1938 - list_for_each_entry_safe(h, t, &iio_dev_opaque->ioctl_handlers, entry) 1939 - list_del(&h->entry); 1940 1941 1941 1942 iio_device_wakeup_eventset(indio_dev); 1942 1943 iio_buffer_wakeup_poll(indio_dev);
-2
drivers/iio/light/Kconfig
··· 256 256 config HID_SENSOR_ALS 257 257 depends on HID_SENSOR_HUB 258 258 select IIO_BUFFER 259 - select IIO_TRIGGERED_BUFFER 260 259 select HID_SENSOR_IIO_COMMON 261 260 select HID_SENSOR_IIO_TRIGGER 262 261 tristate "HID ALS" ··· 269 270 config HID_SENSOR_PROX 270 271 depends on HID_SENSOR_HUB 271 272 select IIO_BUFFER 272 - select IIO_TRIGGERED_BUFFER 273 273 select HID_SENSOR_IIO_COMMON 274 274 select HID_SENSOR_IIO_TRIGGER 275 275 tristate "HID PROX"
+3 -2
drivers/iio/light/gp2ap002.c
··· 582 582 "gp2ap002", indio_dev); 583 583 if (ret) { 584 584 dev_err(dev, "unable to request IRQ\n"); 585 - goto out_disable_vio; 585 + goto out_put_pm; 586 586 } 587 587 gp2ap002->irq = client->irq; 588 588 ··· 612 612 613 613 return 0; 614 614 615 - out_disable_pm: 615 + out_put_pm: 616 616 pm_runtime_put_noidle(dev); 617 + out_disable_pm: 617 618 pm_runtime_disable(dev); 618 619 out_disable_vio: 619 620 regulator_disable(gp2ap002->vio);
+8
drivers/iio/light/tsl2583.c
··· 341 341 return lux_val; 342 342 } 343 343 344 + /* Avoid division by zero of lux_value later on */ 345 + if (lux_val == 0) { 346 + dev_err(&chip->client->dev, 347 + "%s: lux_val of 0 will produce out of range trim_value\n", 348 + __func__); 349 + return -ENODATA; 350 + } 351 + 344 352 gain_trim_val = (unsigned int)(((chip->als_settings.als_cal_target) 345 353 * chip->als_settings.als_gain_trim) / lux_val); 346 354 if ((gain_trim_val < 250) || (gain_trim_val > 4000)) {
-1
drivers/iio/magnetometer/Kconfig
··· 95 95 config HID_SENSOR_MAGNETOMETER_3D 96 96 depends on HID_SENSOR_HUB 97 97 select IIO_BUFFER 98 - select IIO_TRIGGERED_BUFFER 99 98 select HID_SENSOR_IIO_COMMON 100 99 select HID_SENSOR_IIO_TRIGGER 101 100 tristate "HID Magenetometer 3D"
-2
drivers/iio/orientation/Kconfig
··· 9 9 config HID_SENSOR_INCLINOMETER_3D 10 10 depends on HID_SENSOR_HUB 11 11 select IIO_BUFFER 12 - select IIO_TRIGGERED_BUFFER 13 12 select HID_SENSOR_IIO_COMMON 14 13 select HID_SENSOR_IIO_TRIGGER 15 14 tristate "HID Inclinometer 3D" ··· 19 20 config HID_SENSOR_DEVICE_ROTATION 20 21 depends on HID_SENSOR_HUB 21 22 select IIO_BUFFER 22 - select IIO_TRIGGERED_BUFFER 23 23 select HID_SENSOR_IIO_COMMON 24 24 select HID_SENSOR_IIO_TRIGGER 25 25 tristate "HID Device Rotation"
-1
drivers/iio/pressure/Kconfig
··· 79 79 config HID_SENSOR_PRESS 80 80 depends on HID_SENSOR_HUB 81 81 select IIO_BUFFER 82 - select IIO_TRIGGERED_BUFFER 83 82 select HID_SENSOR_IIO_COMMON 84 83 select HID_SENSOR_IIO_TRIGGER 85 84 tristate "HID PRESS"
+1
drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
··· 160 160 ret = lidar_write_control(data, LIDAR_REG_CONTROL_ACQUIRE); 161 161 if (ret < 0) { 162 162 dev_err(&client->dev, "cannot send start measurement command"); 163 + pm_runtime_put_noidle(&client->dev); 163 164 return ret; 164 165 } 165 166
-1
drivers/iio/temperature/Kconfig
··· 45 45 tristate "HID Environmental temperature sensor" 46 46 depends on HID_SENSOR_HUB 47 47 select IIO_BUFFER 48 - select IIO_TRIGGERED_BUFFER 49 48 select HID_SENSOR_IIO_COMMON 50 49 select HID_SENSOR_IIO_TRIGGER 51 50 help