diff options
author | Rui Miguel Silva <rui.silva@linaro.org> | 2017-09-20 22:20:20 +0100 |
---|---|---|
committer | Bryan O'Donoghue <bryan.odonoghue@linaro.org> | 2019-05-01 11:51:17 +0100 |
commit | 697b1ab55e6b0ae4f629b088e7cb9f7b9b16c0ea (patch) | |
tree | 16ffd293ff4633aa350598b54ab38fc47f679943 | |
parent | 30a97a3d54d2df74444d4da6c52589a688cdccb7 (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/Kconfig | 5 | ||||
-rw-r--r-- | drivers/iio/accel/Makefile | 1 | ||||
-rw-r--r-- | drivers/iio/accel/fxos8700_i2c.c | 75 |
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"); |