Lines Matching defs:wm8960
3 * wm8960.c -- WM8960 ALSA SoC Audio driver
25 #include <sound/wm8960.h>
27 #include "wm8960.h"
55 * wm8960 register cache
186 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
192 if (wm8960->deemph) {
195 if (abs(deemph_settings[i] - wm8960->lrclk) <
196 abs(deemph_settings[best] - wm8960->lrclk))
215 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
217 ucontrol->value.integer.value[0] = wm8960->deemph;
225 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
231 wm8960->deemph = deemph;
489 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
490 struct wm8960_data *pdata = &wm8960->pdata;
525 wm8960->lout1 = w;
527 wm8960->rout1 = w;
529 wm8960->out3 = w;
628 * @wm8960: codec private data
640 int wm8960_configure_sysclk(struct wm8960_priv *wm8960, int mclk,
650 bclk = wm8960->bclk;
651 lrclk = wm8960->lrclk;
705 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
710 bclk = wm8960->bclk;
711 lrclk = wm8960->lrclk;
756 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
766 * compatible issue, just add '!wm8960->sysclk' condition in
769 if (!(iface1 & (1 << 6)) && !wm8960->sysclk) {
775 if (wm8960->clk_id != WM8960_SYSCLK_MCLK && !wm8960->freq_in) {
780 freq_in = wm8960->freq_in;
787 if (wm8960->clk_id == WM8960_SYSCLK_AUTO) {
791 } else if (wm8960->sysclk) {
792 freq_out = wm8960->sysclk;
798 if (wm8960->clk_id != WM8960_SYSCLK_PLL) {
799 ret = wm8960_configure_sysclk(wm8960, freq_out, &i, &j, &k);
802 } else if (wm8960->clk_id != WM8960_SYSCLK_AUTO) {
834 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
839 wm8960->bclk = snd_soc_params_to_bclk(params);
841 wm8960->bclk *= 2;
866 wm8960->lrclk = params_rate(params);
881 wm8960->is_stream_in_use[tx] = true;
883 if (!wm8960->is_stream_in_use[!tx])
893 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
896 wm8960->is_stream_in_use[tx] = false;
915 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
927 if (!IS_ERR(wm8960->mclk)) {
928 ret = clk_prepare_enable(wm8960->mclk);
950 if (wm8960->clk_id == WM8960_SYSCLK_AUTO && (pm2 & 0x1))
953 if (!IS_ERR(wm8960->mclk))
954 clk_disable_unprepare(wm8960->mclk);
966 tout = WM8960_DSCH_TOUT - ktime_ms_delta(ktime_get(), wm8960->dsch_start);
970 regcache_sync(wm8960->regmap);
1001 wm8960->dsch_start = ktime_get();
1011 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
1031 if (wm8960->lout1 && wm8960->lout1->power)
1033 if (wm8960->rout1 && wm8960->rout1->power)
1035 if (wm8960->out3 && wm8960->out3->power)
1055 if (!IS_ERR(wm8960->mclk)) {
1056 ret = clk_prepare_enable(wm8960->mclk);
1076 if (wm8960->clk_id == WM8960_SYSCLK_AUTO && (pm2 & 0x1))
1079 if (!IS_ERR(wm8960->mclk))
1080 clk_disable_unprepare(wm8960->mclk);
1095 regcache_sync(wm8960->regmap);
1256 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
1258 wm8960->freq_in = freq_in;
1303 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
1305 return wm8960->set_bias_level(component, level);
1312 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
1329 wm8960->sysclk = freq;
1330 wm8960->clk_id = clk_id;
1353 .name = "wm8960-hifi",
1372 struct wm8960_priv *wm8960 = snd_soc_component_get_drvdata(component);
1373 struct wm8960_data *pdata = &wm8960->pdata;
1376 wm8960->set_bias_level = wm8960_set_bias_level_capless;
1378 wm8960->set_bias_level = wm8960_set_bias_level_out3;
1429 struct wm8960_priv *wm8960;
1434 wm8960 = devm_kzalloc(&i2c->dev, sizeof(struct wm8960_priv),
1436 if (wm8960 == NULL)
1439 wm8960->mclk = devm_clk_get(&i2c->dev, "mclk");
1440 if (IS_ERR(wm8960->mclk)) {
1441 if (PTR_ERR(wm8960->mclk) == -EPROBE_DEFER)
1444 ret = clk_get_rate(wm8960->mclk);
1446 wm8960->freq_in = ret;
1453 for (i = 0; i < ARRAY_SIZE(wm8960->supplies); i++)
1454 wm8960->supplies[i].supply = wm8960_supply_names[i];
1456 ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(wm8960->supplies),
1457 wm8960->supplies);
1463 ret = regulator_bulk_enable(ARRAY_SIZE(wm8960->supplies),
1464 wm8960->supplies);
1470 wm8960->regmap = devm_regmap_init_i2c(i2c, &wm8960_regmap);
1471 if (IS_ERR(wm8960->regmap)) {
1472 ret = PTR_ERR(wm8960->regmap);
1477 memcpy(&wm8960->pdata, pdata, sizeof(struct wm8960_data));
1479 wm8960_set_pdata_from_of(i2c, &wm8960->pdata);
1483 dev_err(&i2c->dev, "Not wm8960, wm8960 reg can not read by i2c\n");
1488 ret = wm8960_reset(wm8960->regmap);
1494 if (wm8960->pdata.shared_lrclk) {
1495 ret = regmap_update_bits(wm8960->regmap, WM8960_ADDCTL2,
1505 regmap_update_bits(wm8960->regmap, WM8960_LINVOL, 0x100, 0x100);
1506 regmap_update_bits(wm8960->regmap, WM8960_RINVOL, 0x100, 0x100);
1507 regmap_update_bits(wm8960->regmap, WM8960_LADC, 0x100, 0x100);
1508 regmap_update_bits(wm8960->regmap, WM8960_RADC, 0x100, 0x100);
1509 regmap_update_bits(wm8960->regmap, WM8960_LDAC, 0x100, 0x100);
1510 regmap_update_bits(wm8960->regmap, WM8960_RDAC, 0x100, 0x100);
1511 regmap_update_bits(wm8960->regmap, WM8960_LOUT1, 0x100, 0x100);
1512 regmap_update_bits(wm8960->regmap, WM8960_ROUT1, 0x100, 0x100);
1513 regmap_update_bits(wm8960->regmap, WM8960_LOUT2, 0x100, 0x100);
1514 regmap_update_bits(wm8960->regmap, WM8960_ROUT2, 0x100, 0x100);
1517 regmap_update_bits(wm8960->regmap, WM8960_IFACE2, 1 << 6,
1518 wm8960->pdata.gpio_cfg[0] << 6);
1519 regmap_update_bits(wm8960->regmap, WM8960_ADDCTL4, 0xF << 4,
1520 wm8960->pdata.gpio_cfg[1] << 4);
1523 regmap_update_bits(wm8960->regmap, WM8960_ADDCTL4, 3 << 2,
1524 wm8960->pdata.hp_cfg[0] << 2);
1525 regmap_update_bits(wm8960->regmap, WM8960_ADDCTL2, 3 << 5,
1526 wm8960->pdata.hp_cfg[1] << 5);
1527 regmap_update_bits(wm8960->regmap, WM8960_ADDCTL1, 3,
1528 wm8960->pdata.hp_cfg[2]);
1530 i2c_set_clientdata(i2c, wm8960);
1540 regulator_bulk_disable(ARRAY_SIZE(wm8960->supplies), wm8960->supplies);
1546 struct wm8960_priv *wm8960 = i2c_get_clientdata(client);
1548 regulator_bulk_disable(ARRAY_SIZE(wm8960->supplies), wm8960->supplies);
1552 { "wm8960", 0 },
1559 { .compatible = "wlf,wm8960", },
1576 .name = "wm8960",