mma8452.c (36775d57016ec311780c3beed3173ae6fb59f0e2) mma8452.c (244a93f651937a7f587f8ddf3d8c09516cacf5bd)
1/*
2 * mma8452.c - Support for following Freescale 3-axis accelerometers:
3 *
1/*
2 * mma8452.c - Support for following Freescale 3-axis accelerometers:
3 *
4 * MMA8451Q (14 bit)
4 * MMA8452Q (12 bit)
5 * MMA8453Q (10 bit)
6 * MMA8652FC (12 bit)
7 * MMA8653FC (10 bit)
8 *
9 * Copyright 2015 Martin Kepplinger <martin.kepplinger@theobroma-systems.com>
10 * Copyright 2014 Peter Meerwald <pmeerw@pmeerw.net>
11 *

--- 68 unchanged lines hidden (view full) ---

80#define MMA8452_OFF_Z 0x31
81
82#define MMA8452_MAX_REG 0x31
83
84#define MMA8452_INT_DRDY BIT(0)
85#define MMA8452_INT_FF_MT BIT(2)
86#define MMA8452_INT_TRANS BIT(5)
87
5 * MMA8452Q (12 bit)
6 * MMA8453Q (10 bit)
7 * MMA8652FC (12 bit)
8 * MMA8653FC (10 bit)
9 *
10 * Copyright 2015 Martin Kepplinger <martin.kepplinger@theobroma-systems.com>
11 * Copyright 2014 Peter Meerwald <pmeerw@pmeerw.net>
12 *

--- 68 unchanged lines hidden (view full) ---

81#define MMA8452_OFF_Z 0x31
82
83#define MMA8452_MAX_REG 0x31
84
85#define MMA8452_INT_DRDY BIT(0)
86#define MMA8452_INT_FF_MT BIT(2)
87#define MMA8452_INT_TRANS BIT(5)
88
89#define MMA8451_DEVICE_ID 0x1a
88#define MMA8452_DEVICE_ID 0x2a
89#define MMA8453_DEVICE_ID 0x3a
90#define MMA8652_DEVICE_ID 0x4a
91#define MMA8653_DEVICE_ID 0x5a
92
93struct mma8452_data {
94 struct i2c_client *client;
95 struct mutex lock;

--- 841 unchanged lines hidden (view full) ---

937 .storagebits = 16, \
938 .shift = 16 - (bits), \
939 .endianness = IIO_BE, \
940 }, \
941 .event_spec = mma8452_motion_event, \
942 .num_event_specs = ARRAY_SIZE(mma8452_motion_event), \
943}
944
90#define MMA8452_DEVICE_ID 0x2a
91#define MMA8453_DEVICE_ID 0x3a
92#define MMA8652_DEVICE_ID 0x4a
93#define MMA8653_DEVICE_ID 0x5a
94
95struct mma8452_data {
96 struct i2c_client *client;
97 struct mutex lock;

--- 841 unchanged lines hidden (view full) ---

939 .storagebits = 16, \
940 .shift = 16 - (bits), \
941 .endianness = IIO_BE, \
942 }, \
943 .event_spec = mma8452_motion_event, \
944 .num_event_specs = ARRAY_SIZE(mma8452_motion_event), \
945}
946
947static const struct iio_chan_spec mma8451_channels[] = {
948 MMA8452_CHANNEL(X, idx_x, 14),
949 MMA8452_CHANNEL(Y, idx_y, 14),
950 MMA8452_CHANNEL(Z, idx_z, 14),
951 IIO_CHAN_SOFT_TIMESTAMP(idx_ts),
952 MMA8452_FREEFALL_CHANNEL(IIO_MOD_X_AND_Y_AND_Z),
953};
954
945static const struct iio_chan_spec mma8452_channels[] = {
946 MMA8452_CHANNEL(X, idx_x, 12),
947 MMA8452_CHANNEL(Y, idx_y, 12),
948 MMA8452_CHANNEL(Z, idx_z, 12),
949 IIO_CHAN_SOFT_TIMESTAMP(idx_ts),
950 MMA8452_FREEFALL_CHANNEL(IIO_MOD_X_AND_Y_AND_Z),
951};
952

--- 17 unchanged lines hidden (view full) ---

970 MMA8652_CHANNEL(X, idx_x, 10),
971 MMA8652_CHANNEL(Y, idx_y, 10),
972 MMA8652_CHANNEL(Z, idx_z, 10),
973 IIO_CHAN_SOFT_TIMESTAMP(idx_ts),
974 MMA8652_FREEFALL_CHANNEL(IIO_MOD_X_AND_Y_AND_Z),
975};
976
977enum {
955static const struct iio_chan_spec mma8452_channels[] = {
956 MMA8452_CHANNEL(X, idx_x, 12),
957 MMA8452_CHANNEL(Y, idx_y, 12),
958 MMA8452_CHANNEL(Z, idx_z, 12),
959 IIO_CHAN_SOFT_TIMESTAMP(idx_ts),
960 MMA8452_FREEFALL_CHANNEL(IIO_MOD_X_AND_Y_AND_Z),
961};
962

--- 17 unchanged lines hidden (view full) ---

980 MMA8652_CHANNEL(X, idx_x, 10),
981 MMA8652_CHANNEL(Y, idx_y, 10),
982 MMA8652_CHANNEL(Z, idx_z, 10),
983 IIO_CHAN_SOFT_TIMESTAMP(idx_ts),
984 MMA8652_FREEFALL_CHANNEL(IIO_MOD_X_AND_Y_AND_Z),
985};
986
987enum {
988 mma8451,
978 mma8452,
979 mma8453,
980 mma8652,
981 mma8653,
982};
983
984static const struct mma_chip_info mma_chip_info_table[] = {
989 mma8452,
990 mma8453,
991 mma8652,
992 mma8653,
993};
994
995static const struct mma_chip_info mma_chip_info_table[] = {
985 [mma8452] = {
986 .chip_id = MMA8452_DEVICE_ID,
987 .channels = mma8452_channels,
988 .num_channels = ARRAY_SIZE(mma8452_channels),
996 [mma8451] = {
997 .chip_id = MMA8451_DEVICE_ID,
998 .channels = mma8451_channels,
999 .num_channels = ARRAY_SIZE(mma8451_channels),
989 /*
990 * Hardware has fullscale of -2G, -4G, -8G corresponding to
1000 /*
1001 * Hardware has fullscale of -2G, -4G, -8G corresponding to
991 * raw value -2048 for 12 bit or -512 for 10 bit.
1002 * raw value -8192 for 14 bit, -2048 for 12 bit or -512 for 10
1003 * bit.
992 * The userspace interface uses m/s^2 and we declare micro units
993 * So scale factor for 12 bit here is given by:
1004 * The userspace interface uses m/s^2 and we declare micro units
1005 * So scale factor for 12 bit here is given by:
994 * g * N * 1000000 / 2048 for N = 2, 4, 8 and g=9.80665
1006 * g * N * 1000000 / 2048 for N = 2, 4, 8 and g=9.80665
995 */
1007 */
1008 .mma_scales = { {0, 2394}, {0, 4788}, {0, 9577} },
1009 .ev_cfg = MMA8452_TRANSIENT_CFG,
1010 .ev_cfg_ele = MMA8452_TRANSIENT_CFG_ELE,
1011 .ev_cfg_chan_shift = 1,
1012 .ev_src = MMA8452_TRANSIENT_SRC,
1013 .ev_src_xe = MMA8452_TRANSIENT_SRC_XTRANSE,
1014 .ev_src_ye = MMA8452_TRANSIENT_SRC_YTRANSE,
1015 .ev_src_ze = MMA8452_TRANSIENT_SRC_ZTRANSE,
1016 .ev_ths = MMA8452_TRANSIENT_THS,
1017 .ev_ths_mask = MMA8452_TRANSIENT_THS_MASK,
1018 .ev_count = MMA8452_TRANSIENT_COUNT,
1019 },
1020 [mma8452] = {
1021 .chip_id = MMA8452_DEVICE_ID,
1022 .channels = mma8452_channels,
1023 .num_channels = ARRAY_SIZE(mma8452_channels),
996 .mma_scales = { {0, 9577}, {0, 19154}, {0, 38307} },
997 .ev_cfg = MMA8452_TRANSIENT_CFG,
998 .ev_cfg_ele = MMA8452_TRANSIENT_CFG_ELE,
999 .ev_cfg_chan_shift = 1,
1000 .ev_src = MMA8452_TRANSIENT_SRC,
1001 .ev_src_xe = MMA8452_TRANSIENT_SRC_XTRANSE,
1002 .ev_src_ye = MMA8452_TRANSIENT_SRC_YTRANSE,
1003 .ev_src_ze = MMA8452_TRANSIENT_SRC_ZTRANSE,

--- 164 unchanged lines hidden (view full) ---

1168 if (!(ret & MMA8452_CTRL_REG2_RST))
1169 return 0;
1170 }
1171
1172 return -ETIMEDOUT;
1173}
1174
1175static const struct of_device_id mma8452_dt_ids[] = {
1024 .mma_scales = { {0, 9577}, {0, 19154}, {0, 38307} },
1025 .ev_cfg = MMA8452_TRANSIENT_CFG,
1026 .ev_cfg_ele = MMA8452_TRANSIENT_CFG_ELE,
1027 .ev_cfg_chan_shift = 1,
1028 .ev_src = MMA8452_TRANSIENT_SRC,
1029 .ev_src_xe = MMA8452_TRANSIENT_SRC_XTRANSE,
1030 .ev_src_ye = MMA8452_TRANSIENT_SRC_YTRANSE,
1031 .ev_src_ze = MMA8452_TRANSIENT_SRC_ZTRANSE,

--- 164 unchanged lines hidden (view full) ---

1196 if (!(ret & MMA8452_CTRL_REG2_RST))
1197 return 0;
1198 }
1199
1200 return -ETIMEDOUT;
1201}
1202
1203static const struct of_device_id mma8452_dt_ids[] = {
1204 { .compatible = "fsl,mma8451", .data = &mma_chip_info_table[mma8451] },
1176 { .compatible = "fsl,mma8452", .data = &mma_chip_info_table[mma8452] },
1177 { .compatible = "fsl,mma8453", .data = &mma_chip_info_table[mma8453] },
1178 { .compatible = "fsl,mma8652", .data = &mma_chip_info_table[mma8652] },
1179 { .compatible = "fsl,mma8653", .data = &mma_chip_info_table[mma8653] },
1180 { }
1181};
1182MODULE_DEVICE_TABLE(of, mma8452_dt_ids);
1183

--- 20 unchanged lines hidden (view full) ---

1204 mutex_init(&data->lock);
1205 data->chip_info = match->data;
1206
1207 ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I);
1208 if (ret < 0)
1209 return ret;
1210
1211 switch (ret) {
1205 { .compatible = "fsl,mma8452", .data = &mma_chip_info_table[mma8452] },
1206 { .compatible = "fsl,mma8453", .data = &mma_chip_info_table[mma8453] },
1207 { .compatible = "fsl,mma8652", .data = &mma_chip_info_table[mma8652] },
1208 { .compatible = "fsl,mma8653", .data = &mma_chip_info_table[mma8653] },
1209 { }
1210};
1211MODULE_DEVICE_TABLE(of, mma8452_dt_ids);
1212

--- 20 unchanged lines hidden (view full) ---

1233 mutex_init(&data->lock);
1234 data->chip_info = match->data;
1235
1236 ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I);
1237 if (ret < 0)
1238 return ret;
1239
1240 switch (ret) {
1241 case MMA8451_DEVICE_ID:
1212 case MMA8452_DEVICE_ID:
1213 case MMA8453_DEVICE_ID:
1214 case MMA8652_DEVICE_ID:
1215 case MMA8653_DEVICE_ID:
1216 if (ret == data->chip_info->chip_id)
1217 break;
1218 default:
1219 return -ENODEV;

--- 167 unchanged lines hidden ---
1242 case MMA8452_DEVICE_ID:
1243 case MMA8453_DEVICE_ID:
1244 case MMA8652_DEVICE_ID:
1245 case MMA8653_DEVICE_ID:
1246 if (ret == data->chip_info->chip_id)
1247 break;
1248 default:
1249 return -ENODEV;

--- 167 unchanged lines hidden ---