|
@@ -198,21 +198,17 @@ int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable)
|
|
|
}
|
|
|
EXPORT_SYMBOL(st_sensors_set_axis_enable);
|
|
|
|
|
|
-int st_sensors_init_sensor(struct iio_dev *indio_dev,
|
|
|
- struct st_sensors_platform_data *pdata)
|
|
|
+static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
|
|
|
+ struct st_sensors_platform_data *pdata)
|
|
|
{
|
|
|
- int err;
|
|
|
struct st_sensor_data *sdata = iio_priv(indio_dev);
|
|
|
|
|
|
- mutex_init(&sdata->tb.buf_lock);
|
|
|
-
|
|
|
switch (pdata->drdy_int_pin) {
|
|
|
case 1:
|
|
|
if (sdata->sensor->drdy_irq.mask_int1 == 0) {
|
|
|
dev_err(&indio_dev->dev,
|
|
|
"DRDY on INT1 not available.\n");
|
|
|
- err = -EINVAL;
|
|
|
- goto init_error;
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
sdata->drdy_int_pin = 1;
|
|
|
break;
|
|
@@ -220,17 +216,29 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev,
|
|
|
if (sdata->sensor->drdy_irq.mask_int2 == 0) {
|
|
|
dev_err(&indio_dev->dev,
|
|
|
"DRDY on INT2 not available.\n");
|
|
|
- err = -EINVAL;
|
|
|
- goto init_error;
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
sdata->drdy_int_pin = 2;
|
|
|
break;
|
|
|
default:
|
|
|
dev_err(&indio_dev->dev, "DRDY on pdata not valid.\n");
|
|
|
- err = -EINVAL;
|
|
|
- goto init_error;
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+int st_sensors_init_sensor(struct iio_dev *indio_dev,
|
|
|
+ struct st_sensors_platform_data *pdata)
|
|
|
+{
|
|
|
+ struct st_sensor_data *sdata = iio_priv(indio_dev);
|
|
|
+ int err = 0;
|
|
|
+
|
|
|
+ mutex_init(&sdata->tb.buf_lock);
|
|
|
+
|
|
|
+ if (pdata)
|
|
|
+ err = st_sensors_set_drdy_int_pin(indio_dev, pdata);
|
|
|
+
|
|
|
err = st_sensors_set_enable(indio_dev, false);
|
|
|
if (err < 0)
|
|
|
goto init_error;
|
|
@@ -266,6 +274,9 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
|
|
|
u8 drdy_mask;
|
|
|
struct st_sensor_data *sdata = iio_priv(indio_dev);
|
|
|
|
|
|
+ if (!sdata->sensor->drdy_irq.addr)
|
|
|
+ return 0;
|
|
|
+
|
|
|
/* Enable/Disable the interrupt generator 1. */
|
|
|
if (sdata->sensor->drdy_irq.ig1.en_addr > 0) {
|
|
|
err = st_sensors_write_data_with_mask(indio_dev,
|