Lines Matching refs:max98090

3  * max98090.c -- MAX98090 ALSA SoC Audio driver
22 #include <sound/max98090.h>
23 #include "max98090.h"
275 static int max98090_reset(struct max98090_priv *max98090)
280 ret = regmap_write(max98090->regmap, M98090_REG_SOFTWARE_RESET,
283 dev_err(max98090->component->dev,
351 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
360 select = &(max98090->pa1en);
363 select = &(max98090->pa2en);
366 select = &(max98090->sidetone);
391 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
403 select = &(max98090->pa1en);
406 select = &(max98090->pa2en);
409 select = &(max98090->sidetone);
737 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
748 max98090->pa1en = val - 1; /* Update for volatile */
750 max98090->pa2en = val - 1; /* Update for volatile */
758 val = max98090->pa1en + 1;
760 val = max98090->pa2en + 1;
784 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
787 max98090->shdn_pending = true;
1434 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1440 if (max98090->devtype == MAX98091) {
1451 if (max98090->devtype == MAX98091) {
1490 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1494 if (!max98090->sysclk) {
1499 if (!max98090->bclk || !max98090->lrclk) {
1512 if ((pclk_rates[i] == max98090->sysclk) &&
1513 (lrclk_rates[i] == max98090->lrclk)) {
1529 if ((user_pclk_rates[i] == max98090->sysclk) &&
1530 (user_lrclk_rates[i] == max98090->lrclk)) {
1568 ni = 65536ULL * (max98090->lrclk < 50000 ? 96ULL : 48ULL)
1569 * (unsigned long long int)max98090->lrclk;
1570 do_div(ni, (unsigned long long int)max98090->sysclk);
1582 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1586 max98090->dai_fmt = fmt;
1587 cdata = &max98090->dai[0];
1603 max98090->master = false;
1607 if (max98090->tdm_slots == 4) {
1611 } else if (max98090->tdm_slots == 3) {
1620 max98090->master = true;
1677 regval = max98090->tdm_lslot << M98090_TDM_SLOTL_SHIFT |
1678 max98090->tdm_rslot << M98090_TDM_SLOTR_SHIFT |
1692 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1706 max98090->tdm_slots = slots;
1707 max98090->tdm_lslot = ffs(rx_mask) - 1;
1708 max98090->tdm_rslot = fls(rx_mask) - 1;
1716 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1731 if (IS_ERR(max98090->mclk))
1735 clk_disable_unprepare(max98090->mclk);
1737 ret = clk_prepare_enable(max98090->mclk);
1745 ret = regcache_sync(max98090->regmap);
1758 regcache_mark_dirty(max98090->regmap);
1878 static int max98090_configure_dmic(struct max98090_priv *max98090,
1901 regmap_update_bits(max98090->regmap, M98090_REG_DIGITAL_MIC_ENABLE,
1905 regmap_update_bits(max98090->regmap, M98090_REG_DIGITAL_MIC_CONFIG,
1917 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1918 unsigned int fmt = max98090->dai_fmt;
1933 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1936 cdata = &max98090->dai[0];
1937 max98090->bclk = snd_soc_params_to_bclk(params);
1939 max98090->bclk *= 2;
1941 max98090->lrclk = params_rate(params);
1952 if (max98090->master)
1955 cdata->rate = max98090->lrclk;
1958 if (max98090->lrclk < 24000)
1966 if (max98090->lrclk < 50000)
1973 max98090_configure_dmic(max98090, max98090->dmic_freq, max98090->pclk,
1974 max98090->lrclk);
1986 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
1989 if (freq == max98090->sysclk)
1992 if (!IS_ERR(max98090->mclk)) {
1993 freq = clk_round_rate(max98090->mclk, freq);
1994 clk_set_rate(max98090->mclk, freq);
2005 max98090->pclk = freq;
2009 max98090->pclk = freq >> 1;
2013 max98090->pclk = freq >> 2;
2019 max98090->sysclk = freq;
2041 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2047 if (!max98090->master && snd_soc_dai_active(dai) == 1)
2049 &max98090->pll_det_enable_work,
2055 if (!max98090->master && snd_soc_dai_active(dai) == 1)
2056 schedule_work(&max98090->pll_det_disable_work);
2067 struct max98090_priv *max98090 =
2070 struct snd_soc_component *component = max98090->component;
2079 regmap_read(max98090->regmap, M98090_REG_DEVICE_STATUS, &status);
2085 regmap_read(max98090->regmap, M98090_REG_INTERRUPT_S, &mask);
2089 &max98090->jack_work,
2100 struct max98090_priv *max98090 =
2102 struct snd_soc_component *component = max98090->component;
2104 cancel_delayed_work_sync(&max98090->pll_det_enable_work);
2111 static void max98090_pll_work(struct max98090_priv *max98090)
2113 struct snd_soc_component *component = max98090->component;
2149 struct max98090_priv *max98090 = container_of(work,
2152 struct snd_soc_component *component = max98090->component;
2157 if (max98090->jack_state == M98090_JACK_STATE_NO_HEADSET) {
2178 max98090->jack_state = M98090_JACK_STATE_NO_HEADSET;
2185 if (max98090->jack_state ==
2207 max98090->jack_state = M98090_JACK_STATE_HEADPHONE;
2216 max98090->jack_state = M98090_JACK_STATE_HEADSET;
2227 snd_soc_jack_report(max98090->jack, status,
2233 struct max98090_priv *max98090 = data;
2234 struct snd_soc_component *component = max98090->component;
2245 ret = regmap_read(max98090->regmap, M98090_REG_INTERRUPT_S, &mask);
2254 ret = regmap_read(max98090->regmap, M98090_REG_DEVICE_STATUS, &active);
2279 max98090_pll_work(max98090);
2288 &max98090->jack_work,
2317 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2321 max98090->jack = jack;
2333 snd_soc_jack_report(max98090->jack, 0,
2337 &max98090->jack_work,
2379 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2388 max98090->mclk = devm_clk_get(component->dev, "mclk");
2389 if (PTR_ERR(max98090->mclk) == -EPROBE_DEFER)
2392 max98090->component = component;
2395 max98090_reset(max98090);
2399 max98090->sysclk = (unsigned)-1;
2400 max98090->pclk = (unsigned)-1;
2401 max98090->master = false;
2403 cdata = &max98090->dai[0];
2407 max98090->lin_state = 0;
2408 max98090->pa1en = 0;
2409 max98090->pa2en = 0;
2411 max98090->tdm_lslot = 0;
2412 max98090->tdm_rslot = 1;
2432 if (max98090->devtype != devtype) {
2434 max98090->devtype = devtype;
2437 max98090->jack_state = M98090_JACK_STATE_NO_HEADSET;
2439 INIT_DELAYED_WORK(&max98090->jack_work, max98090_jack_work);
2440 INIT_DELAYED_WORK(&max98090->pll_det_enable_work,
2442 INIT_WORK(&max98090->pll_det_disable_work,
2491 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2493 cancel_delayed_work_sync(&max98090->jack_work);
2494 cancel_delayed_work_sync(&max98090->pll_det_enable_work);
2495 cancel_work_sync(&max98090->pll_det_disable_work);
2496 max98090->component = NULL;
2502 struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2504 if (max98090->shdn_pending) {
2510 max98090->shdn_pending = false;
2537 { "max98090", MAX98090 },
2545 struct max98090_priv *max98090;
2552 max98090 = devm_kzalloc(&i2c->dev, sizeof(struct max98090_priv),
2554 if (max98090 == NULL)
2571 max98090->devtype = driver_data;
2572 i2c_set_clientdata(i2c, max98090);
2573 max98090->pdata = i2c->dev.platform_data;
2576 &max98090->dmic_freq);
2578 max98090->dmic_freq = MAX98090_DEFAULT_DMIC_FREQ;
2580 max98090->regmap = devm_regmap_init_i2c(i2c, &max98090_regmap);
2581 if (IS_ERR(max98090->regmap)) {
2582 ret = PTR_ERR(max98090->regmap);
2589 "max98090_interrupt", max98090);
2605 struct max98090_priv *max98090 = dev_get_drvdata(&i2c->dev);
2611 regmap_write(max98090->regmap,
2613 regmap_write(max98090->regmap,
2626 struct max98090_priv *max98090 = dev_get_drvdata(dev);
2628 regcache_cache_only(max98090->regmap, false);
2630 max98090_reset(max98090);
2632 regcache_sync(max98090->regmap);
2639 struct max98090_priv *max98090 = dev_get_drvdata(dev);
2641 regcache_cache_only(max98090->regmap, true);
2650 struct max98090_priv *max98090 = dev_get_drvdata(dev);
2653 regcache_mark_dirty(max98090->regmap);
2655 max98090_reset(max98090);
2658 regmap_read(max98090->regmap, M98090_REG_DEVICE_STATUS, &status);
2660 regcache_sync(max98090->regmap);
2674 { .compatible = "maxim,max98090", },
2691 .name = "max98090",