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
This commit is contained in:
Greg Kroah-Hartman
2021-05-11 15:17:55 +02:00
14 changed files with 25 additions and 22 deletions
-1
View File
@@ -229,7 +229,6 @@ config DMARD10
config HID_SENSOR_ACCEL_3D config HID_SENSOR_ACCEL_3D
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
tristate "HID Accelerometers 3D" tristate "HID Accelerometers 3D"
+1
View File
@@ -19,6 +19,7 @@ config HID_SENSOR_IIO_TRIGGER
tristate "Common module (trigger) for all HID Sensor IIO drivers" tristate "Common module (trigger) for all HID Sensor IIO drivers"
depends on HID_SENSOR_HUB && HID_SENSOR_IIO_COMMON && IIO_BUFFER depends on HID_SENSOR_HUB && HID_SENSOR_IIO_COMMON && IIO_BUFFER
select IIO_TRIGGER select IIO_TRIGGER
select IIO_TRIGGERED_BUFFER
help help
Say yes here to build trigger support for HID sensors. Say yes here to build trigger support for HID sensors.
Triggers will be send if all requested attributes were read. Triggers will be send if all requested attributes were read.
-1
View File
@@ -111,7 +111,6 @@ config FXAS21002C_SPI
config HID_SENSOR_GYRO_3D config HID_SENSOR_GYRO_3D
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
tristate "HID Gyroscope 3D" tristate "HID Gyroscope 3D"
+11 -2
View File
@@ -272,7 +272,16 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev,
case IIO_CHAN_INFO_OFFSET: case IIO_CHAN_INFO_OFFSET:
switch (chan->type) { switch (chan->type) {
case IIO_TEMP: case IIO_TEMP:
/* The temperature scaling is (x+23000)/280 Celsius */ /*
* The temperature scaling is (x+23000)/280 Celsius
* for the "best fit straight line" temperature range
* of -30C..85C. The 23000 includes room temperature
* offset of +35C, 280 is the precision scale and x is
* the 16-bit signed integer reported by hardware.
*
* Temperature value itself represents temperature of
* the sensor die.
*/
*val = 23000; *val = 23000;
return IIO_VAL_INT; return IIO_VAL_INT;
default: default:
@@ -329,7 +338,7 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev,
goto out_read_raw_unlock; goto out_read_raw_unlock;
} }
*val = be16_to_cpu(raw_val); *val = (s16)be16_to_cpu(raw_val);
ret = IIO_VAL_INT; ret = IIO_VAL_INT;
goto out_read_raw_unlock; goto out_read_raw_unlock;
-1
View File
@@ -52,7 +52,6 @@ config HID_SENSOR_HUMIDITY
tristate "HID Environmental humidity sensor" tristate "HID Environmental humidity sensor"
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
help help
+1 -8
View File
@@ -1778,7 +1778,6 @@ static long iio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
if (!indio_dev->info) if (!indio_dev->info)
goto out_unlock; goto out_unlock;
ret = -EINVAL;
list_for_each_entry(h, &iio_dev_opaque->ioctl_handlers, entry) { list_for_each_entry(h, &iio_dev_opaque->ioctl_handlers, entry) {
ret = h->ioctl(indio_dev, filp, cmd, arg); ret = h->ioctl(indio_dev, filp, cmd, arg);
if (ret != IIO_IOCTL_UNHANDLED) if (ret != IIO_IOCTL_UNHANDLED)
@@ -1786,7 +1785,7 @@ static long iio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
} }
if (ret == IIO_IOCTL_UNHANDLED) if (ret == IIO_IOCTL_UNHANDLED)
ret = -EINVAL; ret = -ENODEV;
out_unlock: out_unlock:
mutex_unlock(&indio_dev->info_exist_lock); mutex_unlock(&indio_dev->info_exist_lock);
@@ -1926,9 +1925,6 @@ EXPORT_SYMBOL(__iio_device_register);
**/ **/
void iio_device_unregister(struct iio_dev *indio_dev) void iio_device_unregister(struct iio_dev *indio_dev)
{ {
struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
struct iio_ioctl_handler *h, *t;
cdev_device_del(&indio_dev->chrdev, &indio_dev->dev); cdev_device_del(&indio_dev->chrdev, &indio_dev->dev);
mutex_lock(&indio_dev->info_exist_lock); mutex_lock(&indio_dev->info_exist_lock);
@@ -1939,9 +1935,6 @@ void iio_device_unregister(struct iio_dev *indio_dev)
indio_dev->info = NULL; indio_dev->info = NULL;
list_for_each_entry_safe(h, t, &iio_dev_opaque->ioctl_handlers, entry)
list_del(&h->entry);
iio_device_wakeup_eventset(indio_dev); iio_device_wakeup_eventset(indio_dev);
iio_buffer_wakeup_poll(indio_dev); iio_buffer_wakeup_poll(indio_dev);
-2
View File
@@ -256,7 +256,6 @@ config ISL29125
config HID_SENSOR_ALS config HID_SENSOR_ALS
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
tristate "HID ALS" tristate "HID ALS"
@@ -270,7 +269,6 @@ config HID_SENSOR_ALS
config HID_SENSOR_PROX config HID_SENSOR_PROX
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
tristate "HID PROX" tristate "HID PROX"
+3 -2
View File
@@ -582,7 +582,7 @@ static int gp2ap002_probe(struct i2c_client *client,
"gp2ap002", indio_dev); "gp2ap002", indio_dev);
if (ret) { if (ret) {
dev_err(dev, "unable to request IRQ\n"); dev_err(dev, "unable to request IRQ\n");
goto out_disable_vio; goto out_put_pm;
} }
gp2ap002->irq = client->irq; gp2ap002->irq = client->irq;
@@ -612,8 +612,9 @@ static int gp2ap002_probe(struct i2c_client *client,
return 0; return 0;
out_disable_pm: out_put_pm:
pm_runtime_put_noidle(dev); pm_runtime_put_noidle(dev);
out_disable_pm:
pm_runtime_disable(dev); pm_runtime_disable(dev);
out_disable_vio: out_disable_vio:
regulator_disable(gp2ap002->vio); regulator_disable(gp2ap002->vio);
+8
View File
@@ -341,6 +341,14 @@ static int tsl2583_als_calibrate(struct iio_dev *indio_dev)
return lux_val; return lux_val;
} }
/* Avoid division by zero of lux_value later on */
if (lux_val == 0) {
dev_err(&chip->client->dev,
"%s: lux_val of 0 will produce out of range trim_value\n",
__func__);
return -ENODATA;
}
gain_trim_val = (unsigned int)(((chip->als_settings.als_cal_target) gain_trim_val = (unsigned int)(((chip->als_settings.als_cal_target)
* chip->als_settings.als_gain_trim) / lux_val); * chip->als_settings.als_gain_trim) / lux_val);
if ((gain_trim_val < 250) || (gain_trim_val > 4000)) { if ((gain_trim_val < 250) || (gain_trim_val > 4000)) {
-1
View File
@@ -95,7 +95,6 @@ config MAG3110
config HID_SENSOR_MAGNETOMETER_3D config HID_SENSOR_MAGNETOMETER_3D
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
tristate "HID Magenetometer 3D" tristate "HID Magenetometer 3D"
-2
View File
@@ -9,7 +9,6 @@ menu "Inclinometer sensors"
config HID_SENSOR_INCLINOMETER_3D config HID_SENSOR_INCLINOMETER_3D
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
tristate "HID Inclinometer 3D" tristate "HID Inclinometer 3D"
@@ -20,7 +19,6 @@ config HID_SENSOR_INCLINOMETER_3D
config HID_SENSOR_DEVICE_ROTATION config HID_SENSOR_DEVICE_ROTATION
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
tristate "HID Device Rotation" tristate "HID Device Rotation"
-1
View File
@@ -79,7 +79,6 @@ config DPS310
config HID_SENSOR_PRESS config HID_SENSOR_PRESS
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
tristate "HID PRESS" tristate "HID PRESS"
@@ -160,6 +160,7 @@ static int lidar_get_measurement(struct lidar_data *data, u16 *reg)
ret = lidar_write_control(data, LIDAR_REG_CONTROL_ACQUIRE); ret = lidar_write_control(data, LIDAR_REG_CONTROL_ACQUIRE);
if (ret < 0) { if (ret < 0) {
dev_err(&client->dev, "cannot send start measurement command"); dev_err(&client->dev, "cannot send start measurement command");
pm_runtime_put_noidle(&client->dev);
return ret; return ret;
} }
-1
View File
@@ -45,7 +45,6 @@ config HID_SENSOR_TEMP
tristate "HID Environmental temperature sensor" tristate "HID Environmental temperature sensor"
depends on HID_SENSOR_HUB depends on HID_SENSOR_HUB
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_COMMON
select HID_SENSOR_IIO_TRIGGER select HID_SENSOR_IIO_TRIGGER
help help