summaryrefslogtreecommitdiffstats
path: root/drivers/iio
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2016-11-09 10:09:59 -0500
committerJonathan Cameron <jic23@kernel.org>2016-11-12 10:45:37 -0500
commit57d035545165a354a52f5d16d46efbb318a2fff4 (patch)
tree3ac4e67c5fcb7fa128d74cf0f84211540b10da2c /drivers/iio
parentd8594fa22a3f7c294639d9aa2959d63e66d9437c (diff)
iio: magn: st_magn: inline per-sensor data
We have #defines for all the individual sensor registers and value/mask pairs #defined at the top of the file and used at exactly one spot. This is usually good if the #defines give a meaning to the opaque magic numbers. However in this case, the semantic meaning is inherent in the name of the C99-addressable fields, and that means duplication of information, and only makes the code hard to maintain since you every time have to add a new #define AND update the site where it is to be used. Get rid of the #defines and just open code the values into the appropriate struct elements. Make sure to explicitly address the .hz and .value fields in the st_sensor_odr_avl struct so that the meaning of all values is clear. This patch is purely syntactic should have no semantic effect. 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/magnetometer/st_magn_core.c376
1 files changed, 125 insertions, 251 deletions
diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
index 3e1f06b2224c..8e1b0861fbe4 100644
--- a/drivers/iio/magnetometer/st_magn_core.c
+++ b/drivers/iio/magnetometer/st_magn_core.c
@@ -46,139 +46,12 @@
46#define ST_MAGN_FS_AVL_15000MG 15000 46#define ST_MAGN_FS_AVL_15000MG 15000
47#define ST_MAGN_FS_AVL_16000MG 16000 47#define ST_MAGN_FS_AVL_16000MG 16000
48 48
49/* CUSTOM VALUES FOR SENSOR 0 */ 49/* Special L addresses for Sensor 2 */
50#define ST_MAGN_0_ODR_ADDR 0x00
51#define ST_MAGN_0_ODR_MASK 0x1c
52#define ST_MAGN_0_ODR_AVL_1HZ_VAL 0x00
53#define ST_MAGN_0_ODR_AVL_2HZ_VAL 0x01
54#define ST_MAGN_0_ODR_AVL_3HZ_VAL 0x02
55#define ST_MAGN_0_ODR_AVL_8HZ_VAL 0x03
56#define ST_MAGN_0_ODR_AVL_15HZ_VAL 0x04
57#define ST_MAGN_0_ODR_AVL_30HZ_VAL 0x05
58#define ST_MAGN_0_ODR_AVL_75HZ_VAL 0x06
59#define ST_MAGN_0_ODR_AVL_220HZ_VAL 0x07
60#define ST_MAGN_0_PW_ADDR 0x02
61#define ST_MAGN_0_PW_MASK 0x03
62#define ST_MAGN_0_PW_ON 0x00
63#define ST_MAGN_0_PW_OFF 0x03
64#define ST_MAGN_0_FS_ADDR 0x01
65#define ST_MAGN_0_FS_MASK 0xe0
66#define ST_MAGN_0_FS_AVL_1300_VAL 0x01
67#define ST_MAGN_0_FS_AVL_1900_VAL 0x02
68#define ST_MAGN_0_FS_AVL_2500_VAL 0x03
69#define ST_MAGN_0_FS_AVL_4000_VAL 0x04
70#define ST_MAGN_0_FS_AVL_4700_VAL 0x05
71#define ST_MAGN_0_FS_AVL_5600_VAL 0x06
72#define ST_MAGN_0_FS_AVL_8100_VAL 0x07
73#define ST_MAGN_0_FS_AVL_1300_GAIN_XY 1100
74#define ST_MAGN_0_FS_AVL_1900_GAIN_XY 855
75#define ST_MAGN_0_FS_AVL_2500_GAIN_XY 670
76#define ST_MAGN_0_FS_AVL_4000_GAIN_XY 450
77#define ST_MAGN_0_FS_AVL_4700_GAIN_XY 400
78#define ST_MAGN_0_FS_AVL_5600_GAIN_XY 330
79#define ST_MAGN_0_FS_AVL_8100_GAIN_XY 230
80#define ST_MAGN_0_FS_AVL_1300_GAIN_Z 980
81#define ST_MAGN_0_FS_AVL_1900_GAIN_Z 760
82#define ST_MAGN_0_FS_AVL_2500_GAIN_Z 600
83#define ST_MAGN_0_FS_AVL_4000_GAIN_Z 400
84#define ST_MAGN_0_FS_AVL_4700_GAIN_Z 355
85#define ST_MAGN_0_FS_AVL_5600_GAIN_Z 295
86#define ST_MAGN_0_FS_AVL_8100_GAIN_Z 205
87#define ST_MAGN_0_MULTIREAD_BIT false
88
89/* CUSTOM VALUES FOR SENSOR 1 */
90#define ST_MAGN_1_WAI_EXP 0x3c
91#define ST_MAGN_1_ODR_ADDR 0x00
92#define ST_MAGN_1_ODR_MASK 0x1c
93#define ST_MAGN_1_ODR_AVL_1HZ_VAL 0x00
94#define ST_MAGN_1_ODR_AVL_2HZ_VAL 0x01
95#define ST_MAGN_1_ODR_AVL_3HZ_VAL 0x02
96#define ST_MAGN_1_ODR_AVL_8HZ_VAL 0x03
97#define ST_MAGN_1_ODR_AVL_15HZ_VAL 0x04
98#define ST_MAGN_1_ODR_AVL_30HZ_VAL 0x05
99#define ST_MAGN_1_ODR_AVL_75HZ_VAL 0x06
100#define ST_MAGN_1_ODR_AVL_220HZ_VAL 0x07
101#define ST_MAGN_1_PW_ADDR 0x02
102#define ST_MAGN_1_PW_MASK 0x03
103#define ST_MAGN_1_PW_ON 0x00
104#define ST_MAGN_1_PW_OFF 0x03
105#define ST_MAGN_1_FS_ADDR 0x01
106#define ST_MAGN_1_FS_MASK 0xe0
107#define ST_MAGN_1_FS_AVL_1300_VAL 0x01
108#define ST_MAGN_1_FS_AVL_1900_VAL 0x02
109#define ST_MAGN_1_FS_AVL_2500_VAL 0x03
110#define ST_MAGN_1_FS_AVL_4000_VAL 0x04
111#define ST_MAGN_1_FS_AVL_4700_VAL 0x05
112#define ST_MAGN_1_FS_AVL_5600_VAL 0x06
113#define ST_MAGN_1_FS_AVL_8100_VAL 0x07
114#define ST_MAGN_1_FS_AVL_1300_GAIN_XY 909
115#define ST_MAGN_1_FS_AVL_1900_GAIN_XY 1169
116#define ST_MAGN_1_FS_AVL_2500_GAIN_XY 1492
117#define ST_MAGN_1_FS_AVL_4000_GAIN_XY 2222
118#define ST_MAGN_1_FS_AVL_4700_GAIN_XY 2500
119#define ST_MAGN_1_FS_AVL_5600_GAIN_XY 3030
120#define ST_MAGN_1_FS_AVL_8100_GAIN_XY 4347
121#define ST_MAGN_1_FS_AVL_1300_GAIN_Z 1020
122#define ST_MAGN_1_FS_AVL_1900_GAIN_Z 1315
123#define ST_MAGN_1_FS_AVL_2500_GAIN_Z 1666
124#define ST_MAGN_1_FS_AVL_4000_GAIN_Z 2500
125#define ST_MAGN_1_FS_AVL_4700_GAIN_Z 2816
126#define ST_MAGN_1_FS_AVL_5600_GAIN_Z 3389
127#define ST_MAGN_1_FS_AVL_8100_GAIN_Z 4878
128#define ST_MAGN_1_MULTIREAD_BIT false
129
130/* CUSTOM VALUES FOR SENSOR 2 */
131#define ST_MAGN_2_WAI_EXP 0x3d
132#define ST_MAGN_2_ODR_ADDR 0x20
133#define ST_MAGN_2_ODR_MASK 0x1c
134#define ST_MAGN_2_ODR_AVL_1HZ_VAL 0x00
135#define ST_MAGN_2_ODR_AVL_2HZ_VAL 0x01
136#define ST_MAGN_2_ODR_AVL_3HZ_VAL 0x02
137#define ST_MAGN_2_ODR_AVL_5HZ_VAL 0x03
138#define ST_MAGN_2_ODR_AVL_10HZ_VAL 0x04
139#define ST_MAGN_2_ODR_AVL_20HZ_VAL 0x05
140#define ST_MAGN_2_ODR_AVL_40HZ_VAL 0x06
141#define ST_MAGN_2_ODR_AVL_80HZ_VAL 0x07
142#define ST_MAGN_2_PW_ADDR 0x22
143#define ST_MAGN_2_PW_MASK 0x03
144#define ST_MAGN_2_PW_ON 0x00
145#define ST_MAGN_2_PW_OFF 0x03
146#define ST_MAGN_2_FS_ADDR 0x21
147#define ST_MAGN_2_FS_MASK 0x60
148#define ST_MAGN_2_FS_AVL_4000_VAL 0x00
149#define ST_MAGN_2_FS_AVL_8000_VAL 0x01
150#define ST_MAGN_2_FS_AVL_12000_VAL 0x02
151#define ST_MAGN_2_FS_AVL_16000_VAL 0x03
152#define ST_MAGN_2_FS_AVL_4000_GAIN 146
153#define ST_MAGN_2_FS_AVL_8000_GAIN 292
154#define ST_MAGN_2_FS_AVL_12000_GAIN 438
155#define ST_MAGN_2_FS_AVL_16000_GAIN 584
156#define ST_MAGN_2_MULTIREAD_BIT false
157#define ST_MAGN_2_OUT_X_L_ADDR 0x28 50#define ST_MAGN_2_OUT_X_L_ADDR 0x28
158#define ST_MAGN_2_OUT_Y_L_ADDR 0x2a 51#define ST_MAGN_2_OUT_Y_L_ADDR 0x2a
159#define ST_MAGN_2_OUT_Z_L_ADDR 0x2c 52#define ST_MAGN_2_OUT_Z_L_ADDR 0x2c
160 53
161/* CUSTOM VALUES FOR SENSOR 3 */ 54/* Special L addresses for sensor 3 */
162#define ST_MAGN_3_WAI_ADDR 0x4f
163#define ST_MAGN_3_WAI_EXP 0x40
164#define ST_MAGN_3_ODR_ADDR 0x60
165#define ST_MAGN_3_ODR_MASK 0x0c
166#define ST_MAGN_3_ODR_AVL_10HZ_VAL 0x00
167#define ST_MAGN_3_ODR_AVL_20HZ_VAL 0x01
168#define ST_MAGN_3_ODR_AVL_50HZ_VAL 0x02
169#define ST_MAGN_3_ODR_AVL_100HZ_VAL 0x03
170#define ST_MAGN_3_PW_ADDR 0x60
171#define ST_MAGN_3_PW_MASK 0x03
172#define ST_MAGN_3_PW_ON 0x00
173#define ST_MAGN_3_PW_OFF 0x03
174#define ST_MAGN_3_BDU_ADDR 0x62
175#define ST_MAGN_3_BDU_MASK 0x10
176#define ST_MAGN_3_DRDY_IRQ_ADDR 0x62
177#define ST_MAGN_3_DRDY_INT_MASK 0x01
178#define ST_MAGN_3_IHL_IRQ_ADDR 0x63
179#define ST_MAGN_3_IHL_IRQ_MASK 0x04
180#define ST_MAGN_3_FS_AVL_15000_GAIN 1500
181#define ST_MAGN_3_MULTIREAD_BIT false
182#define ST_MAGN_3_OUT_X_L_ADDR 0x68 55#define ST_MAGN_3_OUT_X_L_ADDR 0x68
183#define ST_MAGN_3_OUT_Y_L_ADDR 0x6a 56#define ST_MAGN_3_OUT_Y_L_ADDR 0x6a
184#define ST_MAGN_3_OUT_Z_L_ADDR 0x6c 57#define ST_MAGN_3_OUT_Z_L_ADDR 0x6c
@@ -240,77 +113,78 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
240 }, 113 },
241 .ch = (struct iio_chan_spec *)st_magn_16bit_channels, 114 .ch = (struct iio_chan_spec *)st_magn_16bit_channels,
242 .odr = { 115 .odr = {
243 .addr = ST_MAGN_0_ODR_ADDR, 116 .addr = 0x00,
244 .mask = ST_MAGN_0_ODR_MASK, 117 .mask = 0x1c,
245 .odr_avl = { 118 .odr_avl = {
246 { 1, ST_MAGN_0_ODR_AVL_1HZ_VAL, }, 119 { .hz = 1, .value = 0x00 },
247 { 2, ST_MAGN_0_ODR_AVL_2HZ_VAL, }, 120 { .hz = 2, .value = 0x01 },
248 { 3, ST_MAGN_0_ODR_AVL_3HZ_VAL, }, 121 { .hz = 3, .value = 0x02 },
249 { 8, ST_MAGN_0_ODR_AVL_8HZ_VAL, }, 122 { .hz = 8, .value = 0x03 },
250 { 15, ST_MAGN_0_ODR_AVL_15HZ_VAL, }, 123 { .hz = 15, .value = 0x04 },
251 { 30, ST_MAGN_0_ODR_AVL_30HZ_VAL, }, 124 { .hz = 30, .value = 0x05 },
252 { 75, ST_MAGN_0_ODR_AVL_75HZ_VAL, }, 125 { .hz = 75, .value = 0x06 },
126 /* 220 Hz, 0x07 reportedly exist */
253 }, 127 },
254 }, 128 },
255 .pw = { 129 .pw = {
256 .addr = ST_MAGN_0_PW_ADDR, 130 .addr = 0x02,
257 .mask = ST_MAGN_0_PW_MASK, 131 .mask = 0x03,
258 .value_on = ST_MAGN_0_PW_ON, 132 .value_on = 0x00,
259 .value_off = ST_MAGN_0_PW_OFF, 133 .value_off = 0x03,
260 }, 134 },
261 .fs = { 135 .fs = {
262 .addr = ST_MAGN_0_FS_ADDR, 136 .addr = 0x01,
263 .mask = ST_MAGN_0_FS_MASK, 137 .mask = 0xe0,
264 .fs_avl = { 138 .fs_avl = {
265 [0] = { 139 [0] = {
266 .num = ST_MAGN_FS_AVL_1300MG, 140 .num = ST_MAGN_FS_AVL_1300MG,
267 .value = ST_MAGN_0_FS_AVL_1300_VAL, 141 .value = 0x01,
268 .gain = ST_MAGN_0_FS_AVL_1300_GAIN_XY, 142 .gain = 1100,
269 .gain2 = ST_MAGN_0_FS_AVL_1300_GAIN_Z, 143 .gain2 = 980,
270 }, 144 },
271 [1] = { 145 [1] = {
272 .num = ST_MAGN_FS_AVL_1900MG, 146 .num = ST_MAGN_FS_AVL_1900MG,
273 .value = ST_MAGN_0_FS_AVL_1900_VAL, 147 .value = 0x02,
274 .gain = ST_MAGN_0_FS_AVL_1900_GAIN_XY, 148 .gain = 855,
275 .gain2 = ST_MAGN_0_FS_AVL_1900_GAIN_Z, 149 .gain2 = 760,
276 }, 150 },
277 [2] = { 151 [2] = {
278 .num = ST_MAGN_FS_AVL_2500MG, 152 .num = ST_MAGN_FS_AVL_2500MG,
279 .value = ST_MAGN_0_FS_AVL_2500_VAL, 153 .value = 0x03,
280 .gain = ST_MAGN_0_FS_AVL_2500_GAIN_XY, 154 .gain = 670,
281 .gain2 = ST_MAGN_0_FS_AVL_2500_GAIN_Z, 155 .gain2 = 600,
282 }, 156 },
283 [3] = { 157 [3] = {
284 .num = ST_MAGN_FS_AVL_4000MG, 158 .num = ST_MAGN_FS_AVL_4000MG,
285 .value = ST_MAGN_0_FS_AVL_4000_VAL, 159 .value = 0x04,
286 .gain = ST_MAGN_0_FS_AVL_4000_GAIN_XY, 160 .gain = 450,
287 .gain2 = ST_MAGN_0_FS_AVL_4000_GAIN_Z, 161 .gain2 = 400,
288 }, 162 },
289 [4] = { 163 [4] = {
290 .num = ST_MAGN_FS_AVL_4700MG, 164 .num = ST_MAGN_FS_AVL_4700MG,
291 .value = ST_MAGN_0_FS_AVL_4700_VAL, 165 .value = 0x05,
292 .gain = ST_MAGN_0_FS_AVL_4700_GAIN_XY, 166 .gain = 400,
293 .gain2 = ST_MAGN_0_FS_AVL_4700_GAIN_Z, 167 .gain2 = 355,
294 }, 168 },
295 [5] = { 169 [5] = {
296 .num = ST_MAGN_FS_AVL_5600MG, 170 .num = ST_MAGN_FS_AVL_5600MG,
297 .value = ST_MAGN_0_FS_AVL_5600_VAL, 171 .value = 0x06,
298 .gain = ST_MAGN_0_FS_AVL_5600_GAIN_XY, 172 .gain = 330,
299 .gain2 = ST_MAGN_0_FS_AVL_5600_GAIN_Z, 173 .gain2 = 295,
300 }, 174 },
301 [6] = { 175 [6] = {
302 .num = ST_MAGN_FS_AVL_8100MG, 176 .num = ST_MAGN_FS_AVL_8100MG,
303 .value = ST_MAGN_0_FS_AVL_8100_VAL, 177 .value = 0x07,
304 .gain = ST_MAGN_0_FS_AVL_8100_GAIN_XY, 178 .gain = 230,
305 .gain2 = ST_MAGN_0_FS_AVL_8100_GAIN_Z, 179 .gain2 = 205,
306 }, 180 },
307 }, 181 },
308 }, 182 },
309 .multi_read_bit = ST_MAGN_0_MULTIREAD_BIT, 183 .multi_read_bit = false,
310 .bootime = 2, 184 .bootime = 2,
311 }, 185 },
312 { 186 {
313 .wai = ST_MAGN_1_WAI_EXP, 187 .wai = 0x3c,
314 .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS, 188 .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
315 .sensors_supported = { 189 .sensors_supported = {
316 [0] = LSM303DLHC_MAGN_DEV_NAME, 190 [0] = LSM303DLHC_MAGN_DEV_NAME,
@@ -318,175 +192,175 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
318 }, 192 },
319 .ch = (struct iio_chan_spec *)st_magn_16bit_channels, 193 .ch = (struct iio_chan_spec *)st_magn_16bit_channels,
320 .odr = { 194 .odr = {
321 .addr = ST_MAGN_1_ODR_ADDR, 195 .addr = 0x00,
322 .mask = ST_MAGN_1_ODR_MASK, 196 .mask = 0x1c,
323 .odr_avl = { 197 .odr_avl = {
324 { 1, ST_MAGN_1_ODR_AVL_1HZ_VAL, }, 198 { .hz = 1, .value = 0x00 },
325 { 2, ST_MAGN_1_ODR_AVL_2HZ_VAL, }, 199 { .hz = 2, .value = 0x01 },
326 { 3, ST_MAGN_1_ODR_AVL_3HZ_VAL, }, 200 { .hz = 3, .value = 0x02 },
327 { 8, ST_MAGN_1_ODR_AVL_8HZ_VAL, }, 201 { .hz = 8, .value = 0x03 },
328 { 15, ST_MAGN_1_ODR_AVL_15HZ_VAL, }, 202 { .hz = 15, .value = 0x04 },
329 { 30, ST_MAGN_1_ODR_AVL_30HZ_VAL, }, 203 { .hz = 30, .value = 0x05 },
330 { 75, ST_MAGN_1_ODR_AVL_75HZ_VAL, }, 204 { .hz = 75, .value = 0x06 },
331 { 220, ST_MAGN_1_ODR_AVL_220HZ_VAL, }, 205 { .hz = 220, .value = 0x07 },
332 }, 206 },
333 }, 207 },
334 .pw = { 208 .pw = {
335 .addr = ST_MAGN_1_PW_ADDR, 209 .addr = 0x02,
336 .mask = ST_MAGN_1_PW_MASK, 210 .mask = 0x03,
337 .value_on = ST_MAGN_1_PW_ON, 211 .value_on = 0x00,
338 .value_off = ST_MAGN_1_PW_OFF, 212 .value_off = 0x03,
339 }, 213 },
340 .fs = { 214 .fs = {
341 .addr = ST_MAGN_1_FS_ADDR, 215 .addr = 0x01,
342 .mask = ST_MAGN_1_FS_MASK, 216 .mask = 0xe0,
343 .fs_avl = { 217 .fs_avl = {
344 [0] = { 218 [0] = {
345 .num = ST_MAGN_FS_AVL_1300MG, 219 .num = ST_MAGN_FS_AVL_1300MG,
346 .value = ST_MAGN_1_FS_AVL_1300_VAL, 220 .value = 0x01,
347 .gain = ST_MAGN_1_FS_AVL_1300_GAIN_XY, 221 .gain = 909,
348 .gain2 = ST_MAGN_1_FS_AVL_1300_GAIN_Z, 222 .gain2 = 1020,
349 }, 223 },
350 [1] = { 224 [1] = {
351 .num = ST_MAGN_FS_AVL_1900MG, 225 .num = ST_MAGN_FS_AVL_1900MG,
352 .value = ST_MAGN_1_FS_AVL_1900_VAL, 226 .value = 0x02,
353 .gain = ST_MAGN_1_FS_AVL_1900_GAIN_XY, 227 .gain = 1169,
354 .gain2 = ST_MAGN_1_FS_AVL_1900_GAIN_Z, 228 .gain2 = 1315,
355 }, 229 },
356 [2] = { 230 [2] = {
357 .num = ST_MAGN_FS_AVL_2500MG, 231 .num = ST_MAGN_FS_AVL_2500MG,
358 .value = ST_MAGN_1_FS_AVL_2500_VAL, 232 .value = 0x03,
359 .gain = ST_MAGN_1_FS_AVL_2500_GAIN_XY, 233 .gain = 1492,
360 .gain2 = ST_MAGN_1_FS_AVL_2500_GAIN_Z, 234 .gain2 = 1666,
361 }, 235 },
362 [3] = { 236 [3] = {
363 .num = ST_MAGN_FS_AVL_4000MG, 237 .num = ST_MAGN_FS_AVL_4000MG,
364 .value = ST_MAGN_1_FS_AVL_4000_VAL, 238 .value = 0x04,
365 .gain = ST_MAGN_1_FS_AVL_4000_GAIN_XY, 239 .gain = 2222,
366 .gain2 = ST_MAGN_1_FS_AVL_4000_GAIN_Z, 240 .gain2 = 2500,
367 }, 241 },
368 [4] = { 242 [4] = {
369 .num = ST_MAGN_FS_AVL_4700MG, 243 .num = ST_MAGN_FS_AVL_4700MG,
370 .value = ST_MAGN_1_FS_AVL_4700_VAL, 244 .value = 0x05,
371 .gain = ST_MAGN_1_FS_AVL_4700_GAIN_XY, 245 .gain = 2500,
372 .gain2 = ST_MAGN_1_FS_AVL_4700_GAIN_Z, 246 .gain2 = 2816,
373 }, 247 },
374 [5] = { 248 [5] = {
375 .num = ST_MAGN_FS_AVL_5600MG, 249 .num = ST_MAGN_FS_AVL_5600MG,
376 .value = ST_MAGN_1_FS_AVL_5600_VAL, 250 .value = 0x06,
377 .gain = ST_MAGN_1_FS_AVL_5600_GAIN_XY, 251 .gain = 3030,
378 .gain2 = ST_MAGN_1_FS_AVL_5600_GAIN_Z, 252 .gain2 = 3389,
379 }, 253 },
380 [6] = { 254 [6] = {
381 .num = ST_MAGN_FS_AVL_8100MG, 255 .num = ST_MAGN_FS_AVL_8100MG,
382 .value = ST_MAGN_1_FS_AVL_8100_VAL, 256 .value = 0x07,
383 .gain = ST_MAGN_1_FS_AVL_8100_GAIN_XY, 257 .gain = 4347,
384 .gain2 = ST_MAGN_1_FS_AVL_8100_GAIN_Z, 258 .gain2 = 4878,
385 }, 259 },
386 }, 260 },
387 }, 261 },
388 .multi_read_bit = ST_MAGN_1_MULTIREAD_BIT, 262 .multi_read_bit = false,
389 .bootime = 2, 263 .bootime = 2,
390 }, 264 },
391 { 265 {
392 .wai = ST_MAGN_2_WAI_EXP, 266 .wai = 0x3d,
393 .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS, 267 .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
394 .sensors_supported = { 268 .sensors_supported = {
395 [0] = LIS3MDL_MAGN_DEV_NAME, 269 [0] = LIS3MDL_MAGN_DEV_NAME,
396 }, 270 },
397 .ch = (struct iio_chan_spec *)st_magn_2_16bit_channels, 271 .ch = (struct iio_chan_spec *)st_magn_2_16bit_channels,
398 .odr = { 272 .odr = {
399 .addr = ST_MAGN_2_ODR_ADDR, 273 .addr = 0x20,
400 .mask = ST_MAGN_2_ODR_MASK, 274 .mask = 0x1c,
401 .odr_avl = { 275 .odr_avl = {
402 { 1, ST_MAGN_2_ODR_AVL_1HZ_VAL, }, 276 { .hz = 1, .value = 0x00 },
403 { 2, ST_MAGN_2_ODR_AVL_2HZ_VAL, }, 277 { .hz = 2, .value = 0x01 },
404 { 3, ST_MAGN_2_ODR_AVL_3HZ_VAL, }, 278 { .hz = 3, .value = 0x02 },
405 { 5, ST_MAGN_2_ODR_AVL_5HZ_VAL, }, 279 { .hz = 5, .value = 0x03 },
406 { 10, ST_MAGN_2_ODR_AVL_10HZ_VAL, }, 280 { .hz = 10, .value = 0x04 },
407 { 20, ST_MAGN_2_ODR_AVL_20HZ_VAL, }, 281 { .hz = 20, .value = 0x05 },
408 { 40, ST_MAGN_2_ODR_AVL_40HZ_VAL, }, 282 { .hz = 40, .value = 0x06 },
409 { 80, ST_MAGN_2_ODR_AVL_80HZ_VAL, }, 283 { .hz = 80, .value = 0x07 },
410 }, 284 },
411 }, 285 },
412 .pw = { 286 .pw = {
413 .addr = ST_MAGN_2_PW_ADDR, 287 .addr = 0x22,
414 .mask = ST_MAGN_2_PW_MASK, 288 .mask = 0x03,
415 .value_on = ST_MAGN_2_PW_ON, 289 .value_on = 0x00,
416 .value_off = ST_MAGN_2_PW_OFF, 290 .value_off = 0x03,
417 }, 291 },
418 .fs = { 292 .fs = {
419 .addr = ST_MAGN_2_FS_ADDR, 293 .addr = 0x21,
420 .mask = ST_MAGN_2_FS_MASK, 294 .mask = 0x60,
421 .fs_avl = { 295 .fs_avl = {
422 [0] = { 296 [0] = {
423 .num = ST_MAGN_FS_AVL_4000MG, 297 .num = ST_MAGN_FS_AVL_4000MG,
424 .value = ST_MAGN_2_FS_AVL_4000_VAL, 298 .value = 0x00,
425 .gain = ST_MAGN_2_FS_AVL_4000_GAIN, 299 .gain = 146,
426 }, 300 },
427 [1] = { 301 [1] = {
428 .num = ST_MAGN_FS_AVL_8000MG, 302 .num = ST_MAGN_FS_AVL_8000MG,
429 .value = ST_MAGN_2_FS_AVL_8000_VAL, 303 .value = 0x01,
430 .gain = ST_MAGN_2_FS_AVL_8000_GAIN, 304 .gain = 292,
431 }, 305 },
432 [2] = { 306 [2] = {
433 .num = ST_MAGN_FS_AVL_12000MG, 307 .num = ST_MAGN_FS_AVL_12000MG,
434 .value = ST_MAGN_2_FS_AVL_12000_VAL, 308 .value = 0x02,
435 .gain = ST_MAGN_2_FS_AVL_12000_GAIN, 309 .gain = 438,
436 }, 310 },
437 [3] = { 311 [3] = {
438 .num = ST_MAGN_FS_AVL_16000MG, 312 .num = ST_MAGN_FS_AVL_16000MG,
439 .value = ST_MAGN_2_FS_AVL_16000_VAL, 313 .value = 0x03,
440 .gain = ST_MAGN_2_FS_AVL_16000_GAIN, 314 .gain = 584,
441 }, 315 },
442 }, 316 },
443 }, 317 },
444 .multi_read_bit = ST_MAGN_2_MULTIREAD_BIT, 318 .multi_read_bit = false,
445 .bootime = 2, 319 .bootime = 2,
446 }, 320 },
447 { 321 {
448 .wai = ST_MAGN_3_WAI_EXP, 322 .wai = 0x40,
449 .wai_addr = ST_MAGN_3_WAI_ADDR, 323 .wai_addr = 0x4f,
450 .sensors_supported = { 324 .sensors_supported = {
451 [0] = LSM303AGR_MAGN_DEV_NAME, 325 [0] = LSM303AGR_MAGN_DEV_NAME,
452 }, 326 },
453 .ch = (struct iio_chan_spec *)st_magn_3_16bit_channels, 327 .ch = (struct iio_chan_spec *)st_magn_3_16bit_channels,
454 .odr = { 328 .odr = {
455 .addr = ST_MAGN_3_ODR_ADDR, 329 .addr = 0x60,
456 .mask = ST_MAGN_3_ODR_MASK, 330 .mask = 0x0c,
457 .odr_avl = { 331 .odr_avl = {
458 { 10, ST_MAGN_3_ODR_AVL_10HZ_VAL, }, 332 { .hz = 10, .value = 0x00 },
459 { 20, ST_MAGN_3_ODR_AVL_20HZ_VAL, }, 333 { .hz = 20, .value = 0x01 },
460 { 50, ST_MAGN_3_ODR_AVL_50HZ_VAL, }, 334 { .hz = 50, .value = 0x02 },
461 { 100, ST_MAGN_3_ODR_AVL_100HZ_VAL, }, 335 { .hz = 100, .value = 0x03 },
462 }, 336 },
463 }, 337 },
464 .pw = { 338 .pw = {
465 .addr = ST_MAGN_3_PW_ADDR, 339 .addr = 0x60,
466 .mask = ST_MAGN_3_PW_MASK, 340 .mask = 0x03,
467 .value_on = ST_MAGN_3_PW_ON, 341 .value_on = 0x00,
468 .value_off = ST_MAGN_3_PW_OFF, 342 .value_off = 0x03,
469 }, 343 },
470 .fs = { 344 .fs = {
471 .fs_avl = { 345 .fs_avl = {
472 [0] = { 346 [0] = {
473 .num = ST_MAGN_FS_AVL_15000MG, 347 .num = ST_MAGN_FS_AVL_15000MG,
474 .gain = ST_MAGN_3_FS_AVL_15000_GAIN, 348 .gain = 1500,
475 }, 349 },
476 }, 350 },
477 }, 351 },
478 .bdu = { 352 .bdu = {
479 .addr = ST_MAGN_3_BDU_ADDR, 353 .addr = 0x62,
480 .mask = ST_MAGN_3_BDU_MASK, 354 .mask = 0x10,
481 }, 355 },
482 .drdy_irq = { 356 .drdy_irq = {
483 .addr = ST_MAGN_3_DRDY_IRQ_ADDR, 357 .addr = 0x62,
484 .mask_int1 = ST_MAGN_3_DRDY_INT_MASK, 358 .mask_int1 = 0x01,
485 .addr_ihl = ST_MAGN_3_IHL_IRQ_ADDR, 359 .addr_ihl = 0x63,
486 .mask_ihl = ST_MAGN_3_IHL_IRQ_MASK, 360 .mask_ihl = 0x04,
487 .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR, 361 .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
488 }, 362 },
489 .multi_read_bit = ST_MAGN_3_MULTIREAD_BIT, 363 .multi_read_bit = false,
490 .bootime = 2, 364 .bootime = 2,
491 }, 365 },
492}; 366};