Lines Matching defs:wm0010

3  * wm0010.c  --  WM0010 DSP Driver
27 #include <sound/wm0010.h>
156 /* Called with wm0010->lock held */
159 struct wm0010_priv *wm0010 = snd_soc_component_get_drvdata(component);
163 /* Fetch the wm0010 state */
164 spin_lock_irqsave(&wm0010->irq_lock, flags);
165 state = wm0010->state;
166 spin_unlock_irqrestore(&wm0010->irq_lock, flags);
177 gpio_set_value_cansleep(wm0010->gpio_reset,
178 wm0010->gpio_reset_value);
180 regulator_disable(wm0010->dbvdd);
181 regulator_bulk_disable(ARRAY_SIZE(wm0010->core_supplies),
182 wm0010->core_supplies);
186 spin_lock_irqsave(&wm0010->irq_lock, flags);
187 wm0010->state = WM0010_POWER_OFF;
188 spin_unlock_irqrestore(&wm0010->irq_lock, flags);
199 /* Called with wm0010->lock held */
200 static void wm0010_mark_boot_failure(struct wm0010_priv *wm0010)
205 spin_lock_irqsave(&wm0010->irq_lock, flags);
206 state = wm0010->state;
207 spin_unlock_irqrestore(&wm0010->irq_lock, flags);
209 dev_err(wm0010->dev, "Failed to transition from `%s' state to `%s' state\n",
212 wm0010->boot_failed = true;
219 struct wm0010_priv *wm0010 = snd_soc_component_get_drvdata(component);
226 wm0010_mark_boot_failure(wm0010);
239 wm0010_mark_boot_failure(wm0010);
243 if (wm0010->state < WM0010_STAGE2)
247 wm0010_mark_boot_failure(wm0010);
272 wm0010->pll_running = true;
277 wm0010_mark_boot_failure(wm0010);
282 wm0010_mark_boot_failure(wm0010);
287 wm0010_mark_boot_failure(wm0010);
292 wm0010_mark_boot_failure(wm0010);
297 wm0010_mark_boot_failure(wm0010);
302 wm0010_mark_boot_failure(wm0010);
307 wm0010_mark_boot_failure(wm0010);
316 wm0010_mark_boot_failure(wm0010);
322 wm0010_mark_boot_failure(wm0010);
326 if (wm0010->boot_failed)
345 struct wm0010_priv *wm0010 = snd_soc_component_get_drvdata(component);
370 wm0010->boot_failed = false;
440 if (!wm0010->pll_running) {
441 xfer->t.speed_hz = wm0010->sysclk / 6;
443 xfer->t.speed_hz = wm0010->max_spi_freq;
445 if (wm0010->board_max_spi_speed &&
446 (wm0010->board_max_spi_speed < wm0010->max_spi_freq))
447 xfer->t.speed_hz = wm0010->board_max_spi_speed;
451 wm0010->max_spi_freq = xfer->t.speed_hz;
469 if (wm0010->boot_failed) {
498 struct wm0010_priv *wm0010 = snd_soc_component_get_drvdata(component);
535 t.speed_hz = wm0010->sysclk / 10;
552 wm0010_mark_boot_failure(wm0010);
570 struct wm0010_priv *wm0010 = snd_soc_component_get_drvdata(component);
581 spin_lock_irqsave(&wm0010->irq_lock, flags);
582 if (wm0010->state != WM0010_POWER_OFF)
583 dev_warn(wm0010->dev, "DSP already powered up!\n");
584 spin_unlock_irqrestore(&wm0010->irq_lock, flags);
586 if (wm0010->sysclk > 26000000) {
592 mutex_lock(&wm0010->lock);
593 wm0010->pll_running = false;
595 dev_dbg(component->dev, "max_spi_freq: %d\n", wm0010->max_spi_freq);
597 ret = regulator_bulk_enable(ARRAY_SIZE(wm0010->core_supplies),
598 wm0010->core_supplies);
602 mutex_unlock(&wm0010->lock);
606 ret = regulator_enable(wm0010->dbvdd);
613 gpio_set_value_cansleep(wm0010->gpio_reset, !wm0010->gpio_reset_value);
614 spin_lock_irqsave(&wm0010->irq_lock, flags);
615 wm0010->state = WM0010_OUT_OF_RESET;
616 spin_unlock_irqrestore(&wm0010->irq_lock, flags);
618 if (!wait_for_completion_timeout(&wm0010->boot_completion,
622 spin_lock_irqsave(&wm0010->irq_lock, flags);
623 wm0010->state = WM0010_BOOTROM;
624 spin_unlock_irqrestore(&wm0010->irq_lock, flags);
630 if (!wait_for_completion_timeout(&wm0010->boot_completion,
634 spin_lock_irqsave(&wm0010->irq_lock, flags);
635 wm0010->state = WM0010_STAGE2;
636 spin_unlock_irqrestore(&wm0010->irq_lock, flags);
639 if (wm0010->max_spi_freq) {
646 /* On wm0010 only the CLKCTRL1 value is used */
647 pll_rec.clkctrl1 = wm0010->pll_clkctrl1;
668 t.speed_hz = wm0010->sysclk / 6;
690 wm0010->pll_running = true;
701 ret = wm0010_firmware_load("wm0010.dfw", component);
706 spin_lock_irqsave(&wm0010->irq_lock, flags);
707 wm0010->state = WM0010_FIRMWARE;
708 spin_unlock_irqrestore(&wm0010->irq_lock, flags);
710 mutex_unlock(&wm0010->lock);
721 mutex_unlock(&wm0010->lock);
725 mutex_unlock(&wm0010->lock);
726 regulator_bulk_disable(ARRAY_SIZE(wm0010->core_supplies),
727 wm0010->core_supplies);
735 struct wm0010_priv *wm0010 = snd_soc_component_get_drvdata(component);
746 mutex_lock(&wm0010->lock);
748 mutex_unlock(&wm0010->lock);
761 struct wm0010_priv *wm0010 = snd_soc_component_get_drvdata(component);
764 wm0010->sysclk = freq;
767 wm0010->max_spi_freq = 0;
771 wm0010->max_spi_freq = pll_clock_map[i].max_pll_spi_speed;
772 wm0010->pll_clkctrl1 = pll_clock_map[i].pll_clkctrl1;
801 .name = "wm0010-sdi1",
818 .name = "wm0010-sdi2",
838 struct wm0010_priv *wm0010 = data;
840 switch (wm0010->state) {
844 spin_lock(&wm0010->irq_lock);
845 complete(&wm0010->boot_completion);
846 spin_unlock(&wm0010->irq_lock);
857 struct wm0010_priv *wm0010 = snd_soc_component_get_drvdata(component);
859 wm0010->component = component;
870 struct wm0010_priv *wm0010;
872 wm0010 = devm_kzalloc(&spi->dev, sizeof(*wm0010),
874 if (!wm0010)
877 mutex_init(&wm0010->lock);
878 spin_lock_init(&wm0010->irq_lock);
880 spi_set_drvdata(spi, wm0010);
881 wm0010->dev = &spi->dev;
884 memcpy(&wm0010->pdata, dev_get_platdata(&spi->dev),
885 sizeof(wm0010->pdata));
887 init_completion(&wm0010->boot_completion);
889 wm0010->core_supplies[0].supply = "AVDD";
890 wm0010->core_supplies[1].supply = "DCVDD";
891 ret = devm_regulator_bulk_get(wm0010->dev, ARRAY_SIZE(wm0010->core_supplies),
892 wm0010->core_supplies);
894 dev_err(wm0010->dev, "Failed to obtain core supplies: %d\n",
899 wm0010->dbvdd = devm_regulator_get(wm0010->dev, "DBVDD");
900 if (IS_ERR(wm0010->dbvdd)) {
901 ret = PTR_ERR(wm0010->dbvdd);
902 dev_err(wm0010->dev, "Failed to obtain DBVDD: %d\n", ret);
906 if (wm0010->pdata.gpio_reset) {
907 wm0010->gpio_reset = wm0010->pdata.gpio_reset;
909 if (wm0010->pdata.reset_active_high)
910 wm0010->gpio_reset_value = 1;
912 wm0010->gpio_reset_value = 0;
914 if (wm0010->gpio_reset_value)
919 ret = devm_gpio_request_one(wm0010->dev, wm0010->gpio_reset,
920 gpio_flags, "wm0010 reset");
922 dev_err(wm0010->dev,
928 dev_err(wm0010->dev, "No reset GPIO configured\n");
932 wm0010->state = WM0010_POWER_OFF;
935 if (wm0010->pdata.irq_flags)
936 trigger = wm0010->pdata.irq_flags;
942 "wm0010", wm0010);
944 dev_err(wm0010->dev, "Failed to request IRQ %d: %d\n",
948 wm0010->irq = irq;
952 dev_err(wm0010->dev, "Failed to set IRQ %d as wake source: %d\n",
958 wm0010->board_max_spi_speed = spi->max_speed_hz;
960 wm0010->board_max_spi_speed = 0;
973 struct wm0010_priv *wm0010 = spi_get_drvdata(spi);
975 gpio_set_value_cansleep(wm0010->gpio_reset,
976 wm0010->gpio_reset_value);
978 irq_set_irq_wake(wm0010->irq, 0);
980 if (wm0010->irq)
981 free_irq(wm0010->irq, wm0010);
986 .name = "wm0010",
998 MODULE_FIRMWARE("wm0010.dfw");