Lines Matching defs:wm2200

3  * wm2200.c  --  WM2200 ALSA SoC Audio driver
30 #include <sound/wm2200.h>
32 #include "wm2200.h"
976 static int wm2200_reset(struct wm2200_priv *wm2200)
978 if (wm2200->pdata.reset) {
979 gpio_set_value_cansleep(wm2200->pdata.reset, 0);
980 gpio_set_value_cansleep(wm2200->pdata.reset, 1);
984 return regmap_write(wm2200->regmap, WM2200_SOFTWARE_RESET,
1547 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1549 wm2200->component = component;
1689 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1709 if (!wm2200->sysclk) {
1725 bclk, wm2200->sysclk);
1727 if (wm2200->sysclk % 4000)
1738 bclk, wm2200->sysclk);
1750 wm2200->symmetric_rates)
1776 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1817 wm2200->sysclk = freq;
1925 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1933 if (wm2200->fll_fout)
1936 wm2200->fll_fout = 0;
1990 try_wait_for_completion(&wm2200->fll_lock);
2009 &wm2200->fll_lock,
2034 wm2200->fll_src = source;
2035 wm2200->fll_fref = Fref;
2036 wm2200->fll_fout = Fout;
2046 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
2053 wm2200->symmetric_rates = true;
2078 .name = "wm2200",
2111 struct wm2200_priv *wm2200 = data;
2115 ret = regmap_read(wm2200->regmap, WM2200_INTERRUPT_STATUS_2, &val);
2117 dev_err(wm2200->dev, "Failed to read IRQ status: %d\n", ret);
2121 ret = regmap_read(wm2200->regmap, WM2200_INTERRUPT_STATUS_2_MASK,
2124 dev_warn(wm2200->dev, "Failed to read IRQ mask: %d\n", ret);
2131 dev_dbg(wm2200->dev, "FLL locked\n");
2132 complete(&wm2200->fll_lock);
2136 regmap_write(wm2200->regmap, WM2200_INTERRUPT_STATUS_2, val);
2181 struct wm2200_priv *wm2200;
2186 wm2200 = devm_kzalloc(&i2c->dev, sizeof(struct wm2200_priv),
2188 if (wm2200 == NULL)
2191 wm2200->dev = &i2c->dev;
2192 init_completion(&wm2200->fll_lock);
2194 wm2200->regmap = devm_regmap_init_i2c(i2c, &wm2200_regmap);
2195 if (IS_ERR(wm2200->regmap)) {
2196 ret = PTR_ERR(wm2200->regmap);
2203 wm2200->dsp[i].cs_dsp.type = WMFW_ADSP1;
2204 wm2200->dsp[i].part = "wm2200";
2205 wm2200->dsp[i].cs_dsp.num = i + 1;
2206 wm2200->dsp[i].cs_dsp.dev = &i2c->dev;
2207 wm2200->dsp[i].cs_dsp.regmap = wm2200->regmap;
2208 wm2200->dsp[i].cs_dsp.sysclk_reg = WM2200_CLOCKING_3;
2209 wm2200->dsp[i].cs_dsp.sysclk_mask = WM2200_SYSCLK_FREQ_MASK;
2210 wm2200->dsp[i].cs_dsp.sysclk_shift = WM2200_SYSCLK_FREQ_SHIFT;
2213 wm2200->dsp[0].cs_dsp.base = WM2200_DSP1_CONTROL_1;
2214 wm2200->dsp[0].cs_dsp.mem = wm2200_dsp1_regions;
2215 wm2200->dsp[0].cs_dsp.num_mems = ARRAY_SIZE(wm2200_dsp1_regions);
2217 wm2200->dsp[1].cs_dsp.base = WM2200_DSP2_CONTROL_1;
2218 wm2200->dsp[1].cs_dsp.mem = wm2200_dsp2_regions;
2219 wm2200->dsp[1].cs_dsp.num_mems = ARRAY_SIZE(wm2200_dsp2_regions);
2221 for (i = 0; i < ARRAY_SIZE(wm2200->dsp); i++)
2222 wm_adsp1_init(&wm2200->dsp[i]);
2225 wm2200->pdata = *pdata;
2227 i2c_set_clientdata(i2c, wm2200);
2229 for (i = 0; i < ARRAY_SIZE(wm2200->core_supplies); i++)
2230 wm2200->core_supplies[i].supply = wm2200_core_supply_names[i];
2233 ARRAY_SIZE(wm2200->core_supplies),
2234 wm2200->core_supplies);
2241 ret = regulator_bulk_enable(ARRAY_SIZE(wm2200->core_supplies),
2242 wm2200->core_supplies);
2249 if (wm2200->pdata.ldo_ena) {
2250 ret = devm_gpio_request_one(&i2c->dev, wm2200->pdata.ldo_ena,
2255 wm2200->pdata.ldo_ena, ret);
2261 if (wm2200->pdata.reset) {
2262 ret = devm_gpio_request_one(&i2c->dev, wm2200->pdata.reset,
2267 wm2200->pdata.reset, ret);
2272 ret = regmap_read(wm2200->regmap, WM2200_SOFTWARE_RESET, &reg);
2287 ret = regmap_read(wm2200->regmap, WM2200_DEVICE_REVISION, &reg);
2293 wm2200->rev = reg & WM2200_DEVICE_REVISION_MASK;
2295 dev_info(&i2c->dev, "revision %c\n", wm2200->rev + 'A');
2297 switch (wm2200->rev) {
2300 ret = regmap_register_patch(wm2200->regmap, wm2200_reva_patch,
2311 ret = wm2200_reset(wm2200);
2317 for (i = 0; i < ARRAY_SIZE(wm2200->pdata.gpio_defaults); i++) {
2318 if (!wm2200->pdata.gpio_defaults[i])
2321 regmap_write(wm2200->regmap, WM2200_GPIO_CTRL_1 + i,
2322 wm2200->pdata.gpio_defaults[i]);
2326 regmap_update_bits(wm2200->regmap, wm2200_dig_vu[i],
2331 regmap_write(wm2200->regmap, WM2200_AUDIO_IF_1_10 + i, i);
2332 regmap_write(wm2200->regmap, WM2200_AUDIO_IF_1_16 + i, i);
2336 if (!wm2200->pdata.micbias[i].mb_lvl &&
2337 !wm2200->pdata.micbias[i].bypass)
2341 if (!wm2200->pdata.micbias[i].mb_lvl)
2342 wm2200->pdata.micbias[i].mb_lvl
2345 val = (wm2200->pdata.micbias[i].mb_lvl -1)
2348 if (wm2200->pdata.micbias[i].discharge)
2351 if (wm2200->pdata.micbias[i].fast_start)
2354 if (wm2200->pdata.micbias[i].bypass)
2357 regmap_update_bits(wm2200->regmap,
2365 for (i = 0; i < ARRAY_SIZE(wm2200->pdata.in_mode); i++) {
2366 regmap_update_bits(wm2200->regmap, wm2200_mic_ctrl_reg[i],
2369 (wm2200->pdata.in_mode[i] <<
2371 (wm2200->pdata.dmic_sup[i] <<
2378 "wm2200", wm2200);
2380 regmap_update_bits(wm2200->regmap,
2404 free_irq(i2c->irq, wm2200);
2406 if (wm2200->pdata.reset)
2407 gpio_set_value_cansleep(wm2200->pdata.reset, 0);
2409 if (wm2200->pdata.ldo_ena)
2410 gpio_set_value_cansleep(wm2200->pdata.ldo_ena, 0);
2412 regulator_bulk_disable(ARRAY_SIZE(wm2200->core_supplies),
2413 wm2200->core_supplies);
2419 struct wm2200_priv *wm2200 = i2c_get_clientdata(i2c);
2423 free_irq(i2c->irq, wm2200);
2424 if (wm2200->pdata.reset)
2425 gpio_set_value_cansleep(wm2200->pdata.reset, 0);
2426 if (wm2200->pdata.ldo_ena)
2427 gpio_set_value_cansleep(wm2200->pdata.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 if (wm2200->pdata.ldo_ena)
2440 gpio_set_value_cansleep(wm2200->pdata.ldo_ena, 0);
2441 regulator_bulk_disable(ARRAY_SIZE(wm2200->core_supplies),
2442 wm2200->core_supplies);
2449 struct wm2200_priv *wm2200 = dev_get_drvdata(dev);
2452 ret = regulator_bulk_enable(ARRAY_SIZE(wm2200->core_supplies),
2453 wm2200->core_supplies);
2460 if (wm2200->pdata.ldo_ena) {
2461 gpio_set_value_cansleep(wm2200->pdata.ldo_ena, 1);
2465 regcache_cache_only(wm2200->regmap, false);
2466 regcache_sync(wm2200->regmap);
2478 { "wm2200", 0 },
2485 .name = "wm2200",