xref: /linux/drivers/input/misc/aw86927.c (revision e3966940559d52aa1800a008dcfeec218dd31f88)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2025 Griffin Kroah-Hartman <griffin.kroah@fairphone.com>
4  *
5  * Partially based on vendor driver:
6  *	Copyright (c) 2021 AWINIC Technology CO., LTD
7  *
8  */
9 
10 #include <linux/bitfield.h>
11 #include <linux/bits.h>
12 #include <linux/delay.h>
13 #include <linux/gpio/consumer.h>
14 #include <linux/i2c.h>
15 #include <linux/input.h>
16 #include <linux/module.h>
17 #include <linux/regmap.h>
18 #include <linux/regulator/consumer.h>
19 #include <linux/types.h>
20 
21 #define AW86927_RSTCFG_REG			0x00
22 #define AW86927_RSTCFG_SOFTRST			0xaa
23 
24 #define AW86927_SYSINT_REG			0x02
25 #define AW86927_SYSINT_BST_SCPI			BIT(7)
26 #define AW86927_SYSINT_BST_OVPI			BIT(6)
27 #define AW86927_SYSINT_UVLI			BIT(5)
28 #define AW86927_SYSINT_FF_AEI			BIT(4)
29 #define AW86927_SYSINT_FF_AFI			BIT(3)
30 #define AW86927_SYSINT_OCDI			BIT(2)
31 #define AW86927_SYSINT_OTI			BIT(1)
32 #define AW86927_SYSINT_DONEI			BIT(0)
33 
34 #define AW86927_SYSINTM_REG			0x03
35 #define AW86927_SYSINTM_BST_OVPM		BIT(6)
36 #define AW86927_SYSINTM_FF_AEM			BIT(4)
37 #define AW86927_SYSINTM_FF_AFM			BIT(3)
38 #define AW86927_SYSINTM_DONEM			BIT(0)
39 
40 #define AW86927_PLAYCFG1_REG			0x06
41 #define AW86927_PLAYCFG1_BST_MODE_MASK		GENMASK(7, 7)
42 #define AW86927_PLAYCFG1_BST_MODE_BYPASS	0
43 #define AW86927_PLAYCFG1_BST_VOUT_VREFSET_MASK	GENMASK(6, 0)
44 #define AW86927_PLAYCFG1_BST_8500MV		0x50
45 
46 #define AW86927_PLAYCFG2_REG			0x07
47 
48 #define AW86927_PLAYCFG3_REG			0x08
49 #define AW86927_PLAYCFG3_AUTO_BST_MASK		GENMASK(4, 4)
50 #define AW86927_PLAYCFG3_AUTO_BST_ENABLE	1
51 #define AW86927_PLAYCFG3_AUTO_BST_DISABLE	0
52 #define AW86927_PLAYCFG3_PLAY_MODE_MASK		GENMASK(1, 0)
53 #define AW86927_PLAYCFG3_PLAY_MODE_RAM		0
54 
55 #define AW86927_PLAYCFG4_REG			0x09
56 #define AW86927_PLAYCFG4_STOP			BIT(1)
57 #define AW86927_PLAYCFG4_GO			BIT(0)
58 
59 #define AW86927_WAVCFG1_REG			0x0a
60 #define AW86927_WAVCFG1_WAVSEQ1_MASK		GENMASK(6, 0)
61 
62 #define AW86927_WAVCFG2_REG			0x0b
63 #define AW86927_WAVCFG2_WAVSEQ2_MASK		GENMASK(6, 0)
64 
65 #define AW86927_WAVCFG9_REG			0x12
66 #define AW86927_WAVCFG9_SEQ1LOOP_MASK		GENMASK(7, 4)
67 #define AW86927_WAVCFG9_SEQ1LOOP_INFINITELY	0x0f
68 
69 #define AW86927_CONTCFG1_REG			0x18
70 #define AW86927_CONTCFG1_BRK_BST_MD_MASK	GENMASK(6, 6)
71 
72 #define AW86927_CONTCFG5_REG			0x1c
73 #define AW86927_CONTCFG5_BST_BRK_GAIN_MASK	GENMASK(7, 4)
74 #define AW86927_CONTCFG5_BRK_GAIN_MASK		GENMASK(3, 0)
75 
76 #define AW86927_CONTCFG10_REG			0x21
77 #define AW86927_CONTCFG10_BRK_TIME_MASK		GENMASK(7, 0)
78 #define AW86927_CONTCFG10_BRK_TIME_DEFAULT	8
79 
80 #define AW86927_CONTCFG13_REG			0x24
81 #define AW86927_CONTCFG13_TSET_MASK		GENMASK(7, 4)
82 #define AW86927_CONTCFG13_BEME_SET_MASK		GENMASK(3, 0)
83 
84 #define AW86927_BASEADDRH_REG			0x2d
85 #define AW86927_BASEADDRL_REG			0x2e
86 
87 #define AW86927_GLBRD5_REG			0x3f
88 #define AW86927_GLBRD5_STATE_MASK		GENMASK(3, 0)
89 #define AW86927_GLBRD5_STATE_STANDBY		0
90 
91 #define AW86927_RAMADDRH_REG			0x40
92 
93 #define AW86927_RAMADDRL_REG			0x41
94 
95 #define AW86927_RAMDATA_REG			0x42
96 
97 #define AW86927_SYSCTRL3_REG			0x45
98 #define AW86927_SYSCTRL3_STANDBY_MASK           GENMASK(5, 5)
99 #define AW86927_SYSCTRL3_STANDBY_ON             1
100 #define AW86927_SYSCTRL3_STANDBY_OFF            0
101 #define AW86927_SYSCTRL3_EN_RAMINIT_MASK        GENMASK(2, 2)
102 #define AW86927_SYSCTRL3_EN_RAMINIT_ON          1
103 #define AW86927_SYSCTRL3_EN_RAMINIT_OFF         0
104 
105 #define AW86927_SYSCTRL4_REG			0x46
106 #define AW86927_SYSCTRL4_WAVDAT_MODE_MASK	GENMASK(6, 5)
107 #define AW86927_SYSCTRL4_WAVDAT_24K		0
108 #define AW86927_SYSCTRL4_INT_EDGE_MODE_MASK	GENMASK(4, 4)
109 #define AW86927_SYSCTRL4_INT_EDGE_MODE_POS	0
110 #define AW86927_SYSCTRL4_INT_MODE_MASK		GENMASK(3, 3)
111 #define AW86927_SYSCTRL4_INT_MODE_EDGE		1
112 #define AW86927_SYSCTRL4_GAIN_BYPASS_MASK	GENMASK(0, 0)
113 
114 #define AW86927_PWMCFG1_REG			0x48
115 #define AW86927_PWMCFG1_PRC_EN_MASK		GENMASK(7, 7)
116 #define AW86927_PWMCFG1_PRC_DISABLE		0
117 
118 #define AW86927_PWMCFG3_REG			0x4a
119 #define AW86927_PWMCFG3_PR_EN_MASK		GENMASK(7, 7)
120 #define AW86927_PWMCFG3_PRCTIME_MASK		GENMASK(6, 0)
121 
122 #define AW86927_PWMCFG4_REG			0x4b
123 #define AW86927_PWMCFG4_PRTIME_MASK		GENMASK(7, 0)
124 
125 #define AW86927_VBATCTRL_REG			0x4c
126 #define AW86927_VBATCTRL_VBAT_MODE_MASK		GENMASK(6, 6)
127 #define AW86927_VBATCTRL_VBAT_MODE_SW		0
128 
129 #define AW86927_DETCFG1_REG			0x4d
130 #define AW86927_DETCFG1_DET_GO_MASK		GENMASK(1, 0)
131 #define AW86927_DETCFG1_DET_GO_DET_SEQ0		1
132 #define AW86927_DETCFG1_DET_GO_NA		0
133 
134 #define AW86927_DETCFG2_REG			0x4e
135 #define AW86927_DETCFG2_DET_SEQ0_MASK		GENMASK(6, 3)
136 #define AW86927_DETCFG2_DET_SEQ0_VBAT		0
137 #define AW86927_DETCFG2_D2S_GAIN_MASK		GENMASK(2, 0)
138 #define AW86927_DETCFG2_D2S_GAIN_10		4
139 
140 #define AW86927_CHIPIDH_REG			0x57
141 #define AW86927_CHIPIDL_REG			0x58
142 #define AW86927_CHIPID				0x9270
143 
144 #define AW86927_TMCFG_REG			0x5b
145 #define AW86927_TMCFG_UNLOCK			0x7d
146 #define AW86927_TMCFG_LOCK			0x00
147 
148 #define AW86927_ANACFG11_REG			0x70
149 
150 #define AW86927_ANACFG12_REG			0x71
151 #define AW86927_ANACFG12_BST_SKIP_MASK		GENMASK(7, 7)
152 #define AW86927_ANACFG12_BST_SKIP_SHUTDOWN	1
153 
154 #define AW86927_ANACFG13_REG			0x72
155 #define AW86927_ANACFG13_BST_PC_MASK		GENMASK(7, 4)
156 #define AW86927_ANACFG13_BST_PEAKCUR_3P45A	6
157 
158 #define AW86927_ANACFG15_REG			0x74
159 #define AW86927_ANACFG15_BST_PEAK_MODE_MASK	GENMASK(7, 7)
160 #define AW86927_ANACFG15_BST_PEAK_BACK		1
161 
162 #define AW86927_ANACFG16_REG			0x75
163 #define AW86927_ANACFG16_BST_SRC_MASK		GENMASK(4, 4)
164 #define AW86927_ANACFG16_BST_SRC_3NS		0
165 
166 /* default value of base addr */
167 #define AW86927_RAM_BASE_ADDR			0x800
168 #define AW86927_BASEADDRH_VAL			0x08
169 #define AW86927_BASEADDRL_VAL			0x00
170 
171 enum aw86927_work_mode {
172 	AW86927_STANDBY_MODE,
173 	AW86927_RAM_MODE,
174 };
175 
176 struct aw86927_data {
177 	struct work_struct play_work;
178 	struct device *dev;
179 	struct input_dev *input_dev;
180 	struct i2c_client *client;
181 	struct regmap *regmap;
182 	struct gpio_desc *reset_gpio;
183 	bool running;
184 };
185 
186 static const struct regmap_config aw86927_regmap_config = {
187 	.reg_bits = 8,
188 	.val_bits = 8,
189 	.cache_type = REGCACHE_NONE,
190 	.max_register = 0x80,
191 };
192 
193 /*
194  * Sine wave representing the magnitude of the drive to be used.
195  * Data is encoded in two's complement.
196  *   round(84 * sin(x / 16.25))
197  */
198 static const u8 aw86927_waveform[] = {
199 	0x00, 0x05, 0x0a, 0x0f, 0x14, 0x1a, 0x1f, 0x23, 0x28, 0x2d, 0x31, 0x35,
200 	0x39, 0x3d, 0x41, 0x44, 0x47, 0x4a, 0x4c, 0x4f, 0x51, 0x52, 0x53, 0x54,
201 	0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x52, 0x51, 0x4f, 0x4d, 0x4a, 0x47,
202 	0x44, 0x41, 0x3d, 0x3a, 0x36, 0x31, 0x2d, 0x28, 0x24, 0x1f, 0x1a, 0x15,
203 	0x10, 0x0a, 0x05, 0x00, 0xfc, 0xf6, 0xf1, 0xec, 0xe7, 0xe2, 0xdd, 0xd8,
204 	0xd4, 0xcf, 0xcb, 0xc7, 0xc3, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4, 0xb1, 0xb0,
205 	0xae, 0xad, 0xac, 0xab, 0xab, 0xab, 0xab, 0xab, 0xac, 0xae, 0xaf, 0xb1,
206 	0xb3, 0xb6, 0xb8, 0xbc, 0xbf, 0xc2, 0xc6, 0xca, 0xce, 0xd3, 0xd7, 0xdc,
207 	0xe1, 0xe6, 0xeb, 0xf0, 0xf5, 0xfb
208 };
209 
210 struct aw86927_sram_waveform_header {
211 	u8 version;
212 	__be16 start_address;
213 	__be16 end_address;
214 } __packed;
215 
216 static const struct aw86927_sram_waveform_header sram_waveform_header = {
217 	.version = 0x01,
218 	.start_address = cpu_to_be16(AW86927_RAM_BASE_ADDR +
219 			sizeof(struct aw86927_sram_waveform_header)),
220 	.end_address = cpu_to_be16(AW86927_RAM_BASE_ADDR +
221 			sizeof(struct aw86927_sram_waveform_header) +
222 			ARRAY_SIZE(aw86927_waveform) - 1),
223 };
224 
225 static int aw86927_wait_enter_standby(struct aw86927_data *haptics)
226 {
227 	unsigned int reg_val;
228 	int err;
229 
230 	err = regmap_read_poll_timeout(haptics->regmap, AW86927_GLBRD5_REG, reg_val,
231 				       (FIELD_GET(AW86927_GLBRD5_STATE_MASK, reg_val) ==
232 						AW86927_GLBRD5_STATE_STANDBY),
233 				       2500, 2500 * 100);
234 
235 	if (err) {
236 		dev_err(haptics->dev, "did not enter standby: %d\n", err);
237 		return err;
238 	}
239 	return 0;
240 }
241 
242 static int aw86927_play_mode(struct aw86927_data *haptics, u8 play_mode)
243 {
244 	int err;
245 
246 	switch (play_mode) {
247 	case AW86927_STANDBY_MODE:
248 		/* Briefly toggle standby, then toggle back to standby off */
249 		err = regmap_update_bits(haptics->regmap,
250 					 AW86927_SYSCTRL3_REG,
251 					 AW86927_SYSCTRL3_STANDBY_MASK,
252 					 FIELD_PREP(AW86927_SYSCTRL3_STANDBY_MASK,
253 						    AW86927_SYSCTRL3_STANDBY_ON));
254 		if (err)
255 			return err;
256 
257 		err = regmap_update_bits(haptics->regmap,
258 					 AW86927_SYSCTRL3_REG,
259 					 AW86927_SYSCTRL3_STANDBY_MASK,
260 					 FIELD_PREP(AW86927_SYSCTRL3_STANDBY_MASK,
261 						    AW86927_SYSCTRL3_STANDBY_OFF));
262 		if (err)
263 			return err;
264 
265 		break;
266 
267 	case AW86927_RAM_MODE:
268 		err = regmap_update_bits(haptics->regmap,
269 					 AW86927_PLAYCFG3_REG,
270 					 AW86927_PLAYCFG3_PLAY_MODE_MASK,
271 					 FIELD_PREP(AW86927_PLAYCFG3_PLAY_MODE_MASK,
272 						    AW86927_PLAYCFG3_PLAY_MODE_RAM));
273 		if (err)
274 			return err;
275 
276 		err = regmap_update_bits(haptics->regmap,
277 					 AW86927_PLAYCFG1_REG,
278 					 AW86927_PLAYCFG1_BST_MODE_MASK,
279 					 FIELD_PREP(AW86927_PLAYCFG1_BST_MODE_MASK,
280 						    AW86927_PLAYCFG1_BST_MODE_BYPASS));
281 		if (err)
282 			return err;
283 
284 		err = regmap_update_bits(haptics->regmap,
285 					 AW86927_VBATCTRL_REG,
286 					 AW86927_VBATCTRL_VBAT_MODE_MASK,
287 					 FIELD_PREP(AW86927_VBATCTRL_VBAT_MODE_MASK,
288 						    AW86927_VBATCTRL_VBAT_MODE_SW));
289 		if (err)
290 			return err;
291 
292 		break;
293 	}
294 
295 	return 0;
296 }
297 
298 static int aw86927_stop(struct aw86927_data *haptics)
299 {
300 	int err;
301 
302 	err = regmap_write(haptics->regmap, AW86927_PLAYCFG4_REG, AW86927_PLAYCFG4_STOP);
303 	if (err) {
304 		dev_err(haptics->dev, "Failed to stop playback: %d\n", err);
305 		return err;
306 	}
307 
308 	err = aw86927_wait_enter_standby(haptics);
309 	if (err) {
310 		dev_err(haptics->dev, "Failed to enter standby, trying to force it\n");
311 		err = aw86927_play_mode(haptics, AW86927_STANDBY_MODE);
312 		if (err)
313 			return err;
314 	}
315 
316 	return 0;
317 }
318 
319 static int aw86927_haptics_play(struct input_dev *dev, void *data, struct ff_effect *effect)
320 {
321 	struct aw86927_data *haptics = input_get_drvdata(dev);
322 	int level;
323 
324 	level = effect->u.rumble.strong_magnitude;
325 	if (!level)
326 		level = effect->u.rumble.weak_magnitude;
327 
328 	/* If already running, don't restart playback */
329 	if (haptics->running && level)
330 		return 0;
331 
332 	haptics->running = level;
333 	schedule_work(&haptics->play_work);
334 
335 	return 0;
336 }
337 
338 static int aw86927_play_sine(struct aw86927_data *haptics)
339 {
340 	int err;
341 
342 	err = aw86927_stop(haptics);
343 	if (err)
344 		return err;
345 
346 	err = aw86927_play_mode(haptics, AW86927_RAM_MODE);
347 	if (err)
348 		return err;
349 
350 	err = regmap_update_bits(haptics->regmap, AW86927_PLAYCFG3_REG,
351 				 AW86927_PLAYCFG3_AUTO_BST_MASK,
352 				 FIELD_PREP(AW86927_PLAYCFG3_AUTO_BST_MASK,
353 					    AW86927_PLAYCFG3_AUTO_BST_ENABLE));
354 	if (err)
355 		return err;
356 
357 	/* Set waveseq 1 to the first wave */
358 	err = regmap_update_bits(haptics->regmap, AW86927_WAVCFG1_REG,
359 				 AW86927_WAVCFG1_WAVSEQ1_MASK,
360 				 FIELD_PREP(AW86927_WAVCFG1_WAVSEQ1_MASK, 1));
361 	if (err)
362 		return err;
363 
364 	/* set wavseq 2 to zero */
365 	err = regmap_update_bits(haptics->regmap, AW86927_WAVCFG2_REG,
366 				 AW86927_WAVCFG2_WAVSEQ2_MASK,
367 				 FIELD_PREP(AW86927_WAVCFG2_WAVSEQ2_MASK, 0));
368 	if (err)
369 		return err;
370 
371 	err = regmap_update_bits(haptics->regmap,
372 				 AW86927_WAVCFG9_REG,
373 				 AW86927_WAVCFG9_SEQ1LOOP_MASK,
374 				 FIELD_PREP(AW86927_WAVCFG9_SEQ1LOOP_MASK,
375 					    AW86927_WAVCFG9_SEQ1LOOP_INFINITELY));
376 	if (err)
377 		return err;
378 
379 	/* set gain to value lower than 0x80 to avoid distorted playback */
380 	err = regmap_write(haptics->regmap, AW86927_PLAYCFG2_REG, 0x7c);
381 	if (err)
382 		return err;
383 
384 	/* Start playback */
385 	err = regmap_write(haptics->regmap, AW86927_PLAYCFG4_REG, AW86927_PLAYCFG4_GO);
386 	if (err)
387 		return err;
388 
389 	return 0;
390 }
391 
392 static void aw86927_close(struct input_dev *input)
393 {
394 	struct aw86927_data *haptics = input_get_drvdata(input);
395 	struct device *dev = &haptics->client->dev;
396 	int err;
397 
398 	cancel_work_sync(&haptics->play_work);
399 
400 	err = aw86927_stop(haptics);
401 	if (err)
402 		dev_err(dev, "Failed to close the Driver: %d\n", err);
403 }
404 
405 static void aw86927_haptics_play_work(struct work_struct *work)
406 {
407 	struct aw86927_data *haptics =
408 		container_of(work, struct aw86927_data, play_work);
409 	struct device *dev = &haptics->client->dev;
410 	int err;
411 
412 	if (haptics->running)
413 		err = aw86927_play_sine(haptics);
414 	else
415 		err = aw86927_stop(haptics);
416 
417 	if (err)
418 		dev_err(dev, "Failed to execute work command: %d\n", err);
419 }
420 
421 static void aw86927_hw_reset(struct aw86927_data *haptics)
422 {
423 	/* Assert reset */
424 	gpiod_set_value_cansleep(haptics->reset_gpio, 1);
425 	/* Wait ~1ms */
426 	usleep_range(1000, 2000);
427 	/* Deassert reset */
428 	gpiod_set_value_cansleep(haptics->reset_gpio, 0);
429 	/* Wait ~8ms until I2C is accessible */
430 	usleep_range(8000, 8500);
431 }
432 
433 static int aw86927_haptic_init(struct aw86927_data *haptics)
434 {
435 	int err;
436 
437 	err = regmap_update_bits(haptics->regmap,
438 				 AW86927_SYSCTRL4_REG,
439 				 AW86927_SYSCTRL4_WAVDAT_MODE_MASK,
440 				 FIELD_PREP(AW86927_SYSCTRL4_WAVDAT_MODE_MASK,
441 					    AW86927_SYSCTRL4_WAVDAT_24K));
442 	if (err)
443 		return err;
444 
445 	/* enable gain bypass */
446 	err = regmap_update_bits(haptics->regmap,
447 				 AW86927_SYSCTRL4_REG,
448 				 AW86927_SYSCTRL4_GAIN_BYPASS_MASK,
449 				 FIELD_PREP(AW86927_SYSCTRL4_GAIN_BYPASS_MASK,
450 					    0x01));
451 	if (err)
452 		return err;
453 
454 	err = regmap_write(haptics->regmap,
455 			   AW86927_TMCFG_REG, AW86927_TMCFG_UNLOCK);
456 	if (err)
457 		return err;
458 
459 	err = regmap_write(haptics->regmap, AW86927_ANACFG11_REG, 0x0f);
460 	if (err)
461 		return err;
462 
463 	err = regmap_update_bits(haptics->regmap,
464 				 AW86927_ANACFG12_REG,
465 				 AW86927_ANACFG12_BST_SKIP_MASK,
466 				 FIELD_PREP(AW86927_ANACFG12_BST_SKIP_MASK,
467 					    AW86927_ANACFG12_BST_SKIP_SHUTDOWN));
468 	if (err)
469 		return err;
470 
471 	err = regmap_update_bits(haptics->regmap,
472 				 AW86927_ANACFG15_REG,
473 				 AW86927_ANACFG15_BST_PEAK_MODE_MASK,
474 				 FIELD_PREP(AW86927_ANACFG15_BST_PEAK_MODE_MASK,
475 					    AW86927_ANACFG15_BST_PEAK_BACK));
476 	if (err)
477 		return err;
478 
479 	err = regmap_update_bits(haptics->regmap,
480 				 AW86927_ANACFG16_REG,
481 				 AW86927_ANACFG16_BST_SRC_MASK,
482 				 FIELD_PREP(AW86927_ANACFG16_BST_SRC_MASK,
483 					    AW86927_ANACFG16_BST_SRC_3NS));
484 	if (err)
485 		return err;
486 
487 	err = regmap_write(haptics->regmap,
488 			   AW86927_TMCFG_REG, AW86927_TMCFG_LOCK);
489 	if (err)
490 		return err;
491 
492 	err = regmap_update_bits(haptics->regmap,
493 				 AW86927_CONTCFG1_REG,
494 				 AW86927_CONTCFG1_BRK_BST_MD_MASK,
495 				 FIELD_PREP(AW86927_CONTCFG1_BRK_BST_MD_MASK, 0x00));
496 	if (err)
497 		return err;
498 
499 	err = regmap_write(haptics->regmap,
500 			   AW86927_CONTCFG5_REG,
501 			   FIELD_PREP(AW86927_CONTCFG5_BST_BRK_GAIN_MASK, 0x05) |
502 				FIELD_PREP(AW86927_CONTCFG5_BRK_GAIN_MASK, 0x08));
503 	if (err)
504 		return err;
505 
506 	err = regmap_update_bits(haptics->regmap, AW86927_CONTCFG10_REG,
507 				 AW86927_CONTCFG10_BRK_TIME_MASK,
508 				 FIELD_PREP(AW86927_CONTCFG10_BRK_TIME_MASK,
509 					    AW86927_CONTCFG10_BRK_TIME_DEFAULT));
510 	if (err)
511 		return err;
512 
513 	err = regmap_write(haptics->regmap,
514 			   AW86927_CONTCFG13_REG,
515 			   FIELD_PREP(AW86927_CONTCFG13_TSET_MASK, 0x06) |
516 				FIELD_PREP(AW86927_CONTCFG13_BEME_SET_MASK, 0x02));
517 	if (err)
518 		return err;
519 
520 	err = regmap_update_bits(haptics->regmap,
521 				 AW86927_DETCFG2_REG,
522 				 AW86927_DETCFG2_D2S_GAIN_MASK,
523 				 FIELD_PREP(AW86927_DETCFG2_D2S_GAIN_MASK,
524 					    AW86927_DETCFG2_D2S_GAIN_10));
525 	if (err)
526 		return err;
527 
528 	err = regmap_update_bits(haptics->regmap,
529 				 AW86927_PWMCFG1_REG,
530 				 AW86927_PWMCFG1_PRC_EN_MASK,
531 				 FIELD_PREP(AW86927_PWMCFG1_PRC_EN_MASK,
532 					    AW86927_PWMCFG1_PRC_DISABLE));
533 	if (err)
534 		return err;
535 
536 	err = regmap_write(haptics->regmap,
537 			   AW86927_PWMCFG3_REG,
538 			   FIELD_PREP(AW86927_PWMCFG3_PR_EN_MASK, 0x01) |
539 				FIELD_PREP(AW86927_PWMCFG3_PRCTIME_MASK, 0x3f));
540 	if (err)
541 		return err;
542 
543 	err = regmap_update_bits(haptics->regmap,
544 				 AW86927_PWMCFG4_REG,
545 				 AW86927_PWMCFG4_PRTIME_MASK,
546 				 FIELD_PREP(AW86927_PWMCFG4_PRTIME_MASK, 0x32));
547 	if (err)
548 		return err;
549 
550 	err = regmap_write(haptics->regmap,
551 			   AW86927_TMCFG_REG, AW86927_TMCFG_UNLOCK);
552 	if (err)
553 		return err;
554 
555 	err = regmap_update_bits(haptics->regmap,
556 				 AW86927_ANACFG13_REG,
557 				 AW86927_ANACFG13_BST_PC_MASK,
558 				 FIELD_PREP(AW86927_ANACFG13_BST_PC_MASK,
559 					    AW86927_ANACFG13_BST_PEAKCUR_3P45A));
560 	if (err)
561 		return err;
562 
563 	err = regmap_write(haptics->regmap,
564 			   AW86927_TMCFG_REG, AW86927_TMCFG_LOCK);
565 	if (err)
566 		return err;
567 
568 	err = regmap_update_bits(haptics->regmap,
569 				 AW86927_PLAYCFG1_REG,
570 				 AW86927_PLAYCFG1_BST_VOUT_VREFSET_MASK,
571 				 FIELD_PREP(AW86927_PLAYCFG1_BST_VOUT_VREFSET_MASK,
572 					    AW86927_PLAYCFG1_BST_8500MV));
573 	if (err)
574 		return err;
575 
576 	err = regmap_update_bits(haptics->regmap,
577 				 AW86927_PLAYCFG3_REG,
578 				 AW86927_PLAYCFG3_AUTO_BST_MASK,
579 				 FIELD_PREP(AW86927_PLAYCFG3_AUTO_BST_MASK,
580 					    AW86927_PLAYCFG3_AUTO_BST_DISABLE));
581 	if (err)
582 		return err;
583 
584 	return 0;
585 }
586 
587 static int aw86927_ram_init(struct aw86927_data *haptics)
588 {
589 	int err;
590 
591 	err = aw86927_wait_enter_standby(haptics);
592 	if (err)
593 		return err;
594 
595 	/* Enable SRAM init */
596 	err = regmap_update_bits(haptics->regmap,
597 				 AW86927_SYSCTRL3_REG,
598 				 AW86927_SYSCTRL3_EN_RAMINIT_MASK,
599 				 FIELD_PREP(AW86927_SYSCTRL3_EN_RAMINIT_MASK,
600 					    AW86927_SYSCTRL3_EN_RAMINIT_ON));
601 
602 	/* Set base address for the start of the SRAM waveforms */
603 	err = regmap_write(haptics->regmap,
604 			   AW86927_BASEADDRH_REG, AW86927_BASEADDRH_VAL);
605 	if (err)
606 		return err;
607 
608 	err = regmap_write(haptics->regmap,
609 			   AW86927_BASEADDRL_REG, AW86927_BASEADDRL_VAL);
610 	if (err)
611 		return err;
612 
613 	/* Set start of SRAM, before the data is written it will be the same as the base */
614 	err = regmap_write(haptics->regmap,
615 			   AW86927_RAMADDRH_REG, AW86927_BASEADDRH_VAL);
616 	if (err)
617 		return err;
618 
619 	err = regmap_write(haptics->regmap,
620 			   AW86927_RAMADDRL_REG, AW86927_BASEADDRL_VAL);
621 	if (err)
622 		return err;
623 
624 	/* Write waveform header to SRAM */
625 	err = regmap_noinc_write(haptics->regmap, AW86927_RAMDATA_REG,
626 				 &sram_waveform_header, sizeof(sram_waveform_header));
627 	if (err)
628 		return err;
629 
630 	/* Write waveform to SRAM */
631 	err = regmap_noinc_write(haptics->regmap, AW86927_RAMDATA_REG,
632 				 aw86927_waveform, ARRAY_SIZE(aw86927_waveform));
633 	if (err)
634 		return err;
635 
636 	err = regmap_update_bits(haptics->regmap,
637 				 AW86927_DETCFG2_REG,
638 				 AW86927_DETCFG2_DET_SEQ0_MASK,
639 				 FIELD_PREP(AW86927_DETCFG2_DET_SEQ0_MASK,
640 					    AW86927_DETCFG2_DET_SEQ0_VBAT));
641 	if (err)
642 		return err;
643 
644 	err = regmap_update_bits(haptics->regmap,
645 				 AW86927_DETCFG1_REG,
646 				 AW86927_DETCFG1_DET_GO_MASK,
647 				 FIELD_PREP(AW86927_DETCFG1_DET_GO_MASK,
648 					    AW86927_DETCFG1_DET_GO_DET_SEQ0));
649 	if (err)
650 		return err;
651 
652 	usleep_range(3000, 3500);
653 
654 	err = regmap_update_bits(haptics->regmap,
655 				 AW86927_DETCFG1_REG,
656 				 AW86927_DETCFG1_DET_GO_MASK,
657 				 FIELD_PREP(AW86927_DETCFG1_DET_GO_MASK,
658 					    AW86927_DETCFG1_DET_GO_NA));
659 	if (err)
660 		return err;
661 
662 	/* Disable SRAM init */
663 	err = regmap_update_bits(haptics->regmap,
664 				 AW86927_SYSCTRL3_REG,
665 				 AW86927_SYSCTRL3_EN_RAMINIT_MASK,
666 				 FIELD_PREP(AW86927_SYSCTRL3_EN_RAMINIT_MASK,
667 					    AW86927_SYSCTRL3_EN_RAMINIT_OFF));
668 	if (err)
669 		return err;
670 
671 	return 0;
672 }
673 
674 static irqreturn_t aw86927_irq(int irq, void *data)
675 {
676 	struct aw86927_data *haptics = data;
677 	struct device *dev = &haptics->client->dev;
678 	unsigned int reg_val;
679 	int err;
680 
681 	err = regmap_read(haptics->regmap, AW86927_SYSINT_REG, &reg_val);
682 	if (err) {
683 		dev_err(dev, "Failed to read SYSINT register: %d\n", err);
684 		return IRQ_NONE;
685 	}
686 
687 	if (reg_val & AW86927_SYSINT_BST_SCPI)
688 		dev_err(dev, "Received a Short Circuit Protection interrupt\n");
689 	if (reg_val & AW86927_SYSINT_BST_OVPI)
690 		dev_err(dev, "Received an Over Voltage Protection interrupt\n");
691 	if (reg_val & AW86927_SYSINT_UVLI)
692 		dev_err(dev, "Received an Under Voltage Lock Out interrupt\n");
693 	if (reg_val & AW86927_SYSINT_OCDI)
694 		dev_err(dev, "Received an Over Current interrupt\n");
695 	if (reg_val & AW86927_SYSINT_OTI)
696 		dev_err(dev, "Received an Over Temperature interrupt\n");
697 
698 	if (reg_val & AW86927_SYSINT_DONEI)
699 		dev_dbg(dev, "Chip playback done!\n");
700 	if (reg_val & AW86927_SYSINT_FF_AFI)
701 		dev_dbg(dev, "The RTP mode FIFO is almost full!\n");
702 	if (reg_val & AW86927_SYSINT_FF_AEI)
703 		dev_dbg(dev, "The RTP mode FIFO is almost empty!\n");
704 
705 	return IRQ_HANDLED;
706 }
707 
708 static int aw86927_detect(struct aw86927_data *haptics)
709 {
710 	__be16 read_buf;
711 	u16 chip_id;
712 	int err;
713 
714 	err = regmap_bulk_read(haptics->regmap, AW86927_CHIPIDH_REG, &read_buf, 2);
715 	if (err)
716 		return dev_err_probe(haptics->dev, err, "Failed to read CHIPID registers\n");
717 
718 	chip_id = be16_to_cpu(read_buf);
719 
720 	if (chip_id != AW86927_CHIPID) {
721 		dev_err(haptics->dev, "Unexpected CHIPID value 0x%x\n", chip_id);
722 		return -ENODEV;
723 	}
724 
725 	return 0;
726 }
727 
728 static int aw86927_probe(struct i2c_client *client)
729 {
730 	struct aw86927_data *haptics;
731 	int err;
732 
733 	haptics = devm_kzalloc(&client->dev, sizeof(struct aw86927_data), GFP_KERNEL);
734 	if (!haptics)
735 		return -ENOMEM;
736 
737 	haptics->dev = &client->dev;
738 	haptics->client = client;
739 
740 	i2c_set_clientdata(client, haptics);
741 
742 	haptics->regmap = devm_regmap_init_i2c(client, &aw86927_regmap_config);
743 	if (IS_ERR(haptics->regmap))
744 		return dev_err_probe(haptics->dev, PTR_ERR(haptics->regmap),
745 					"Failed to allocate register map\n");
746 
747 	haptics->input_dev = devm_input_allocate_device(haptics->dev);
748 	if (!haptics->input_dev)
749 		return -ENOMEM;
750 
751 	haptics->reset_gpio = devm_gpiod_get(haptics->dev, "reset", GPIOD_OUT_HIGH);
752 	if (IS_ERR(haptics->reset_gpio))
753 		return dev_err_probe(haptics->dev, PTR_ERR(haptics->reset_gpio),
754 				     "Failed to get reset gpio\n");
755 
756 	/* Hardware reset */
757 	aw86927_hw_reset(haptics);
758 
759 	/* Software reset */
760 	err = regmap_write(haptics->regmap, AW86927_RSTCFG_REG, AW86927_RSTCFG_SOFTRST);
761 	if (err)
762 		return dev_err_probe(haptics->dev, err,	"Failed Software reset\n");
763 
764 	/* Wait ~3ms until I2C is accessible */
765 	usleep_range(3000, 3500);
766 
767 	err = aw86927_detect(haptics);
768 	if (err)
769 		return dev_err_probe(haptics->dev, err, "Failed to find chip\n");
770 
771 	/* IRQ config */
772 	err = regmap_write(haptics->regmap, AW86927_SYSCTRL4_REG,
773 			   FIELD_PREP(AW86927_SYSCTRL4_INT_MODE_MASK,
774 				      AW86927_SYSCTRL4_INT_MODE_EDGE) |
775 				FIELD_PREP(AW86927_SYSCTRL4_INT_EDGE_MODE_MASK,
776 					   AW86927_SYSCTRL4_INT_EDGE_MODE_POS));
777 	if (err)
778 		return dev_err_probe(haptics->dev, err, "Failed to configure interrupt modes\n");
779 
780 	err = regmap_write(haptics->regmap, AW86927_SYSINTM_REG,
781 			   AW86927_SYSINTM_BST_OVPM |
782 				AW86927_SYSINTM_FF_AEM |
783 				AW86927_SYSINTM_FF_AFM |
784 				AW86927_SYSINTM_DONEM);
785 	if (err)
786 		return dev_err_probe(haptics->dev, err, "Failed to configure interrupt masks\n");
787 
788 	err = devm_request_threaded_irq(haptics->dev, client->irq, NULL,
789 					aw86927_irq, IRQF_ONESHOT, NULL, haptics);
790 	if (err)
791 		return dev_err_probe(haptics->dev, err, "Failed to request threaded irq\n");
792 
793 	INIT_WORK(&haptics->play_work, aw86927_haptics_play_work);
794 
795 	haptics->input_dev->name = "aw86927-haptics";
796 	haptics->input_dev->close = aw86927_close;
797 
798 	input_set_drvdata(haptics->input_dev, haptics);
799 	input_set_capability(haptics->input_dev, EV_FF, FF_RUMBLE);
800 
801 	err = input_ff_create_memless(haptics->input_dev, NULL, aw86927_haptics_play);
802 	if (err)
803 		return dev_err_probe(haptics->dev, err, "Failed to create FF dev\n");
804 
805 	/* Set up registers */
806 	err = aw86927_play_mode(haptics, AW86927_STANDBY_MODE);
807 	if (err)
808 		return dev_err_probe(haptics->dev, err,
809 				     "Failed to enter standby for Haptic init\n");
810 
811 	err = aw86927_haptic_init(haptics);
812 	if (err)
813 		return dev_err_probe(haptics->dev, err, "Haptic init failed\n");
814 
815 	/* RAM init, upload the waveform for playback */
816 	err = aw86927_ram_init(haptics);
817 	if (err)
818 		return dev_err_probe(haptics->dev, err, "Failed to init aw86927 sram\n");
819 
820 	err = input_register_device(haptics->input_dev);
821 	if (err)
822 		return dev_err_probe(haptics->dev, err, "Failed to register input device\n");
823 
824 	return 0;
825 }
826 
827 static const struct of_device_id aw86927_of_id[] = {
828 	{ .compatible = "awinic,aw86927" },
829 	{ /* sentinel */ }
830 };
831 
832 MODULE_DEVICE_TABLE(of, aw86927_of_id);
833 
834 static struct i2c_driver aw86927_driver = {
835 	.driver = {
836 		.name = "aw86927-haptics",
837 		.of_match_table = aw86927_of_id,
838 	},
839 	.probe = aw86927_probe,
840 };
841 
842 module_i2c_driver(aw86927_driver);
843 
844 MODULE_AUTHOR("Griffin Kroah-Hartman <griffin.kroah@fairphone.com>");
845 MODULE_DESCRIPTION("AWINIC AW86927 LRA Haptic Driver");
846 MODULE_LICENSE("GPL");
847