summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Miguel Silva <rui.silva@linaro.org>2017-09-20 22:20:20 +0100
committerBryan O'Donoghue <bryan.odonoghue@linaro.org>2019-05-01 11:51:17 +0100
commit697b1ab55e6b0ae4f629b088e7cb9f7b9b16c0ea (patch)
tree16ffd293ff4633aa350598b54ab38fc47f679943
parent30a97a3d54d2df74444d4da6c52589a688cdccb7 (diff)
iio: accel: fxos8700: add i2c drivers
Add i2c communication implementation for the fxos8700 driver that uses fxos8700_core for main tasks. Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-rw-r--r--drivers/iio/accel/Kconfig5
-rw-r--r--drivers/iio/accel/Makefile1
-rw-r--r--drivers/iio/accel/fxos8700_i2c.c75
3 files changed, 81 insertions, 0 deletions
diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig
index 5648beb44250..1c7e74e69617 100644
--- a/drivers/iio/accel/Kconfig
+++ b/drivers/iio/accel/Kconfig
@@ -138,12 +138,17 @@ config FXOS8700_ACCEL_MAGN
tristate "NXP FXOS8700 Accelerometer / Magnetometer Driver"
select IIO_BUFFER
select REGMAP
+ select FXOS8700_ACCEL_MAGN_I2C if I2C
help
Say yes here to build support for the FXOS8700 accelerometer /
magnetometer.
This is a combo module with both accelerometer and magnetometer.
+config FXOS8700_ACCEL_MAGN_I2C
+ tristate
+ select REGMAP_I2C
+
config HID_SENSOR_ACCEL_3D
depends on HID_SENSOR_HUB
select IIO_BUFFER
diff --git a/drivers/iio/accel/Makefile b/drivers/iio/accel/Makefile
index 2ec7d765fa22..1ffb24cf8267 100644
--- a/drivers/iio/accel/Makefile
+++ b/drivers/iio/accel/Makefile
@@ -18,6 +18,7 @@ obj-$(CONFIG_DMARD06) += dmard06.o
obj-$(CONFIG_DMARD09) += dmard09.o
obj-$(CONFIG_DMARD10) += dmard10.o
obj-$(CONFIG_FXOS8700_ACCEL_MAGN) += fxos8700_core.o
+obj-$(CONFIG_FXOS8700_ACCEL_MAGN_I2C) += fxos8700_i2c.o
obj-$(CONFIG_HID_SENSOR_ACCEL_3D) += hid-sensor-accel-3d.o
obj-$(CONFIG_KXCJK1013) += kxcjk-1013.o
obj-$(CONFIG_KXSD9) += kxsd9.o
diff --git a/drivers/iio/accel/fxos8700_i2c.c b/drivers/iio/accel/fxos8700_i2c.c
new file mode 100644
index 000000000000..e5e72ffd26d1
--- /dev/null
+++ b/drivers/iio/accel/fxos8700_i2c.c
@@ -0,0 +1,75 @@
+/*
+ * Driver for NXP Fxos8700 Accelerometer and Magnetometer - I2C
+ *
+ * Copyright (C) 2017 Linaro Ltd.
+ *
+ */
+
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/regmap.h>
+
+#include "fxos8700.h"
+
+static const struct regmap_config fxos8700_regmap_i2c_conf = {
+ .reg_bits = 8,
+ .val_bits = 8,
+ .max_register = FXOS8700_REG_NVM_DATA_BNK0,
+};
+
+static int fxos8700_i2c_probe(struct i2c_client *i2c,
+ const struct i2c_device_id *id)
+{
+ struct regmap *regmap;
+ const char *name = NULL;
+
+ regmap = devm_regmap_init_i2c(i2c, &fxos8700_regmap_i2c_conf);
+ if (IS_ERR(regmap)) {
+ dev_err(&i2c->dev, "Failed to register i2c regmap: %ld\n",
+ PTR_ERR(regmap));
+ return PTR_ERR(regmap);
+ }
+
+ if (id)
+ name = id->name;
+
+ return fxos8700_core_probe(&i2c->dev, regmap, name);
+}
+
+static int fxos8700_i2c_remove(struct i2c_client *i2c)
+{
+ fxos8700_core_remove(&i2c->dev);
+
+ return 0;
+}
+
+static const struct i2c_device_id fxos8700_i2c_id[] = {
+ { "fxos8700", 0 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, fxos8700_i2c_id);
+
+#ifdef CONFIG_OF
+static const struct of_device_id fxos8700_i2c_of_match[] = {
+ { .compatible = "nxp,fxos8700", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, fxos8700_i2c_of_match);
+#endif
+
+static struct i2c_driver fxos8700_i2c_driver = {
+ .driver = {
+ .name = "fxos8700_i2c",
+ .pm = &fxos8700_pm_ops,
+ .of_match_table = of_match_ptr(fxos8700_i2c_of_match),
+ },
+ .probe = fxos8700_i2c_probe,
+ .remove = fxos8700_i2c_remove,
+ .id_table = fxos8700_i2c_id,
+};
+module_i2c_driver(fxos8700_i2c_driver);
+
+MODULE_AUTHOR("Rui Miguel Silva <rui.silva@linaro.org>");
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("FXOS8700 I2C Accel and Magnet driver");