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
588 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
589 if (wm0010->state != WM0010_POWER_OFF) in wm0010_boot()
590 dev_warn(wm0010->dev, "DSP already powered up!\n"); in wm0010_boot()
591 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
593 if (wm0010->sysclk > 26000000) { in wm0010_boot()
599 mutex_lock(&wm0010->lock); in wm0010_boot()
600 wm0010->pll_running = false; in wm0010_boot()
602 dev_dbg(codec->dev, "max_spi_freq: %d\n", wm0010->max_spi_freq); in wm0010_boot()
604 ret = regulator_bulk_enable(ARRAY_SIZE(wm0010->core_supplies), in wm0010_boot()
605 wm0010->core_supplies); in wm0010_boot()
609 mutex_unlock(&wm0010->lock); in wm0010_boot()
613 ret = regulator_enable(wm0010->dbvdd); in wm0010_boot()
620 gpio_set_value_cansleep(wm0010->gpio_reset, !wm0010->gpio_reset_value); in wm0010_boot()
621 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
622 wm0010->state = WM0010_OUT_OF_RESET; in wm0010_boot()
623 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
625 if (!wait_for_completion_timeout(&wm0010->boot_completion, in wm0010_boot()
629 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
630 wm0010->state = WM0010_BOOTROM; in wm0010_boot()
631 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
637 if (!wait_for_completion_timeout(&wm0010->boot_completion, in wm0010_boot()
641 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
642 wm0010->state = WM0010_STAGE2; in wm0010_boot()
643 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
646 if (wm0010->max_spi_freq) { in wm0010_boot()
654 pll_rec.clkctrl1 = wm0010->pll_clkctrl1; in wm0010_boot()
678 t.speed_hz = wm0010->sysclk / 6; in wm0010_boot()
700 wm0010->pll_running = true; in wm0010_boot()
716 spin_lock_irqsave(&wm0010->irq_lock, flags); in wm0010_boot()
717 wm0010->state = WM0010_FIRMWARE; in wm0010_boot()
718 spin_unlock_irqrestore(&wm0010->irq_lock, flags); in wm0010_boot()
720 mutex_unlock(&wm0010->lock); in wm0010_boot()
731 mutex_unlock(&wm0010->lock); in wm0010_boot()
735 mutex_unlock(&wm0010->lock); in wm0010_boot()
736 regulator_bulk_disable(ARRAY_SIZE(wm0010->core_supplies), in wm0010_boot()
737 wm0010->core_supplies); in wm0010_boot()
745 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_set_bias_level() local
756 mutex_lock(&wm0010->lock); in wm0010_set_bias_level()
758 mutex_unlock(&wm0010->lock); in wm0010_set_bias_level()
771 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_set_sysclk() local
774 wm0010->sysclk = freq; in wm0010_set_sysclk()
777 wm0010->max_spi_freq = 0; in wm0010_set_sysclk()
781 wm0010->max_spi_freq = pll_clock_map[i].max_pll_spi_speed; in wm0010_set_sysclk()
782 wm0010->pll_clkctrl1 = pll_clock_map[i].pll_clkctrl1; in wm0010_set_sysclk()
848 struct wm0010_priv *wm0010 = data; in wm0010_irq() local
850 switch (wm0010->state) { in wm0010_irq()
854 spin_lock(&wm0010->irq_lock); in wm0010_irq()
855 complete(&wm0010->boot_completion); in wm0010_irq()
856 spin_unlock(&wm0010->irq_lock); in wm0010_irq()
867 struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec); in wm0010_probe() local
869 wm0010->codec = codec; in wm0010_probe()
880 struct wm0010_priv *wm0010; in wm0010_spi_probe() local
882 wm0010 = devm_kzalloc(&spi->dev, sizeof(*wm0010), in wm0010_spi_probe()
884 if (!wm0010) in wm0010_spi_probe()
887 mutex_init(&wm0010->lock); in wm0010_spi_probe()
888 spin_lock_init(&wm0010->irq_lock); in wm0010_spi_probe()
890 spi_set_drvdata(spi, wm0010); in wm0010_spi_probe()
891 wm0010->dev = &spi->dev; in wm0010_spi_probe()
894 memcpy(&wm0010->pdata, dev_get_platdata(&spi->dev), in wm0010_spi_probe()
895 sizeof(wm0010->pdata)); in wm0010_spi_probe()
897 init_completion(&wm0010->boot_completion); in wm0010_spi_probe()
899 wm0010->core_supplies[0].supply = "AVDD"; in wm0010_spi_probe()
900 wm0010->core_supplies[1].supply = "DCVDD"; in wm0010_spi_probe()
901 ret = devm_regulator_bulk_get(wm0010->dev, ARRAY_SIZE(wm0010->core_supplies), in wm0010_spi_probe()
902 wm0010->core_supplies); in wm0010_spi_probe()
904 dev_err(wm0010->dev, "Failed to obtain core supplies: %d\n", in wm0010_spi_probe()
909 wm0010->dbvdd = devm_regulator_get(wm0010->dev, "DBVDD"); in wm0010_spi_probe()
910 if (IS_ERR(wm0010->dbvdd)) { in wm0010_spi_probe()
911 ret = PTR_ERR(wm0010->dbvdd); in wm0010_spi_probe()
912 dev_err(wm0010->dev, "Failed to obtain DBVDD: %d\n", ret); in wm0010_spi_probe()
916 if (wm0010->pdata.gpio_reset) { in wm0010_spi_probe()
917 wm0010->gpio_reset = wm0010->pdata.gpio_reset; in wm0010_spi_probe()
919 if (wm0010->pdata.reset_active_high) in wm0010_spi_probe()
920 wm0010->gpio_reset_value = 1; in wm0010_spi_probe()
922 wm0010->gpio_reset_value = 0; in wm0010_spi_probe()
924 if (wm0010->gpio_reset_value) in wm0010_spi_probe()
929 ret = devm_gpio_request_one(wm0010->dev, wm0010->gpio_reset, in wm0010_spi_probe()
932 dev_err(wm0010->dev, in wm0010_spi_probe()
938 dev_err(wm0010->dev, "No reset GPIO configured\n"); in wm0010_spi_probe()
942 wm0010->state = WM0010_POWER_OFF; in wm0010_spi_probe()
945 if (wm0010->pdata.irq_flags) in wm0010_spi_probe()
946 trigger = wm0010->pdata.irq_flags; in wm0010_spi_probe()
952 "wm0010", wm0010); in wm0010_spi_probe()
954 dev_err(wm0010->dev, "Failed to request IRQ %d: %d\n", in wm0010_spi_probe()
958 wm0010->irq = irq; in wm0010_spi_probe()
962 dev_err(wm0010->dev, "Failed to set IRQ %d as wake source: %d\n", in wm0010_spi_probe()
968 wm0010->board_max_spi_speed = spi->max_speed_hz; in wm0010_spi_probe()
970 wm0010->board_max_spi_speed = 0; in wm0010_spi_probe()
983 struct wm0010_priv *wm0010 = spi_get_drvdata(spi); in wm0010_spi_remove() local
987 gpio_set_value_cansleep(wm0010->gpio_reset, in wm0010_spi_remove()
988 wm0010->gpio_reset_value); in wm0010_spi_remove()
990 irq_set_irq_wake(wm0010->irq, 0); in wm0010_spi_remove()
992 if (wm0010->irq) in wm0010_spi_remove()
993 free_irq(wm0010->irq, wm0010); in wm0010_spi_remove()