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 --- |