Lines Matching refs:max98090
3 * max98090.c -- MAX98090 ALSA SoC Audio driver
23 #include <sound/max98090.h>
24 #include "max98090.h"
276 static int max98090_reset(struct max98090_priv *max98090)
281 ret = regmap_write(max98090->regmap, M98090_REG_SOFTWARE_RESET,
284 dev_err(max98090->component->dev,
352 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
361 select = &(max98090->pa1en);
364 select = &(max98090->pa2en);
367 select = &(max98090->sidetone);
392 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
403 select = &(max98090->pa1en);
406 select = &(max98090->pa2en);
409 select = &(max98090->sidetone);
736 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
747 max98090->pa1en = val - 1; /* Update for volatile */
749 max98090->pa2en = val - 1; /* Update for volatile */
757 val = max98090->pa1en + 1;
759 val = max98090->pa2en + 1;
783 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
786 max98090->shdn_pending = true;
1433 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1439 if (max98090->devtype == MAX98091) {
1450 if (max98090->devtype == MAX98091) {
1489 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1493 if (!max98090->sysclk) {
1498 if (!max98090->bclk || !max98090->lrclk) {
1511 if ((pclk_rates[i] == max98090->sysclk) &&
1512 (lrclk_rates[i] == max98090->lrclk)) {
1528 if ((user_pclk_rates[i] == max98090->sysclk) &&
1529 (user_lrclk_rates[i] == max98090->lrclk)) {
1567 ni = 65536ULL * (max98090->lrclk < 50000 ? 96ULL : 48ULL)
1568 * (unsigned long long int)max98090->lrclk;
1569 do_div(ni, (unsigned long long int)max98090->sysclk);
1581 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1585 max98090->dai_fmt = fmt;
1586 cdata = &max98090->dai[0];
1601 max98090->master = false;
1605 if (max98090->tdm_slots == 4) {
1609 } else if (max98090->tdm_slots == 3) {
1618 max98090->master = true;
1668 if (max98090->tdm_slots > 1)
1682 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1684 cdata = &max98090->dai[0];
1689 max98090->tdm_slots = slots;
1690 max98090->tdm_width = slot_width;
1692 if (max98090->tdm_slots > 1) {
1709 max98090_dai_set_fmt(codec_dai, max98090->dai_fmt);
1717 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1732 if (IS_ERR(max98090->mclk))
1736 clk_disable_unprepare(max98090->mclk);
1738 ret = clk_prepare_enable(max98090->mclk);
1746 ret = regcache_sync(max98090->regmap);
1759 regcache_mark_dirty(max98090->regmap);
1879 static int max98090_configure_dmic(struct max98090_priv *max98090,
1902 regmap_update_bits(max98090->regmap, M98090_REG_DIGITAL_MIC_ENABLE,
1906 regmap_update_bits(max98090->regmap, M98090_REG_DIGITAL_MIC_CONFIG,
1918 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1919 unsigned int fmt = max98090->dai_fmt;
1934 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1937 cdata = &max98090->dai[0];
1938 max98090->bclk = snd_soc_params_to_bclk(params);
1940 max98090->bclk *= 2;
1942 max98090->lrclk = params_rate(params);
1953 if (max98090->master)
1956 cdata->rate = max98090->lrclk;
1959 if (max98090->lrclk < 24000)
1967 if (max98090->lrclk < 50000)
1974 max98090_configure_dmic(max98090, max98090->dmic_freq, max98090->pclk,
1975 max98090->lrclk);
1987 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1990 if (freq == max98090->sysclk)
1993 if (!IS_ERR(max98090->mclk)) {
1994 freq = clk_round_rate(max98090->mclk, freq);
1995 clk_set_rate(max98090->mclk, freq);
2006 max98090->pclk = freq;
2010 max98090->pclk = freq >> 1;
2014 max98090->pclk = freq >> 2;
2020 max98090->sysclk = freq;
2042 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2048 if (!max98090->master && snd_soc_dai_active(dai) == 1)
2050 &max98090->pll_det_enable_work,
2056 if (!max98090->master && snd_soc_dai_active(dai) == 1)
2057 schedule_work(&max98090->pll_det_disable_work);
2068 struct max98090_priv *max98090 =
2071 struct snd_soc_component *component = max98090->component;
2080 regmap_read(max98090->regmap, M98090_REG_DEVICE_STATUS, &status);
2086 regmap_read(max98090->regmap, M98090_REG_INTERRUPT_S, &mask);
2090 &max98090->jack_work,
2101 struct max98090_priv *max98090 =
2103 struct snd_soc_component *component = max98090->component;
2105 cancel_delayed_work_sync(&max98090->pll_det_enable_work);
2112 static void max98090_pll_work(struct max98090_priv *max98090)
2114 struct snd_soc_component *component = max98090->component;
2150 struct max98090_priv *max98090 = container_of(work,
2153 struct snd_soc_component *component = max98090->component;
2158 if (max98090->jack_state == M98090_JACK_STATE_NO_HEADSET) {
2181 max98090->jack_state = M98090_JACK_STATE_NO_HEADSET;
2188 if (max98090->jack_state ==
2210 max98090->jack_state = M98090_JACK_STATE_HEADPHONE;
2219 max98090->jack_state = M98090_JACK_STATE_HEADSET;
2230 snd_soc_jack_report(max98090->jack, status,
2236 struct max98090_priv *max98090 = data;
2237 struct snd_soc_component *component = max98090->component;
2248 ret = regmap_read(max98090->regmap, M98090_REG_INTERRUPT_S, &mask);
2257 ret = regmap_read(max98090->regmap, M98090_REG_DEVICE_STATUS, &active);
2282 max98090_pll_work(max98090);
2291 &max98090->jack_work,
2320 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2324 max98090->jack = jack;
2336 snd_soc_jack_report(max98090->jack, 0,
2340 &max98090->jack_work,
2384 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2393 max98090->mclk = devm_clk_get(component->dev, "mclk");
2394 if (PTR_ERR(max98090->mclk) == -EPROBE_DEFER)
2397 max98090->component = component;
2400 max98090_reset(max98090);
2404 max98090->sysclk = (unsigned)-1;
2405 max98090->pclk = (unsigned)-1;
2406 max98090->master = false;
2408 cdata = &max98090->dai[0];
2412 max98090->lin_state = 0;
2413 max98090->pa1en = 0;
2414 max98090->pa2en = 0;
2434 if (max98090->devtype != devtype) {
2436 max98090->devtype = devtype;
2439 max98090->jack_state = M98090_JACK_STATE_NO_HEADSET;
2441 INIT_DELAYED_WORK(&max98090->jack_work, max98090_jack_work);
2442 INIT_DELAYED_WORK(&max98090->pll_det_enable_work,
2444 INIT_WORK(&max98090->pll_det_disable_work,
2493 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2495 cancel_delayed_work_sync(&max98090->jack_work);
2496 cancel_delayed_work_sync(&max98090->pll_det_enable_work);
2497 cancel_work_sync(&max98090->pll_det_disable_work);
2498 max98090->component = NULL;
2504 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2506 if (max98090->shdn_pending) {
2512 max98090->shdn_pending = false;
2542 struct max98090_priv *max98090;
2549 max98090 = devm_kzalloc(&i2c->dev, sizeof(struct max98090_priv),
2551 if (max98090 == NULL)
2566 max98090->devtype = driver_data;
2567 i2c_set_clientdata(i2c, max98090);
2568 max98090->pdata = i2c->dev.platform_data;
2571 &max98090->dmic_freq);
2573 max98090->dmic_freq = MAX98090_DEFAULT_DMIC_FREQ;
2575 max98090->regmap = devm_regmap_init_i2c(i2c, &max98090_regmap);
2576 if (IS_ERR(max98090->regmap)) {
2577 ret = PTR_ERR(max98090->regmap);
2584 "max98090_interrupt", max98090);
2600 struct max98090_priv *max98090 = dev_get_drvdata(&i2c->dev);
2606 regmap_write(max98090->regmap,
2608 regmap_write(max98090->regmap,
2623 struct max98090_priv *max98090 = dev_get_drvdata(dev);
2625 regcache_cache_only(max98090->regmap, false);
2627 max98090_reset(max98090);
2629 regcache_sync(max98090->regmap);
2636 struct max98090_priv *max98090 = dev_get_drvdata(dev);
2638 regcache_cache_only(max98090->regmap, true);
2647 struct max98090_priv *max98090 = dev_get_drvdata(dev);
2650 regcache_mark_dirty(max98090->regmap);
2652 max98090_reset(max98090);
2655 regmap_read(max98090->regmap, M98090_REG_DEVICE_STATUS, &status);
2657 regcache_sync(max98090->regmap);
2670 { "max98090", MAX98090 },
2677 { .compatible = "maxim,max98090", },
2693 .name = "max98090",