Lines Matching defs:wm2200

3  * wm2200.c  --  WM2200 ALSA SoC Audio driver
30 #include <sound/wm2200.h>
32 #include "wm2200.h"
978 static int wm2200_reset(struct wm2200_priv *wm2200)
980 if (wm2200->reset) {
982 gpiod_set_value_cansleep(wm2200->reset, 1);
983 gpiod_set_value_cansleep(wm2200->reset, 0);
987 return regmap_write(wm2200->regmap, WM2200_SOFTWARE_RESET,
1550 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1552 wm2200->component = component;
1692 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1712 if (!wm2200->sysclk) {
1728 bclk, wm2200->sysclk);
1730 if (wm2200->sysclk % 4000)
1741 bclk, wm2200->sysclk);
1753 wm2200->symmetric_rates)
1779 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1820 wm2200->sysclk = freq;
1928 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1936 if (wm2200->fll_fout)
1939 wm2200->fll_fout = 0;
1993 try_wait_for_completion(&wm2200->fll_lock);
2012 &wm2200->fll_lock,
2037 wm2200->fll_src = source;
2038 wm2200->fll_fref = Fref;
2039 wm2200->fll_fout = Fout;
2049 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
2056 wm2200->symmetric_rates = true;
2081 .name = "wm2200",
2114 struct wm2200_priv *wm2200 = data;
2118 ret = regmap_read(wm2200->regmap, WM2200_INTERRUPT_STATUS_2, &val);
2120 dev_err(wm2200->dev, "Failed to read IRQ status: %d\n", ret);
2124 ret = regmap_read(wm2200->regmap, WM2200_INTERRUPT_STATUS_2_MASK,
2127 dev_warn(wm2200->dev, "Failed to read IRQ mask: %d\n", ret);
2134 dev_dbg(wm2200->dev, "FLL locked\n");
2135 complete(&wm2200->fll_lock);
2139 regmap_write(wm2200->regmap, WM2200_INTERRUPT_STATUS_2, val);
2184 struct wm2200_priv *wm2200;
2189 wm2200 = devm_kzalloc(&i2c->dev, sizeof(struct wm2200_priv),
2191 if (wm2200 == NULL)
2194 wm2200->dev = &i2c->dev;
2195 init_completion(&wm2200->fll_lock);
2197 wm2200->regmap = devm_regmap_init_i2c(i2c, &wm2200_regmap);
2198 if (IS_ERR(wm2200->regmap)) {
2199 ret = PTR_ERR(wm2200->regmap);
2206 wm2200->dsp[i].cs_dsp.type = WMFW_ADSP1;
2207 wm2200->dsp[i].part = "wm2200";
2208 wm2200->dsp[i].cs_dsp.num = i + 1;
2209 wm2200->dsp[i].cs_dsp.dev = &i2c->dev;
2210 wm2200->dsp[i].cs_dsp.regmap = wm2200->regmap;
2211 wm2200->dsp[i].cs_dsp.sysclk_reg = WM2200_CLOCKING_3;
2212 wm2200->dsp[i].cs_dsp.sysclk_mask = WM2200_SYSCLK_FREQ_MASK;
2213 wm2200->dsp[i].cs_dsp.sysclk_shift = WM2200_SYSCLK_FREQ_SHIFT;
2216 wm2200->dsp[0].cs_dsp.base = WM2200_DSP1_CONTROL_1;
2217 wm2200->dsp[0].cs_dsp.mem = wm2200_dsp1_regions;
2218 wm2200->dsp[0].cs_dsp.num_mems = ARRAY_SIZE(wm2200_dsp1_regions);
2220 wm2200->dsp[1].cs_dsp.base = WM2200_DSP2_CONTROL_1;
2221 wm2200->dsp[1].cs_dsp.mem = wm2200_dsp2_regions;
2222 wm2200->dsp[1].cs_dsp.num_mems = ARRAY_SIZE(wm2200_dsp2_regions);
2224 for (i = 0; i < ARRAY_SIZE(wm2200->dsp); i++)
2225 wm_adsp1_init(&wm2200->dsp[i]);
2228 wm2200->pdata = *pdata;
2230 i2c_set_clientdata(i2c, wm2200);
2232 for (i = 0; i < ARRAY_SIZE(wm2200->core_supplies); i++)
2233 wm2200->core_supplies[i].supply = wm2200_core_supply_names[i];
2236 ARRAY_SIZE(wm2200->core_supplies),
2237 wm2200->core_supplies);
2244 ret = regulator_bulk_enable(ARRAY_SIZE(wm2200->core_supplies),
2245 wm2200->core_supplies);
2252 wm2200->ldo_ena = devm_gpiod_get_optional(&i2c->dev, "wlf,ldo1ena",
2254 if (IS_ERR(wm2200->ldo_ena)) {
2255 ret = PTR_ERR(wm2200->ldo_ena);
2260 if (wm2200->ldo_ena) {
2261 gpiod_set_consumer_name(wm2200->ldo_ena, "WM2200 LDOENA");
2265 wm2200->reset = devm_gpiod_get_optional(&i2c->dev, "reset",
2267 if (IS_ERR(wm2200->reset)) {
2268 ret = PTR_ERR(wm2200->reset);
2273 gpiod_set_consumer_name(wm2200->reset, "WM2200 /RESET");
2275 ret = regmap_read(wm2200->regmap, WM2200_SOFTWARE_RESET, &reg);
2290 ret = regmap_read(wm2200->regmap, WM2200_DEVICE_REVISION, &reg);
2296 wm2200->rev = reg & WM2200_DEVICE_REVISION_MASK;
2298 dev_info(&i2c->dev, "revision %c\n", wm2200->rev + 'A');
2300 switch (wm2200->rev) {
2303 ret = regmap_register_patch(wm2200->regmap, wm2200_reva_patch,
2314 ret = wm2200_reset(wm2200);
2320 for (i = 0; i < ARRAY_SIZE(wm2200->pdata.gpio_defaults); i++) {
2321 if (!wm2200->pdata.gpio_defaults[i])
2324 regmap_write(wm2200->regmap, WM2200_GPIO_CTRL_1 + i,
2325 wm2200->pdata.gpio_defaults[i]);
2329 regmap_update_bits(wm2200->regmap, wm2200_dig_vu[i],
2334 regmap_write(wm2200->regmap, WM2200_AUDIO_IF_1_10 + i, i);
2335 regmap_write(wm2200->regmap, WM2200_AUDIO_IF_1_16 + i, i);
2339 if (!wm2200->pdata.micbias[i].mb_lvl &&
2340 !wm2200->pdata.micbias[i].bypass)
2344 if (!wm2200->pdata.micbias[i].mb_lvl)
2345 wm2200->pdata.micbias[i].mb_lvl
2348 val = (wm2200->pdata.micbias[i].mb_lvl -1)
2351 if (wm2200->pdata.micbias[i].discharge)
2354 if (wm2200->pdata.micbias[i].fast_start)
2357 if (wm2200->pdata.micbias[i].bypass)
2360 regmap_update_bits(wm2200->regmap,
2368 for (i = 0; i < ARRAY_SIZE(wm2200->pdata.in_mode); i++) {
2369 regmap_update_bits(wm2200->regmap, wm2200_mic_ctrl_reg[i],
2372 (wm2200->pdata.in_mode[i] <<
2374 (wm2200->pdata.dmic_sup[i] <<
2381 "wm2200", wm2200);
2383 regmap_update_bits(wm2200->regmap,
2407 free_irq(i2c->irq, wm2200);
2409 gpiod_set_value_cansleep(wm2200->reset, 1);
2411 gpiod_set_value_cansleep(wm2200->ldo_ena, 0);
2413 regulator_bulk_disable(ARRAY_SIZE(wm2200->core_supplies),
2414 wm2200->core_supplies);
2420 struct wm2200_priv *wm2200 = i2c_get_clientdata(i2c);
2424 free_irq(i2c->irq, wm2200);
2426 gpiod_set_value_cansleep(wm2200->reset, 1);
2427 gpiod_set_value_cansleep(wm2200->ldo_ena, 0);
2428 regulator_bulk_disable(ARRAY_SIZE(wm2200->core_supplies),
2429 wm2200->core_supplies);
2435 struct wm2200_priv *wm2200 = dev_get_drvdata(dev);
2437 regcache_cache_only(wm2200->regmap, true);
2438 regcache_mark_dirty(wm2200->regmap);
2439 gpiod_set_value_cansleep(wm2200->ldo_ena, 0);
2440 regulator_bulk_disable(ARRAY_SIZE(wm2200->core_supplies),
2441 wm2200->core_supplies);
2448 struct wm2200_priv *wm2200 = dev_get_drvdata(dev);
2451 ret = regulator_bulk_enable(ARRAY_SIZE(wm2200->core_supplies),
2452 wm2200->core_supplies);
2459 if (wm2200->ldo_ena) {
2460 gpiod_set_value_cansleep(wm2200->ldo_ena, 1);
2464 regcache_cache_only(wm2200->regmap, false);
2465 regcache_sync(wm2200->regmap);
2477 { "wm2200" },
2484 .name = "wm2200",