Lines Matching refs:arizona
39 int arizona_clk32k_enable(struct arizona *arizona) in arizona_clk32k_enable() argument
43 mutex_lock(&arizona->clk_lock); in arizona_clk32k_enable()
45 arizona->clk32k_ref++; in arizona_clk32k_enable()
47 if (arizona->clk32k_ref == 1) { in arizona_clk32k_enable()
48 switch (arizona->pdata.clk32k_src) { in arizona_clk32k_enable()
50 ret = pm_runtime_get_sync(arizona->dev); in arizona_clk32k_enable()
56 ret = regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1, in arizona_clk32k_enable()
63 arizona->clk32k_ref--; in arizona_clk32k_enable()
65 mutex_unlock(&arizona->clk_lock); in arizona_clk32k_enable()
71 int arizona_clk32k_disable(struct arizona *arizona) in arizona_clk32k_disable() argument
73 mutex_lock(&arizona->clk_lock); in arizona_clk32k_disable()
75 BUG_ON(arizona->clk32k_ref <= 0); in arizona_clk32k_disable()
77 arizona->clk32k_ref--; in arizona_clk32k_disable()
79 if (arizona->clk32k_ref == 0) { in arizona_clk32k_disable()
80 regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1, in arizona_clk32k_disable()
83 switch (arizona->pdata.clk32k_src) { in arizona_clk32k_disable()
85 pm_runtime_put_sync(arizona->dev); in arizona_clk32k_disable()
90 mutex_unlock(&arizona->clk_lock); in arizona_clk32k_disable()
98 struct arizona *arizona = data; in arizona_clkgen_err() local
100 dev_err(arizona->dev, "CLKGEN error\n"); in arizona_clkgen_err()
107 struct arizona *arizona = data; in arizona_underclocked() local
111 ret = regmap_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_8, in arizona_underclocked()
114 dev_err(arizona->dev, "Failed to read underclock status: %d\n", in arizona_underclocked()
120 dev_err(arizona->dev, "AIF3 underclocked\n"); in arizona_underclocked()
122 dev_err(arizona->dev, "AIF2 underclocked\n"); in arizona_underclocked()
124 dev_err(arizona->dev, "AIF1 underclocked\n"); in arizona_underclocked()
126 dev_err(arizona->dev, "ISRC3 underclocked\n"); in arizona_underclocked()
128 dev_err(arizona->dev, "ISRC2 underclocked\n"); in arizona_underclocked()
130 dev_err(arizona->dev, "ISRC1 underclocked\n"); in arizona_underclocked()
132 dev_err(arizona->dev, "FX underclocked\n"); in arizona_underclocked()
134 dev_err(arizona->dev, "ASRC underclocked\n"); in arizona_underclocked()
136 dev_err(arizona->dev, "DAC underclocked\n"); in arizona_underclocked()
138 dev_err(arizona->dev, "ADC underclocked\n"); in arizona_underclocked()
140 dev_err(arizona->dev, "Mixer dropped sample\n"); in arizona_underclocked()
147 struct arizona *arizona = data; in arizona_overclocked() local
151 ret = regmap_bulk_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_6, in arizona_overclocked()
154 dev_err(arizona->dev, "Failed to read overclock status: %d\n", in arizona_overclocked()
159 switch (arizona->type) { in arizona_overclocked()
174 dev_err(arizona->dev, "PWM overclocked\n"); in arizona_overclocked()
176 dev_err(arizona->dev, "FX core overclocked\n"); in arizona_overclocked()
178 dev_err(arizona->dev, "DAC SYS overclocked\n"); in arizona_overclocked()
180 dev_err(arizona->dev, "DAC WARP overclocked\n"); in arizona_overclocked()
182 dev_err(arizona->dev, "ADC overclocked\n"); in arizona_overclocked()
184 dev_err(arizona->dev, "Mixer overclocked\n"); in arizona_overclocked()
186 dev_err(arizona->dev, "AIF3 overclocked\n"); in arizona_overclocked()
188 dev_err(arizona->dev, "AIF2 overclocked\n"); in arizona_overclocked()
190 dev_err(arizona->dev, "AIF1 overclocked\n"); in arizona_overclocked()
192 dev_err(arizona->dev, "Pad control overclocked\n"); in arizona_overclocked()
195 dev_err(arizona->dev, "Slimbus subsystem overclocked\n"); in arizona_overclocked()
197 dev_err(arizona->dev, "Slimbus async overclocked\n"); in arizona_overclocked()
199 dev_err(arizona->dev, "Slimbus sync overclocked\n"); in arizona_overclocked()
201 dev_err(arizona->dev, "ASRC async system overclocked\n"); in arizona_overclocked()
203 dev_err(arizona->dev, "ASRC async WARP overclocked\n"); in arizona_overclocked()
205 dev_err(arizona->dev, "ASRC sync system overclocked\n"); in arizona_overclocked()
207 dev_err(arizona->dev, "ASRC sync WARP overclocked\n"); in arizona_overclocked()
209 dev_err(arizona->dev, "DSP1 overclocked\n"); in arizona_overclocked()
211 dev_err(arizona->dev, "ISRC3 overclocked\n"); in arizona_overclocked()
213 dev_err(arizona->dev, "ISRC2 overclocked\n"); in arizona_overclocked()
215 dev_err(arizona->dev, "ISRC1 overclocked\n"); in arizona_overclocked()
218 dev_err(arizona->dev, "SPDIF overclocked\n"); in arizona_overclocked()
223 static int arizona_poll_reg(struct arizona *arizona, in arizona_poll_reg() argument
231 ret = regmap_read(arizona->regmap, reg, &val); in arizona_poll_reg()
233 dev_err(arizona->dev, "Failed to read reg %u: %d\n", in arizona_poll_reg()
244 dev_err(arizona->dev, "Polling reg %u timed out: %x\n", reg, val); in arizona_poll_reg()
248 static int arizona_wait_for_boot(struct arizona *arizona) in arizona_wait_for_boot() argument
257 ret = arizona_poll_reg(arizona, 5, ARIZONA_INTERRUPT_RAW_STATUS_5, in arizona_wait_for_boot()
261 regmap_write(arizona->regmap, ARIZONA_INTERRUPT_STATUS_5, in arizona_wait_for_boot()
264 pm_runtime_mark_last_busy(arizona->dev); in arizona_wait_for_boot()
269 static inline void arizona_enable_reset(struct arizona *arizona) in arizona_enable_reset() argument
271 if (arizona->pdata.reset) in arizona_enable_reset()
272 gpio_set_value_cansleep(arizona->pdata.reset, 0); in arizona_enable_reset()
275 static void arizona_disable_reset(struct arizona *arizona) in arizona_disable_reset() argument
277 if (arizona->pdata.reset) { in arizona_disable_reset()
278 switch (arizona->type) { in arizona_disable_reset()
288 gpio_set_value_cansleep(arizona->pdata.reset, 1); in arizona_disable_reset()
298 static int arizona_enable_freerun_sysclk(struct arizona *arizona, in arizona_enable_freerun_sysclk() argument
304 ret = regmap_read(arizona->regmap, ARIZONA_FLL1_CONTROL_1, &state->fll); in arizona_enable_freerun_sysclk()
306 dev_err(arizona->dev, "Failed to cache FLL settings: %d\n", in arizona_enable_freerun_sysclk()
310 ret = regmap_read(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, in arizona_enable_freerun_sysclk()
313 dev_err(arizona->dev, "Failed to cache SYSCLK settings: %d\n", in arizona_enable_freerun_sysclk()
319 ret = regmap_write(arizona->regmap, ARIZONA_FLL1_CONTROL_1, in arizona_enable_freerun_sysclk()
322 dev_err(arizona->dev, in arizona_enable_freerun_sysclk()
327 ret = arizona_poll_reg(arizona, 25, ARIZONA_INTERRUPT_RAW_STATUS_5, in arizona_enable_freerun_sysclk()
335 ret = regmap_write(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, 0x0144); in arizona_enable_freerun_sysclk()
337 dev_err(arizona->dev, "Failed to start SYSCLK: %d\n", ret); in arizona_enable_freerun_sysclk()
344 err = regmap_write(arizona->regmap, ARIZONA_FLL1_CONTROL_1, state->fll); in arizona_enable_freerun_sysclk()
346 dev_err(arizona->dev, in arizona_enable_freerun_sysclk()
352 static int arizona_disable_freerun_sysclk(struct arizona *arizona, in arizona_disable_freerun_sysclk() argument
357 ret = regmap_write(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, in arizona_disable_freerun_sysclk()
360 dev_err(arizona->dev, in arizona_disable_freerun_sysclk()
365 ret = regmap_write(arizona->regmap, ARIZONA_FLL1_CONTROL_1, state->fll); in arizona_disable_freerun_sysclk()
367 dev_err(arizona->dev, in arizona_disable_freerun_sysclk()
375 static int wm5102_apply_hardware_patch(struct arizona *arizona) in wm5102_apply_hardware_patch() argument
380 ret = arizona_enable_freerun_sysclk(arizona, &state); in wm5102_apply_hardware_patch()
385 ret = regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_0, in wm5102_apply_hardware_patch()
388 dev_err(arizona->dev, "Failed to start write sequencer: %d\n", in wm5102_apply_hardware_patch()
393 ret = arizona_poll_reg(arizona, 5, ARIZONA_WRITE_SEQUENCER_CTRL_1, in wm5102_apply_hardware_patch()
396 regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_0, in wm5102_apply_hardware_patch()
402 err = arizona_disable_freerun_sysclk(arizona, &state); in wm5102_apply_hardware_patch()
418 static int wm5110_apply_sleep_patch(struct arizona *arizona) in wm5110_apply_sleep_patch() argument
423 ret = arizona_enable_freerun_sysclk(arizona, &state); in wm5110_apply_sleep_patch()
427 ret = regmap_multi_reg_write_bypassed(arizona->regmap, in wm5110_apply_sleep_patch()
431 err = arizona_disable_freerun_sysclk(arizona, &state); in wm5110_apply_sleep_patch()
436 static int wm5102_clear_write_sequencer(struct arizona *arizona) in wm5102_clear_write_sequencer() argument
440 ret = regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_3, in wm5102_clear_write_sequencer()
443 dev_err(arizona->dev, in wm5102_clear_write_sequencer()
448 arizona_enable_reset(arizona); in wm5102_clear_write_sequencer()
449 regulator_disable(arizona->dcvdd); in wm5102_clear_write_sequencer()
453 ret = regulator_enable(arizona->dcvdd); in wm5102_clear_write_sequencer()
455 dev_err(arizona->dev, "Failed to re-enable DCVDD: %d\n", ret); in wm5102_clear_write_sequencer()
458 arizona_disable_reset(arizona); in wm5102_clear_write_sequencer()
464 static int arizona_isolate_dcvdd(struct arizona *arizona) in arizona_isolate_dcvdd() argument
468 ret = regmap_update_bits(arizona->regmap, in arizona_isolate_dcvdd()
473 dev_err(arizona->dev, "Failed to isolate DCVDD: %d\n", ret); in arizona_isolate_dcvdd()
478 static int arizona_connect_dcvdd(struct arizona *arizona) in arizona_connect_dcvdd() argument
482 ret = regmap_update_bits(arizona->regmap, in arizona_connect_dcvdd()
486 dev_err(arizona->dev, "Failed to connect DCVDD: %d\n", ret); in arizona_connect_dcvdd()
491 static int arizona_is_jack_det_active(struct arizona *arizona) in arizona_is_jack_det_active() argument
496 ret = regmap_read(arizona->regmap, ARIZONA_JACK_DETECT_ANALOGUE, &val); in arizona_is_jack_det_active()
498 dev_err(arizona->dev, in arizona_is_jack_det_active()
510 struct arizona *arizona = dev_get_drvdata(dev); in arizona_runtime_resume() local
513 dev_dbg(arizona->dev, "Leaving AoD mode\n"); in arizona_runtime_resume()
515 if (arizona->has_fully_powered_off) { in arizona_runtime_resume()
516 dev_dbg(arizona->dev, "Re-enabling core supplies\n"); in arizona_runtime_resume()
518 ret = regulator_bulk_enable(arizona->num_core_supplies, in arizona_runtime_resume()
519 arizona->core_supplies); in arizona_runtime_resume()
527 ret = regulator_enable(arizona->dcvdd); in arizona_runtime_resume()
529 dev_err(arizona->dev, "Failed to enable DCVDD: %d\n", ret); in arizona_runtime_resume()
530 if (arizona->has_fully_powered_off) in arizona_runtime_resume()
531 regulator_bulk_disable(arizona->num_core_supplies, in arizona_runtime_resume()
532 arizona->core_supplies); in arizona_runtime_resume()
536 if (arizona->has_fully_powered_off) { in arizona_runtime_resume()
537 arizona_disable_reset(arizona); in arizona_runtime_resume()
538 enable_irq(arizona->irq); in arizona_runtime_resume()
539 arizona->has_fully_powered_off = false; in arizona_runtime_resume()
542 regcache_cache_only(arizona->regmap, false); in arizona_runtime_resume()
544 switch (arizona->type) { in arizona_runtime_resume()
546 if (arizona->external_dcvdd) { in arizona_runtime_resume()
547 ret = arizona_connect_dcvdd(arizona); in arizona_runtime_resume()
552 ret = wm5102_patch(arizona); in arizona_runtime_resume()
554 dev_err(arizona->dev, "Failed to apply patch: %d\n", in arizona_runtime_resume()
559 ret = wm5102_apply_hardware_patch(arizona); in arizona_runtime_resume()
561 dev_err(arizona->dev, in arizona_runtime_resume()
569 ret = arizona_wait_for_boot(arizona); in arizona_runtime_resume()
573 if (arizona->external_dcvdd) { in arizona_runtime_resume()
574 ret = arizona_connect_dcvdd(arizona); in arizona_runtime_resume()
583 ret = regulator_set_voltage(arizona->dcvdd, in arizona_runtime_resume()
586 dev_err(arizona->dev, in arizona_runtime_resume()
593 ret = wm5110_apply_sleep_patch(arizona); in arizona_runtime_resume()
595 dev_err(arizona->dev, in arizona_runtime_resume()
602 ret = arizona_wait_for_boot(arizona); in arizona_runtime_resume()
606 if (arizona->external_dcvdd) { in arizona_runtime_resume()
607 ret = arizona_connect_dcvdd(arizona); in arizona_runtime_resume()
614 ret = regcache_sync(arizona->regmap); in arizona_runtime_resume()
616 dev_err(arizona->dev, "Failed to restore register cache\n"); in arizona_runtime_resume()
623 regcache_cache_only(arizona->regmap, true); in arizona_runtime_resume()
624 regulator_disable(arizona->dcvdd); in arizona_runtime_resume()
630 struct arizona *arizona = dev_get_drvdata(dev); in arizona_runtime_suspend() local
634 dev_dbg(arizona->dev, "Entering AoD mode\n"); in arizona_runtime_suspend()
636 switch (arizona->type) { in arizona_runtime_suspend()
639 jd_active = arizona_is_jack_det_active(arizona); in arizona_runtime_suspend()
643 if (arizona->external_dcvdd) { in arizona_runtime_suspend()
644 ret = arizona_isolate_dcvdd(arizona); in arizona_runtime_suspend()
653 ret = regulator_set_voltage(arizona->dcvdd, in arizona_runtime_suspend()
656 dev_err(arizona->dev, in arizona_runtime_suspend()
664 jd_active = arizona_is_jack_det_active(arizona); in arizona_runtime_suspend()
668 if (arizona->external_dcvdd) { in arizona_runtime_suspend()
669 ret = arizona_isolate_dcvdd(arizona); in arizona_runtime_suspend()
675 ret = regmap_write(arizona->regmap, in arizona_runtime_suspend()
678 dev_err(arizona->dev, in arizona_runtime_suspend()
686 jd_active = arizona_is_jack_det_active(arizona); in arizona_runtime_suspend()
690 if (arizona->external_dcvdd) { in arizona_runtime_suspend()
691 ret = arizona_isolate_dcvdd(arizona); in arizona_runtime_suspend()
698 regcache_cache_only(arizona->regmap, true); in arizona_runtime_suspend()
699 regcache_mark_dirty(arizona->regmap); in arizona_runtime_suspend()
700 regulator_disable(arizona->dcvdd); in arizona_runtime_suspend()
704 dev_dbg(arizona->dev, "Fully powering off\n"); in arizona_runtime_suspend()
706 arizona->has_fully_powered_off = true; in arizona_runtime_suspend()
708 disable_irq_nosync(arizona->irq); in arizona_runtime_suspend()
709 arizona_enable_reset(arizona); in arizona_runtime_suspend()
710 regulator_bulk_disable(arizona->num_core_supplies, in arizona_runtime_suspend()
711 arizona->core_supplies); in arizona_runtime_suspend()
721 struct arizona *arizona = dev_get_drvdata(dev); in arizona_suspend() local
723 dev_dbg(arizona->dev, "Suspend, disabling IRQ\n"); in arizona_suspend()
724 disable_irq(arizona->irq); in arizona_suspend()
731 struct arizona *arizona = dev_get_drvdata(dev); in arizona_suspend_late() local
733 dev_dbg(arizona->dev, "Late suspend, reenabling IRQ\n"); in arizona_suspend_late()
734 enable_irq(arizona->irq); in arizona_suspend_late()
741 struct arizona *arizona = dev_get_drvdata(dev); in arizona_resume_noirq() local
743 dev_dbg(arizona->dev, "Early resume, disabling IRQ\n"); in arizona_resume_noirq()
744 disable_irq(arizona->irq); in arizona_resume_noirq()
751 struct arizona *arizona = dev_get_drvdata(dev); in arizona_resume() local
753 dev_dbg(arizona->dev, "Late resume, reenabling IRQ\n"); in arizona_resume()
754 enable_irq(arizona->irq); in arizona_resume()
784 int arizona_of_get_named_gpio(struct arizona *arizona, const char *prop, in arizona_of_get_named_gpio() argument
789 gpio = of_get_named_gpio(arizona->dev->of_node, prop, 0); in arizona_of_get_named_gpio()
792 dev_err(arizona->dev, in arizona_of_get_named_gpio()
803 static int arizona_of_get_core_pdata(struct arizona *arizona) in arizona_of_get_core_pdata() argument
805 struct arizona_pdata *pdata = &arizona->pdata; in arizona_of_get_core_pdata()
812 pdata->reset = arizona_of_get_named_gpio(arizona, "wlf,reset", true); in arizona_of_get_core_pdata()
814 ret = of_property_read_u32_array(arizona->dev->of_node, in arizona_of_get_core_pdata()
832 dev_err(arizona->dev, "Failed to parse GPIO defaults: %d\n", in arizona_of_get_core_pdata()
836 of_property_for_each_u32(arizona->dev->of_node, "wlf,inmode", prop, in arizona_of_get_core_pdata()
846 of_property_for_each_u32(arizona->dev->of_node, "wlf,dmic-ref", prop, in arizona_of_get_core_pdata()
869 static inline int arizona_of_get_core_pdata(struct arizona *arizona) in arizona_of_get_core_pdata() argument
963 int arizona_dev_init(struct arizona *arizona) in arizona_dev_init() argument
965 struct device *dev = arizona->dev; in arizona_dev_init()
968 int (*apply_patch)(struct arizona *) = NULL; in arizona_dev_init()
972 dev_set_drvdata(arizona->dev, arizona); in arizona_dev_init()
973 mutex_init(&arizona->clk_lock); in arizona_dev_init()
975 if (dev_get_platdata(arizona->dev)) in arizona_dev_init()
976 memcpy(&arizona->pdata, dev_get_platdata(arizona->dev), in arizona_dev_init()
977 sizeof(arizona->pdata)); in arizona_dev_init()
979 arizona_of_get_core_pdata(arizona); in arizona_dev_init()
981 regcache_cache_only(arizona->regmap, true); in arizona_dev_init()
983 switch (arizona->type) { in arizona_dev_init()
991 arizona->core_supplies[i].supply in arizona_dev_init()
993 arizona->num_core_supplies = ARRAY_SIZE(wm5102_core_supplies); in arizona_dev_init()
996 dev_err(arizona->dev, "Unknown device type %d\n", in arizona_dev_init()
997 arizona->type); in arizona_dev_init()
1002 arizona->external_dcvdd = true; in arizona_dev_init()
1004 ret = mfd_add_devices(arizona->dev, -1, early_devs, in arizona_dev_init()
1011 ret = devm_regulator_bulk_get(dev, arizona->num_core_supplies, in arizona_dev_init()
1012 arizona->core_supplies); in arizona_dev_init()
1025 arizona->dcvdd = regulator_get(arizona->dev, "DCVDD"); in arizona_dev_init()
1026 if (IS_ERR(arizona->dcvdd)) { in arizona_dev_init()
1027 ret = PTR_ERR(arizona->dcvdd); in arizona_dev_init()
1032 if (arizona->pdata.reset) { in arizona_dev_init()
1034 ret = devm_gpio_request_one(arizona->dev, arizona->pdata.reset, in arizona_dev_init()
1043 ret = regulator_bulk_enable(arizona->num_core_supplies, in arizona_dev_init()
1044 arizona->core_supplies); in arizona_dev_init()
1051 ret = regulator_enable(arizona->dcvdd); in arizona_dev_init()
1057 arizona_disable_reset(arizona); in arizona_dev_init()
1059 regcache_cache_only(arizona->regmap, false); in arizona_dev_init()
1062 ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, ®); in arizona_dev_init()
1075 dev_err(arizona->dev, "Unknown device ID: %x\n", reg); in arizona_dev_init()
1080 if (!arizona->pdata.reset) { in arizona_dev_init()
1081 ret = regmap_write(arizona->regmap, ARIZONA_SOFTWARE_RESET, 0); in arizona_dev_init()
1091 switch (arizona->type) { in arizona_dev_init()
1093 ret = regmap_read(arizona->regmap, in arizona_dev_init()
1100 ret = wm5102_clear_write_sequencer(arizona); in arizona_dev_init()
1109 ret = arizona_wait_for_boot(arizona); in arizona_dev_init()
1111 dev_err(arizona->dev, "Device failed initial boot: %d\n", ret); in arizona_dev_init()
1116 ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, ®); in arizona_dev_init()
1122 ret = regmap_read(arizona->regmap, ARIZONA_DEVICE_REVISION, in arizona_dev_init()
1123 &arizona->rev); in arizona_dev_init()
1128 arizona->rev &= ARIZONA_DEVICE_REVISION_MASK; in arizona_dev_init()
1134 if (arizona->type != WM5102) { in arizona_dev_init()
1135 dev_warn(arizona->dev, in arizona_dev_init()
1137 arizona->type); in arizona_dev_init()
1138 arizona->type = WM5102; in arizona_dev_init()
1142 arizona->rev &= 0x7; in arizona_dev_init()
1149 switch (arizona->type) { in arizona_dev_init()
1158 dev_warn(arizona->dev, in arizona_dev_init()
1160 arizona->type); in arizona_dev_init()
1161 arizona->type = WM5110; in arizona_dev_init()
1173 if (arizona->type != WM8997) { in arizona_dev_init()
1174 dev_warn(arizona->dev, in arizona_dev_init()
1176 arizona->type); in arizona_dev_init()
1177 arizona->type = WM8997; in arizona_dev_init()
1187 switch (arizona->type) { in arizona_dev_init()
1198 dev_warn(arizona->dev, in arizona_dev_init()
1200 arizona->type); in arizona_dev_init()
1201 arizona->type = WM8998; in arizona_dev_init()
1210 dev_err(arizona->dev, "Unknown device ID %x\n", reg); in arizona_dev_init()
1215 dev_err(arizona->dev, in arizona_dev_init()
1220 dev_info(dev, "%s revision %c\n", type_name, arizona->rev + 'A'); in arizona_dev_init()
1223 ret = apply_patch(arizona); in arizona_dev_init()
1225 dev_err(arizona->dev, "Failed to apply patch: %d\n", in arizona_dev_init()
1230 switch (arizona->type) { in arizona_dev_init()
1232 ret = wm5102_apply_hardware_patch(arizona); in arizona_dev_init()
1234 dev_err(arizona->dev, in arizona_dev_init()
1242 ret = wm5110_apply_sleep_patch(arizona); in arizona_dev_init()
1244 dev_err(arizona->dev, in arizona_dev_init()
1255 for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) { in arizona_dev_init()
1256 if (!arizona->pdata.gpio_defaults[i]) in arizona_dev_init()
1259 regmap_write(arizona->regmap, ARIZONA_GPIO1_CTRL + i, in arizona_dev_init()
1260 arizona->pdata.gpio_defaults[i]); in arizona_dev_init()
1264 if (!arizona->pdata.clk32k_src) in arizona_dev_init()
1265 arizona->pdata.clk32k_src = ARIZONA_32KZ_MCLK2; in arizona_dev_init()
1267 switch (arizona->pdata.clk32k_src) { in arizona_dev_init()
1270 regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1, in arizona_dev_init()
1272 arizona->pdata.clk32k_src - 1); in arizona_dev_init()
1273 arizona_clk32k_enable(arizona); in arizona_dev_init()
1276 regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1, in arizona_dev_init()
1280 dev_err(arizona->dev, "Invalid 32kHz clock source: %d\n", in arizona_dev_init()
1281 arizona->pdata.clk32k_src); in arizona_dev_init()
1287 if (!arizona->pdata.micbias[i].mV && in arizona_dev_init()
1288 !arizona->pdata.micbias[i].bypass) in arizona_dev_init()
1292 if (!arizona->pdata.micbias[i].mV) in arizona_dev_init()
1293 arizona->pdata.micbias[i].mV = 2800; in arizona_dev_init()
1295 val = (arizona->pdata.micbias[i].mV - 1500) / 100; in arizona_dev_init()
1299 if (arizona->pdata.micbias[i].ext_cap) in arizona_dev_init()
1302 if (arizona->pdata.micbias[i].discharge) in arizona_dev_init()
1305 if (arizona->pdata.micbias[i].soft_start) in arizona_dev_init()
1308 if (arizona->pdata.micbias[i].bypass) in arizona_dev_init()
1311 regmap_update_bits(arizona->regmap, in arizona_dev_init()
1322 val = arizona->pdata.dmic_ref[i] in arizona_dev_init()
1324 if (arizona->pdata.inmode[i] & ARIZONA_INMODE_DMIC) in arizona_dev_init()
1327 switch (arizona->type) { in arizona_dev_init()
1330 regmap_update_bits(arizona->regmap, in arizona_dev_init()
1333 (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE) in arizona_dev_init()
1336 regmap_update_bits(arizona->regmap, in arizona_dev_init()
1339 (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE) in arizona_dev_init()
1346 if (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE) in arizona_dev_init()
1355 regmap_update_bits(arizona->regmap, in arizona_dev_init()
1362 if (arizona->pdata.out_mono[i]) in arizona_dev_init()
1367 regmap_update_bits(arizona->regmap, in arizona_dev_init()
1373 if (arizona->pdata.spk_mute[i]) in arizona_dev_init()
1374 regmap_update_bits(arizona->regmap, in arizona_dev_init()
1378 arizona->pdata.spk_mute[i]); in arizona_dev_init()
1380 if (arizona->pdata.spk_fmt[i]) in arizona_dev_init()
1381 regmap_update_bits(arizona->regmap, in arizona_dev_init()
1384 arizona->pdata.spk_fmt[i]); in arizona_dev_init()
1387 pm_runtime_set_active(arizona->dev); in arizona_dev_init()
1388 pm_runtime_enable(arizona->dev); in arizona_dev_init()
1391 ret = arizona_irq_init(arizona); in arizona_dev_init()
1395 pm_runtime_set_autosuspend_delay(arizona->dev, 100); in arizona_dev_init()
1396 pm_runtime_use_autosuspend(arizona->dev); in arizona_dev_init()
1398 arizona_request_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, "CLKGEN error", in arizona_dev_init()
1399 arizona_clkgen_err, arizona); in arizona_dev_init()
1400 arizona_request_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, "Overclocked", in arizona_dev_init()
1401 arizona_overclocked, arizona); in arizona_dev_init()
1402 arizona_request_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, "Underclocked", in arizona_dev_init()
1403 arizona_underclocked, arizona); in arizona_dev_init()
1405 ret = mfd_add_devices(arizona->dev, PLATFORM_DEVID_NONE, in arizona_dev_init()
1409 dev_err(arizona->dev, "Failed to add subdevices: %d\n", ret); in arizona_dev_init()
1416 arizona_irq_exit(arizona); in arizona_dev_init()
1418 arizona_enable_reset(arizona); in arizona_dev_init()
1419 regulator_disable(arizona->dcvdd); in arizona_dev_init()
1421 regulator_bulk_disable(arizona->num_core_supplies, in arizona_dev_init()
1422 arizona->core_supplies); in arizona_dev_init()
1424 regulator_put(arizona->dcvdd); in arizona_dev_init()
1431 int arizona_dev_exit(struct arizona *arizona) in arizona_dev_exit() argument
1433 pm_runtime_disable(arizona->dev); in arizona_dev_exit()
1435 regulator_disable(arizona->dcvdd); in arizona_dev_exit()
1436 regulator_put(arizona->dcvdd); in arizona_dev_exit()
1438 mfd_remove_devices(arizona->dev); in arizona_dev_exit()
1439 arizona_free_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, arizona); in arizona_dev_exit()
1440 arizona_free_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, arizona); in arizona_dev_exit()
1441 arizona_free_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, arizona); in arizona_dev_exit()
1442 arizona_irq_exit(arizona); in arizona_dev_exit()
1443 arizona_enable_reset(arizona); in arizona_dev_exit()
1445 regulator_bulk_disable(arizona->num_core_supplies, in arizona_dev_exit()
1446 arizona->core_supplies); in arizona_dev_exit()