diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2016-09-01 05:44:41 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2016-09-18 06:29:12 -0400 |
commit | a483ab796960c9080dc9f97f5905d11debad3df9 (patch) | |
tree | f750a86de062a43b3c609efe5686f18fb936710e /drivers/iio | |
parent | 0d1fb2d52d8b4a1124cb2db7d22c4131ad5805cf (diff) |
iio: accel: kxsd9: Add I2C transport
This adds I2C regmap transport for the KXSD9 driver.
Tested on the KXSD9 sensor on the APQ8060 Dragonboard.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio')
-rw-r--r-- | drivers/iio/accel/Kconfig | 12 | ||||
-rw-r--r-- | drivers/iio/accel/Makefile | 1 | ||||
-rw-r--r-- | drivers/iio/accel/kxsd9-i2c.c | 63 |
3 files changed, 75 insertions, 1 deletions
diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig index eebc20d6c827..8824400d4911 100644 --- a/drivers/iio/accel/Kconfig +++ b/drivers/iio/accel/Kconfig | |||
@@ -121,7 +121,7 @@ config KXSD9 | |||
121 | tristate "Kionix KXSD9 Accelerometer Driver" | 121 | tristate "Kionix KXSD9 Accelerometer Driver" |
122 | help | 122 | help |
123 | Say yes here to build support for the Kionix KXSD9 accelerometer. | 123 | Say yes here to build support for the Kionix KXSD9 accelerometer. |
124 | Currently this only supports the device via an SPI interface. | 124 | It can be accessed using an (optional) SPI or I2C interface. |
125 | 125 | ||
126 | To compile this driver as a module, choose M here: the module | 126 | To compile this driver as a module, choose M here: the module |
127 | will be called kxsd9. | 127 | will be called kxsd9. |
@@ -136,6 +136,16 @@ config KXSD9_SPI | |||
136 | Say yes here to enable the Kionix KXSD9 accelerometer | 136 | Say yes here to enable the Kionix KXSD9 accelerometer |
137 | SPI transport channel. | 137 | SPI transport channel. |
138 | 138 | ||
139 | config KXSD9_I2C | ||
140 | tristate "Kionix KXSD9 I2C transport" | ||
141 | depends on KXSD9 | ||
142 | depends on I2C | ||
143 | default KXSD9 | ||
144 | select REGMAP_I2C | ||
145 | help | ||
146 | Say yes here to enable the Kionix KXSD9 accelerometer | ||
147 | I2C transport channel. | ||
148 | |||
139 | config KXCJK1013 | 149 | config KXCJK1013 |
140 | tristate "Kionix 3-Axis Accelerometer Driver" | 150 | tristate "Kionix 3-Axis Accelerometer Driver" |
141 | depends on I2C | 151 | depends on I2C |
diff --git a/drivers/iio/accel/Makefile b/drivers/iio/accel/Makefile index 2fe41d7ffb6e..b5c2a0b5550f 100644 --- a/drivers/iio/accel/Makefile +++ b/drivers/iio/accel/Makefile | |||
@@ -14,6 +14,7 @@ obj-$(CONFIG_HID_SENSOR_ACCEL_3D) += hid-sensor-accel-3d.o | |||
14 | obj-$(CONFIG_KXCJK1013) += kxcjk-1013.o | 14 | obj-$(CONFIG_KXCJK1013) += kxcjk-1013.o |
15 | obj-$(CONFIG_KXSD9) += kxsd9.o | 15 | obj-$(CONFIG_KXSD9) += kxsd9.o |
16 | obj-$(CONFIG_KXSD9_SPI) += kxsd9-spi.o | 16 | obj-$(CONFIG_KXSD9_SPI) += kxsd9-spi.o |
17 | obj-$(CONFIG_KXSD9_I2C) += kxsd9-i2c.o | ||
17 | 18 | ||
18 | obj-$(CONFIG_MMA7455) += mma7455_core.o | 19 | obj-$(CONFIG_MMA7455) += mma7455_core.o |
19 | obj-$(CONFIG_MMA7455_I2C) += mma7455_i2c.o | 20 | obj-$(CONFIG_MMA7455_I2C) += mma7455_i2c.o |
diff --git a/drivers/iio/accel/kxsd9-i2c.c b/drivers/iio/accel/kxsd9-i2c.c new file mode 100644 index 000000000000..4aaa27d0aa32 --- /dev/null +++ b/drivers/iio/accel/kxsd9-i2c.c | |||
@@ -0,0 +1,63 @@ | |||
1 | #include <linux/device.h> | ||
2 | #include <linux/kernel.h> | ||
3 | #include <linux/module.h> | ||
4 | #include <linux/slab.h> | ||
5 | #include <linux/i2c.h> | ||
6 | #include <linux/delay.h> | ||
7 | #include <linux/regmap.h> | ||
8 | |||
9 | #include "kxsd9.h" | ||
10 | |||
11 | static int kxsd9_i2c_probe(struct i2c_client *i2c, | ||
12 | const struct i2c_device_id *id) | ||
13 | { | ||
14 | static const struct regmap_config config = { | ||
15 | .reg_bits = 8, | ||
16 | .val_bits = 8, | ||
17 | .max_register = 0x0e, | ||
18 | }; | ||
19 | struct regmap *regmap; | ||
20 | |||
21 | regmap = devm_regmap_init_i2c(i2c, &config); | ||
22 | if (IS_ERR(regmap)) { | ||
23 | dev_err(&i2c->dev, "Failed to register i2c regmap %d\n", | ||
24 | (int)PTR_ERR(regmap)); | ||
25 | return PTR_ERR(regmap); | ||
26 | } | ||
27 | |||
28 | return kxsd9_common_probe(&i2c->dev, | ||
29 | regmap, | ||
30 | i2c->name); | ||
31 | } | ||
32 | |||
33 | static int kxsd9_i2c_remove(struct i2c_client *client) | ||
34 | { | ||
35 | return kxsd9_common_remove(&client->dev); | ||
36 | } | ||
37 | |||
38 | #ifdef CONFIG_OF | ||
39 | static const struct of_device_id kxsd9_of_match[] = { | ||
40 | { .compatible = "kionix,kxsd9", }, | ||
41 | { }, | ||
42 | }; | ||
43 | MODULE_DEVICE_TABLE(of, kxsd9_of_match); | ||
44 | #else | ||
45 | #define kxsd9_of_match NULL | ||
46 | #endif | ||
47 | |||
48 | static const struct i2c_device_id kxsd9_i2c_id[] = { | ||
49 | {"kxsd9", 0}, | ||
50 | { }, | ||
51 | }; | ||
52 | MODULE_DEVICE_TABLE(i2c, kxsd9_i2c_id); | ||
53 | |||
54 | static struct i2c_driver kxsd9_i2c_driver = { | ||
55 | .driver = { | ||
56 | .name = "kxsd9", | ||
57 | .of_match_table = of_match_ptr(kxsd9_of_match), | ||
58 | }, | ||
59 | .probe = kxsd9_i2c_probe, | ||
60 | .remove = kxsd9_i2c_remove, | ||
61 | .id_table = kxsd9_i2c_id, | ||
62 | }; | ||
63 | module_i2c_driver(kxsd9_i2c_driver); | ||