Commit ba9c25d9 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'iio-fixes-5.13a' of...

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
parents 14b6cff5 af0e1871
...@@ -229,7 +229,6 @@ config DMARD10 ...@@ -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"
......
...@@ -19,6 +19,7 @@ config HID_SENSOR_IIO_TRIGGER ...@@ -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.
......
...@@ -111,7 +111,6 @@ config FXAS21002C_SPI ...@@ -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"
......
...@@ -272,7 +272,16 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev, ...@@ -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, ...@@ -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;
......
...@@ -52,7 +52,6 @@ config HID_SENSOR_HUMIDITY ...@@ -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
......
...@@ -1778,7 +1778,6 @@ static long iio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) ...@@ -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) ...@@ -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); ...@@ -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) ...@@ -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);
......
...@@ -256,7 +256,6 @@ config ISL29125 ...@@ -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 ...@@ -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"
......
...@@ -582,7 +582,7 @@ static int gp2ap002_probe(struct i2c_client *client, ...@@ -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, ...@@ -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);
......
...@@ -341,6 +341,14 @@ static int tsl2583_als_calibrate(struct iio_dev *indio_dev) ...@@ -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)) {
......
...@@ -95,7 +95,6 @@ config MAG3110 ...@@ -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"
......
...@@ -9,7 +9,6 @@ menu "Inclinometer sensors" ...@@ -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 ...@@ -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"
......
...@@ -79,7 +79,6 @@ config DPS310 ...@@ -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) ...@@ -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;
} }
......
...@@ -45,7 +45,6 @@ config HID_SENSOR_TEMP ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment