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.
 -----BEGIN PGP SIGNATURE-----
 
 iQJFBAABCAAvFiEEbilms4eEBlKRJoGxVIU0mcT0FogFAmCae78RHGppYzIzQGtl
 cm5lbC5vcmcACgkQVIU0mcT0Foi+IRAAr+DfHNTGeyHmQAC2I9q3uE4T9wZniAcm
 uD4piZTXh96uCe9ebSBOs7WbM16wv1TKGjoYWLQHGi4fyZPqIRUBCFYJ/VfQrL6h
 fAyqJWP3fWEw8T4+Z5UdQgo6Aofg1K0CzJOGshnKACIjt9BDa72AmqUKwqvU0wRb
 SEDm8tc/x+a+3s8UjEtHDzHhlE26qQVs0Rxaaln9L8XXMcp9tg03bitfMBcb9nPD
 bRqUukBYa4YJ210esDMzrckFxAhBULyWKOOgrIR8TdXveF1sbZE9o9iycOFzsxYz
 KIkHjNIiwvsaklHhHXlhiskaJBDC0i0MaEXinne4sawOmSqXIyyDehq19z8qOukc
 tsRiWtsZGBD5QRJkB6p1LAk+RpYn0IRFbFSyxn6KBfhZsAjwiqUVAxxN5uDq/g13
 C1cp329N0RSEZzDKwjqLbI6osW9sdms8CweazwBYRD5cnsjuvNv1XKjhmZldNwsU
 S4smwOvRcyLih9w8PhlxHOPvhhOFO6xY1OmA3uZTiJhNWYW24KDhNU80hkcD3v+s
 sPbwrozJzc25gcrc7ujlyerQO3ZQ0Ht7uUCEeG9KxVRU04CAeOdFcu9niYxAm5QZ
 kxthMfDXjkjm+yJTI35NImSS9gf6fFrmXj8rj7lnnLbCrnmwDW54l9RdmKQ7EDMR
 WuML9jtzDCQ=
 =2wUO
 -----END PGP SIGNATURE-----

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
commit ba9c25d94d
14 changed files with 25 additions and 22 deletions

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"

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.

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"

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;

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

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);

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"

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);

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)) {

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"

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"

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"

View File

@ -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;
} }

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