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