aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kepplinger <martink@posteo.de>2016-03-09 06:01:29 -0500
committerJonathan Cameron <jic23@kernel.org>2016-03-12 05:49:52 -0500
commite8731180fbf6fd45351b587d67cdc0685ce99a7a (patch)
treedcbbcc320414b2d78e35a19658e2eb24c82ec8e9
parent1e52fefc9b0c481f8ca860e19781720fb5404383 (diff)
iio: mma8452: add support for FXLS8471Q
This adds support for Freescale's (now NXP's) FXLS8471Q accelerometer. We use MMA8451Q's configuration because for what the driver supports, FXLS8471Q is the same. Support for FXLS8471Q's features (fast SPI interface and a larger FIFO, among others) can be added to this driver anytime. See it's datasheet for the details: http://cache.nxp.com/files/sensors/doc/data_sheet/FXLS8471Q.pdf Signed-off-by: Martin Kepplinger <martink@posteo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r--Documentation/devicetree/bindings/iio/accel/mma8452.txt3
-rw-r--r--drivers/iio/accel/Kconfig3
-rw-r--r--drivers/iio/accel/mma8452.c22
3 files changed, 26 insertions, 2 deletions
diff --git a/Documentation/devicetree/bindings/iio/accel/mma8452.txt b/Documentation/devicetree/bindings/iio/accel/mma8452.txt
index 165937e1ac1c..45f5c5c5929c 100644
--- a/Documentation/devicetree/bindings/iio/accel/mma8452.txt
+++ b/Documentation/devicetree/bindings/iio/accel/mma8452.txt
@@ -1,4 +1,4 @@
1Freescale MMA8451Q, MMA8452Q, MMA8453Q, MMA8652FC or MMA8653FC 1Freescale MMA8451Q, MMA8452Q, MMA8453Q, MMA8652FC, MMA8653FC or FXLS8471Q
2triaxial accelerometer 2triaxial accelerometer
3 3
4Required properties: 4Required properties:
@@ -9,6 +9,7 @@ Required properties:
9 * "fsl,mma8453" 9 * "fsl,mma8453"
10 * "fsl,mma8652" 10 * "fsl,mma8652"
11 * "fsl,mma8653" 11 * "fsl,mma8653"
12 * "fsl,fxls8471"
12 13
13 - reg: the I2C address of the chip 14 - reg: the I2C address of the chip
14 15
diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig
index 7636eec63ea5..e4a758cd7d35 100644
--- a/drivers/iio/accel/Kconfig
+++ b/drivers/iio/accel/Kconfig
@@ -143,7 +143,8 @@ config MMA8452
143 select IIO_TRIGGERED_BUFFER 143 select IIO_TRIGGERED_BUFFER
144 help 144 help
145 Say yes here to build support for the following Freescale 3-axis 145 Say yes here to build support for the following Freescale 3-axis
146 accelerometers: MMA8451Q, MMA8452Q, MMA8453Q, MMA8652FC, MMA8653FC. 146 accelerometers: MMA8451Q, MMA8452Q, MMA8453Q, MMA8652FC, MMA8653FC,
147 FXLS8471Q.
147 148
148 To compile this driver as a module, choose M here: the module 149 To compile this driver as a module, choose M here: the module
149 will be called mma8452. 150 will be called mma8452.
diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
index 5ca0d169f912..305ed0e37dfb 100644
--- a/drivers/iio/accel/mma8452.c
+++ b/drivers/iio/accel/mma8452.c
@@ -6,6 +6,7 @@
6 * MMA8453Q (10 bit) 6 * MMA8453Q (10 bit)
7 * MMA8652FC (12 bit) 7 * MMA8652FC (12 bit)
8 * MMA8653FC (10 bit) 8 * MMA8653FC (10 bit)
9 * FXLS8471Q (14 bit)
9 * 10 *
10 * Copyright 2015 Martin Kepplinger <martin.kepplinger@theobroma-systems.com> 11 * Copyright 2015 Martin Kepplinger <martin.kepplinger@theobroma-systems.com>
11 * Copyright 2014 Peter Meerwald <pmeerw@pmeerw.net> 12 * Copyright 2014 Peter Meerwald <pmeerw@pmeerw.net>
@@ -92,6 +93,7 @@
92#define MMA8453_DEVICE_ID 0x3a 93#define MMA8453_DEVICE_ID 0x3a
93#define MMA8652_DEVICE_ID 0x4a 94#define MMA8652_DEVICE_ID 0x4a
94#define MMA8653_DEVICE_ID 0x5a 95#define MMA8653_DEVICE_ID 0x5a
96#define FXLS8471_DEVICE_ID 0x6a
95 97
96#define MMA8452_AUTO_SUSPEND_DELAY_MS 2000 98#define MMA8452_AUTO_SUSPEND_DELAY_MS 2000
97 99
@@ -1055,6 +1057,7 @@ enum {
1055 mma8453, 1057 mma8453,
1056 mma8652, 1058 mma8652,
1057 mma8653, 1059 mma8653,
1060 fxls8471,
1058}; 1061};
1059 1062
1060static const struct mma_chip_info mma_chip_info_table[] = { 1063static const struct mma_chip_info mma_chip_info_table[] = {
@@ -1146,6 +1149,22 @@ static const struct mma_chip_info mma_chip_info_table[] = {
1146 .ev_ths_mask = MMA8452_FF_MT_THS_MASK, 1149 .ev_ths_mask = MMA8452_FF_MT_THS_MASK,
1147 .ev_count = MMA8452_FF_MT_COUNT, 1150 .ev_count = MMA8452_FF_MT_COUNT,
1148 }, 1151 },
1152 [fxls8471] = {
1153 .chip_id = FXLS8471_DEVICE_ID,
1154 .channels = mma8451_channels,
1155 .num_channels = ARRAY_SIZE(mma8451_channels),
1156 .mma_scales = { {0, 2394}, {0, 4788}, {0, 9577} },
1157 .ev_cfg = MMA8452_TRANSIENT_CFG,
1158 .ev_cfg_ele = MMA8452_TRANSIENT_CFG_ELE,
1159 .ev_cfg_chan_shift = 1,
1160 .ev_src = MMA8452_TRANSIENT_SRC,
1161 .ev_src_xe = MMA8452_TRANSIENT_SRC_XTRANSE,
1162 .ev_src_ye = MMA8452_TRANSIENT_SRC_YTRANSE,
1163 .ev_src_ze = MMA8452_TRANSIENT_SRC_ZTRANSE,
1164 .ev_ths = MMA8452_TRANSIENT_THS,
1165 .ev_ths_mask = MMA8452_TRANSIENT_THS_MASK,
1166 .ev_count = MMA8452_TRANSIENT_COUNT,
1167 },
1149}; 1168};
1150 1169
1151static struct attribute *mma8452_attributes[] = { 1170static struct attribute *mma8452_attributes[] = {
@@ -1275,6 +1294,7 @@ static const struct of_device_id mma8452_dt_ids[] = {
1275 { .compatible = "fsl,mma8453", .data = &mma_chip_info_table[mma8453] }, 1294 { .compatible = "fsl,mma8453", .data = &mma_chip_info_table[mma8453] },
1276 { .compatible = "fsl,mma8652", .data = &mma_chip_info_table[mma8652] }, 1295 { .compatible = "fsl,mma8652", .data = &mma_chip_info_table[mma8652] },
1277 { .compatible = "fsl,mma8653", .data = &mma_chip_info_table[mma8653] }, 1296 { .compatible = "fsl,mma8653", .data = &mma_chip_info_table[mma8653] },
1297 { .compatible = "fsl,fxls8471", .data = &mma_chip_info_table[fxls8471] },
1278 { } 1298 { }
1279}; 1299};
1280MODULE_DEVICE_TABLE(of, mma8452_dt_ids); 1300MODULE_DEVICE_TABLE(of, mma8452_dt_ids);
@@ -1312,6 +1332,7 @@ static int mma8452_probe(struct i2c_client *client,
1312 case MMA8453_DEVICE_ID: 1332 case MMA8453_DEVICE_ID:
1313 case MMA8652_DEVICE_ID: 1333 case MMA8652_DEVICE_ID:
1314 case MMA8653_DEVICE_ID: 1334 case MMA8653_DEVICE_ID:
1335 case FXLS8471_DEVICE_ID:
1315 if (ret == data->chip_info->chip_id) 1336 if (ret == data->chip_info->chip_id)
1316 break; 1337 break;
1317 default: 1338 default:
@@ -1518,6 +1539,7 @@ static const struct i2c_device_id mma8452_id[] = {
1518 { "mma8453", mma8453 }, 1539 { "mma8453", mma8453 },
1519 { "mma8652", mma8652 }, 1540 { "mma8652", mma8652 },
1520 { "mma8653", mma8653 }, 1541 { "mma8653", mma8653 },
1542 { "fxls8471", fxls8471 },
1521 { } 1543 { }
1522}; 1544};
1523MODULE_DEVICE_TABLE(i2c, mma8452_id); 1545MODULE_DEVICE_TABLE(i2c, mma8452_id);