Lines Matching refs:wm0010
163 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_halt() local
168 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_halt()
169 state = wm0010->state; in wm0010_halt()
170 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_halt()
181 gpio_set_value_cansleep(wm0010->gpio_reset, in wm0010_halt()
182 wm0010->gpio_reset_value); in wm0010_halt()
184 regulator_disable(wm0010->dbvdd); in wm0010_halt()
185 regulator_bulk_disable(ARRAY_SIZE(wm0010->core_supplies), in wm0010_halt()
186 wm0010->core_supplies); in wm0010_halt()
190 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_halt()
191 wm0010->state = WM0010_POWER_OFF; in wm0010_halt()
192 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_halt()
204 static void wm0010_mark_boot_failure(struct wm0010_priv *wm0010) in wm0010_mark_boot_failure() argument
209 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_mark_boot_failure()
210 state = wm0010->state; in wm0010_mark_boot_failure()
211 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_mark_boot_failure()
213 dev_err(wm0010->dev, "Failed to transition from `%s' state to `%s' state\n", in wm0010_mark_boot_failure()
216 wm0010->boot_failed = true; in wm0010_mark_boot_failure()
223 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_boot_xfer_complete() local
230 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
243 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
247 if (wm0010->state < WM0010_STAGE2) in wm0010_boot_xfer_complete()
251 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
276 wm0010->pll_running = true; in wm0010_boot_xfer_complete()
281 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
286 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
291 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
296 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
301 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
306 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
311 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
320 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
326 wm0010_mark_boot_failure(wm0010); in wm0010_boot_xfer_complete()
330 if (wm0010->boot_failed) in wm0010_boot_xfer_complete()
349 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_firmware_load() local
374 wm0010->boot_failed = false; in wm0010_firmware_load()
445 if (!wm0010->pll_running) { in wm0010_firmware_load()
446 xfer->t.speed_hz = wm0010->sysclk / 6; in wm0010_firmware_load()
448 xfer->t.speed_hz = wm0010->max_spi_freq; in wm0010_firmware_load()
450 if (wm0010->board_max_spi_speed && in wm0010_firmware_load()
451 (wm0010->board_max_spi_speed < wm0010->max_spi_freq)) in wm0010_firmware_load()
452 xfer->t.speed_hz = wm0010->board_max_spi_speed; in wm0010_firmware_load()
456 wm0010->max_spi_freq = xfer->t.speed_hz; in wm0010_firmware_load()
474 if (wm0010->boot_failed) { in wm0010_firmware_load()
503 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_stage2_load() local
542 t.speed_hz = wm0010->sysclk / 10; in wm0010_stage2_load()
559 wm0010_mark_boot_failure(wm0010); in wm0010_stage2_load()
577 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_boot() local
589 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
590 if (wm0010->state != WM0010_POWER_OFF) in wm0010_boot()
591 dev_warn(wm0010->dev, "DSP already powered up!\n"); in wm0010_boot()
592 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
594 if (wm0010->sysclk > 26000000) { in wm0010_boot()
600 mutex_lock(&wm0010->lock); in wm0010_boot()
601 wm0010->pll_running = false; in wm0010_boot()
603 dev_dbg(codec->dev, "max_spi_freq: %d\n", wm0010->max_spi_freq); in wm0010_boot()
605 ret = regulator_bulk_enable(ARRAY_SIZE(wm0010->core_supplies), in wm0010_boot()
606 wm0010->core_supplies); in wm0010_boot()
610 mutex_unlock(&wm0010->lock); in wm0010_boot()
614 ret = regulator_enable(wm0010->dbvdd); in wm0010_boot()
621 gpio_set_value_cansleep(wm0010->gpio_reset, !wm0010->gpio_reset_value); in wm0010_boot()
622 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
623 wm0010->state = WM0010_OUT_OF_RESET; in wm0010_boot()
624 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
634 if (!wait_for_completion_timeout(&wm0010->boot_completion, in wm0010_boot()
638 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
639 wm0010->state = WM0010_BOOTROM; in wm0010_boot()
640 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
646 if (!wait_for_completion_timeout(&wm0010->boot_completion, in wm0010_boot()
650 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
651 wm0010->state = WM0010_STAGE2; in wm0010_boot()
652 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
655 if (wm0010->max_spi_freq) { in wm0010_boot()
663 pll_rec.clkctrl1 = wm0010->pll_clkctrl1; in wm0010_boot()
687 t.speed_hz = wm0010->sysclk / 6; in wm0010_boot()
709 wm0010->pll_running = true; in wm0010_boot()
725 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
726 wm0010->state = WM0010_FIRMWARE; in wm0010_boot()
727 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
729 mutex_unlock(&wm0010->lock); in wm0010_boot()
736 mutex_unlock(&wm0010->lock); in wm0010_boot()
740 mutex_unlock(&wm0010->lock); in wm0010_boot()
741 regulator_bulk_disable(ARRAY_SIZE(wm0010->core_supplies), in wm0010_boot()
742 wm0010->core_supplies); in wm0010_boot()
750 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_set_bias_level() local
761 mutex_lock(&wm0010->lock); in wm0010_set_bias_level()
763 mutex_unlock(&wm0010->lock); in wm0010_set_bias_level()
778 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_set_sysclk() local
781 wm0010->sysclk = freq; in wm0010_set_sysclk()
784 wm0010->max_spi_freq = 0; in wm0010_set_sysclk()
788 wm0010->max_spi_freq = pll_clock_map[i].max_pll_spi_speed; in wm0010_set_sysclk()
789 wm0010->pll_clkctrl1 = pll_clock_map[i].pll_clkctrl1; in wm0010_set_sysclk()
855 struct wm0010_priv *wm0010 = data; in wm0010_irq() local
857 switch (wm0010->state) { in wm0010_irq()
861 spin_lock(&wm0010->irq_lock); in wm0010_irq()
862 complete(&wm0010->boot_completion); in wm0010_irq()
863 spin_unlock(&wm0010->irq_lock); in wm0010_irq()
874 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_probe() local
876 wm0010->codec = codec; in wm0010_probe()
887 struct wm0010_priv *wm0010; in wm0010_spi_probe() local
889 wm0010 = devm_kzalloc(&spi->dev, sizeof(*wm0010), in wm0010_spi_probe()
891 if (!wm0010) in wm0010_spi_probe()
894 mutex_init(&wm0010->lock); in wm0010_spi_probe()
895 spin_lock_init(&wm0010->irq_lock); in wm0010_spi_probe()
897 spi_set_drvdata(spi, wm0010); in wm0010_spi_probe()
898 wm0010->dev = &spi->dev; in wm0010_spi_probe()
901 memcpy(&wm0010->pdata, dev_get_platdata(&spi->dev), in wm0010_spi_probe()
902 sizeof(wm0010->pdata)); in wm0010_spi_probe()
904 init_completion(&wm0010->boot_completion); in wm0010_spi_probe()
906 wm0010->core_supplies[0].supply = "AVDD"; in wm0010_spi_probe()
907 wm0010->core_supplies[1].supply = "DCVDD"; in wm0010_spi_probe()
908 ret = devm_regulator_bulk_get(wm0010->dev, ARRAY_SIZE(wm0010->core_supplies), in wm0010_spi_probe()
909 wm0010->core_supplies); in wm0010_spi_probe()
911 dev_err(wm0010->dev, "Failed to obtain core supplies: %d\n", in wm0010_spi_probe()
916 wm0010->dbvdd = devm_regulator_get(wm0010->dev, "DBVDD"); in wm0010_spi_probe()
917 if (IS_ERR(wm0010->dbvdd)) { in wm0010_spi_probe()
918 ret = PTR_ERR(wm0010->dbvdd); in wm0010_spi_probe()
919 dev_err(wm0010->dev, "Failed to obtain DBVDD: %d\n", ret); in wm0010_spi_probe()
923 if (wm0010->pdata.gpio_reset) { in wm0010_spi_probe()
924 wm0010->gpio_reset = wm0010->pdata.gpio_reset; in wm0010_spi_probe()
926 if (wm0010->pdata.reset_active_high) in wm0010_spi_probe()
927 wm0010->gpio_reset_value = 1; in wm0010_spi_probe()
929 wm0010->gpio_reset_value = 0; in wm0010_spi_probe()
931 if (wm0010->gpio_reset_value) in wm0010_spi_probe()
936 ret = devm_gpio_request_one(wm0010->dev, wm0010->gpio_reset, in wm0010_spi_probe()
939 dev_err(wm0010->dev, in wm0010_spi_probe()
945 dev_err(wm0010->dev, "No reset GPIO configured\n"); in wm0010_spi_probe()
949 wm0010->state = WM0010_POWER_OFF; in wm0010_spi_probe()
952 if (wm0010->pdata.irq_flags) in wm0010_spi_probe()
953 trigger = wm0010->pdata.irq_flags; in wm0010_spi_probe()
959 "wm0010", wm0010); in wm0010_spi_probe()
961 dev_err(wm0010->dev, "Failed to request IRQ %d: %d\n", in wm0010_spi_probe()
965 wm0010->irq = irq; in wm0010_spi_probe()
969 dev_err(wm0010->dev, "Failed to set IRQ %d as wake source: %d\n", in wm0010_spi_probe()
975 wm0010->board_max_spi_speed = spi->max_speed_hz; in wm0010_spi_probe()
977 wm0010->board_max_spi_speed = 0; in wm0010_spi_probe()
990 struct wm0010_priv *wm0010 = spi_get_drvdata(spi); in wm0010_spi_remove() local
994 gpio_set_value_cansleep(wm0010->gpio_reset, in wm0010_spi_remove()
995 wm0010->gpio_reset_value); in wm0010_spi_remove()
997 irq_set_irq_wake(wm0010->irq, 0); in wm0010_spi_remove()
999 if (wm0010->irq) in wm0010_spi_remove()
1000 free_irq(wm0010->irq, wm0010); in wm0010_spi_remove()