xref: /linux/drivers/iio/magnetometer/yamaha-yas530.c (revision 553c89ec31746ff96fc5562943fe5b1c9b1e9276)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Driver for the Yamaha YAS magnetic sensors, often used in Samsung
4  * mobile phones. While all are not yet handled because of lacking
5  * hardware, expand this driver to handle the different variants:
6  *
7  * YAS530 MS-3E (2011 Samsung Galaxy S Advance)
8  * YAS532 MS-3R (2011 Samsung Galaxy S4)
9  * YAS533 MS-3F (Vivo 1633, 1707, V3, Y21L)
10  * (YAS534 is a magnetic switch, not handled)
11  * YAS535 MS-6C
12  * YAS536 MS-3W
13  * YAS537 MS-3T (2015 Samsung Galaxy S6, Note 5, Galaxy S7)
14  * YAS539 MS-3S (2018 Samsung Galaxy A7 SM-A750FN)
15  *
16  * Code functions found in the MPU3050 YAS530 and YAS532 drivers
17  * named "inv_compass" in the Tegra Android kernel tree.
18  * Copyright (C) 2012 InvenSense Corporation
19  *
20  * Code functions for YAS537 based on Yamaha Android kernel driver.
21  * Copyright (c) 2014 Yamaha Corporation
22  *
23  * Author: Linus Walleij <linus.walleij@linaro.org>
24  */
25 #include <linux/bitfield.h>
26 #include <linux/bitops.h>
27 #include <linux/delay.h>
28 #include <linux/err.h>
29 #include <linux/gpio/consumer.h>
30 #include <linux/i2c.h>
31 #include <linux/module.h>
32 #include <linux/mod_devicetable.h>
33 #include <linux/mutex.h>
34 #include <linux/pm_runtime.h>
35 #include <linux/property.h>
36 #include <linux/regmap.h>
37 #include <linux/regulator/consumer.h>
38 #include <linux/random.h>
39 #include <linux/units.h>
40 
41 #include <linux/iio/buffer.h>
42 #include <linux/iio/iio.h>
43 #include <linux/iio/trigger_consumer.h>
44 #include <linux/iio/triggered_buffer.h>
45 
46 #include <linux/unaligned.h>
47 
48 /* Commonly used registers */
49 #define YAS5XX_DEVICE_ID		0x80
50 #define YAS5XX_MEASURE_DATA		0xB0
51 
52 /* These registers are used by YAS530, YAS532 and YAS533 */
53 #define YAS530_ACTUATE_INIT_COIL	0x81
54 #define YAS530_MEASURE			0x82
55 #define YAS530_CONFIG			0x83
56 #define YAS530_MEASURE_INTERVAL		0x84
57 #define YAS530_OFFSET_X			0x85 /* [-31 .. 31] */
58 #define YAS530_OFFSET_Y1		0x86 /* [-31 .. 31] */
59 #define YAS530_OFFSET_Y2		0x87 /* [-31 .. 31] */
60 #define YAS530_TEST1			0x88
61 #define YAS530_TEST2			0x89
62 #define YAS530_CAL			0x90
63 
64 /* Registers used by YAS537 */
65 #define YAS537_MEASURE			0x81 /* Originally YAS537_REG_CMDR */
66 #define YAS537_CONFIG			0x82 /* Originally YAS537_REG_CONFR */
67 #define YAS537_MEASURE_INTERVAL		0x83 /* Originally YAS537_REG_INTRVLR */
68 #define YAS537_OFFSET_X			0x84 /* Originally YAS537_REG_OXR */
69 #define YAS537_OFFSET_Y1		0x85 /* Originally YAS537_REG_OY1R */
70 #define YAS537_OFFSET_Y2		0x86 /* Originally YAS537_REG_OY2R */
71 #define YAS537_AVR			0x87
72 #define YAS537_HCK			0x88
73 #define YAS537_LCK			0x89
74 #define YAS537_SRST			0x90
75 #define YAS537_ADCCAL			0x91
76 #define YAS537_MTC			0x93
77 #define YAS537_OC			0x9E
78 #define YAS537_TRM			0x9F
79 #define YAS537_CAL			0xC0
80 
81 /* Bits in the YAS5xx config register */
82 #define YAS5XX_CONFIG_INTON		BIT(0) /* Interrupt on? */
83 #define YAS5XX_CONFIG_INTHACT		BIT(1) /* Interrupt active high? */
84 #define YAS5XX_CONFIG_CCK_MASK		GENMASK(4, 2)
85 #define YAS5XX_CONFIG_CCK_SHIFT		2
86 
87 /* Bits in the measure command register */
88 #define YAS5XX_MEASURE_START		BIT(0)
89 #define YAS5XX_MEASURE_LDTC		BIT(1)
90 #define YAS5XX_MEASURE_FORS		BIT(2)
91 #define YAS5XX_MEASURE_DLYMES		BIT(4)
92 #define YAS5XX_MEASURE_CONT		BIT(5)
93 
94 /* Bits in the measure data register */
95 #define YAS5XX_MEASURE_DATA_BUSY	BIT(7)
96 
97 #define YAS530_DEVICE_ID		0x01 /* YAS530 (MS-3E) */
98 #define YAS530_VERSION_A		0 /* YAS530 (MS-3E A) */
99 #define YAS530_VERSION_B		1 /* YAS530B (MS-3E B) */
100 #define YAS530_VERSION_A_COEF		380
101 #define YAS530_VERSION_B_COEF		550
102 #define YAS530_DATA_BITS		12
103 #define YAS530_DATA_CENTER		BIT(YAS530_DATA_BITS - 1)
104 #define YAS530_DATA_OVERFLOW		(BIT(YAS530_DATA_BITS) - 1)
105 
106 #define YAS532_DEVICE_ID		0x02 /* YAS532/YAS533 (MS-3R/F) */
107 #define YAS532_VERSION_AB		0 /* YAS532/533 AB (MS-3R/F AB) */
108 #define YAS532_VERSION_AC		1 /* YAS532/533 AC (MS-3R/F AC) */
109 #define YAS532_VERSION_AB_COEF		1800
110 #define YAS532_VERSION_AC_COEF_X	850
111 #define YAS532_VERSION_AC_COEF_Y1	750
112 #define YAS532_VERSION_AC_COEF_Y2	750
113 #define YAS532_DATA_BITS		13
114 #define YAS532_DATA_CENTER		BIT(YAS532_DATA_BITS - 1)
115 #define YAS532_DATA_OVERFLOW		(BIT(YAS532_DATA_BITS) - 1)
116 
117 #define YAS537_DEVICE_ID		0x07 /* YAS537 (MS-3T) */
118 #define YAS537_VERSION_0		0 /* Version naming unknown */
119 #define YAS537_VERSION_1		1 /* Version naming unknown */
120 #define YAS537_MAG_AVERAGE_32_MASK	GENMASK(6, 4)
121 #define YAS537_MEASURE_TIME_WORST_US	1500
122 #define YAS537_DEFAULT_SENSOR_DELAY_MS	50
123 #define YAS537_MAG_RCOIL_TIME_US	65
124 #define YAS537_MTC3_MASK_PREP		GENMASK(7, 0)
125 #define YAS537_MTC3_MASK_GET		GENMASK(7, 5)
126 #define YAS537_MTC3_ADD_BIT		BIT(4)
127 #define YAS537_HCK_MASK_PREP		GENMASK(4, 0)
128 #define YAS537_HCK_MASK_GET		GENMASK(7, 4)
129 #define YAS537_LCK_MASK_PREP		GENMASK(4, 0)
130 #define YAS537_LCK_MASK_GET		GENMASK(3, 0)
131 #define YAS537_OC_MASK_GET		GENMASK(5, 0)
132 
133 /* Turn off device regulators etc after 5 seconds of inactivity */
134 #define YAS5XX_AUTOSUSPEND_DELAY_MS	5000
135 
136 enum chip_ids {
137 	yas530,
138 	yas532,
139 	yas533,
140 	yas537,
141 };
142 
143 static const int yas530_volatile_reg[] = {
144 	YAS530_ACTUATE_INIT_COIL,
145 	YAS530_MEASURE,
146 };
147 
148 static const int yas537_volatile_reg[] = {
149 	YAS537_MEASURE,
150 };
151 
152 struct yas5xx_calibration {
153 	/* Linearization calibration x, y1, y2 */
154 	s32 r[3];
155 	u32 f[3];
156 	/* Temperature compensation calibration */
157 	s16 Cx, Cy1, Cy2;
158 	/* Misc calibration coefficients */
159 	s8  a2, a3, a4, a6, a7, a8;
160 	s16 a5, a9;
161 	u8  k;
162 	/* clock divider */
163 	u8 dck;
164 };
165 
166 struct yas5xx;
167 
168 /**
169  * struct yas5xx_chip_info - device-specific data and function pointers
170  * @devid: device ID number
171  * @product_name: product name of the YAS variant
172  * @version_names: version letters or namings
173  * @volatile_reg: device-specific volatile registers
174  * @volatile_reg_qty: quantity of device-specific volatile registers
175  * @scaling_val2: scaling value for IIO_CHAN_INFO_SCALE
176  * @t_ref: number of counts at reference temperature 20 °C
177  * @min_temp_x10: starting point of temperature counting in 1/10:s degrees Celsius
178  * @get_measure: function pointer to get a measurement
179  * @get_calibration_data: function pointer to get calibration data
180  * @dump_calibration: function pointer to dump calibration for debugging
181  * @measure_offsets: function pointer to measure the offsets
182  * @power_on: function pointer to power-on procedure
183  *
184  * The "t_ref" value for YAS532/533 is known from the Android driver.
185  * For YAS530 and YAS537 it was approximately measured.
186  *
187  * The temperatures "min_temp_x10" are derived from the temperature resolutions
188  * given in the data sheets.
189  */
190 struct yas5xx_chip_info {
191 	unsigned int devid;
192 	const char *product_name;
193 	const char *version_names[2];
194 	const int *volatile_reg;
195 	int volatile_reg_qty;
196 	u32 scaling_val2;
197 	u16 t_ref;
198 	s16 min_temp_x10;
199 	int (*get_measure)(struct yas5xx *yas5xx, s32 *to, s32 *xo, s32 *yo, s32 *zo);
200 	int (*get_calibration_data)(struct yas5xx *yas5xx);
201 	void (*dump_calibration)(struct yas5xx *yas5xx);
202 	int (*measure_offsets)(struct yas5xx *yas5xx);
203 	int (*power_on)(struct yas5xx *yas5xx);
204 };
205 
206 /**
207  * struct yas5xx - state container for the YAS5xx driver
208  * @dev: parent device pointer
209  * @chip_info: device-specific data and function pointers
210  * @version: device version
211  * @calibration: calibration settings from the OTP storage
212  * @hard_offsets: offsets for each axis measured with initcoil actuated
213  * @orientation: mounting matrix, flipped axis etc
214  * @map: regmap to access the YAX5xx registers over I2C
215  * @regs: the vdd and vddio power regulators
216  * @reset: optional GPIO line used for handling RESET
217  * @lock: locks the magnetometer for exclusive use during a measurement (which
218  * involves several register transactions so the regmap lock is not enough)
219  * so that measurements get serialized in a first-come-first serve manner
220  * @scan: naturally aligned measurements
221  */
222 struct yas5xx {
223 	struct device *dev;
224 	const struct yas5xx_chip_info *chip_info;
225 	unsigned int version;
226 	struct yas5xx_calibration calibration;
227 	s8 hard_offsets[3];
228 	struct iio_mount_matrix orientation;
229 	struct regmap *map;
230 	struct regulator_bulk_data regs[2];
231 	struct gpio_desc *reset;
232 	struct mutex lock;
233 	/*
234 	 * The scanout is 4 x 32 bits in CPU endianness.
235 	 * Ensure timestamp is naturally aligned
236 	 */
237 	struct {
238 		s32 channels[4];
239 		s64 ts __aligned(8);
240 	} scan;
241 };
242 
243 /* On YAS530 the x, y1 and y2 values are 12 bits */
yas530_extract_axis(u8 * data)244 static u16 yas530_extract_axis(u8 *data)
245 {
246 	u16 val;
247 
248 	/*
249 	 * These are the bits used in a 16bit word:
250 	 * 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
251 	 *    x  x  x  x  x  x  x  x  x  x  x  x
252 	 */
253 	val = get_unaligned_be16(&data[0]);
254 	val = FIELD_GET(GENMASK(14, 3), val);
255 	return val;
256 }
257 
258 /* On YAS532 the x, y1 and y2 values are 13 bits */
yas532_extract_axis(u8 * data)259 static u16 yas532_extract_axis(u8 *data)
260 {
261 	u16 val;
262 
263 	/*
264 	 * These are the bits used in a 16bit word:
265 	 * 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
266 	 *    x  x  x  x  x  x  x  x  x  x  x  x  x
267 	 */
268 	val = get_unaligned_be16(&data[0]);
269 	val = FIELD_GET(GENMASK(14, 2), val);
270 	return val;
271 }
272 
273 /**
274  * yas530_measure() - Make a measure from the hardware
275  * @yas5xx: The device state
276  * @t: the raw temperature measurement
277  * @x: the raw x axis measurement
278  * @y1: the y1 axis measurement
279  * @y2: the y2 axis measurement
280  * @return: 0 on success or error code
281  *
282  * Used by YAS530, YAS532 and YAS533.
283  */
yas530_measure(struct yas5xx * yas5xx,u16 * t,u16 * x,u16 * y1,u16 * y2)284 static int yas530_measure(struct yas5xx *yas5xx, u16 *t, u16 *x, u16 *y1, u16 *y2)
285 {
286 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
287 	unsigned int busy;
288 	u8 data[8];
289 	int ret;
290 	u16 val;
291 
292 	mutex_lock(&yas5xx->lock);
293 	ret = regmap_write(yas5xx->map, YAS530_MEASURE, YAS5XX_MEASURE_START);
294 	if (ret < 0)
295 		goto out_unlock;
296 
297 	/*
298 	 * Typical time to measure 1500 us, max 2000 us so wait min 500 us
299 	 * and at most 20000 us (one magnitude more than the datsheet max)
300 	 * before timeout.
301 	 */
302 	ret = regmap_read_poll_timeout(yas5xx->map, YAS5XX_MEASURE_DATA, busy,
303 				       !(busy & YAS5XX_MEASURE_DATA_BUSY),
304 				       500, 20000);
305 	if (ret) {
306 		dev_err(yas5xx->dev, "timeout waiting for measurement\n");
307 		goto out_unlock;
308 	}
309 
310 	ret = regmap_bulk_read(yas5xx->map, YAS5XX_MEASURE_DATA,
311 			       data, sizeof(data));
312 	if (ret)
313 		goto out_unlock;
314 
315 	mutex_unlock(&yas5xx->lock);
316 
317 	switch (ci->devid) {
318 	case YAS530_DEVICE_ID:
319 		/*
320 		 * The t value is 9 bits in big endian format
321 		 * These are the bits used in a 16bit word:
322 		 * 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
323 		 *    x  x  x  x  x  x  x  x  x
324 		 */
325 		val = get_unaligned_be16(&data[0]);
326 		val = FIELD_GET(GENMASK(14, 6), val);
327 		*t = val;
328 		*x = yas530_extract_axis(&data[2]);
329 		*y1 = yas530_extract_axis(&data[4]);
330 		*y2 = yas530_extract_axis(&data[6]);
331 		break;
332 	case YAS532_DEVICE_ID:
333 		/*
334 		 * The t value is 10 bits in big endian format
335 		 * These are the bits used in a 16bit word:
336 		 * 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
337 		 *    x  x  x  x  x  x  x  x  x  x
338 		 */
339 		val = get_unaligned_be16(&data[0]);
340 		val = FIELD_GET(GENMASK(14, 5), val);
341 		*t = val;
342 		*x = yas532_extract_axis(&data[2]);
343 		*y1 = yas532_extract_axis(&data[4]);
344 		*y2 = yas532_extract_axis(&data[6]);
345 		break;
346 	default:
347 		dev_err(yas5xx->dev, "unknown data format\n");
348 		ret = -EINVAL;
349 		break;
350 	}
351 
352 	return ret;
353 
354 out_unlock:
355 	mutex_unlock(&yas5xx->lock);
356 	return ret;
357 }
358 
359 /**
360  * yas537_measure() - Make a measure from the hardware
361  * @yas5xx: The device state
362  * @t: the raw temperature measurement
363  * @x: the raw x axis measurement
364  * @y1: the y1 axis measurement
365  * @y2: the y2 axis measurement
366  * @return: 0 on success or error code
367  */
yas537_measure(struct yas5xx * yas5xx,u16 * t,u16 * x,u16 * y1,u16 * y2)368 static int yas537_measure(struct yas5xx *yas5xx, u16 *t, u16 *x, u16 *y1, u16 *y2)
369 {
370 	struct yas5xx_calibration *c = &yas5xx->calibration;
371 	unsigned int busy;
372 	u8 data[8];
373 	u16 xy1y2[3];
374 	s32 h[3], s[3];
375 	int half_range = BIT(13);
376 	int i, ret;
377 
378 	mutex_lock(&yas5xx->lock);
379 
380 	/* Contrary to YAS530/532, also a "cont" bit is set, meaning unknown */
381 	ret = regmap_write(yas5xx->map, YAS537_MEASURE, YAS5XX_MEASURE_START |
382 			   YAS5XX_MEASURE_CONT);
383 	if (ret < 0)
384 		goto out_unlock;
385 
386 	/* Use same timeout like YAS530/532 but the bit is in data row 2 */
387 	ret = regmap_read_poll_timeout(yas5xx->map, YAS5XX_MEASURE_DATA + 2, busy,
388 				       !(busy & YAS5XX_MEASURE_DATA_BUSY),
389 				       500, 20000);
390 	if (ret) {
391 		dev_err(yas5xx->dev, "timeout waiting for measurement\n");
392 		goto out_unlock;
393 	}
394 
395 	ret = regmap_bulk_read(yas5xx->map, YAS5XX_MEASURE_DATA,
396 			       data, sizeof(data));
397 	if (ret)
398 		goto out_unlock;
399 
400 	mutex_unlock(&yas5xx->lock);
401 
402 	*t = get_unaligned_be16(&data[0]);
403 	xy1y2[0] = FIELD_GET(GENMASK(13, 0), get_unaligned_be16(&data[2]));
404 	xy1y2[1] = get_unaligned_be16(&data[4]);
405 	xy1y2[2] = get_unaligned_be16(&data[6]);
406 
407 	/* The second version of YAS537 needs to include calibration coefficients */
408 	if (yas5xx->version == YAS537_VERSION_1) {
409 		for (i = 0; i < 3; i++)
410 			s[i] = xy1y2[i] - half_range;
411 		h[0] = (c->k *   (128 * s[0] + c->a2 * s[1] + c->a3 * s[2])) / half_range;
412 		h[1] = (c->k * (c->a4 * s[0] + c->a5 * s[1] + c->a6 * s[2])) / half_range;
413 		h[2] = (c->k * (c->a7 * s[0] + c->a8 * s[1] + c->a9 * s[2])) / half_range;
414 		for (i = 0; i < 3; i++) {
415 			h[i] = clamp(h[i], -half_range, half_range - 1);
416 			xy1y2[i] = h[i] + half_range;
417 		}
418 	}
419 
420 	*x = xy1y2[0];
421 	*y1 = xy1y2[1];
422 	*y2 = xy1y2[2];
423 
424 	return 0;
425 
426 out_unlock:
427 	mutex_unlock(&yas5xx->lock);
428 	return ret;
429 }
430 
431 /* Used by YAS530, YAS532 and YAS533 */
yas530_linearize(struct yas5xx * yas5xx,u16 val,int axis)432 static s32 yas530_linearize(struct yas5xx *yas5xx, u16 val, int axis)
433 {
434 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
435 	struct yas5xx_calibration *c = &yas5xx->calibration;
436 	static const s32 yas532ac_coef[] = {
437 		YAS532_VERSION_AC_COEF_X,
438 		YAS532_VERSION_AC_COEF_Y1,
439 		YAS532_VERSION_AC_COEF_Y2,
440 	};
441 	s32 coef;
442 
443 	/* Select coefficients */
444 	switch (ci->devid) {
445 	case YAS530_DEVICE_ID:
446 		if (yas5xx->version == YAS530_VERSION_A)
447 			coef = YAS530_VERSION_A_COEF;
448 		else
449 			coef = YAS530_VERSION_B_COEF;
450 		break;
451 	case YAS532_DEVICE_ID:
452 		if (yas5xx->version == YAS532_VERSION_AB)
453 			coef = YAS532_VERSION_AB_COEF;
454 		else
455 			/* Elaborate coefficients */
456 			coef = yas532ac_coef[axis];
457 		break;
458 	default:
459 		dev_err(yas5xx->dev, "unknown device type\n");
460 		return val;
461 	}
462 	/*
463 	 * Linearization formula:
464 	 *
465 	 * x' = x - (3721 + 50 * f) + (xoffset - r) * c
466 	 *
467 	 * Where f and r are calibration values, c is a per-device
468 	 * and sometimes per-axis coefficient.
469 	 */
470 	return val - (3721 + 50 * c->f[axis]) +
471 		(yas5xx->hard_offsets[axis] - c->r[axis]) * coef;
472 }
473 
yas5xx_calc_temperature(struct yas5xx * yas5xx,u16 t)474 static s32 yas5xx_calc_temperature(struct yas5xx *yas5xx, u16 t)
475 {
476 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
477 	s32 to;
478 	u16 t_ref;
479 	s16 min_temp_x10;
480 	int ref_temp_x10;
481 
482 	t_ref = ci->t_ref;
483 	min_temp_x10 = ci->min_temp_x10;
484 	ref_temp_x10 = 200;
485 
486 	to = (min_temp_x10 + ((ref_temp_x10 - min_temp_x10) * t / t_ref)) * 100;
487 	return to;
488 }
489 
490 /**
491  * yas530_get_measure() - Measure a sample of all axis and process
492  * @yas5xx: The device state
493  * @to: Temperature out
494  * @xo: X axis out
495  * @yo: Y axis out
496  * @zo: Z axis out
497  * @return: 0 on success or error code
498  *
499  * Used by YAS530, YAS532 and YAS533.
500  */
yas530_get_measure(struct yas5xx * yas5xx,s32 * to,s32 * xo,s32 * yo,s32 * zo)501 static int yas530_get_measure(struct yas5xx *yas5xx, s32 *to, s32 *xo, s32 *yo, s32 *zo)
502 {
503 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
504 	struct yas5xx_calibration *c = &yas5xx->calibration;
505 	u16 t_ref, t_comp, t, x, y1, y2;
506 	/* These are signed x, signed y1 etc */
507 	s32 sx, sy1, sy2, sy, sz;
508 	int ret;
509 
510 	/* We first get raw data that needs to be translated to [x,y,z] */
511 	ret = yas530_measure(yas5xx, &t, &x, &y1, &y2);
512 	if (ret)
513 		return ret;
514 
515 	/* Do some linearization if available */
516 	sx = yas530_linearize(yas5xx, x, 0);
517 	sy1 = yas530_linearize(yas5xx, y1, 1);
518 	sy2 = yas530_linearize(yas5xx, y2, 2);
519 
520 	/*
521 	 * Set the temperature for compensation (unit: counts):
522 	 * YAS532/YAS533 version AC uses the temperature deviation as a
523 	 * multiplier. YAS530 and YAS532 version AB use solely the t value.
524 	 */
525 	t_ref = ci->t_ref;
526 	if (ci->devid == YAS532_DEVICE_ID &&
527 	    yas5xx->version == YAS532_VERSION_AC) {
528 		t_comp = t - t_ref;
529 	} else {
530 		t_comp = t;
531 	}
532 
533 	/*
534 	 * Temperature compensation for x, y1, y2 respectively:
535 	 *
536 	 *          Cx * t_comp
537 	 * x' = x - -----------
538 	 *              100
539 	 */
540 	sx = sx - (c->Cx * t_comp) / 100;
541 	sy1 = sy1 - (c->Cy1 * t_comp) / 100;
542 	sy2 = sy2 - (c->Cy2 * t_comp) / 100;
543 
544 	/*
545 	 * Break y1 and y2 into y and z, y1 and y2 are apparently encoding
546 	 * y and z.
547 	 */
548 	sy = sy1 - sy2;
549 	sz = -sy1 - sy2;
550 
551 	/* Calculate temperature readout */
552 	*to = yas5xx_calc_temperature(yas5xx, t);
553 
554 	/*
555 	 * Calibrate [x,y,z] with some formulas like this:
556 	 *
557 	 *            100 * x + a_2 * y + a_3 * z
558 	 *  x' = k *  ---------------------------
559 	 *                        10
560 	 *
561 	 *           a_4 * x + a_5 * y + a_6 * z
562 	 *  y' = k * ---------------------------
563 	 *                        10
564 	 *
565 	 *           a_7 * x + a_8 * y + a_9 * z
566 	 *  z' = k * ---------------------------
567 	 *                        10
568 	 */
569 	*xo = c->k * ((100 * sx + c->a2 * sy + c->a3 * sz) / 10);
570 	*yo = c->k * ((c->a4 * sx + c->a5 * sy + c->a6 * sz) / 10);
571 	*zo = c->k * ((c->a7 * sx + c->a8 * sy + c->a9 * sz) / 10);
572 
573 	return 0;
574 }
575 
576 /**
577  * yas537_get_measure() - Measure a sample of all axis and process
578  * @yas5xx: The device state
579  * @to: Temperature out
580  * @xo: X axis out
581  * @yo: Y axis out
582  * @zo: Z axis out
583  * @return: 0 on success or error code
584  */
yas537_get_measure(struct yas5xx * yas5xx,s32 * to,s32 * xo,s32 * yo,s32 * zo)585 static int yas537_get_measure(struct yas5xx *yas5xx, s32 *to, s32 *xo, s32 *yo, s32 *zo)
586 {
587 	u16 t, x, y1, y2;
588 	int ret;
589 
590 	/* We first get raw data that needs to be translated to [x,y,z] */
591 	ret = yas537_measure(yas5xx, &t, &x, &y1, &y2);
592 	if (ret)
593 		return ret;
594 
595 	/* Calculate temperature readout */
596 	*to = yas5xx_calc_temperature(yas5xx, t);
597 
598 	/*
599 	 * Unfortunately, no linearization or temperature compensation formulas
600 	 * are known for YAS537.
601 	 */
602 
603 	/* Calculate x, y, z from x, y1, y2 */
604 	*xo = (x - BIT(13)) * 300;
605 	*yo = (y1 - y2) * 1732 / 10;
606 	*zo = (-y1 - y2 + BIT(14)) * 300;
607 
608 	return 0;
609 }
610 
yas5xx_read_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val,int * val2,long mask)611 static int yas5xx_read_raw(struct iio_dev *indio_dev,
612 			   struct iio_chan_spec const *chan,
613 			   int *val, int *val2,
614 			   long mask)
615 {
616 	struct yas5xx *yas5xx = iio_priv(indio_dev);
617 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
618 	s32 t, x, y, z;
619 	int ret;
620 
621 	switch (mask) {
622 	case IIO_CHAN_INFO_PROCESSED:
623 	case IIO_CHAN_INFO_RAW:
624 		pm_runtime_get_sync(yas5xx->dev);
625 		ret = ci->get_measure(yas5xx, &t, &x, &y, &z);
626 		pm_runtime_mark_last_busy(yas5xx->dev);
627 		pm_runtime_put_autosuspend(yas5xx->dev);
628 		if (ret)
629 			return ret;
630 		switch (chan->address) {
631 		case 0:
632 			*val = t;
633 			break;
634 		case 1:
635 			*val = x;
636 			break;
637 		case 2:
638 			*val = y;
639 			break;
640 		case 3:
641 			*val = z;
642 			break;
643 		default:
644 			dev_err(yas5xx->dev, "unknown channel\n");
645 			return -EINVAL;
646 		}
647 		return IIO_VAL_INT;
648 	case IIO_CHAN_INFO_SCALE:
649 		*val = 1;
650 		*val2 = ci->scaling_val2;
651 		return IIO_VAL_FRACTIONAL;
652 	default:
653 		/* Unknown request */
654 		return -EINVAL;
655 	}
656 }
657 
yas5xx_fill_buffer(struct iio_dev * indio_dev)658 static void yas5xx_fill_buffer(struct iio_dev *indio_dev)
659 {
660 	struct yas5xx *yas5xx = iio_priv(indio_dev);
661 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
662 	s32 t, x, y, z;
663 	int ret;
664 
665 	pm_runtime_get_sync(yas5xx->dev);
666 	ret = ci->get_measure(yas5xx, &t, &x, &y, &z);
667 	pm_runtime_mark_last_busy(yas5xx->dev);
668 	pm_runtime_put_autosuspend(yas5xx->dev);
669 	if (ret) {
670 		dev_err(yas5xx->dev, "error refilling buffer\n");
671 		return;
672 	}
673 	yas5xx->scan.channels[0] = t;
674 	yas5xx->scan.channels[1] = x;
675 	yas5xx->scan.channels[2] = y;
676 	yas5xx->scan.channels[3] = z;
677 	iio_push_to_buffers_with_timestamp(indio_dev, &yas5xx->scan,
678 					   iio_get_time_ns(indio_dev));
679 }
680 
yas5xx_handle_trigger(int irq,void * p)681 static irqreturn_t yas5xx_handle_trigger(int irq, void *p)
682 {
683 	const struct iio_poll_func *pf = p;
684 	struct iio_dev *indio_dev = pf->indio_dev;
685 
686 	yas5xx_fill_buffer(indio_dev);
687 	iio_trigger_notify_done(indio_dev->trig);
688 
689 	return IRQ_HANDLED;
690 }
691 
692 
693 static const struct iio_mount_matrix *
yas5xx_get_mount_matrix(const struct iio_dev * indio_dev,const struct iio_chan_spec * chan)694 yas5xx_get_mount_matrix(const struct iio_dev *indio_dev,
695 			const struct iio_chan_spec *chan)
696 {
697 	struct yas5xx *yas5xx = iio_priv(indio_dev);
698 
699 	return &yas5xx->orientation;
700 }
701 
702 static const struct iio_chan_spec_ext_info yas5xx_ext_info[] = {
703 	IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, yas5xx_get_mount_matrix),
704 	{ }
705 };
706 
707 #define YAS5XX_AXIS_CHANNEL(axis, index)				\
708 	{								\
709 		.type = IIO_MAGN,					\
710 		.modified = 1,						\
711 		.channel2 = IIO_MOD_##axis,				\
712 		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |		\
713 			BIT(IIO_CHAN_INFO_SCALE),			\
714 		.ext_info = yas5xx_ext_info,				\
715 		.address = index,					\
716 		.scan_index = index,					\
717 		.scan_type = {						\
718 			.sign = 's',					\
719 			.realbits = 32,					\
720 			.storagebits = 32,				\
721 			.endianness = IIO_CPU,				\
722 		},							\
723 	}
724 
725 static const struct iio_chan_spec yas5xx_channels[] = {
726 	{
727 		.type = IIO_TEMP,
728 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
729 		.address = 0,
730 		.scan_index = 0,
731 		.scan_type = {
732 			.sign = 's',
733 			.realbits = 32,
734 			.storagebits = 32,
735 			.endianness = IIO_CPU,
736 		},
737 	},
738 	YAS5XX_AXIS_CHANNEL(X, 1),
739 	YAS5XX_AXIS_CHANNEL(Y, 2),
740 	YAS5XX_AXIS_CHANNEL(Z, 3),
741 	IIO_CHAN_SOFT_TIMESTAMP(4),
742 };
743 
744 static const unsigned long yas5xx_scan_masks[] = { GENMASK(3, 0), 0 };
745 
746 static const struct iio_info yas5xx_info = {
747 	.read_raw = &yas5xx_read_raw,
748 };
749 
yas5xx_volatile_reg(struct device * dev,unsigned int reg)750 static bool yas5xx_volatile_reg(struct device *dev, unsigned int reg)
751 {
752 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
753 	struct yas5xx *yas5xx = iio_priv(indio_dev);
754 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
755 	int reg_qty;
756 	int i;
757 
758 	if (reg >= YAS5XX_MEASURE_DATA && reg < YAS5XX_MEASURE_DATA + 8)
759 		return true;
760 
761 	/*
762 	 * YAS versions share different registers on the same address,
763 	 * need to differentiate.
764 	 */
765 	reg_qty = ci->volatile_reg_qty;
766 	for (i = 0; i < reg_qty; i++) {
767 		if (reg == ci->volatile_reg[i])
768 			return true;
769 	}
770 
771 	return false;
772 }
773 
774 /* TODO: enable regmap cache, using mark dirty and sync at runtime resume */
775 static const struct regmap_config yas5xx_regmap_config = {
776 	.reg_bits = 8,
777 	.val_bits = 8,
778 	.max_register = 0xff,
779 	.volatile_reg = yas5xx_volatile_reg,
780 };
781 
782 /**
783  * yas530_extract_calibration() - extracts the a2-a9 and k calibration
784  * @data: the bitfield to use
785  * @c: the calibration to populate
786  *
787  * Used by YAS530, YAS532 and YAS533.
788  */
yas530_extract_calibration(u8 * data,struct yas5xx_calibration * c)789 static void yas530_extract_calibration(u8 *data, struct yas5xx_calibration *c)
790 {
791 	u64 val = get_unaligned_be64(data);
792 
793 	/*
794 	 * Bitfield layout for the axis calibration data, for factor
795 	 * a2 = 2 etc, k = k, c = clock divider
796 	 *
797 	 * n   7 6 5 4 3 2 1 0
798 	 * 0 [ 2 2 2 2 2 2 3 3 ] bits 63 .. 56
799 	 * 1 [ 3 3 4 4 4 4 4 4 ] bits 55 .. 48
800 	 * 2 [ 5 5 5 5 5 5 6 6 ] bits 47 .. 40
801 	 * 3 [ 6 6 6 6 7 7 7 7 ] bits 39 .. 32
802 	 * 4 [ 7 7 7 8 8 8 8 8 ] bits 31 .. 24
803 	 * 5 [ 8 9 9 9 9 9 9 9 ] bits 23 .. 16
804 	 * 6 [ 9 k k k k k c c ] bits 15 .. 8
805 	 * 7 [ c x x x x x x x ] bits  7 .. 0
806 	 */
807 	c->a2 = FIELD_GET(GENMASK_ULL(63, 58), val) - 32;
808 	c->a3 = FIELD_GET(GENMASK_ULL(57, 54), val) - 8;
809 	c->a4 = FIELD_GET(GENMASK_ULL(53, 48), val) - 32;
810 	c->a5 = FIELD_GET(GENMASK_ULL(47, 42), val) + 38;
811 	c->a6 = FIELD_GET(GENMASK_ULL(41, 36), val) - 32;
812 	c->a7 = FIELD_GET(GENMASK_ULL(35, 29), val) - 64;
813 	c->a8 = FIELD_GET(GENMASK_ULL(28, 23), val) - 32;
814 	c->a9 = FIELD_GET(GENMASK_ULL(22, 15), val);
815 	c->k = FIELD_GET(GENMASK_ULL(14, 10), val) + 10;
816 	c->dck = FIELD_GET(GENMASK_ULL(9, 7), val);
817 }
818 
yas530_get_calibration_data(struct yas5xx * yas5xx)819 static int yas530_get_calibration_data(struct yas5xx *yas5xx)
820 {
821 	struct yas5xx_calibration *c = &yas5xx->calibration;
822 	u8 data[16];
823 	u32 val;
824 	int ret;
825 
826 	/* Dummy read, first read is ALWAYS wrong */
827 	ret = regmap_bulk_read(yas5xx->map, YAS530_CAL, data, sizeof(data));
828 	if (ret)
829 		return ret;
830 
831 	/* Actual calibration readout */
832 	ret = regmap_bulk_read(yas5xx->map, YAS530_CAL, data, sizeof(data));
833 	if (ret)
834 		return ret;
835 	dev_dbg(yas5xx->dev, "calibration data: %16ph\n", data);
836 
837 	/* Contribute calibration data to the input pool for kernel entropy */
838 	add_device_randomness(data, sizeof(data));
839 
840 	/* Extract version */
841 	yas5xx->version = data[15] & GENMASK(1, 0);
842 
843 	/* Extract the calibration from the bitfield */
844 	c->Cx = data[0] * 6 - 768;
845 	c->Cy1 = data[1] * 6 - 768;
846 	c->Cy2 = data[2] * 6 - 768;
847 	yas530_extract_calibration(&data[3], c);
848 
849 	/*
850 	 * Extract linearization:
851 	 * Linearization layout in the 32 bits at byte 11:
852 	 * The r factors are 6 bit values where bit 5 is the sign
853 	 *
854 	 * n    7  6  5  4  3  2  1  0
855 	 * 0 [ xx xx xx r0 r0 r0 r0 r0 ] bits 31 .. 24
856 	 * 1 [ r0 f0 f0 r1 r1 r1 r1 r1 ] bits 23 .. 16
857 	 * 2 [ r1 f1 f1 r2 r2 r2 r2 r2 ] bits 15 .. 8
858 	 * 3 [ r2 f2 f2 xx xx xx xx xx ] bits  7 .. 0
859 	 */
860 	val = get_unaligned_be32(&data[11]);
861 	c->f[0] = FIELD_GET(GENMASK(22, 21), val);
862 	c->f[1] = FIELD_GET(GENMASK(14, 13), val);
863 	c->f[2] = FIELD_GET(GENMASK(6, 5), val);
864 	c->r[0] = sign_extend32(FIELD_GET(GENMASK(28, 23), val), 5);
865 	c->r[1] = sign_extend32(FIELD_GET(GENMASK(20, 15), val), 5);
866 	c->r[2] = sign_extend32(FIELD_GET(GENMASK(12, 7), val), 5);
867 
868 	return 0;
869 }
870 
yas532_get_calibration_data(struct yas5xx * yas5xx)871 static int yas532_get_calibration_data(struct yas5xx *yas5xx)
872 {
873 	struct yas5xx_calibration *c = &yas5xx->calibration;
874 	u8 data[14];
875 	u32 val;
876 	int ret;
877 
878 	/* Dummy read, first read is ALWAYS wrong */
879 	ret = regmap_bulk_read(yas5xx->map, YAS530_CAL, data, sizeof(data));
880 	if (ret)
881 		return ret;
882 	/* Actual calibration readout */
883 	ret = regmap_bulk_read(yas5xx->map, YAS530_CAL, data, sizeof(data));
884 	if (ret)
885 		return ret;
886 	dev_dbg(yas5xx->dev, "calibration data: %14ph\n", data);
887 
888 	/* Sanity check, is this all zeroes? */
889 	if (!memchr_inv(data, 0x00, 13) && !(data[13] & BIT(7)))
890 		dev_warn(yas5xx->dev, "calibration is blank!\n");
891 
892 	/* Contribute calibration data to the input pool for kernel entropy */
893 	add_device_randomness(data, sizeof(data));
894 
895 	/* Only one bit of version info reserved here as far as we know */
896 	yas5xx->version = data[13] & BIT(0);
897 
898 	/* Extract calibration from the bitfield */
899 	c->Cx = data[0] * 10 - 1280;
900 	c->Cy1 = data[1] * 10 - 1280;
901 	c->Cy2 = data[2] * 10 - 1280;
902 	yas530_extract_calibration(&data[3], c);
903 
904 	/*
905 	 * Extract linearization:
906 	 * Linearization layout in the 32 bits at byte 10:
907 	 * The r factors are 6 bit values where bit 5 is the sign
908 	 *
909 	 * n    7  6  5  4  3  2  1  0
910 	 * 0 [ xx r0 r0 r0 r0 r0 r0 f0 ] bits 31 .. 24
911 	 * 1 [ f0 r1 r1 r1 r1 r1 r1 f1 ] bits 23 .. 16
912 	 * 2 [ f1 r2 r2 r2 r2 r2 r2 f2 ] bits 15 .. 8
913 	 * 3 [ f2 xx xx xx xx xx xx xx ] bits  7 .. 0
914 	 */
915 	val = get_unaligned_be32(&data[10]);
916 	c->f[0] = FIELD_GET(GENMASK(24, 23), val);
917 	c->f[1] = FIELD_GET(GENMASK(16, 15), val);
918 	c->f[2] = FIELD_GET(GENMASK(8, 7), val);
919 	c->r[0] = sign_extend32(FIELD_GET(GENMASK(30, 25), val), 5);
920 	c->r[1] = sign_extend32(FIELD_GET(GENMASK(22, 17), val), 5);
921 	c->r[2] = sign_extend32(FIELD_GET(GENMASK(14, 7), val), 5);
922 
923 	return 0;
924 }
925 
yas537_get_calibration_data(struct yas5xx * yas5xx)926 static int yas537_get_calibration_data(struct yas5xx *yas5xx)
927 {
928 	struct yas5xx_calibration *c = &yas5xx->calibration;
929 	u8 data[17];
930 	u32 val1, val2, val3, val4;
931 	int i, ret;
932 
933 	/* Writing SRST register */
934 	ret = regmap_write(yas5xx->map, YAS537_SRST, BIT(1));
935 	if (ret)
936 		return ret;
937 
938 	/* Calibration readout, YAS537 needs one readout only */
939 	ret = regmap_bulk_read(yas5xx->map, YAS537_CAL, data, sizeof(data));
940 	if (ret)
941 		return ret;
942 	dev_dbg(yas5xx->dev, "calibration data: %17ph\n", data);
943 
944 	/* Sanity check, is this all zeroes? */
945 	if (!memchr_inv(data, 0x00, 16) && !FIELD_GET(GENMASK(5, 0), data[16]))
946 		dev_warn(yas5xx->dev, "calibration is blank!\n");
947 
948 	/* Contribute calibration data to the input pool for kernel entropy */
949 	add_device_randomness(data, sizeof(data));
950 
951 	/* Extract version information */
952 	yas5xx->version = FIELD_GET(GENMASK(7, 6), data[16]);
953 
954 	/* There are two versions of YAS537 behaving differently */
955 	switch (yas5xx->version) {
956 	case YAS537_VERSION_0:
957 		/*
958 		 * The first version simply writes data back into registers:
959 		 *
960 		 * data[0]  YAS537_MTC		0x93
961 		 * data[1]			0x94
962 		 * data[2]			0x95
963 		 * data[3]			0x96
964 		 * data[4]			0x97
965 		 * data[5]			0x98
966 		 * data[6]			0x99
967 		 * data[7]			0x9a
968 		 * data[8]			0x9b
969 		 * data[9]			0x9c
970 		 * data[10]			0x9d
971 		 * data[11] YAS537_OC		0x9e
972 		 *
973 		 * data[12] YAS537_OFFSET_X	0x84
974 		 * data[13] YAS537_OFFSET_Y1	0x85
975 		 * data[14] YAS537_OFFSET_Y2	0x86
976 		 *
977 		 * data[15] YAS537_HCK		0x88
978 		 * data[16] YAS537_LCK		0x89
979 		 */
980 		for (i = 0; i < 12; i++) {
981 			ret = regmap_write(yas5xx->map, YAS537_MTC + i,
982 					   data[i]);
983 			if (ret)
984 				return ret;
985 		}
986 		for (i = 0; i < 3; i++) {
987 			ret = regmap_write(yas5xx->map, YAS537_OFFSET_X + i,
988 					   data[i + 12]);
989 			if (ret)
990 				return ret;
991 			yas5xx->hard_offsets[i] = data[i + 12];
992 		}
993 		for (i = 0; i < 2; i++) {
994 			ret = regmap_write(yas5xx->map, YAS537_HCK + i,
995 					   data[i + 15]);
996 			if (ret)
997 				return ret;
998 		}
999 		break;
1000 	case YAS537_VERSION_1:
1001 		/*
1002 		 * The second version writes some data into registers but also
1003 		 * extracts calibration coefficients.
1004 		 *
1005 		 * Registers being written:
1006 		 *
1007 		 * data[0]  YAS537_MTC			0x93
1008 		 * data[1]  YAS537_MTC+1		0x94
1009 		 * data[2]  YAS537_MTC+2		0x95
1010 		 * data[3]  YAS537_MTC+3 (partially)	0x96
1011 		 *
1012 		 * data[12] YAS537_OFFSET_X		0x84
1013 		 * data[13] YAS537_OFFSET_Y1		0x85
1014 		 * data[14] YAS537_OFFSET_Y2		0x86
1015 		 *
1016 		 * data[15] YAS537_HCK (partially)	0x88
1017 		 *          YAS537_LCK (partially)	0x89
1018 		 * data[16] YAS537_OC  (partially)	0x9e
1019 		 */
1020 		for (i = 0; i < 3; i++) {
1021 			ret = regmap_write(yas5xx->map, YAS537_MTC + i,
1022 					   data[i]);
1023 			if (ret)
1024 				return ret;
1025 		}
1026 		for (i = 0; i < 3; i++) {
1027 			ret = regmap_write(yas5xx->map, YAS537_OFFSET_X + i,
1028 					   data[i + 12]);
1029 			if (ret)
1030 				return ret;
1031 			yas5xx->hard_offsets[i] = data[i + 12];
1032 		}
1033 		/*
1034 		 * Visualization of partially taken data:
1035 		 *
1036 		 * data[3]       n 7 6 5 4 3 2 1 0
1037 		 * YAS537_MTC+3    x x x 1 0 0 0 0
1038 		 *
1039 		 * data[15]      n 7 6 5 4 3 2 1 0
1040 		 * YAS537_HCK      x x x x 0
1041 		 *
1042 		 * data[15]      n 7 6 5 4 3 2 1 0
1043 		 * YAS537_LCK              x x x x 0
1044 		 *
1045 		 * data[16]      n 7 6 5 4 3 2 1 0
1046 		 * YAS537_OC           x x x x x x
1047 		 */
1048 		ret = regmap_write(yas5xx->map, YAS537_MTC + 3,
1049 				   FIELD_PREP(YAS537_MTC3_MASK_PREP,
1050 				   FIELD_GET(YAS537_MTC3_MASK_GET, data[3])) |
1051 				   YAS537_MTC3_ADD_BIT);
1052 		if (ret)
1053 			return ret;
1054 		ret = regmap_write(yas5xx->map, YAS537_HCK,
1055 				   FIELD_PREP(YAS537_HCK_MASK_PREP,
1056 				   FIELD_GET(YAS537_HCK_MASK_GET, data[15])));
1057 		if (ret)
1058 			return ret;
1059 		ret = regmap_write(yas5xx->map, YAS537_LCK,
1060 				   FIELD_PREP(YAS537_LCK_MASK_PREP,
1061 				   FIELD_GET(YAS537_LCK_MASK_GET, data[15])));
1062 		if (ret)
1063 			return ret;
1064 		ret = regmap_write(yas5xx->map, YAS537_OC,
1065 				   FIELD_GET(YAS537_OC_MASK_GET, data[16]));
1066 		if (ret)
1067 			return ret;
1068 		/*
1069 		 * For data extraction, build some blocks. Four 32-bit blocks
1070 		 * look appropriate.
1071 		 *
1072 		 *            n    7  6  5  4  3  2  1  0
1073 		 *  data[0]   0 [ Cx Cx Cx Cx Cx Cx Cx Cx ] bits 31 .. 24
1074 		 *  data[1]   1 [ Cx C1 C1 C1 C1 C1 C1 C1 ] bits 23 .. 16
1075 		 *  data[2]   2 [ C1 C1 C2 C2 C2 C2 C2 C2 ] bits 15 .. 8
1076 		 *  data[3]   3 [ C2 C2 C2                ] bits  7 .. 0
1077 		 *
1078 		 *            n    7  6  5  4  3  2  1  0
1079 		 *  data[3]   0 [          a2 a2 a2 a2 a2 ] bits 31 .. 24
1080 		 *  data[4]   1 [ a2 a2 a3 a3 a3 a3 a3 a3 ] bits 23 .. 16
1081 		 *  data[5]   2 [ a3 a4 a4 a4 a4 a4 a4 a4 ] bits 15 .. 8
1082 		 *  data[6]   3 [ a4                      ] bits  7 .. 0
1083 		 *
1084 		 *            n    7  6  5  4  3  2  1  0
1085 		 *  data[6]   0 [    a5 a5 a5 a5 a5 a5 a5 ] bits 31 .. 24
1086 		 *  data[7]   1 [ a5 a5 a6 a6 a6 a6 a6 a6 ] bits 23 .. 16
1087 		 *  data[8]   2 [ a6 a7 a7 a7 a7 a7 a7 a7 ] bits 15 .. 8
1088 		 *  data[9]   3 [ a7                      ] bits  7 .. 0
1089 		 *
1090 		 *            n    7  6  5  4  3  2  1  0
1091 		 *  data[9]   0 [    a8 a8 a8 a8 a8 a8 a8 ] bits 31 .. 24
1092 		 *  data[10]  1 [ a9 a9 a9 a9 a9 a9 a9 a9 ] bits 23 .. 16
1093 		 *  data[11]  2 [ a9  k  k  k  k  k  k  k ] bits 15 .. 8
1094 		 *  data[12]  3 [                         ] bits  7 .. 0
1095 		 */
1096 		val1 = get_unaligned_be32(&data[0]);
1097 		val2 = get_unaligned_be32(&data[3]);
1098 		val3 = get_unaligned_be32(&data[6]);
1099 		val4 = get_unaligned_be32(&data[9]);
1100 		/* Extract calibration coefficients and modify */
1101 		c->Cx  = FIELD_GET(GENMASK(31, 23), val1) - 256;
1102 		c->Cy1 = FIELD_GET(GENMASK(22, 14), val1) - 256;
1103 		c->Cy2 = FIELD_GET(GENMASK(13,  5), val1) - 256;
1104 		c->a2  = FIELD_GET(GENMASK(28, 22), val2) -  64;
1105 		c->a3  = FIELD_GET(GENMASK(21, 15), val2) -  64;
1106 		c->a4  = FIELD_GET(GENMASK(14,  7), val2) - 128;
1107 		c->a5  = FIELD_GET(GENMASK(30, 22), val3) - 112;
1108 		c->a6  = FIELD_GET(GENMASK(21, 15), val3) -  64;
1109 		c->a7  = FIELD_GET(GENMASK(14,  7), val3) - 128;
1110 		c->a8  = FIELD_GET(GENMASK(30, 24), val4) -  64;
1111 		c->a9  = FIELD_GET(GENMASK(23, 15), val4) - 112;
1112 		c->k   = FIELD_GET(GENMASK(14,  8), val4);
1113 		break;
1114 	default:
1115 		dev_err(yas5xx->dev, "unknown version of YAS537\n");
1116 		return -EINVAL;
1117 	}
1118 
1119 	return 0;
1120 }
1121 
1122 /* Used by YAS530, YAS532 and YAS533 */
yas530_dump_calibration(struct yas5xx * yas5xx)1123 static void yas530_dump_calibration(struct yas5xx *yas5xx)
1124 {
1125 	struct yas5xx_calibration *c = &yas5xx->calibration;
1126 
1127 	dev_dbg(yas5xx->dev, "f[] = [%d, %d, %d]\n",
1128 		c->f[0], c->f[1], c->f[2]);
1129 	dev_dbg(yas5xx->dev, "r[] = [%d, %d, %d]\n",
1130 		c->r[0], c->r[1], c->r[2]);
1131 	dev_dbg(yas5xx->dev, "Cx = %d\n", c->Cx);
1132 	dev_dbg(yas5xx->dev, "Cy1 = %d\n", c->Cy1);
1133 	dev_dbg(yas5xx->dev, "Cy2 = %d\n", c->Cy2);
1134 	dev_dbg(yas5xx->dev, "a2 = %d\n", c->a2);
1135 	dev_dbg(yas5xx->dev, "a3 = %d\n", c->a3);
1136 	dev_dbg(yas5xx->dev, "a4 = %d\n", c->a4);
1137 	dev_dbg(yas5xx->dev, "a5 = %d\n", c->a5);
1138 	dev_dbg(yas5xx->dev, "a6 = %d\n", c->a6);
1139 	dev_dbg(yas5xx->dev, "a7 = %d\n", c->a7);
1140 	dev_dbg(yas5xx->dev, "a8 = %d\n", c->a8);
1141 	dev_dbg(yas5xx->dev, "a9 = %d\n", c->a9);
1142 	dev_dbg(yas5xx->dev, "k = %d\n", c->k);
1143 	dev_dbg(yas5xx->dev, "dck = %d\n", c->dck);
1144 }
1145 
yas537_dump_calibration(struct yas5xx * yas5xx)1146 static void yas537_dump_calibration(struct yas5xx *yas5xx)
1147 {
1148 	struct yas5xx_calibration *c = &yas5xx->calibration;
1149 
1150 	if (yas5xx->version == YAS537_VERSION_1) {
1151 		dev_dbg(yas5xx->dev, "Cx = %d\n", c->Cx);
1152 		dev_dbg(yas5xx->dev, "Cy1 = %d\n", c->Cy1);
1153 		dev_dbg(yas5xx->dev, "Cy2 = %d\n", c->Cy2);
1154 		dev_dbg(yas5xx->dev, "a2 = %d\n", c->a2);
1155 		dev_dbg(yas5xx->dev, "a3 = %d\n", c->a3);
1156 		dev_dbg(yas5xx->dev, "a4 = %d\n", c->a4);
1157 		dev_dbg(yas5xx->dev, "a5 = %d\n", c->a5);
1158 		dev_dbg(yas5xx->dev, "a6 = %d\n", c->a6);
1159 		dev_dbg(yas5xx->dev, "a7 = %d\n", c->a7);
1160 		dev_dbg(yas5xx->dev, "a8 = %d\n", c->a8);
1161 		dev_dbg(yas5xx->dev, "a9 = %d\n", c->a9);
1162 		dev_dbg(yas5xx->dev, "k = %d\n", c->k);
1163 	}
1164 }
1165 
1166 /* Used by YAS530, YAS532 and YAS533 */
yas530_set_offsets(struct yas5xx * yas5xx,s8 ox,s8 oy1,s8 oy2)1167 static int yas530_set_offsets(struct yas5xx *yas5xx, s8 ox, s8 oy1, s8 oy2)
1168 {
1169 	int ret;
1170 
1171 	ret = regmap_write(yas5xx->map, YAS530_OFFSET_X, ox);
1172 	if (ret)
1173 		return ret;
1174 	ret = regmap_write(yas5xx->map, YAS530_OFFSET_Y1, oy1);
1175 	if (ret)
1176 		return ret;
1177 	return regmap_write(yas5xx->map, YAS530_OFFSET_Y2, oy2);
1178 }
1179 
1180 /* Used by YAS530, YAS532 and YAS533 */
yas530_adjust_offset(s8 old,int bit,u16 center,u16 measure)1181 static s8 yas530_adjust_offset(s8 old, int bit, u16 center, u16 measure)
1182 {
1183 	if (measure > center)
1184 		return old + BIT(bit);
1185 	if (measure < center)
1186 		return old - BIT(bit);
1187 	return old;
1188 }
1189 
1190 /* Used by YAS530, YAS532 and YAS533 */
yas530_measure_offsets(struct yas5xx * yas5xx)1191 static int yas530_measure_offsets(struct yas5xx *yas5xx)
1192 {
1193 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
1194 	int ret;
1195 	u16 center;
1196 	u16 t, x, y1, y2;
1197 	s8 ox, oy1, oy2;
1198 	int i;
1199 
1200 	/* Actuate the init coil and measure offsets */
1201 	ret = regmap_write(yas5xx->map, YAS530_ACTUATE_INIT_COIL, 0);
1202 	if (ret)
1203 		return ret;
1204 
1205 	/* When the initcoil is active this should be around the center */
1206 	switch (ci->devid) {
1207 	case YAS530_DEVICE_ID:
1208 		center = YAS530_DATA_CENTER;
1209 		break;
1210 	case YAS532_DEVICE_ID:
1211 		center = YAS532_DATA_CENTER;
1212 		break;
1213 	default:
1214 		dev_err(yas5xx->dev, "unknown device type\n");
1215 		return -EINVAL;
1216 	}
1217 
1218 	/*
1219 	 * We set offsets in the interval +-31 by iterating
1220 	 * +-16, +-8, +-4, +-2, +-1 adjusting the offsets each
1221 	 * time, then writing the final offsets into the
1222 	 * registers.
1223 	 *
1224 	 * NOTE: these offsets are NOT in the same unit or magnitude
1225 	 * as the values for [x, y1, y2]. The value is +/-31
1226 	 * but the effect on the raw values is much larger.
1227 	 * The effect of the offset is to bring the measure
1228 	 * rougly to the center.
1229 	 */
1230 	ox = 0;
1231 	oy1 = 0;
1232 	oy2 = 0;
1233 
1234 	for (i = 4; i >= 0; i--) {
1235 		ret = yas530_set_offsets(yas5xx, ox, oy1, oy2);
1236 		if (ret)
1237 			return ret;
1238 
1239 		ret = yas530_measure(yas5xx, &t, &x, &y1, &y2);
1240 		if (ret)
1241 			return ret;
1242 		dev_dbg(yas5xx->dev, "measurement %d: x=%d, y1=%d, y2=%d\n",
1243 			5-i, x, y1, y2);
1244 
1245 		ox = yas530_adjust_offset(ox, i, center, x);
1246 		oy1 = yas530_adjust_offset(oy1, i, center, y1);
1247 		oy2 = yas530_adjust_offset(oy2, i, center, y2);
1248 	}
1249 
1250 	/* Needed for calibration algorithm */
1251 	yas5xx->hard_offsets[0] = ox;
1252 	yas5xx->hard_offsets[1] = oy1;
1253 	yas5xx->hard_offsets[2] = oy2;
1254 	ret = yas530_set_offsets(yas5xx, ox, oy1, oy2);
1255 	if (ret)
1256 		return ret;
1257 
1258 	dev_info(yas5xx->dev, "discovered hard offsets: x=%d, y1=%d, y2=%d\n",
1259 		 ox, oy1, oy2);
1260 	return 0;
1261 }
1262 
1263 /* Used by YAS530, YAS532 and YAS533 */
yas530_power_on(struct yas5xx * yas5xx)1264 static int yas530_power_on(struct yas5xx *yas5xx)
1265 {
1266 	unsigned int val;
1267 	int ret;
1268 
1269 	/* Zero the test registers */
1270 	ret = regmap_write(yas5xx->map, YAS530_TEST1, 0);
1271 	if (ret)
1272 		return ret;
1273 	ret = regmap_write(yas5xx->map, YAS530_TEST2, 0);
1274 	if (ret)
1275 		return ret;
1276 
1277 	/* Set up for no interrupts, calibrated clock divider */
1278 	val = FIELD_PREP(YAS5XX_CONFIG_CCK_MASK, yas5xx->calibration.dck);
1279 	ret = regmap_write(yas5xx->map, YAS530_CONFIG, val);
1280 	if (ret)
1281 		return ret;
1282 
1283 	/* Measure interval 0 (back-to-back?)  */
1284 	return regmap_write(yas5xx->map, YAS530_MEASURE_INTERVAL, 0);
1285 }
1286 
yas537_power_on(struct yas5xx * yas5xx)1287 static int yas537_power_on(struct yas5xx *yas5xx)
1288 {
1289 	__be16 buf;
1290 	int ret;
1291 	u8 intrvl;
1292 
1293 	/* Writing ADCCAL and TRM registers */
1294 	buf = cpu_to_be16(GENMASK(9, 3));
1295 	ret = regmap_bulk_write(yas5xx->map, YAS537_ADCCAL, &buf, sizeof(buf));
1296 	if (ret)
1297 		return ret;
1298 	ret = regmap_write(yas5xx->map, YAS537_TRM, GENMASK(7, 0));
1299 	if (ret)
1300 		return ret;
1301 
1302 	/* The interval value is static in regular operation */
1303 	intrvl = (YAS537_DEFAULT_SENSOR_DELAY_MS * MILLI
1304 		 - YAS537_MEASURE_TIME_WORST_US) / 4100;
1305 	ret = regmap_write(yas5xx->map, YAS537_MEASURE_INTERVAL, intrvl);
1306 	if (ret)
1307 		return ret;
1308 
1309 	/* The average value is also static in regular operation */
1310 	ret = regmap_write(yas5xx->map, YAS537_AVR, YAS537_MAG_AVERAGE_32_MASK);
1311 	if (ret)
1312 		return ret;
1313 
1314 	/* Perform the "rcoil" part but skip the "last_after_rcoil" read */
1315 	ret = regmap_write(yas5xx->map, YAS537_CONFIG, BIT(3));
1316 	if (ret)
1317 		return ret;
1318 
1319 	/* Wait until the coil has ramped up */
1320 	usleep_range(YAS537_MAG_RCOIL_TIME_US, YAS537_MAG_RCOIL_TIME_US + 100);
1321 
1322 	return 0;
1323 }
1324 
1325 static const struct yas5xx_chip_info yas5xx_chip_info_tbl[] = {
1326 	[yas530] = {
1327 		.devid = YAS530_DEVICE_ID,
1328 		.product_name = "YAS530 MS-3E",
1329 		.version_names = { "A", "B" },
1330 		.volatile_reg = yas530_volatile_reg,
1331 		.volatile_reg_qty = ARRAY_SIZE(yas530_volatile_reg),
1332 		.scaling_val2 = 100000000, /* picotesla to Gauss */
1333 		.t_ref = 182, /* counts */
1334 		.min_temp_x10 = -620, /* 1/10:s degrees Celsius */
1335 		.get_measure = yas530_get_measure,
1336 		.get_calibration_data = yas530_get_calibration_data,
1337 		.dump_calibration = yas530_dump_calibration,
1338 		.measure_offsets = yas530_measure_offsets,
1339 		.power_on = yas530_power_on,
1340 	},
1341 	[yas532] = {
1342 		.devid = YAS532_DEVICE_ID,
1343 		.product_name = "YAS532 MS-3R",
1344 		.version_names = { "AB", "AC" },
1345 		.volatile_reg = yas530_volatile_reg,
1346 		.volatile_reg_qty = ARRAY_SIZE(yas530_volatile_reg),
1347 		.scaling_val2 = 100000, /* nanotesla to Gauss */
1348 		.t_ref = 390, /* counts */
1349 		.min_temp_x10 = -500, /* 1/10:s degrees Celsius */
1350 		.get_measure = yas530_get_measure,
1351 		.get_calibration_data = yas532_get_calibration_data,
1352 		.dump_calibration = yas530_dump_calibration,
1353 		.measure_offsets = yas530_measure_offsets,
1354 		.power_on = yas530_power_on,
1355 	},
1356 	[yas533] = {
1357 		.devid = YAS532_DEVICE_ID,
1358 		.product_name = "YAS533 MS-3F",
1359 		.version_names = { "AB", "AC" },
1360 		.volatile_reg = yas530_volatile_reg,
1361 		.volatile_reg_qty = ARRAY_SIZE(yas530_volatile_reg),
1362 		.scaling_val2 = 100000, /* nanotesla to Gauss */
1363 		.t_ref = 390, /* counts */
1364 		.min_temp_x10 = -500, /* 1/10:s degrees Celsius */
1365 		.get_measure = yas530_get_measure,
1366 		.get_calibration_data = yas532_get_calibration_data,
1367 		.dump_calibration = yas530_dump_calibration,
1368 		.measure_offsets = yas530_measure_offsets,
1369 		.power_on = yas530_power_on,
1370 	},
1371 	[yas537] = {
1372 		.devid = YAS537_DEVICE_ID,
1373 		.product_name = "YAS537 MS-3T",
1374 		.version_names = { "v0", "v1" }, /* version naming unknown */
1375 		.volatile_reg = yas537_volatile_reg,
1376 		.volatile_reg_qty = ARRAY_SIZE(yas537_volatile_reg),
1377 		.scaling_val2 = 100000, /* nanotesla to Gauss */
1378 		.t_ref = 8120, /* counts */
1379 		.min_temp_x10 = -3860, /* 1/10:s degrees Celsius */
1380 		.get_measure = yas537_get_measure,
1381 		.get_calibration_data = yas537_get_calibration_data,
1382 		.dump_calibration = yas537_dump_calibration,
1383 		/* .measure_offets is not needed for yas537 */
1384 		.power_on = yas537_power_on,
1385 	},
1386 };
1387 
yas5xx_probe(struct i2c_client * i2c)1388 static int yas5xx_probe(struct i2c_client *i2c)
1389 {
1390 	const struct i2c_device_id *id = i2c_client_get_device_id(i2c);
1391 	struct iio_dev *indio_dev;
1392 	struct device *dev = &i2c->dev;
1393 	struct yas5xx *yas5xx;
1394 	const struct yas5xx_chip_info *ci;
1395 	int id_check;
1396 	int ret;
1397 
1398 	indio_dev = devm_iio_device_alloc(dev, sizeof(*yas5xx));
1399 	if (!indio_dev)
1400 		return -ENOMEM;
1401 
1402 	yas5xx = iio_priv(indio_dev);
1403 	i2c_set_clientdata(i2c, indio_dev);
1404 	yas5xx->dev = dev;
1405 	mutex_init(&yas5xx->lock);
1406 
1407 	ret = iio_read_mount_matrix(dev, &yas5xx->orientation);
1408 	if (ret)
1409 		return ret;
1410 
1411 	yas5xx->regs[0].supply = "vdd";
1412 	yas5xx->regs[1].supply = "iovdd";
1413 	ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(yas5xx->regs),
1414 				      yas5xx->regs);
1415 	if (ret)
1416 		return dev_err_probe(dev, ret, "cannot get regulators\n");
1417 
1418 	ret = regulator_bulk_enable(ARRAY_SIZE(yas5xx->regs), yas5xx->regs);
1419 	if (ret)
1420 		return dev_err_probe(dev, ret, "cannot enable regulators\n");
1421 
1422 	/* See comment in runtime resume callback */
1423 	usleep_range(31000, 40000);
1424 
1425 	/* This will take the device out of reset if need be */
1426 	yas5xx->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
1427 	if (IS_ERR(yas5xx->reset)) {
1428 		ret = dev_err_probe(dev, PTR_ERR(yas5xx->reset), "failed to get reset line\n");
1429 		goto reg_off;
1430 	}
1431 
1432 	yas5xx->map = devm_regmap_init_i2c(i2c, &yas5xx_regmap_config);
1433 	if (IS_ERR(yas5xx->map)) {
1434 		ret = dev_err_probe(dev, PTR_ERR(yas5xx->map), "failed to allocate register map\n");
1435 		goto assert_reset;
1436 	}
1437 
1438 	ci = i2c_get_match_data(i2c);
1439 	yas5xx->chip_info = ci;
1440 
1441 	ret = regmap_read(yas5xx->map, YAS5XX_DEVICE_ID, &id_check);
1442 	if (ret)
1443 		goto assert_reset;
1444 
1445 	if (id_check != ci->devid) {
1446 		ret = dev_err_probe(dev, -ENODEV,
1447 				    "device ID %02x doesn't match %s\n",
1448 				    id_check, id->name);
1449 		goto assert_reset;
1450 	}
1451 
1452 	ret = ci->get_calibration_data(yas5xx);
1453 	if (ret)
1454 		goto assert_reset;
1455 
1456 	dev_info(dev, "detected %s %s\n", ci->product_name,
1457 		 ci->version_names[yas5xx->version]);
1458 
1459 	ci->dump_calibration(yas5xx);
1460 
1461 	ret = ci->power_on(yas5xx);
1462 	if (ret)
1463 		goto assert_reset;
1464 
1465 	if (ci->measure_offsets) {
1466 		ret = ci->measure_offsets(yas5xx);
1467 		if (ret)
1468 			goto assert_reset;
1469 	}
1470 
1471 	indio_dev->info = &yas5xx_info;
1472 	indio_dev->available_scan_masks = yas5xx_scan_masks;
1473 	indio_dev->modes = INDIO_DIRECT_MODE;
1474 	indio_dev->name = id->name;
1475 	indio_dev->channels = yas5xx_channels;
1476 	indio_dev->num_channels = ARRAY_SIZE(yas5xx_channels);
1477 
1478 	ret = iio_triggered_buffer_setup(indio_dev, NULL,
1479 					 yas5xx_handle_trigger,
1480 					 NULL);
1481 	if (ret) {
1482 		dev_err_probe(dev, ret, "triggered buffer setup failed\n");
1483 		goto assert_reset;
1484 	}
1485 
1486 	ret = iio_device_register(indio_dev);
1487 	if (ret) {
1488 		dev_err_probe(dev, ret, "device register failed\n");
1489 		goto cleanup_buffer;
1490 	}
1491 
1492 	/* Take runtime PM online */
1493 	pm_runtime_get_noresume(dev);
1494 	pm_runtime_set_active(dev);
1495 	pm_runtime_enable(dev);
1496 
1497 	pm_runtime_set_autosuspend_delay(dev, YAS5XX_AUTOSUSPEND_DELAY_MS);
1498 	pm_runtime_use_autosuspend(dev);
1499 	pm_runtime_put(dev);
1500 
1501 	return 0;
1502 
1503 cleanup_buffer:
1504 	iio_triggered_buffer_cleanup(indio_dev);
1505 assert_reset:
1506 	gpiod_set_value_cansleep(yas5xx->reset, 1);
1507 reg_off:
1508 	regulator_bulk_disable(ARRAY_SIZE(yas5xx->regs), yas5xx->regs);
1509 
1510 	return ret;
1511 }
1512 
yas5xx_remove(struct i2c_client * i2c)1513 static void yas5xx_remove(struct i2c_client *i2c)
1514 {
1515 	struct iio_dev *indio_dev = i2c_get_clientdata(i2c);
1516 	struct yas5xx *yas5xx = iio_priv(indio_dev);
1517 	struct device *dev = &i2c->dev;
1518 
1519 	iio_device_unregister(indio_dev);
1520 	iio_triggered_buffer_cleanup(indio_dev);
1521 	/*
1522 	 * Now we can't get any more reads from the device, which would
1523 	 * also call pm_runtime* functions and race with our disable
1524 	 * code. Disable PM runtime in orderly fashion and power down.
1525 	 */
1526 	pm_runtime_get_sync(dev);
1527 	pm_runtime_put_noidle(dev);
1528 	pm_runtime_disable(dev);
1529 	gpiod_set_value_cansleep(yas5xx->reset, 1);
1530 	regulator_bulk_disable(ARRAY_SIZE(yas5xx->regs), yas5xx->regs);
1531 }
1532 
yas5xx_runtime_suspend(struct device * dev)1533 static int yas5xx_runtime_suspend(struct device *dev)
1534 {
1535 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
1536 	struct yas5xx *yas5xx = iio_priv(indio_dev);
1537 
1538 	gpiod_set_value_cansleep(yas5xx->reset, 1);
1539 	regulator_bulk_disable(ARRAY_SIZE(yas5xx->regs), yas5xx->regs);
1540 
1541 	return 0;
1542 }
1543 
yas5xx_runtime_resume(struct device * dev)1544 static int yas5xx_runtime_resume(struct device *dev)
1545 {
1546 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
1547 	struct yas5xx *yas5xx = iio_priv(indio_dev);
1548 	const struct yas5xx_chip_info *ci = yas5xx->chip_info;
1549 	int ret;
1550 
1551 	ret = regulator_bulk_enable(ARRAY_SIZE(yas5xx->regs), yas5xx->regs);
1552 	if (ret) {
1553 		dev_err(dev, "cannot enable regulators\n");
1554 		return ret;
1555 	}
1556 
1557 	/*
1558 	 * The YAS530 datasheet says TVSKW is up to 30 ms, after that 1 ms
1559 	 * for all voltages to settle. The YAS532 is 10ms then 4ms for the
1560 	 * I2C to come online. Let's keep it safe and put this at 31ms.
1561 	 */
1562 	usleep_range(31000, 40000);
1563 	gpiod_set_value_cansleep(yas5xx->reset, 0);
1564 
1565 	ret = ci->power_on(yas5xx);
1566 	if (ret) {
1567 		dev_err(dev, "cannot power on\n");
1568 		goto out_reset;
1569 	}
1570 
1571 	return 0;
1572 
1573 out_reset:
1574 	gpiod_set_value_cansleep(yas5xx->reset, 1);
1575 	regulator_bulk_disable(ARRAY_SIZE(yas5xx->regs), yas5xx->regs);
1576 
1577 	return ret;
1578 }
1579 
1580 static DEFINE_RUNTIME_DEV_PM_OPS(yas5xx_dev_pm_ops, yas5xx_runtime_suspend,
1581 				 yas5xx_runtime_resume, NULL);
1582 
1583 static const struct i2c_device_id yas5xx_id[] = {
1584 	{"yas530", (kernel_ulong_t)&yas5xx_chip_info_tbl[yas530] },
1585 	{"yas532", (kernel_ulong_t)&yas5xx_chip_info_tbl[yas532] },
1586 	{"yas533", (kernel_ulong_t)&yas5xx_chip_info_tbl[yas533] },
1587 	{"yas537", (kernel_ulong_t)&yas5xx_chip_info_tbl[yas537] },
1588 	{}
1589 };
1590 MODULE_DEVICE_TABLE(i2c, yas5xx_id);
1591 
1592 static const struct of_device_id yas5xx_of_match[] = {
1593 	{ .compatible = "yamaha,yas530", &yas5xx_chip_info_tbl[yas530] },
1594 	{ .compatible = "yamaha,yas532", &yas5xx_chip_info_tbl[yas532] },
1595 	{ .compatible = "yamaha,yas533", &yas5xx_chip_info_tbl[yas533] },
1596 	{ .compatible = "yamaha,yas537", &yas5xx_chip_info_tbl[yas537] },
1597 	{}
1598 };
1599 MODULE_DEVICE_TABLE(of, yas5xx_of_match);
1600 
1601 static struct i2c_driver yas5xx_driver = {
1602 	.driver	 = {
1603 		.name	= "yas5xx",
1604 		.of_match_table = yas5xx_of_match,
1605 		.pm = pm_ptr(&yas5xx_dev_pm_ops),
1606 	},
1607 	.probe = yas5xx_probe,
1608 	.remove	  = yas5xx_remove,
1609 	.id_table = yas5xx_id,
1610 };
1611 module_i2c_driver(yas5xx_driver);
1612 
1613 MODULE_DESCRIPTION("Yamaha YAS53x 3-axis magnetometer driver");
1614 MODULE_AUTHOR("Linus Walleij");
1615 MODULE_LICENSE("GPL v2");
1616