aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio/accel/kxsd9.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iio/accel/kxsd9.h')
-rw-r--r--drivers/iio/accel/kxsd9.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/iio/accel/kxsd9.h b/drivers/iio/accel/kxsd9.h
new file mode 100644
index 000000000000..28845c3440e9
--- /dev/null
+++ b/drivers/iio/accel/kxsd9.h
@@ -0,0 +1,32 @@
+#include <linux/device.h>
+#include <linux/kernel.h>
+
+#define KXSD9_STATE_RX_SIZE 2
+#define KXSD9_STATE_TX_SIZE 2
+
+struct kxsd9_transport;
+
+/**
+ * struct kxsd9_transport - transport adapter for SPI or I2C
+ * @trdev: transport device such as SPI or I2C
+ * @readreg(): function to read a byte from an address in the device
+ * @writereg(): function to write a byte to an address in the device
+ * @write2(): function to write two consecutive bytes to the device
+ * @readval(): function to read a 16bit value from the device
+ * @rx: cache aligned read buffer
+ * @tx: cache aligned write buffer
+ */
+struct kxsd9_transport {
+ void *trdev;
+ int (*readreg) (struct kxsd9_transport *tr, u8 address);
+ int (*writereg) (struct kxsd9_transport *tr, u8 address, u8 val);
+ int (*write2) (struct kxsd9_transport *tr, u8 b1, u8 b2);
+ int (*readval) (struct kxsd9_transport *tr, u8 address);
+ u8 rx[KXSD9_STATE_RX_SIZE] ____cacheline_aligned;
+ u8 tx[KXSD9_STATE_TX_SIZE];
+};
+
+int kxsd9_common_probe(struct device *parent,
+ struct kxsd9_transport *transport,
+ const char *name);
+int kxsd9_common_remove(struct device *parent);