Lines Matching defs:wm8993

3  * wm8993.c -- WM8993 ALSA SoC audio driver
26 #include <sound/wm8993.h>
28 #include "wm8993.h"
469 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
477 if (Fref == wm8993->fll_fref && Fout == wm8993->fll_fout)
483 wm8993->fll_fref = 0;
484 wm8993->fll_fout = 0;
552 try_wait_for_completion(&wm8993->fll_lock);
557 time_left = wait_for_completion_timeout(&wm8993->fll_lock, time_left);
563 wm8993->fll_fref = Fref;
564 wm8993->fll_fout = Fout;
565 wm8993->fll_src = source;
578 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
582 switch (wm8993->sysclk_source) {
584 dev_dbg(component->dev, "Using %dHz MCLK\n", wm8993->mclk_rate);
588 if (wm8993->mclk_rate > 13500000) {
590 wm8993->sysclk_rate = wm8993->mclk_rate / 2;
593 wm8993->sysclk_rate = wm8993->mclk_rate;
600 wm8993->fll_fout);
604 if (wm8993->fll_fout > 13500000) {
606 wm8993->sysclk_rate = wm8993->fll_fout / 2;
609 wm8993->sysclk_rate = wm8993->fll_fout;
619 dev_dbg(component->dev, "CLK_SYS is %dHz\n", wm8993->sysclk_rate);
975 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
992 ret = regulator_bulk_enable(ARRAY_SIZE(wm8993->supplies),
993 wm8993->supplies);
997 regcache_cache_only(wm8993->regmap, false);
998 regcache_sync(wm8993->regmap);
1015 if (!wm8993->pdata.lineout1_diff ||
1016 !wm8993->pdata.lineout2_diff)
1056 regcache_cache_only(wm8993->regmap, true);
1057 regcache_mark_dirty(wm8993->regmap);
1059 regulator_bulk_disable(ARRAY_SIZE(wm8993->supplies),
1060 wm8993->supplies);
1071 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
1075 wm8993->mclk_rate = freq;
1078 wm8993->sysclk_source = clk_id;
1092 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
1102 wm8993->master = 0;
1106 wm8993->master = 1;
1110 wm8993->master = 1;
1115 wm8993->master = 1;
1189 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
1206 wm8993->fs = params_rate(params);
1207 wm8993->bclk = 2 * wm8993->fs;
1208 if (wm8993->tdm_slots) {
1210 wm8993->tdm_slots, wm8993->tdm_width);
1211 wm8993->bclk *= wm8993->tdm_width * wm8993->tdm_slots;
1215 wm8993->bclk *= 16;
1218 wm8993->bclk *= 20;
1222 wm8993->bclk *= 24;
1226 wm8993->bclk *= 32;
1234 dev_dbg(component->dev, "Target BCLK is %dHz\n", wm8993->bclk);
1242 best_val = abs((wm8993->sysclk_rate / clk_sys_rates[0].ratio)
1243 - wm8993->fs);
1245 cur_val = abs((wm8993->sysclk_rate /
1246 clk_sys_rates[i].ratio) - wm8993->fs);
1259 best_val = abs(wm8993->fs - sample_rates[0].rate);
1262 cur_val = abs(wm8993->fs - sample_rates[i].rate);
1277 cur_val = ((wm8993->sysclk_rate * 10) / bclk_divs[i].div)
1278 - wm8993->bclk;
1286 wm8993->bclk = (wm8993->sysclk_rate * 10) / bclk_divs[best].div;
1288 bclk_divs[best].div, wm8993->bclk);
1292 dev_dbg(component->dev, "LRCLK_RATE is %d\n", wm8993->bclk / wm8993->fs);
1293 aif4 |= wm8993->bclk / wm8993->fs;
1301 if (wm8993->pdata.num_retune_configs) {
1306 best_val = abs(wm8993->pdata.retune_configs[0].rate
1307 - wm8993->fs);
1308 for (i = 0; i < wm8993->pdata.num_retune_configs; i++) {
1309 cur_val = abs(wm8993->pdata.retune_configs[i].rate
1310 - wm8993->fs);
1316 s = &wm8993->pdata.retune_configs[best];
1354 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
1360 wm8993->tdm_slots = 0;
1393 wm8993->tdm_width = slot_width;
1394 wm8993->tdm_slots = slots / 2;
1406 struct wm8993_priv *wm8993 = data;
1409 ret = regmap_read(wm8993->regmap, WM8993_GPIO_CTRL_1, &val);
1411 dev_err(wm8993->dev, "Failed to read interrupt status: %d\n",
1416 ret = regmap_read(wm8993->regmap, WM8993_GPIOCTRL_2, &mask);
1418 dev_err(wm8993->dev, "Failed to read interrupt mask: %d\n",
1429 dev_crit(wm8993->dev, "Thermal warning\n");
1432 dev_dbg(wm8993->dev, "FLL locked\n");
1433 complete(&wm8993->fll_lock);
1436 ret = regmap_write(wm8993->regmap, WM8993_GPIO_CTRL_1, val);
1438 dev_err(wm8993->dev, "Failed to ack interrupt: %d\n", ret);
1461 .name = "wm8993-hifi",
1484 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
1487 wm8993->hubs_data.hp_startup_mode = 1;
1488 wm8993->hubs_data.dcs_codes_l = -2;
1489 wm8993->hubs_data.dcs_codes_r = -2;
1490 wm8993->hubs_data.series_startup = 1;
1506 wm_hubs_handle_analogue_pdata(component, wm8993->pdata.lineout1_diff,
1507 wm8993->pdata.lineout2_diff,
1508 wm8993->pdata.lineout1fb,
1509 wm8993->pdata.lineout2fb,
1510 wm8993->pdata.jd_scthr,
1511 wm8993->pdata.jd_thr,
1512 wm8993->pdata.micbias1_delay,
1513 wm8993->pdata.micbias2_delay,
1514 wm8993->pdata.micbias1_lvl,
1515 wm8993->pdata.micbias2_lvl);
1519 if (wm8993->pdata.num_retune_configs != 0) {
1532 wm_hubs_add_analogue_routes(component, wm8993->pdata.lineout1_diff,
1533 wm8993->pdata.lineout2_diff);
1538 if (wm8993->pdata.lineout1_diff && wm8993->pdata.lineout2_diff)
1548 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
1549 int fll_fout = wm8993->fll_fout;
1550 int fll_fref = wm8993->fll_fref;
1560 wm8993->fll_fout = fll_fout;
1561 wm8993->fll_fref = fll_fref;
1570 struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
1576 if (wm8993->fll_fout) {
1577 int fll_fout = wm8993->fll_fout;
1578 int fll_fref = wm8993->fll_fref;
1580 wm8993->fll_fref = 0;
1581 wm8993->fll_fout = 0;
1583 ret = _wm8993_set_fll(component, 0, wm8993->fll_src,
1628 struct wm8993_priv *wm8993;
1632 wm8993 = devm_kzalloc(&i2c->dev, sizeof(struct wm8993_priv),
1634 if (wm8993 == NULL)
1637 wm8993->dev = &i2c->dev;
1638 init_completion(&wm8993->fll_lock);
1640 wm8993->regmap = devm_regmap_init_i2c(i2c, &wm8993_regmap);
1641 if (IS_ERR(wm8993->regmap)) {
1642 ret = PTR_ERR(wm8993->regmap);
1647 i2c_set_clientdata(i2c, wm8993);
1649 for (i = 0; i < ARRAY_SIZE(wm8993->supplies); i++)
1650 wm8993->supplies[i].supply = wm8993_supply_names[i];
1652 ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(wm8993->supplies),
1653 wm8993->supplies);
1659 ret = regulator_bulk_enable(ARRAY_SIZE(wm8993->supplies),
1660 wm8993->supplies);
1666 ret = regmap_read(wm8993->regmap, WM8993_SOFTWARE_RESET, &reg);
1678 ret = regmap_write(wm8993->regmap, WM8993_SOFTWARE_RESET, 0xffff);
1682 ret = regmap_register_patch(wm8993->regmap, wm8993_regmap_patch,
1685 dev_warn(wm8993->dev, "Failed to apply regmap patch: %d\n",
1690 ret = regmap_update_bits(wm8993->regmap, WM8993_GPIO1,
1698 "wm8993", wm8993);
1704 regulator_bulk_disable(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
1706 regcache_cache_only(wm8993->regmap, true);
1719 free_irq(i2c->irq, wm8993);
1721 regulator_bulk_disable(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
1727 struct wm8993_priv *wm8993 = i2c_get_clientdata(i2c);
1730 free_irq(i2c->irq, wm8993);
1731 regulator_bulk_disable(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
1735 { "wm8993" },
1742 .name = "wm8993",