Lines Matching full:es8316
3 * es8316.c -- es8316 ALSA SoC audio driver
24 #include "es8316.h"
49 * ES8316 controls
362 struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component); in es8316_set_dai_sysclk() local
366 es8316->sysclk = freq; in es8316_set_dai_sysclk()
369 es8316->sysclk_constraints.list = NULL; in es8316_set_dai_sysclk()
370 es8316->sysclk_constraints.count = 0; in es8316_set_dai_sysclk()
375 ret = clk_set_rate(es8316->mclk, freq); in es8316_set_dai_sysclk()
386 es8316->allowed_rates[count++] = freq / ratio; in es8316_set_dai_sysclk()
389 es8316->sysclk_constraints.list = es8316->allowed_rates; in es8316_set_dai_sysclk()
390 es8316->sysclk_constraints.count = count; in es8316_set_dai_sysclk()
450 struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component); in es8316_pcm_startup() local
452 if (es8316->sysclk_constraints.list) in es8316_pcm_startup()
455 &es8316->sysclk_constraints); in es8316_pcm_startup()
465 struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component); in es8316_pcm_hw_params() local
473 if (es8316->sysclk % ratio != 0) in es8316_pcm_hw_params()
475 if (es8316->sysclk / ratio == params_rate(params)) in es8316_pcm_hw_params()
525 .name = "ES8316 HiFi",
574 struct es8316_priv *es8316 = data; in es8316_irq() local
575 struct snd_soc_component *comp = es8316->component; in es8316_irq()
578 mutex_lock(&es8316->lock); in es8316_irq()
580 regmap_read(es8316->regmap, ES8316_GPIO_FLAG, &flags); in es8316_irq()
585 if (!es8316->jack) in es8316_irq()
588 if (es8316->jd_inverted) in es8316_irq()
594 if (es8316->jack->status & SND_JACK_MICROPHONE) in es8316_irq()
597 if (es8316->jack->status & SND_JACK_HEADPHONE) { in es8316_irq()
598 snd_soc_jack_report(es8316->jack, 0, in es8316_irq()
602 } else if (!(es8316->jack->status & SND_JACK_HEADPHONE)) { in es8316_irq()
605 regmap_read(es8316->regmap, ES8316_GPIO_FLAG, &flags); in es8316_irq()
606 if (es8316->jd_inverted) in es8316_irq()
614 snd_soc_jack_report(es8316->jack, in es8316_irq()
620 snd_soc_jack_report(es8316->jack, in es8316_irq()
626 } else if (es8316->jack->status & SND_JACK_MICROPHONE) { in es8316_irq()
630 snd_soc_jack_report(es8316->jack, 0, SND_JACK_BTN_0); in es8316_irq()
633 snd_soc_jack_report(es8316->jack, in es8316_irq()
640 mutex_unlock(&es8316->lock); in es8316_irq()
647 struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component); in es8316_enable_jack_detect() local
650 * Init es8316->jd_inverted here and not in the probe, as we cannot in es8316_enable_jack_detect()
651 * guarantee that the bytchr-es8316 driver, which might set this in es8316_enable_jack_detect()
654 es8316->jd_inverted = device_property_read_bool(component->dev, in es8316_enable_jack_detect()
657 mutex_lock(&es8316->lock); in es8316_enable_jack_detect()
659 es8316->jack = jack; in es8316_enable_jack_detect()
661 if (es8316->jack->status & SND_JACK_MICROPHONE) in es8316_enable_jack_detect()
668 mutex_unlock(&es8316->lock); in es8316_enable_jack_detect()
671 enable_irq(es8316->irq); in es8316_enable_jack_detect()
672 es8316_irq(es8316->irq, es8316); in es8316_enable_jack_detect()
677 struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component); in es8316_disable_jack_detect() local
679 disable_irq(es8316->irq); in es8316_disable_jack_detect()
681 mutex_lock(&es8316->lock); in es8316_disable_jack_detect()
686 if (es8316->jack->status & SND_JACK_MICROPHONE) { in es8316_disable_jack_detect()
688 snd_soc_jack_report(es8316->jack, 0, SND_JACK_BTN_0); in es8316_disable_jack_detect()
691 es8316->jack = NULL; in es8316_disable_jack_detect()
693 mutex_unlock(&es8316->lock); in es8316_disable_jack_detect()
709 struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component); in es8316_probe() local
712 es8316->component = component; in es8316_probe()
714 es8316->mclk = devm_clk_get_optional(component->dev, "mclk"); in es8316_probe()
715 if (IS_ERR(es8316->mclk)) { in es8316_probe()
717 return PTR_ERR(es8316->mclk); in es8316_probe()
719 if (!es8316->mclk) in es8316_probe()
722 ret = clk_prepare_enable(es8316->mclk); in es8316_probe()
752 struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component); in es8316_remove() local
754 clk_disable_unprepare(es8316->mclk); in es8316_remove()
793 struct es8316_priv *es8316; in es8316_i2c_probe() local
796 es8316 = devm_kzalloc(&i2c_client->dev, sizeof(struct es8316_priv), in es8316_i2c_probe()
798 if (es8316 == NULL) in es8316_i2c_probe()
801 i2c_set_clientdata(i2c_client, es8316); in es8316_i2c_probe()
803 es8316->regmap = devm_regmap_init_i2c(i2c_client, &es8316_regmap); in es8316_i2c_probe()
804 if (IS_ERR(es8316->regmap)) in es8316_i2c_probe()
805 return PTR_ERR(es8316->regmap); in es8316_i2c_probe()
807 es8316->irq = i2c_client->irq; in es8316_i2c_probe()
808 mutex_init(&es8316->lock); in es8316_i2c_probe()
810 ret = devm_request_threaded_irq(dev, es8316->irq, NULL, es8316_irq, in es8316_i2c_probe()
812 "es8316", es8316); in es8316_i2c_probe()
815 disable_irq(es8316->irq); in es8316_i2c_probe()
817 dev_warn(dev, "Failed to get IRQ %d: %d\n", es8316->irq, ret); in es8316_i2c_probe()
818 es8316->irq = -ENXIO; in es8316_i2c_probe()
827 {"es8316", 0 },
833 { .compatible = "everest,es8316", },
848 .name = "es8316",
857 MODULE_DESCRIPTION("Everest Semi ES8316 ALSA SoC Codec Driver");