aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLothar Rubusch <l.rubusch@gmail.com>2024-12-28 23:29:46 +0000
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2025-01-04 12:54:18 +0000
commite2e6d241486eec2688c9224c583570d5c746ad15 (patch)
tree0a2443e3a2f74c1794de1800f52a3eb0d6e45b02
parentiio: light: veml3235: fix scale to conform to ABI (diff)
downloadwireguard-linux-e2e6d241486eec2688c9224c583570d5c746ad15.tar.xz
wireguard-linux-e2e6d241486eec2688c9224c583570d5c746ad15.zip
iio: accel: adxl345: introduce interrupt handling
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>
-rw-r--r--drivers/iio/accel/adxl345_core.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/iio/accel/adxl345_core.c b/drivers/iio/accel/adxl345_core.c
index 684f71402ef0..11fdb21d5477 100644
--- a/drivers/iio/accel/adxl345_core.c
+++ b/drivers/iio/accel/adxl345_core.c
@@ -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>
@@ -17,9 +18,15 @@
#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");