xref: /openbmc/linux/drivers/mfd/arizona-core.c (revision dc0c386e)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Arizona core driver
4  *
5  * Copyright 2012 Wolfson Microelectronics plc
6  *
7  * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
8  */
9 
10 #include <linux/clk.h>
11 #include <linux/delay.h>
12 #include <linux/err.h>
13 #include <linux/gpio/consumer.h>
14 #include <linux/interrupt.h>
15 #include <linux/mfd/core.h>
16 #include <linux/module.h>
17 #include <linux/of.h>
18 #include <linux/pm_runtime.h>
19 #include <linux/regmap.h>
20 #include <linux/regulator/consumer.h>
21 #include <linux/regulator/machine.h>
22 #include <linux/slab.h>
23 #include <linux/ktime.h>
24 #include <linux/platform_device.h>
25 
26 #include <linux/mfd/arizona/core.h>
27 #include <linux/mfd/arizona/registers.h>
28 
29 #include "arizona.h"
30 
31 static const char * const wm5102_core_supplies[] = {
32 	"AVDD",
33 	"DBVDD1",
34 };
35 
arizona_clk32k_enable(struct arizona * arizona)36 int arizona_clk32k_enable(struct arizona *arizona)
37 {
38 	int ret = 0;
39 
40 	mutex_lock(&arizona->clk_lock);
41 
42 	arizona->clk32k_ref++;
43 
44 	if (arizona->clk32k_ref == 1) {
45 		switch (arizona->pdata.clk32k_src) {
46 		case ARIZONA_32KZ_MCLK1:
47 			ret = pm_runtime_resume_and_get(arizona->dev);
48 			if (ret != 0)
49 				goto err_ref;
50 			ret = clk_prepare_enable(arizona->mclk[ARIZONA_MCLK1]);
51 			if (ret != 0) {
52 				pm_runtime_put_sync(arizona->dev);
53 				goto err_ref;
54 			}
55 			break;
56 		case ARIZONA_32KZ_MCLK2:
57 			ret = clk_prepare_enable(arizona->mclk[ARIZONA_MCLK2]);
58 			if (ret != 0)
59 				goto err_ref;
60 			break;
61 		}
62 
63 		ret = regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
64 					 ARIZONA_CLK_32K_ENA,
65 					 ARIZONA_CLK_32K_ENA);
66 	}
67 
68 err_ref:
69 	if (ret != 0)
70 		arizona->clk32k_ref--;
71 
72 	mutex_unlock(&arizona->clk_lock);
73 
74 	return ret;
75 }
76 EXPORT_SYMBOL_GPL(arizona_clk32k_enable);
77 
arizona_clk32k_disable(struct arizona * arizona)78 int arizona_clk32k_disable(struct arizona *arizona)
79 {
80 	mutex_lock(&arizona->clk_lock);
81 
82 	WARN_ON(arizona->clk32k_ref <= 0);
83 
84 	arizona->clk32k_ref--;
85 
86 	if (arizona->clk32k_ref == 0) {
87 		regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
88 				   ARIZONA_CLK_32K_ENA, 0);
89 
90 		switch (arizona->pdata.clk32k_src) {
91 		case ARIZONA_32KZ_MCLK1:
92 			pm_runtime_put_sync(arizona->dev);
93 			clk_disable_unprepare(arizona->mclk[ARIZONA_MCLK1]);
94 			break;
95 		case ARIZONA_32KZ_MCLK2:
96 			clk_disable_unprepare(arizona->mclk[ARIZONA_MCLK2]);
97 			break;
98 		}
99 	}
100 
101 	mutex_unlock(&arizona->clk_lock);
102 
103 	return 0;
104 }
105 EXPORT_SYMBOL_GPL(arizona_clk32k_disable);
106 
arizona_clkgen_err(int irq,void * data)107 static irqreturn_t arizona_clkgen_err(int irq, void *data)
108 {
109 	struct arizona *arizona = data;
110 
111 	dev_err(arizona->dev, "CLKGEN error\n");
112 
113 	return IRQ_HANDLED;
114 }
115 
arizona_underclocked(int irq,void * data)116 static irqreturn_t arizona_underclocked(int irq, void *data)
117 {
118 	struct arizona *arizona = data;
119 	unsigned int val;
120 	int ret;
121 
122 	ret = regmap_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_8,
123 			  &val);
124 	if (ret != 0) {
125 		dev_err(arizona->dev, "Failed to read underclock status: %d\n",
126 			ret);
127 		return IRQ_NONE;
128 	}
129 
130 	if (val & ARIZONA_AIF3_UNDERCLOCKED_STS)
131 		dev_err(arizona->dev, "AIF3 underclocked\n");
132 	if (val & ARIZONA_AIF2_UNDERCLOCKED_STS)
133 		dev_err(arizona->dev, "AIF2 underclocked\n");
134 	if (val & ARIZONA_AIF1_UNDERCLOCKED_STS)
135 		dev_err(arizona->dev, "AIF1 underclocked\n");
136 	if (val & ARIZONA_ISRC3_UNDERCLOCKED_STS)
137 		dev_err(arizona->dev, "ISRC3 underclocked\n");
138 	if (val & ARIZONA_ISRC2_UNDERCLOCKED_STS)
139 		dev_err(arizona->dev, "ISRC2 underclocked\n");
140 	if (val & ARIZONA_ISRC1_UNDERCLOCKED_STS)
141 		dev_err(arizona->dev, "ISRC1 underclocked\n");
142 	if (val & ARIZONA_FX_UNDERCLOCKED_STS)
143 		dev_err(arizona->dev, "FX underclocked\n");
144 	if (val & ARIZONA_ASRC_UNDERCLOCKED_STS)
145 		dev_err(arizona->dev, "ASRC underclocked\n");
146 	if (val & ARIZONA_DAC_UNDERCLOCKED_STS)
147 		dev_err(arizona->dev, "DAC underclocked\n");
148 	if (val & ARIZONA_ADC_UNDERCLOCKED_STS)
149 		dev_err(arizona->dev, "ADC underclocked\n");
150 	if (val & ARIZONA_MIXER_UNDERCLOCKED_STS)
151 		dev_err(arizona->dev, "Mixer dropped sample\n");
152 
153 	return IRQ_HANDLED;
154 }
155 
arizona_overclocked(int irq,void * data)156 static irqreturn_t arizona_overclocked(int irq, void *data)
157 {
158 	struct arizona *arizona = data;
159 	unsigned int val[3];
160 	int ret;
161 
162 	ret = regmap_bulk_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_6,
163 			       &val[0], 3);
164 	if (ret != 0) {
165 		dev_err(arizona->dev, "Failed to read overclock status: %d\n",
166 			ret);
167 		return IRQ_NONE;
168 	}
169 
170 	switch (arizona->type) {
171 	case WM8998:
172 	case WM1814:
173 		/* Some bits are shifted on WM8998,
174 		 * rearrange to match the standard bit layout
175 		 */
176 		val[0] = ((val[0] & 0x60e0) >> 1) |
177 			 ((val[0] & 0x1e00) >> 2) |
178 			 (val[0] & 0x000f);
179 		break;
180 	default:
181 		break;
182 	}
183 
184 	if (val[0] & ARIZONA_PWM_OVERCLOCKED_STS)
185 		dev_err(arizona->dev, "PWM overclocked\n");
186 	if (val[0] & ARIZONA_FX_CORE_OVERCLOCKED_STS)
187 		dev_err(arizona->dev, "FX core overclocked\n");
188 	if (val[0] & ARIZONA_DAC_SYS_OVERCLOCKED_STS)
189 		dev_err(arizona->dev, "DAC SYS overclocked\n");
190 	if (val[0] & ARIZONA_DAC_WARP_OVERCLOCKED_STS)
191 		dev_err(arizona->dev, "DAC WARP overclocked\n");
192 	if (val[0] & ARIZONA_ADC_OVERCLOCKED_STS)
193 		dev_err(arizona->dev, "ADC overclocked\n");
194 	if (val[0] & ARIZONA_MIXER_OVERCLOCKED_STS)
195 		dev_err(arizona->dev, "Mixer overclocked\n");
196 	if (val[0] & ARIZONA_AIF3_SYNC_OVERCLOCKED_STS)
197 		dev_err(arizona->dev, "AIF3 overclocked\n");
198 	if (val[0] & ARIZONA_AIF2_SYNC_OVERCLOCKED_STS)
199 		dev_err(arizona->dev, "AIF2 overclocked\n");
200 	if (val[0] & ARIZONA_AIF1_SYNC_OVERCLOCKED_STS)
201 		dev_err(arizona->dev, "AIF1 overclocked\n");
202 	if (val[0] & ARIZONA_PAD_CTRL_OVERCLOCKED_STS)
203 		dev_err(arizona->dev, "Pad control overclocked\n");
204 
205 	if (val[1] & ARIZONA_SLIMBUS_SUBSYS_OVERCLOCKED_STS)
206 		dev_err(arizona->dev, "Slimbus subsystem overclocked\n");
207 	if (val[1] & ARIZONA_SLIMBUS_ASYNC_OVERCLOCKED_STS)
208 		dev_err(arizona->dev, "Slimbus async overclocked\n");
209 	if (val[1] & ARIZONA_SLIMBUS_SYNC_OVERCLOCKED_STS)
210 		dev_err(arizona->dev, "Slimbus sync overclocked\n");
211 	if (val[1] & ARIZONA_ASRC_ASYNC_SYS_OVERCLOCKED_STS)
212 		dev_err(arizona->dev, "ASRC async system overclocked\n");
213 	if (val[1] & ARIZONA_ASRC_ASYNC_WARP_OVERCLOCKED_STS)
214 		dev_err(arizona->dev, "ASRC async WARP overclocked\n");
215 	if (val[1] & ARIZONA_ASRC_SYNC_SYS_OVERCLOCKED_STS)
216 		dev_err(arizona->dev, "ASRC sync system overclocked\n");
217 	if (val[1] & ARIZONA_ASRC_SYNC_WARP_OVERCLOCKED_STS)
218 		dev_err(arizona->dev, "ASRC sync WARP overclocked\n");
219 	if (val[1] & ARIZONA_ADSP2_1_OVERCLOCKED_STS)
220 		dev_err(arizona->dev, "DSP1 overclocked\n");
221 	if (val[1] & ARIZONA_ISRC3_OVERCLOCKED_STS)
222 		dev_err(arizona->dev, "ISRC3 overclocked\n");
223 	if (val[1] & ARIZONA_ISRC2_OVERCLOCKED_STS)
224 		dev_err(arizona->dev, "ISRC2 overclocked\n");
225 	if (val[1] & ARIZONA_ISRC1_OVERCLOCKED_STS)
226 		dev_err(arizona->dev, "ISRC1 overclocked\n");
227 
228 	if (val[2] & ARIZONA_SPDIF_OVERCLOCKED_STS)
229 		dev_err(arizona->dev, "SPDIF overclocked\n");
230 
231 	return IRQ_HANDLED;
232 }
233 
234 #define ARIZONA_REG_POLL_DELAY_US 7500
235 
arizona_poll_reg_delay(ktime_t timeout)236 static inline bool arizona_poll_reg_delay(ktime_t timeout)
237 {
238 	if (ktime_compare(ktime_get(), timeout) > 0)
239 		return false;
240 
241 	usleep_range(ARIZONA_REG_POLL_DELAY_US / 2, ARIZONA_REG_POLL_DELAY_US);
242 
243 	return true;
244 }
245 
arizona_poll_reg(struct arizona * arizona,int timeout_ms,unsigned int reg,unsigned int mask,unsigned int target)246 static int arizona_poll_reg(struct arizona *arizona,
247 			    int timeout_ms, unsigned int reg,
248 			    unsigned int mask, unsigned int target)
249 {
250 	ktime_t timeout = ktime_add_us(ktime_get(), timeout_ms * USEC_PER_MSEC);
251 	unsigned int val = 0;
252 	int ret;
253 
254 	do {
255 		ret = regmap_read(arizona->regmap, reg, &val);
256 
257 		if ((val & mask) == target)
258 			return 0;
259 	} while (arizona_poll_reg_delay(timeout));
260 
261 	if (ret) {
262 		dev_err(arizona->dev, "Failed polling reg 0x%x: %d\n",
263 			reg, ret);
264 		return ret;
265 	}
266 
267 	dev_err(arizona->dev, "Polling reg 0x%x timed out: %x\n", reg, val);
268 	return -ETIMEDOUT;
269 }
270 
arizona_wait_for_boot(struct arizona * arizona)271 static int arizona_wait_for_boot(struct arizona *arizona)
272 {
273 	int ret;
274 
275 	/*
276 	 * We can't use an interrupt as we need to runtime resume to do so,
277 	 * we won't race with the interrupt handler as it'll be blocked on
278 	 * runtime resume.
279 	 */
280 	ret = arizona_poll_reg(arizona, 30, ARIZONA_INTERRUPT_RAW_STATUS_5,
281 			       ARIZONA_BOOT_DONE_STS, ARIZONA_BOOT_DONE_STS);
282 
283 	if (!ret)
284 		regmap_write(arizona->regmap, ARIZONA_INTERRUPT_STATUS_5,
285 			     ARIZONA_BOOT_DONE_STS);
286 
287 	pm_runtime_mark_last_busy(arizona->dev);
288 
289 	return ret;
290 }
291 
arizona_enable_reset(struct arizona * arizona)292 static inline void arizona_enable_reset(struct arizona *arizona)
293 {
294 	if (arizona->pdata.reset)
295 		gpiod_set_raw_value_cansleep(arizona->pdata.reset, 0);
296 }
297 
arizona_disable_reset(struct arizona * arizona)298 static void arizona_disable_reset(struct arizona *arizona)
299 {
300 	if (arizona->pdata.reset) {
301 		switch (arizona->type) {
302 		case WM5110:
303 		case WM8280:
304 			/* Meet requirements for minimum reset duration */
305 			usleep_range(5000, 10000);
306 			break;
307 		default:
308 			break;
309 		}
310 
311 		gpiod_set_raw_value_cansleep(arizona->pdata.reset, 1);
312 		usleep_range(1000, 5000);
313 	}
314 }
315 
316 struct arizona_sysclk_state {
317 	unsigned int fll;
318 	unsigned int sysclk;
319 };
320 
arizona_enable_freerun_sysclk(struct arizona * arizona,struct arizona_sysclk_state * state)321 static int arizona_enable_freerun_sysclk(struct arizona *arizona,
322 					 struct arizona_sysclk_state *state)
323 {
324 	int ret, err;
325 
326 	/* Cache existing FLL and SYSCLK settings */
327 	ret = regmap_read(arizona->regmap, ARIZONA_FLL1_CONTROL_1, &state->fll);
328 	if (ret) {
329 		dev_err(arizona->dev, "Failed to cache FLL settings: %d\n",
330 			ret);
331 		return ret;
332 	}
333 	ret = regmap_read(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1,
334 			  &state->sysclk);
335 	if (ret) {
336 		dev_err(arizona->dev, "Failed to cache SYSCLK settings: %d\n",
337 			ret);
338 		return ret;
339 	}
340 
341 	/* Start up SYSCLK using the FLL in free running mode */
342 	ret = regmap_write(arizona->regmap, ARIZONA_FLL1_CONTROL_1,
343 			ARIZONA_FLL1_ENA | ARIZONA_FLL1_FREERUN);
344 	if (ret) {
345 		dev_err(arizona->dev,
346 			"Failed to start FLL in freerunning mode: %d\n",
347 			ret);
348 		return ret;
349 	}
350 	ret = arizona_poll_reg(arizona, 180, ARIZONA_INTERRUPT_RAW_STATUS_5,
351 			       ARIZONA_FLL1_CLOCK_OK_STS,
352 			       ARIZONA_FLL1_CLOCK_OK_STS);
353 	if (ret)
354 		goto err_fll;
355 
356 	ret = regmap_write(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, 0x0144);
357 	if (ret) {
358 		dev_err(arizona->dev, "Failed to start SYSCLK: %d\n", ret);
359 		goto err_fll;
360 	}
361 
362 	return 0;
363 
364 err_fll:
365 	err = regmap_write(arizona->regmap, ARIZONA_FLL1_CONTROL_1, state->fll);
366 	if (err)
367 		dev_err(arizona->dev,
368 			"Failed to re-apply old FLL settings: %d\n", err);
369 
370 	return ret;
371 }
372 
arizona_disable_freerun_sysclk(struct arizona * arizona,struct arizona_sysclk_state * state)373 static int arizona_disable_freerun_sysclk(struct arizona *arizona,
374 					  struct arizona_sysclk_state *state)
375 {
376 	int ret;
377 
378 	ret = regmap_write(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1,
379 			   state->sysclk);
380 	if (ret) {
381 		dev_err(arizona->dev,
382 			"Failed to re-apply old SYSCLK settings: %d\n", ret);
383 		return ret;
384 	}
385 
386 	ret = regmap_write(arizona->regmap, ARIZONA_FLL1_CONTROL_1, state->fll);
387 	if (ret) {
388 		dev_err(arizona->dev,
389 			"Failed to re-apply old FLL settings: %d\n", ret);
390 		return ret;
391 	}
392 
393 	return 0;
394 }
395 
wm5102_apply_hardware_patch(struct arizona * arizona)396 static int wm5102_apply_hardware_patch(struct arizona *arizona)
397 {
398 	struct arizona_sysclk_state state;
399 	int err, ret;
400 
401 	ret = arizona_enable_freerun_sysclk(arizona, &state);
402 	if (ret)
403 		return ret;
404 
405 	/* Start the write sequencer and wait for it to finish */
406 	ret = regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_0,
407 			   ARIZONA_WSEQ_ENA | ARIZONA_WSEQ_START | 160);
408 	if (ret) {
409 		dev_err(arizona->dev, "Failed to start write sequencer: %d\n",
410 			ret);
411 		goto err;
412 	}
413 
414 	ret = arizona_poll_reg(arizona, 30, ARIZONA_WRITE_SEQUENCER_CTRL_1,
415 			       ARIZONA_WSEQ_BUSY, 0);
416 	if (ret)
417 		regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_0,
418 			     ARIZONA_WSEQ_ABORT);
419 
420 err:
421 	err = arizona_disable_freerun_sysclk(arizona, &state);
422 
423 	return ret ?: err;
424 }
425 
426 /*
427  * Register patch to some of the CODECs internal write sequences
428  * to ensure a clean exit from the low power sleep state.
429  */
430 static const struct reg_sequence wm5110_sleep_patch[] = {
431 	{ 0x337A, 0xC100 },
432 	{ 0x337B, 0x0041 },
433 	{ 0x3300, 0xA210 },
434 	{ 0x3301, 0x050C },
435 };
436 
wm5110_apply_sleep_patch(struct arizona * arizona)437 static int wm5110_apply_sleep_patch(struct arizona *arizona)
438 {
439 	struct arizona_sysclk_state state;
440 	int err, ret;
441 
442 	ret = arizona_enable_freerun_sysclk(arizona, &state);
443 	if (ret)
444 		return ret;
445 
446 	ret = regmap_multi_reg_write_bypassed(arizona->regmap,
447 					      wm5110_sleep_patch,
448 					      ARRAY_SIZE(wm5110_sleep_patch));
449 
450 	err = arizona_disable_freerun_sysclk(arizona, &state);
451 
452 	return ret ?: err;
453 }
454 
wm5102_clear_write_sequencer(struct arizona * arizona)455 static int wm5102_clear_write_sequencer(struct arizona *arizona)
456 {
457 	int ret;
458 
459 	ret = regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_3,
460 			   0x0);
461 	if (ret) {
462 		dev_err(arizona->dev,
463 			"Failed to clear write sequencer state: %d\n", ret);
464 		return ret;
465 	}
466 
467 	arizona_enable_reset(arizona);
468 	regulator_disable(arizona->dcvdd);
469 
470 	msleep(20);
471 
472 	ret = regulator_enable(arizona->dcvdd);
473 	if (ret) {
474 		dev_err(arizona->dev, "Failed to re-enable DCVDD: %d\n", ret);
475 		return ret;
476 	}
477 	arizona_disable_reset(arizona);
478 
479 	return 0;
480 }
481 
arizona_isolate_dcvdd(struct arizona * arizona)482 static int arizona_isolate_dcvdd(struct arizona *arizona)
483 {
484 	int ret;
485 
486 	ret = regmap_update_bits(arizona->regmap,
487 				 ARIZONA_ISOLATION_CONTROL,
488 				 ARIZONA_ISOLATE_DCVDD1,
489 				 ARIZONA_ISOLATE_DCVDD1);
490 	if (ret != 0)
491 		dev_err(arizona->dev, "Failed to isolate DCVDD: %d\n", ret);
492 
493 	return ret;
494 }
495 
arizona_connect_dcvdd(struct arizona * arizona)496 static int arizona_connect_dcvdd(struct arizona *arizona)
497 {
498 	int ret;
499 
500 	ret = regmap_update_bits(arizona->regmap,
501 				 ARIZONA_ISOLATION_CONTROL,
502 				 ARIZONA_ISOLATE_DCVDD1, 0);
503 	if (ret != 0)
504 		dev_err(arizona->dev, "Failed to connect DCVDD: %d\n", ret);
505 
506 	return ret;
507 }
508 
arizona_is_jack_det_active(struct arizona * arizona)509 static int arizona_is_jack_det_active(struct arizona *arizona)
510 {
511 	unsigned int val;
512 	int ret;
513 
514 	ret = regmap_read(arizona->regmap, ARIZONA_JACK_DETECT_ANALOGUE, &val);
515 	if (ret) {
516 		dev_err(arizona->dev,
517 			"Failed to check jack det status: %d\n", ret);
518 		return ret;
519 	} else if (val & ARIZONA_JD1_ENA) {
520 		return 1;
521 	} else {
522 		return 0;
523 	}
524 }
525 
arizona_runtime_resume(struct device * dev)526 static int arizona_runtime_resume(struct device *dev)
527 {
528 	struct arizona *arizona = dev_get_drvdata(dev);
529 	int ret;
530 
531 	dev_dbg(arizona->dev, "Leaving AoD mode\n");
532 
533 	if (arizona->has_fully_powered_off) {
534 		dev_dbg(arizona->dev, "Re-enabling core supplies\n");
535 
536 		ret = regulator_bulk_enable(arizona->num_core_supplies,
537 					    arizona->core_supplies);
538 		if (ret) {
539 			dev_err(dev, "Failed to enable core supplies: %d\n",
540 				ret);
541 			return ret;
542 		}
543 	}
544 
545 	ret = regulator_enable(arizona->dcvdd);
546 	if (ret != 0) {
547 		dev_err(arizona->dev, "Failed to enable DCVDD: %d\n", ret);
548 		if (arizona->has_fully_powered_off)
549 			regulator_bulk_disable(arizona->num_core_supplies,
550 					       arizona->core_supplies);
551 		return ret;
552 	}
553 
554 	if (arizona->has_fully_powered_off) {
555 		arizona_disable_reset(arizona);
556 		enable_irq(arizona->irq);
557 		arizona->has_fully_powered_off = false;
558 	}
559 
560 	regcache_cache_only(arizona->regmap, false);
561 
562 	switch (arizona->type) {
563 	case WM5102:
564 		if (arizona->external_dcvdd) {
565 			ret = arizona_connect_dcvdd(arizona);
566 			if (ret != 0)
567 				goto err;
568 		}
569 
570 		ret = wm5102_patch(arizona);
571 		if (ret != 0) {
572 			dev_err(arizona->dev, "Failed to apply patch: %d\n",
573 				ret);
574 			goto err;
575 		}
576 
577 		ret = wm5102_apply_hardware_patch(arizona);
578 		if (ret) {
579 			dev_err(arizona->dev,
580 				"Failed to apply hardware patch: %d\n",
581 				ret);
582 			goto err;
583 		}
584 		break;
585 	case WM5110:
586 	case WM8280:
587 		ret = arizona_wait_for_boot(arizona);
588 		if (ret)
589 			goto err;
590 
591 		if (arizona->external_dcvdd) {
592 			ret = arizona_connect_dcvdd(arizona);
593 			if (ret != 0)
594 				goto err;
595 		} else {
596 			/*
597 			 * As this is only called for the internal regulator
598 			 * (where we know voltage ranges available) it is ok
599 			 * to request an exact range.
600 			 */
601 			ret = regulator_set_voltage(arizona->dcvdd,
602 						    1200000, 1200000);
603 			if (ret < 0) {
604 				dev_err(arizona->dev,
605 					"Failed to set resume voltage: %d\n",
606 					ret);
607 				goto err;
608 			}
609 		}
610 
611 		ret = wm5110_apply_sleep_patch(arizona);
612 		if (ret) {
613 			dev_err(arizona->dev,
614 				"Failed to re-apply sleep patch: %d\n",
615 				ret);
616 			goto err;
617 		}
618 		break;
619 	case WM1831:
620 	case CS47L24:
621 		ret = arizona_wait_for_boot(arizona);
622 		if (ret != 0)
623 			goto err;
624 		break;
625 	default:
626 		ret = arizona_wait_for_boot(arizona);
627 		if (ret != 0)
628 			goto err;
629 
630 		if (arizona->external_dcvdd) {
631 			ret = arizona_connect_dcvdd(arizona);
632 			if (ret != 0)
633 				goto err;
634 		}
635 		break;
636 	}
637 
638 	ret = regcache_sync(arizona->regmap);
639 	if (ret != 0) {
640 		dev_err(arizona->dev, "Failed to restore register cache\n");
641 		goto err;
642 	}
643 
644 	return 0;
645 
646 err:
647 	regcache_cache_only(arizona->regmap, true);
648 	regulator_disable(arizona->dcvdd);
649 	return ret;
650 }
651 
arizona_runtime_suspend(struct device * dev)652 static int arizona_runtime_suspend(struct device *dev)
653 {
654 	struct arizona *arizona = dev_get_drvdata(dev);
655 	int jd_active = 0;
656 	int ret;
657 
658 	dev_dbg(arizona->dev, "Entering AoD mode\n");
659 
660 	switch (arizona->type) {
661 	case WM5110:
662 	case WM8280:
663 		jd_active = arizona_is_jack_det_active(arizona);
664 		if (jd_active < 0)
665 			return jd_active;
666 
667 		if (arizona->external_dcvdd) {
668 			ret = arizona_isolate_dcvdd(arizona);
669 			if (ret != 0)
670 				return ret;
671 		} else {
672 			/*
673 			 * As this is only called for the internal regulator
674 			 * (where we know voltage ranges available) it is ok
675 			 * to request an exact range.
676 			 */
677 			ret = regulator_set_voltage(arizona->dcvdd,
678 						    1175000, 1175000);
679 			if (ret < 0) {
680 				dev_err(arizona->dev,
681 					"Failed to set suspend voltage: %d\n",
682 					ret);
683 				return ret;
684 			}
685 		}
686 		break;
687 	case WM5102:
688 		jd_active = arizona_is_jack_det_active(arizona);
689 		if (jd_active < 0)
690 			return jd_active;
691 
692 		if (arizona->external_dcvdd) {
693 			ret = arizona_isolate_dcvdd(arizona);
694 			if (ret != 0)
695 				return ret;
696 		}
697 
698 		if (!jd_active) {
699 			ret = regmap_write(arizona->regmap,
700 					   ARIZONA_WRITE_SEQUENCER_CTRL_3, 0x0);
701 			if (ret) {
702 				dev_err(arizona->dev,
703 					"Failed to clear write sequencer: %d\n",
704 					ret);
705 				return ret;
706 			}
707 		}
708 		break;
709 	case WM1831:
710 	case CS47L24:
711 		break;
712 	default:
713 		jd_active = arizona_is_jack_det_active(arizona);
714 		if (jd_active < 0)
715 			return jd_active;
716 
717 		if (arizona->external_dcvdd) {
718 			ret = arizona_isolate_dcvdd(arizona);
719 			if (ret != 0)
720 				return ret;
721 		}
722 		break;
723 	}
724 
725 	regcache_cache_only(arizona->regmap, true);
726 	regcache_mark_dirty(arizona->regmap);
727 	regulator_disable(arizona->dcvdd);
728 
729 	/* Allow us to completely power down if no jack detection */
730 	if (!jd_active) {
731 		dev_dbg(arizona->dev, "Fully powering off\n");
732 
733 		arizona->has_fully_powered_off = true;
734 
735 		disable_irq_nosync(arizona->irq);
736 		arizona_enable_reset(arizona);
737 		regulator_bulk_disable(arizona->num_core_supplies,
738 				       arizona->core_supplies);
739 	}
740 
741 	return 0;
742 }
743 
arizona_suspend(struct device * dev)744 static int arizona_suspend(struct device *dev)
745 {
746 	struct arizona *arizona = dev_get_drvdata(dev);
747 
748 	dev_dbg(arizona->dev, "Suspend, disabling IRQ\n");
749 	disable_irq(arizona->irq);
750 
751 	return 0;
752 }
753 
arizona_suspend_noirq(struct device * dev)754 static int arizona_suspend_noirq(struct device *dev)
755 {
756 	struct arizona *arizona = dev_get_drvdata(dev);
757 
758 	dev_dbg(arizona->dev, "Late suspend, reenabling IRQ\n");
759 	enable_irq(arizona->irq);
760 
761 	return 0;
762 }
763 
arizona_resume_noirq(struct device * dev)764 static int arizona_resume_noirq(struct device *dev)
765 {
766 	struct arizona *arizona = dev_get_drvdata(dev);
767 
768 	dev_dbg(arizona->dev, "Early resume, disabling IRQ\n");
769 	disable_irq(arizona->irq);
770 
771 	return 0;
772 }
773 
arizona_resume(struct device * dev)774 static int arizona_resume(struct device *dev)
775 {
776 	struct arizona *arizona = dev_get_drvdata(dev);
777 
778 	dev_dbg(arizona->dev, "Resume, reenabling IRQ\n");
779 	enable_irq(arizona->irq);
780 
781 	return 0;
782 }
783 
784 EXPORT_GPL_DEV_PM_OPS(arizona_pm_ops) = {
785 	RUNTIME_PM_OPS(arizona_runtime_suspend,
786 		       arizona_runtime_resume,
787 		       NULL)
788 	SYSTEM_SLEEP_PM_OPS(arizona_suspend, arizona_resume)
789 	NOIRQ_SYSTEM_SLEEP_PM_OPS(arizona_suspend_noirq,
790 				  arizona_resume_noirq)
791 };
792 
793 #ifdef CONFIG_OF
arizona_of_get_core_pdata(struct arizona * arizona)794 static int arizona_of_get_core_pdata(struct arizona *arizona)
795 {
796 	struct arizona_pdata *pdata = &arizona->pdata;
797 	int ret, i;
798 
799 	/* Handle old non-standard DT binding */
800 	pdata->reset = devm_gpiod_get(arizona->dev, "wlf,reset", GPIOD_OUT_LOW);
801 	if (IS_ERR(pdata->reset)) {
802 		ret = PTR_ERR(pdata->reset);
803 
804 		/*
805 		 * Reset missing will be caught when other binding is read
806 		 * but all other errors imply this binding is in use but has
807 		 * encountered a problem so should be handled.
808 		 */
809 		if (ret == -EPROBE_DEFER)
810 			return ret;
811 		else if (ret != -ENOENT && ret != -ENOSYS)
812 			dev_err(arizona->dev, "Reset GPIO malformed: %d\n",
813 				ret);
814 
815 		pdata->reset = NULL;
816 	}
817 
818 	ret = of_property_read_u32_array(arizona->dev->of_node,
819 					 "wlf,gpio-defaults",
820 					 pdata->gpio_defaults,
821 					 ARRAY_SIZE(pdata->gpio_defaults));
822 	if (ret >= 0) {
823 		/*
824 		 * All values are literal except out of range values
825 		 * which are chip default, translate into platform
826 		 * data which uses 0 as chip default and out of range
827 		 * as zero.
828 		 */
829 		for (i = 0; i < ARRAY_SIZE(pdata->gpio_defaults); i++) {
830 			if (pdata->gpio_defaults[i] > 0xffff)
831 				pdata->gpio_defaults[i] = 0;
832 			else if (pdata->gpio_defaults[i] == 0)
833 				pdata->gpio_defaults[i] = 0x10000;
834 		}
835 	} else {
836 		dev_err(arizona->dev, "Failed to parse GPIO defaults: %d\n",
837 			ret);
838 	}
839 
840 	return 0;
841 }
842 #else
arizona_of_get_core_pdata(struct arizona * arizona)843 static inline int arizona_of_get_core_pdata(struct arizona *arizona)
844 {
845 	return 0;
846 }
847 #endif
848 
849 static const struct mfd_cell early_devs[] = {
850 	{ .name = "arizona-ldo1" },
851 };
852 
853 static const char * const wm5102_supplies[] = {
854 	"MICVDD",
855 	"DBVDD2",
856 	"DBVDD3",
857 	"CPVDD",
858 	"SPKVDDL",
859 	"SPKVDDR",
860 };
861 
862 static const struct mfd_cell wm5102_devs[] = {
863 	{ .name = "arizona-micsupp" },
864 	{ .name = "arizona-gpio" },
865 	{ .name = "arizona-haptics" },
866 	{ .name = "arizona-pwm" },
867 	{
868 		.name = "wm5102-codec",
869 		.parent_supplies = wm5102_supplies,
870 		.num_parent_supplies = ARRAY_SIZE(wm5102_supplies),
871 	},
872 };
873 
874 static const struct mfd_cell wm5110_devs[] = {
875 	{ .name = "arizona-micsupp" },
876 	{ .name = "arizona-gpio" },
877 	{ .name = "arizona-haptics" },
878 	{ .name = "arizona-pwm" },
879 	{
880 		.name = "wm5110-codec",
881 		.parent_supplies = wm5102_supplies,
882 		.num_parent_supplies = ARRAY_SIZE(wm5102_supplies),
883 	},
884 };
885 
886 static const char * const cs47l24_supplies[] = {
887 	"MICVDD",
888 	"CPVDD",
889 	"SPKVDD",
890 };
891 
892 static const struct mfd_cell cs47l24_devs[] = {
893 	{ .name = "arizona-gpio" },
894 	{ .name = "arizona-haptics" },
895 	{ .name = "arizona-pwm" },
896 	{
897 		.name = "cs47l24-codec",
898 		.parent_supplies = cs47l24_supplies,
899 		.num_parent_supplies = ARRAY_SIZE(cs47l24_supplies),
900 	},
901 };
902 
903 static const char * const wm8997_supplies[] = {
904 	"MICVDD",
905 	"DBVDD2",
906 	"CPVDD",
907 	"SPKVDD",
908 };
909 
910 static const struct mfd_cell wm8997_devs[] = {
911 	{ .name = "arizona-micsupp" },
912 	{ .name = "arizona-gpio" },
913 	{ .name = "arizona-haptics" },
914 	{ .name = "arizona-pwm" },
915 	{
916 		.name = "wm8997-codec",
917 		.parent_supplies = wm8997_supplies,
918 		.num_parent_supplies = ARRAY_SIZE(wm8997_supplies),
919 	},
920 };
921 
922 static const struct mfd_cell wm8998_devs[] = {
923 	{ .name = "arizona-micsupp" },
924 	{ .name = "arizona-gpio" },
925 	{ .name = "arizona-haptics" },
926 	{ .name = "arizona-pwm" },
927 	{
928 		.name = "wm8998-codec",
929 		.parent_supplies = wm5102_supplies,
930 		.num_parent_supplies = ARRAY_SIZE(wm5102_supplies),
931 	},
932 };
933 
arizona_dev_init(struct arizona * arizona)934 int arizona_dev_init(struct arizona *arizona)
935 {
936 	static const char * const mclk_name[] = { "mclk1", "mclk2" };
937 	struct device *dev = arizona->dev;
938 	const char *type_name = NULL;
939 	unsigned int reg, val;
940 	int (*apply_patch)(struct arizona *) = NULL;
941 	const struct mfd_cell *subdevs = NULL;
942 	int n_subdevs = 0, ret, i;
943 
944 	dev_set_drvdata(arizona->dev, arizona);
945 	mutex_init(&arizona->clk_lock);
946 
947 	if (dev_get_platdata(arizona->dev)) {
948 		memcpy(&arizona->pdata, dev_get_platdata(arizona->dev),
949 		       sizeof(arizona->pdata));
950 	} else {
951 		ret = arizona_of_get_core_pdata(arizona);
952 		if (ret < 0)
953 			return ret;
954 	}
955 
956 	BUILD_BUG_ON(ARRAY_SIZE(arizona->mclk) != ARRAY_SIZE(mclk_name));
957 	for (i = 0; i < ARRAY_SIZE(arizona->mclk); i++) {
958 		arizona->mclk[i] = devm_clk_get(arizona->dev, mclk_name[i]);
959 		if (IS_ERR(arizona->mclk[i])) {
960 			dev_info(arizona->dev, "Failed to get %s: %ld\n",
961 				 mclk_name[i], PTR_ERR(arizona->mclk[i]));
962 			arizona->mclk[i] = NULL;
963 		}
964 	}
965 
966 	regcache_cache_only(arizona->regmap, true);
967 
968 	switch (arizona->type) {
969 	case WM5102:
970 	case WM5110:
971 	case WM8280:
972 	case WM8997:
973 	case WM8998:
974 	case WM1814:
975 	case WM1831:
976 	case CS47L24:
977 		for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++)
978 			arizona->core_supplies[i].supply
979 				= wm5102_core_supplies[i];
980 		arizona->num_core_supplies = ARRAY_SIZE(wm5102_core_supplies);
981 		break;
982 	default:
983 		dev_err(arizona->dev, "Unknown device type %d\n",
984 			arizona->type);
985 		return -ENODEV;
986 	}
987 
988 	/* Mark DCVDD as external, LDO1 driver will clear if internal */
989 	arizona->external_dcvdd = true;
990 
991 	switch (arizona->type) {
992 	case WM1831:
993 	case CS47L24:
994 		break; /* No LDO1 regulator */
995 	default:
996 		ret = mfd_add_devices(arizona->dev, -1, early_devs,
997 				      ARRAY_SIZE(early_devs), NULL, 0, NULL);
998 		if (ret != 0) {
999 			dev_err(dev, "Failed to add early children: %d\n", ret);
1000 			return ret;
1001 		}
1002 		break;
1003 	}
1004 
1005 	ret = devm_regulator_bulk_get(dev, arizona->num_core_supplies,
1006 				      arizona->core_supplies);
1007 	if (ret != 0) {
1008 		dev_err(dev, "Failed to request core supplies: %d\n",
1009 			ret);
1010 		goto err_early;
1011 	}
1012 
1013 	/**
1014 	 * Don't use devres here because the only device we have to get
1015 	 * against is the MFD device and DCVDD will likely be supplied by
1016 	 * one of its children. Meaning that the regulator will be
1017 	 * destroyed by the time devres calls regulator put.
1018 	 */
1019 	arizona->dcvdd = regulator_get(arizona->dev, "DCVDD");
1020 	if (IS_ERR(arizona->dcvdd)) {
1021 		ret = PTR_ERR(arizona->dcvdd);
1022 		dev_err(dev, "Failed to request DCVDD: %d\n", ret);
1023 		goto err_early;
1024 	}
1025 
1026 	if (!arizona->pdata.reset) {
1027 		/* Start out with /RESET low to put the chip into reset */
1028 		arizona->pdata.reset = devm_gpiod_get(arizona->dev, "reset",
1029 						      GPIOD_OUT_LOW);
1030 		if (IS_ERR(arizona->pdata.reset)) {
1031 			ret = PTR_ERR(arizona->pdata.reset);
1032 			if (ret == -EPROBE_DEFER)
1033 				goto err_dcvdd;
1034 
1035 			dev_err(arizona->dev,
1036 				"Reset GPIO missing/malformed: %d\n", ret);
1037 
1038 			arizona->pdata.reset = NULL;
1039 		}
1040 	}
1041 
1042 	ret = regulator_bulk_enable(arizona->num_core_supplies,
1043 				    arizona->core_supplies);
1044 	if (ret != 0) {
1045 		dev_err(dev, "Failed to enable core supplies: %d\n",
1046 			ret);
1047 		goto err_dcvdd;
1048 	}
1049 
1050 	ret = regulator_enable(arizona->dcvdd);
1051 	if (ret != 0) {
1052 		dev_err(dev, "Failed to enable DCVDD: %d\n", ret);
1053 		goto err_enable;
1054 	}
1055 
1056 	arizona_disable_reset(arizona);
1057 
1058 	regcache_cache_only(arizona->regmap, false);
1059 
1060 	/* Verify that this is a chip we know about */
1061 	ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, &reg);
1062 	if (ret != 0) {
1063 		dev_err(dev, "Failed to read ID register: %d\n", ret);
1064 		goto err_reset;
1065 	}
1066 
1067 	switch (reg) {
1068 	case 0x5102:
1069 	case 0x5110:
1070 	case 0x6349:
1071 	case 0x6363:
1072 	case 0x8997:
1073 		break;
1074 	default:
1075 		dev_err(arizona->dev, "Unknown device ID: %x\n", reg);
1076 		ret = -ENODEV;
1077 		goto err_reset;
1078 	}
1079 
1080 	/* If we have a /RESET GPIO we'll already be reset */
1081 	if (!arizona->pdata.reset) {
1082 		ret = regmap_write(arizona->regmap, ARIZONA_SOFTWARE_RESET, 0);
1083 		if (ret != 0) {
1084 			dev_err(dev, "Failed to reset device: %d\n", ret);
1085 			goto err_reset;
1086 		}
1087 
1088 		usleep_range(1000, 5000);
1089 	}
1090 
1091 	/* Ensure device startup is complete */
1092 	switch (arizona->type) {
1093 	case WM5102:
1094 		ret = regmap_read(arizona->regmap,
1095 				  ARIZONA_WRITE_SEQUENCER_CTRL_3, &val);
1096 		if (ret) {
1097 			dev_err(dev,
1098 				"Failed to check write sequencer state: %d\n",
1099 				ret);
1100 		} else if (val & 0x01) {
1101 			ret = wm5102_clear_write_sequencer(arizona);
1102 			if (ret)
1103 				return ret;
1104 		}
1105 		break;
1106 	default:
1107 		break;
1108 	}
1109 
1110 	ret = arizona_wait_for_boot(arizona);
1111 	if (ret) {
1112 		dev_err(arizona->dev, "Device failed initial boot: %d\n", ret);
1113 		goto err_reset;
1114 	}
1115 
1116 	/* Read the device ID information & do device specific stuff */
1117 	ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, &reg);
1118 	if (ret != 0) {
1119 		dev_err(dev, "Failed to read ID register: %d\n", ret);
1120 		goto err_reset;
1121 	}
1122 
1123 	ret = regmap_read(arizona->regmap, ARIZONA_DEVICE_REVISION,
1124 			  &arizona->rev);
1125 	if (ret != 0) {
1126 		dev_err(dev, "Failed to read revision register: %d\n", ret);
1127 		goto err_reset;
1128 	}
1129 	arizona->rev &= ARIZONA_DEVICE_REVISION_MASK;
1130 
1131 	switch (reg) {
1132 	case 0x5102:
1133 		if (IS_ENABLED(CONFIG_MFD_WM5102)) {
1134 			type_name = "WM5102";
1135 			if (arizona->type != WM5102) {
1136 				dev_warn(arizona->dev,
1137 					 "WM5102 registered as %d\n",
1138 					 arizona->type);
1139 				arizona->type = WM5102;
1140 			}
1141 
1142 			apply_patch = wm5102_patch;
1143 			arizona->rev &= 0x7;
1144 			subdevs = wm5102_devs;
1145 			n_subdevs = ARRAY_SIZE(wm5102_devs);
1146 		}
1147 		break;
1148 	case 0x5110:
1149 		if (IS_ENABLED(CONFIG_MFD_WM5110)) {
1150 			switch (arizona->type) {
1151 			case WM5110:
1152 				type_name = "WM5110";
1153 				break;
1154 			case WM8280:
1155 				type_name = "WM8280";
1156 				break;
1157 			default:
1158 				type_name = "WM5110";
1159 				dev_warn(arizona->dev,
1160 					 "WM5110 registered as %d\n",
1161 					 arizona->type);
1162 				arizona->type = WM5110;
1163 				break;
1164 			}
1165 
1166 			apply_patch = wm5110_patch;
1167 			subdevs = wm5110_devs;
1168 			n_subdevs = ARRAY_SIZE(wm5110_devs);
1169 		}
1170 		break;
1171 	case 0x6363:
1172 		if (IS_ENABLED(CONFIG_MFD_CS47L24)) {
1173 			switch (arizona->type) {
1174 			case CS47L24:
1175 				type_name = "CS47L24";
1176 				break;
1177 
1178 			case WM1831:
1179 				type_name = "WM1831";
1180 				break;
1181 
1182 			default:
1183 				dev_warn(arizona->dev,
1184 					 "CS47L24 registered as %d\n",
1185 					 arizona->type);
1186 				arizona->type = CS47L24;
1187 				break;
1188 			}
1189 
1190 			apply_patch = cs47l24_patch;
1191 			subdevs = cs47l24_devs;
1192 			n_subdevs = ARRAY_SIZE(cs47l24_devs);
1193 		}
1194 		break;
1195 	case 0x8997:
1196 		if (IS_ENABLED(CONFIG_MFD_WM8997)) {
1197 			type_name = "WM8997";
1198 			if (arizona->type != WM8997) {
1199 				dev_warn(arizona->dev,
1200 					 "WM8997 registered as %d\n",
1201 					 arizona->type);
1202 				arizona->type = WM8997;
1203 			}
1204 
1205 			apply_patch = wm8997_patch;
1206 			subdevs = wm8997_devs;
1207 			n_subdevs = ARRAY_SIZE(wm8997_devs);
1208 		}
1209 		break;
1210 	case 0x6349:
1211 		if (IS_ENABLED(CONFIG_MFD_WM8998)) {
1212 			switch (arizona->type) {
1213 			case WM8998:
1214 				type_name = "WM8998";
1215 				break;
1216 
1217 			case WM1814:
1218 				type_name = "WM1814";
1219 				break;
1220 
1221 			default:
1222 				type_name = "WM8998";
1223 				dev_warn(arizona->dev,
1224 					 "WM8998 registered as %d\n",
1225 					 arizona->type);
1226 				arizona->type = WM8998;
1227 			}
1228 
1229 			apply_patch = wm8998_patch;
1230 			subdevs = wm8998_devs;
1231 			n_subdevs = ARRAY_SIZE(wm8998_devs);
1232 		}
1233 		break;
1234 	default:
1235 		dev_err(arizona->dev, "Unknown device ID %x\n", reg);
1236 		ret = -ENODEV;
1237 		goto err_reset;
1238 	}
1239 
1240 	if (!subdevs) {
1241 		dev_err(arizona->dev,
1242 			"No kernel support for device ID %x\n", reg);
1243 		ret = -ENODEV;
1244 		goto err_reset;
1245 	}
1246 
1247 	dev_info(dev, "%s revision %c\n", type_name, arizona->rev + 'A');
1248 
1249 	if (apply_patch) {
1250 		ret = apply_patch(arizona);
1251 		if (ret != 0) {
1252 			dev_err(arizona->dev, "Failed to apply patch: %d\n",
1253 				ret);
1254 			goto err_reset;
1255 		}
1256 
1257 		switch (arizona->type) {
1258 		case WM5102:
1259 			ret = wm5102_apply_hardware_patch(arizona);
1260 			if (ret) {
1261 				dev_err(arizona->dev,
1262 					"Failed to apply hardware patch: %d\n",
1263 					ret);
1264 				goto err_reset;
1265 			}
1266 			break;
1267 		case WM5110:
1268 		case WM8280:
1269 			ret = wm5110_apply_sleep_patch(arizona);
1270 			if (ret) {
1271 				dev_err(arizona->dev,
1272 					"Failed to apply sleep patch: %d\n",
1273 					ret);
1274 				goto err_reset;
1275 			}
1276 			break;
1277 		default:
1278 			break;
1279 		}
1280 	}
1281 
1282 	for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) {
1283 		if (!arizona->pdata.gpio_defaults[i])
1284 			continue;
1285 
1286 		regmap_write(arizona->regmap, ARIZONA_GPIO1_CTRL + i,
1287 			     arizona->pdata.gpio_defaults[i]);
1288 	}
1289 
1290 	/* Chip default */
1291 	if (!arizona->pdata.clk32k_src)
1292 		arizona->pdata.clk32k_src = ARIZONA_32KZ_MCLK2;
1293 
1294 	switch (arizona->pdata.clk32k_src) {
1295 	case ARIZONA_32KZ_MCLK1:
1296 	case ARIZONA_32KZ_MCLK2:
1297 		regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
1298 				   ARIZONA_CLK_32K_SRC_MASK,
1299 				   arizona->pdata.clk32k_src - 1);
1300 		arizona_clk32k_enable(arizona);
1301 		break;
1302 	case ARIZONA_32KZ_NONE:
1303 		regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
1304 				   ARIZONA_CLK_32K_SRC_MASK, 2);
1305 		break;
1306 	default:
1307 		dev_err(arizona->dev, "Invalid 32kHz clock source: %d\n",
1308 			arizona->pdata.clk32k_src);
1309 		ret = -EINVAL;
1310 		goto err_reset;
1311 	}
1312 
1313 	for (i = 0; i < ARIZONA_MAX_MICBIAS; i++) {
1314 		if (!arizona->pdata.micbias[i].mV &&
1315 		    !arizona->pdata.micbias[i].bypass)
1316 			continue;
1317 
1318 		/* Apply default for bypass mode */
1319 		if (!arizona->pdata.micbias[i].mV)
1320 			arizona->pdata.micbias[i].mV = 2800;
1321 
1322 		val = (arizona->pdata.micbias[i].mV - 1500) / 100;
1323 
1324 		val <<= ARIZONA_MICB1_LVL_SHIFT;
1325 
1326 		if (arizona->pdata.micbias[i].ext_cap)
1327 			val |= ARIZONA_MICB1_EXT_CAP;
1328 
1329 		if (arizona->pdata.micbias[i].discharge)
1330 			val |= ARIZONA_MICB1_DISCH;
1331 
1332 		if (arizona->pdata.micbias[i].soft_start)
1333 			val |= ARIZONA_MICB1_RATE;
1334 
1335 		if (arizona->pdata.micbias[i].bypass)
1336 			val |= ARIZONA_MICB1_BYPASS;
1337 
1338 		regmap_update_bits(arizona->regmap,
1339 				   ARIZONA_MIC_BIAS_CTRL_1 + i,
1340 				   ARIZONA_MICB1_LVL_MASK |
1341 				   ARIZONA_MICB1_EXT_CAP |
1342 				   ARIZONA_MICB1_DISCH |
1343 				   ARIZONA_MICB1_BYPASS |
1344 				   ARIZONA_MICB1_RATE, val);
1345 	}
1346 
1347 	pm_runtime_set_active(arizona->dev);
1348 	pm_runtime_enable(arizona->dev);
1349 
1350 	/* Set up for interrupts */
1351 	ret = arizona_irq_init(arizona);
1352 	if (ret != 0)
1353 		goto err_pm;
1354 
1355 	pm_runtime_set_autosuspend_delay(arizona->dev, 100);
1356 	pm_runtime_use_autosuspend(arizona->dev);
1357 
1358 	arizona_request_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, "CLKGEN error",
1359 			    arizona_clkgen_err, arizona);
1360 	arizona_request_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, "Overclocked",
1361 			    arizona_overclocked, arizona);
1362 	arizona_request_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, "Underclocked",
1363 			    arizona_underclocked, arizona);
1364 
1365 	ret = mfd_add_devices(arizona->dev, PLATFORM_DEVID_NONE,
1366 			      subdevs, n_subdevs, NULL, 0, NULL);
1367 
1368 	if (ret) {
1369 		dev_err(arizona->dev, "Failed to add subdevices: %d\n", ret);
1370 		goto err_irq;
1371 	}
1372 
1373 	return 0;
1374 
1375 err_irq:
1376 	arizona_irq_exit(arizona);
1377 err_pm:
1378 	pm_runtime_disable(arizona->dev);
1379 
1380 	switch (arizona->pdata.clk32k_src) {
1381 	case ARIZONA_32KZ_MCLK1:
1382 	case ARIZONA_32KZ_MCLK2:
1383 		arizona_clk32k_disable(arizona);
1384 		break;
1385 	default:
1386 		break;
1387 	}
1388 err_reset:
1389 	arizona_enable_reset(arizona);
1390 	regulator_disable(arizona->dcvdd);
1391 err_enable:
1392 	regulator_bulk_disable(arizona->num_core_supplies,
1393 			       arizona->core_supplies);
1394 err_dcvdd:
1395 	regulator_put(arizona->dcvdd);
1396 err_early:
1397 	mfd_remove_devices(dev);
1398 	return ret;
1399 }
1400 EXPORT_SYMBOL_GPL(arizona_dev_init);
1401 
arizona_dev_exit(struct arizona * arizona)1402 int arizona_dev_exit(struct arizona *arizona)
1403 {
1404 	disable_irq(arizona->irq);
1405 	pm_runtime_disable(arizona->dev);
1406 
1407 	regulator_disable(arizona->dcvdd);
1408 	regulator_put(arizona->dcvdd);
1409 
1410 	switch (arizona->pdata.clk32k_src) {
1411 	case ARIZONA_32KZ_MCLK1:
1412 	case ARIZONA_32KZ_MCLK2:
1413 		arizona_clk32k_disable(arizona);
1414 		break;
1415 	default:
1416 		break;
1417 	}
1418 
1419 	mfd_remove_devices(arizona->dev);
1420 	arizona_free_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, arizona);
1421 	arizona_free_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, arizona);
1422 	arizona_free_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, arizona);
1423 	arizona_irq_exit(arizona);
1424 	arizona_enable_reset(arizona);
1425 
1426 	regulator_bulk_disable(arizona->num_core_supplies,
1427 			       arizona->core_supplies);
1428 	return 0;
1429 }
1430 EXPORT_SYMBOL_GPL(arizona_dev_exit);
1431 
1432 MODULE_LICENSE("GPL v2");
1433