]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: accel: adxl345: introduce interrupt handling
authorLothar Rubusch <l.rubusch@gmail.com>
Sat, 28 Dec 2024 23:29:46 +0000 (23:29 +0000)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 4 Jan 2025 12:54:18 +0000 (12:54 +0000)
Add the possibility to claim an interrupt. Init the state structure
with an interrupt line obtained from the DT. The adxl345 can use
two different interrupt lines for event handling. Only one is used.

Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com>
Link: https://patch.msgid.link/20241228232949.72487-2-l.rubusch@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/adxl345_core.c

index 684f71402ef0b54849e1d9073a11e7f50b51880d..11fdb21d5477a7b3eced8d78912df5de6989b410 100644 (file)
@@ -7,6 +7,7 @@
  * Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf
  */
 
+#include <linux/interrupt.h>
 #include <linux/module.h>
 #include <linux/property.h>
 #include <linux/regmap.h>
 
 #include "adxl345.h"
 
+#define ADXL345_INT_NONE               0xff
+#define ADXL345_INT1                   0
+#define ADXL345_INT2                   1
+
 struct adxl345_state {
        const struct adxl345_chip_info *info;
        struct regmap *regmap;
+       int irq;
+       u8 intio;
 };
 
 #define ADXL345_CHANNEL(index, axis) {                                 \
@@ -262,6 +269,15 @@ int adxl345_core_probe(struct device *dev, struct regmap *regmap,
        if (ret < 0)
                return ret;
 
+       st->intio = ADXL345_INT1;
+       st->irq = fwnode_irq_get_byname(dev_fwnode(dev), "INT1");
+       if (st->irq < 0) {
+               st->intio = ADXL345_INT2;
+               st->irq = fwnode_irq_get_byname(dev_fwnode(dev), "INT2");
+               if (st->irq < 0)
+                       st->intio = ADXL345_INT_NONE;
+       }
+
        return devm_iio_device_register(dev, indio_dev);
 }
 EXPORT_SYMBOL_NS_GPL(adxl345_core_probe, "IIO_ADXL345");