Lines Matching defs:wm8904
3 * wm8904.c -- WM8904 ALSA SoC Audio driver
25 #include <sound/wm8904.h>
27 #include "wm8904.h"
316 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
325 switch (wm8904->sysclk_src) {
327 dev_dbg(component->dev, "Using %dHz MCLK\n", wm8904->mclk_rate);
330 rate = wm8904->mclk_rate;
339 wm8904->fll_fout);
342 rate = wm8904->fll_fout;
353 wm8904->sysclk_rate = rate / 2;
356 wm8904->sysclk_rate = rate;
365 dev_dbg(component->dev, "CLK_SYS is %dHz\n", wm8904->sysclk_rate);
372 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
373 struct wm8904_pdata *pdata = wm8904->pdata;
381 pdata->drc_cfgs[wm8904->drc_cfg].regs[i]);
392 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
393 struct wm8904_pdata *pdata = wm8904->pdata;
399 wm8904->drc_cfg = value;
410 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
412 ucontrol->value.enumerated.item[0] = wm8904->drc_cfg;
419 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
420 struct wm8904_pdata *pdata = wm8904->pdata;
423 if (!pdata || !wm8904->num_retune_mobile_texts)
428 cfg = wm8904->retune_mobile_cfg;
433 wm8904->retune_mobile_texts[cfg]) == 0 &&
435 - wm8904->fs) < best_val) {
438 - wm8904->fs);
445 wm8904->fs);
463 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
464 struct wm8904_pdata *pdata = wm8904->pdata;
470 wm8904->retune_mobile_cfg = value;
481 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
483 ucontrol->value.enumerated.item[0] = wm8904->retune_mobile_cfg;
492 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
498 if (wm8904->deemph) {
501 if (abs(deemph_settings[i] - wm8904->fs) <
502 abs(deemph_settings[best] - wm8904->fs))
521 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
523 ucontrol->value.integer.value[0] = wm8904->deemph;
531 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
537 wm8904->deemph = deemph;
657 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
666 switch (wm8904->sysclk_src) {
695 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
759 if (wm8904->dcs_state[dcs_l] || wm8904->dcs_state[dcs_r]) {
763 wm8904->dcs_state[dcs_l]);
765 wm8904->dcs_state[dcs_r]);
824 wm8904->dcs_state[dcs_l] = snd_soc_component_read(component, dcs_l_reg);
825 wm8904->dcs_state[dcs_r] = snd_soc_component_read(component, dcs_r_reg);
1186 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
1194 switch (wm8904->devtype) {
1298 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
1307 wm8904->fs = params_rate(params);
1308 if (wm8904->tdm_slots) {
1310 wm8904->tdm_slots, wm8904->tdm_width);
1311 wm8904->bclk = snd_soc_calc_bclk(wm8904->fs,
1312 wm8904->tdm_width, 2,
1313 wm8904->tdm_slots);
1315 wm8904->bclk = snd_soc_params_to_bclk(params);
1335 dev_dbg(component->dev, "Target BCLK is %dHz\n", wm8904->bclk);
1343 best_val = abs((wm8904->sysclk_rate / clk_sys_rates[0].ratio)
1344 - wm8904->fs);
1346 cur_val = abs((wm8904->sysclk_rate /
1347 clk_sys_rates[i].ratio) - wm8904->fs);
1360 best_val = abs(wm8904->fs - sample_rates[0].rate);
1363 cur_val = abs(wm8904->fs - sample_rates[i].rate);
1375 if (wm8904->fs <= 24000)
1382 cur_val = ((wm8904->sysclk_rate * 10) / bclk_divs[i].div)
1383 - wm8904->bclk;
1391 wm8904->bclk = (wm8904->sysclk_rate * 10) / bclk_divs[best].div;
1393 bclk_divs[best].div, wm8904->bclk);
1397 dev_dbg(component->dev, "LRCLK_RATE is %d\n", wm8904->bclk / wm8904->fs);
1398 aif3 |= wm8904->bclk / wm8904->fs;
1514 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
1549 wm8904->tdm_width = slot_width;
1550 wm8904->tdm_slots = slots / 2;
1671 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
1677 if (source == wm8904->fll_src && Fref == wm8904->fll_fref &&
1678 Fout == wm8904->fll_fout)
1686 wm8904->fll_fref = 0;
1687 wm8904->fll_fout = 0;
1788 wm8904->fll_fref = Fref;
1789 wm8904->fll_fout = Fout;
1790 wm8904->fll_src = source;
1874 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
1894 ret = regulator_bulk_enable(ARRAY_SIZE(wm8904->supplies),
1895 wm8904->supplies);
1903 ret = clk_prepare_enable(wm8904->mclk);
1907 regulator_bulk_disable(ARRAY_SIZE(wm8904->supplies),
1908 wm8904->supplies);
1912 regcache_cache_only(wm8904->regmap, false);
1913 regcache_sync(wm8904->regmap);
1950 regcache_cache_only(wm8904->regmap, true);
1951 regcache_mark_dirty(wm8904->regmap);
1953 regulator_bulk_disable(ARRAY_SIZE(wm8904->supplies),
1954 wm8904->supplies);
1955 clk_disable_unprepare(wm8904->mclk);
1977 .name = "wm8904-hifi",
1998 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
1999 struct wm8904_pdata *pdata = wm8904->pdata;
2002 wm8904->retune_mobile_enum,
2012 wm8904->num_retune_mobile_texts = 0;
2013 wm8904->retune_mobile_texts = NULL;
2015 for (j = 0; j < wm8904->num_retune_mobile_texts; j++) {
2017 wm8904->retune_mobile_texts[j]) == 0)
2021 if (j != wm8904->num_retune_mobile_texts)
2025 t = krealloc(wm8904->retune_mobile_texts,
2027 (wm8904->num_retune_mobile_texts + 1),
2033 t[wm8904->num_retune_mobile_texts] =
2037 wm8904->num_retune_mobile_texts++;
2038 wm8904->retune_mobile_texts = t;
2042 wm8904->num_retune_mobile_texts);
2044 wm8904->retune_mobile_enum.items = wm8904->num_retune_mobile_texts;
2045 wm8904->retune_mobile_enum.texts = wm8904->retune_mobile_texts;
2055 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
2056 struct wm8904_pdata *pdata = wm8904->pdata;
2069 SOC_ENUM_EXT("DRC Mode", wm8904->drc_enum,
2073 wm8904->drc_texts = kmalloc_array(pdata->num_drc_cfgs,
2076 if (!wm8904->drc_texts)
2080 wm8904->drc_texts[i] = pdata->drc_cfgs[i].name;
2082 wm8904->drc_enum.items = pdata->num_drc_cfgs;
2083 wm8904->drc_enum.texts = wm8904->drc_texts;
2106 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
2108 switch (wm8904->devtype) {
2116 wm8904->devtype);
2129 struct wm8904_priv *wm8904 = snd_soc_component_get_drvdata(component);
2131 kfree(wm8904->retune_mobile_texts);
2132 kfree(wm8904->drc_texts);
2160 .compatible = "wlf,wm8904",
2175 struct wm8904_priv *wm8904;
2179 wm8904 = devm_kzalloc(&i2c->dev, sizeof(struct wm8904_priv),
2181 if (wm8904 == NULL)
2184 wm8904->mclk = devm_clk_get(&i2c->dev, "mclk");
2185 if (IS_ERR(wm8904->mclk)) {
2186 ret = PTR_ERR(wm8904->mclk);
2191 wm8904->regmap = devm_regmap_init_i2c(i2c, &wm8904_regmap);
2192 if (IS_ERR(wm8904->regmap)) {
2193 ret = PTR_ERR(wm8904->regmap);
2205 wm8904->devtype = (enum wm8904_type)match->data;
2207 wm8904->devtype = id->driver_data;
2210 i2c_set_clientdata(i2c, wm8904);
2211 wm8904->pdata = i2c->dev.platform_data;
2213 for (i = 0; i < ARRAY_SIZE(wm8904->supplies); i++)
2214 wm8904->supplies[i].supply = wm8904_supply_names[i];
2216 ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(wm8904->supplies),
2217 wm8904->supplies);
2223 ret = regulator_bulk_enable(ARRAY_SIZE(wm8904->supplies),
2224 wm8904->supplies);
2230 ret = regmap_read(wm8904->regmap, WM8904_SW_RESET_AND_ID, &val);
2241 ret = regmap_read(wm8904->regmap, WM8904_REVISION, &val);
2249 ret = regmap_write(wm8904->regmap, WM8904_SW_RESET_AND_ID, 0);
2256 regmap_update_bits(wm8904->regmap, WM8904_ADC_DIGITAL_VOLUME_LEFT,
2258 regmap_update_bits(wm8904->regmap, WM8904_ADC_DIGITAL_VOLUME_RIGHT,
2260 regmap_update_bits(wm8904->regmap, WM8904_DAC_DIGITAL_VOLUME_LEFT,
2262 regmap_update_bits(wm8904->regmap, WM8904_DAC_DIGITAL_VOLUME_RIGHT,
2264 regmap_update_bits(wm8904->regmap, WM8904_ANALOGUE_OUT1_LEFT,
2267 regmap_update_bits(wm8904->regmap, WM8904_ANALOGUE_OUT1_RIGHT,
2270 regmap_update_bits(wm8904->regmap, WM8904_ANALOGUE_OUT2_LEFT,
2273 regmap_update_bits(wm8904->regmap, WM8904_ANALOGUE_OUT2_RIGHT,
2276 regmap_update_bits(wm8904->regmap, WM8904_CLOCK_RATES_0,
2280 if (wm8904->pdata) {
2282 if (!wm8904->pdata->gpio_cfg[i])
2285 regmap_update_bits(wm8904->regmap,
2288 wm8904->pdata->gpio_cfg[i]);
2293 regmap_update_bits(wm8904->regmap,
2296 wm8904->pdata->mic_cfg[i]);
2302 regmap_update_bits(wm8904->regmap, WM8904_CLASS_W_0,
2306 regmap_update_bits(wm8904->regmap, WM8904_BIAS_CONTROL_0,
2310 regmap_read(wm8904->regmap, WM8904_ADC_TEST_0, &val);
2313 regcache_cache_only(wm8904->regmap, true);
2314 regulator_bulk_disable(ARRAY_SIZE(wm8904->supplies), wm8904->supplies);
2324 regulator_bulk_disable(ARRAY_SIZE(wm8904->supplies), wm8904->supplies);
2329 { "wm8904", WM8904 },
2338 .name = "wm8904",