Lines Matching +full:spi +full:- +full:mux
2 * wm8770.c -- WM8770 ALSA SoC Audio driver
19 #include <linux/spi/spi.h>
74 wm8770->codec->cache_sync = 1; \
83 static const DECLARE_TLV_DB_SCALE(adc_tlv, -1200, 100, 0);
84 static const DECLARE_TLV_DB_SCALE(dac_dig_tlv, -12750, 50, 1);
85 static const DECLARE_TLV_DB_SCALE(dac_alg_tlv, -12700, 100, 1);
169 SOC_DAPM_ENUM("Capture Mux", ain_enum);
208 SND_SOC_DAPM_MUX("Capture Mux", WM8770_ADCMUX, 8, 1, &ain_mux),
238 { "Capture Mux", "AIN1", "AIN1" },
239 { "Capture Mux", "AIN2", "AIN2" },
240 { "Capture Mux", "AIN3", "AIN3" },
241 { "Capture Mux", "AIN4", "AIN4" },
242 { "Capture Mux", "AIN5", "AIN5" },
243 { "Capture Mux", "AIN6", "AIN6" },
244 { "Capture Mux", "AIN7", "AIN7" },
245 { "Capture Mux", "AIN8", "AIN8" },
247 { "ADC", NULL, "Capture Mux" },
252 { "VOUT1 Mixer", "Bypass Switch", "Capture Mux" },
257 { "VOUT2 Mixer", "Bypass Switch", "Capture Mux" },
262 { "VOUT3 Mixer", "Bypass Switch", "Capture Mux" },
266 { "VOUT4 Mixer", "Bypass Switch", "Capture Mux" },
279 codec = w->codec; in vout12supply_event()
298 codec = w->codec; in vout34supply_event()
322 codec = dai->codec; in wm8770_set_fmt()
332 return -EINVAL; in wm8770_set_fmt()
346 return -EINVAL; in wm8770_set_fmt()
362 return -EINVAL; in wm8770_set_fmt()
391 codec = dai->codec; in wm8770_hw_params()
409 switch (substream->stream) { in wm8770_hw_params()
419 return -EINVAL; in wm8770_hw_params()
425 ratio = wm8770->sysclk / params_rate(params); in wm8770_hw_params()
431 dev_err(codec->dev, in wm8770_hw_params()
433 wm8770->sysclk, params_rate(params)); in wm8770_hw_params()
434 return -EINVAL; in wm8770_hw_params()
437 dev_dbg(codec->dev, "MCLK is %dfs\n", mclk_ratios[i]); in wm8770_hw_params()
452 codec = dai->codec; in wm8770_mute()
463 codec = dai->codec; in wm8770_set_sysclk()
465 wm8770->sysclk = freq; in wm8770_set_sysclk()
474 if (!codec->cache_sync) in wm8770_sync_cache()
477 codec->cache_only = 0; in wm8770_sync_cache()
478 cache = codec->reg_cache; in wm8770_sync_cache()
479 for (i = 0; i < codec->driver->reg_cache_size; i++) { in wm8770_sync_cache()
484 codec->cache_sync = 0; in wm8770_sync_cache()
501 if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { in wm8770_set_bias_level()
502 ret = regulator_bulk_enable(ARRAY_SIZE(wm8770->supplies), in wm8770_set_bias_level()
503 wm8770->supplies); in wm8770_set_bias_level()
505 dev_err(codec->dev, in wm8770_set_bias_level()
518 regulator_bulk_disable(ARRAY_SIZE(wm8770->supplies), in wm8770_set_bias_level()
519 wm8770->supplies); in wm8770_set_bias_level()
523 codec->dapm.bias_level = level; in wm8770_set_bias_level()
538 .name = "wm8770-hifi",
581 wm8770->codec = codec; in wm8770_probe()
583 codec->dapm.idle_bias_off = 1; in wm8770_probe()
585 ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8770->control_type); in wm8770_probe()
587 dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret); in wm8770_probe()
591 for (i = 0; i < ARRAY_SIZE(wm8770->supplies); i++) in wm8770_probe()
592 wm8770->supplies[i].supply = wm8770_supply_names[i]; in wm8770_probe()
594 ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8770->supplies), in wm8770_probe()
595 wm8770->supplies); in wm8770_probe()
597 dev_err(codec->dev, "Failed to request supplies: %d\n", ret); in wm8770_probe()
601 wm8770->disable_nb[0].notifier_call = wm8770_regulator_event_0; in wm8770_probe()
602 wm8770->disable_nb[1].notifier_call = wm8770_regulator_event_1; in wm8770_probe()
603 wm8770->disable_nb[2].notifier_call = wm8770_regulator_event_2; in wm8770_probe()
606 for (i = 0; i < ARRAY_SIZE(wm8770->supplies); i++) { in wm8770_probe()
607 ret = regulator_register_notifier(wm8770->supplies[i].consumer, in wm8770_probe()
608 &wm8770->disable_nb[i]); in wm8770_probe()
610 dev_err(codec->dev, in wm8770_probe()
616 ret = regulator_bulk_enable(ARRAY_SIZE(wm8770->supplies), in wm8770_probe()
617 wm8770->supplies); in wm8770_probe()
619 dev_err(codec->dev, "Failed to enable supplies: %d\n", ret); in wm8770_probe()
625 dev_err(codec->dev, "Failed to issue reset: %d\n", ret); in wm8770_probe()
648 snd_soc_dapm_new_controls(&codec->dapm, wm8770_dapm_widgets, in wm8770_probe()
650 snd_soc_dapm_add_routes(&codec->dapm, wm8770_intercon, in wm8770_probe()
655 regulator_bulk_disable(ARRAY_SIZE(wm8770->supplies), wm8770->supplies); in wm8770_probe()
657 regulator_bulk_free(ARRAY_SIZE(wm8770->supplies), wm8770->supplies); in wm8770_probe()
669 for (i = 0; i < ARRAY_SIZE(wm8770->supplies); ++i) in wm8770_remove()
670 regulator_unregister_notifier(wm8770->supplies[i].consumer, in wm8770_remove()
671 &wm8770->disable_nb[i]); in wm8770_remove()
672 regulator_bulk_free(ARRAY_SIZE(wm8770->supplies), wm8770->supplies); in wm8770_remove()
693 static int __devinit wm8770_spi_probe(struct spi_device *spi) in wm8770_spi_probe() argument
698 wm8770 = devm_kzalloc(&spi->dev, sizeof(struct wm8770_priv), in wm8770_spi_probe()
701 return -ENOMEM; in wm8770_spi_probe()
703 wm8770->control_type = SND_SOC_SPI; in wm8770_spi_probe()
704 spi_set_drvdata(spi, wm8770); in wm8770_spi_probe()
706 ret = snd_soc_register_codec(&spi->dev, in wm8770_spi_probe()
712 static int __devexit wm8770_spi_remove(struct spi_device *spi) in wm8770_spi_remove() argument
714 snd_soc_unregister_codec(&spi->dev); in wm8770_spi_remove()
734 printk(KERN_ERR "Failed to register wm8770 SPI driver: %d\n", in wm8770_modinit()