iio: st_sensors: make interrupt optional
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 30 Apr 2015 13:15:47 +0000 (15:15 +0200)
committerJonathan Cameron <jic23@kernel.org>
Thu, 7 May 2015 09:42:32 +0000 (10:42 +0100)
Some sensors such as magnetometers and pressure sensors doesn't
have interrupts at all, and thus no DRDY setting applies. Make
the assignment of an interrupt optional, and do not call
st_sensors_set_drdy_int_pin() if there is no drdy (data ready)
pin specified.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/common/st_sensors/st_sensors_core.c

index edd13d2b4121f7834c2e90eaca02e7a4f70c51b7..5a01093b29a21d040ad000cb8ad56eb1db5742e5 100644 (file)
@@ -245,6 +245,16 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
 {
        struct st_sensor_data *sdata = iio_priv(indio_dev);
 
+       /* Sensor does not support interrupts */
+       if (sdata->sensor_settings->drdy_irq.addr == 0) {
+               if (pdata->drdy_int_pin)
+                       dev_info(&indio_dev->dev,
+                                "DRDY on pin INT%d specified, but sensor "
+                                "does not support interrupts\n",
+                                pdata->drdy_int_pin);
+               return 0;
+       }
+
        switch (pdata->drdy_int_pin) {
        case 1:
                if (sdata->sensor_settings->drdy_irq.mask_int1 == 0) {
@@ -285,7 +295,7 @@ static struct st_sensors_platform_data *st_sensors_of_probe(struct device *dev,
        if (!of_property_read_u32(np, "st,drdy-int-pin", &val) && (val <= 2))
                pdata->drdy_int_pin = (u8) val;
        else
-               pdata->drdy_int_pin = defdata ? defdata->drdy_int_pin : 1;
+               pdata->drdy_int_pin = defdata ? defdata->drdy_int_pin : 0;
 
        return pdata;
 }