Lines Matching defs:wm2200

3  * wm2200.c  --  WM2200 ALSA SoC Audio driver
30 #include <sound/wm2200.h>
32 #include "wm2200.h"
984 static int wm2200_reset(struct wm2200_priv *wm2200)
986 if (wm2200->pdata.reset) {
987 gpio_set_value_cansleep(wm2200->pdata.reset, 0);
988 gpio_set_value_cansleep(wm2200->pdata.reset, 1);
992 return regmap_write(wm2200->regmap, WM2200_SOFTWARE_RESET,
1555 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1557 wm2200->component = component;
1697 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1717 if (!wm2200->sysclk) {
1733 bclk, wm2200->sysclk);
1735 if (wm2200->sysclk % 4000)
1746 bclk, wm2200->sysclk);
1758 wm2200->symmetric_rates)
1789 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1830 wm2200->sysclk = freq;
1938 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
1946 if (wm2200->fll_fout)
1949 wm2200->fll_fout = 0;
2003 try_wait_for_completion(&wm2200->fll_lock);
2022 &wm2200->fll_lock,
2047 wm2200->fll_src = source;
2048 wm2200->fll_fref = Fref;
2049 wm2200->fll_fout = Fout;
2059 struct wm2200_priv *wm2200 = snd_soc_component_get_drvdata(component);
2066 wm2200->symmetric_rates = true;
2085 .name = "wm2200",
2120 struct wm2200_priv *wm2200 = data;
2124 ret = regmap_read(wm2200->regmap, WM2200_INTERRUPT_STATUS_2, &val);
2126 dev_err(wm2200->dev, "Failed to read IRQ status: %d\n", ret);
2130 ret = regmap_read(wm2200->regmap, WM2200_INTERRUPT_STATUS_2_MASK,
2133 dev_warn(wm2200->dev, "Failed to read IRQ mask: %d\n", ret);
2140 dev_dbg(wm2200->dev, "FLL locked\n");
2141 complete(&wm2200->fll_lock);
2145 regmap_write(wm2200->regmap, WM2200_INTERRUPT_STATUS_2, val);
2191 struct wm2200_priv *wm2200;
2196 wm2200 = devm_kzalloc(&i2c->dev, sizeof(struct wm2200_priv),
2198 if (wm2200 == NULL)
2201 wm2200->dev = &i2c->dev;
2202 init_completion(&wm2200->fll_lock);
2204 wm2200->regmap = devm_regmap_init_i2c(i2c, &wm2200_regmap);
2205 if (IS_ERR(wm2200->regmap)) {
2206 ret = PTR_ERR(wm2200->regmap);
2213 wm2200->dsp[i].type = WMFW_ADSP1;
2214 wm2200->dsp[i].part = "wm2200";
2215 wm2200->dsp[i].num = i + 1;
2216 wm2200->dsp[i].dev = &i2c->dev;
2217 wm2200->dsp[i].regmap = wm2200->regmap;
2218 wm2200->dsp[i].sysclk_reg = WM2200_CLOCKING_3;
2219 wm2200->dsp[i].sysclk_mask = WM2200_SYSCLK_FREQ_MASK;
2220 wm2200->dsp[i].sysclk_shift = WM2200_SYSCLK_FREQ_SHIFT;
2223 wm2200->dsp[0].base = WM2200_DSP1_CONTROL_1;
2224 wm2200->dsp[0].mem = wm2200_dsp1_regions;
2225 wm2200->dsp[0].num_mems = ARRAY_SIZE(wm2200_dsp1_regions);
2227 wm2200->dsp[1].base = WM2200_DSP2_CONTROL_1;
2228 wm2200->dsp[1].mem = wm2200_dsp2_regions;
2229 wm2200->dsp[1].num_mems = ARRAY_SIZE(wm2200_dsp2_regions);
2231 for (i = 0; i < ARRAY_SIZE(wm2200->dsp); i++)
2232 wm_adsp1_init(&wm2200->dsp[i]);
2235 wm2200->pdata = *pdata;
2237 i2c_set_clientdata(i2c, wm2200);
2239 for (i = 0; i < ARRAY_SIZE(wm2200->core_supplies); i++)
2240 wm2200->core_supplies[i].supply = wm2200_core_supply_names[i];
2243 ARRAY_SIZE(wm2200->core_supplies),
2244 wm2200->core_supplies);
2251 ret = regulator_bulk_enable(ARRAY_SIZE(wm2200->core_supplies),
2252 wm2200->core_supplies);
2259 if (wm2200->pdata.ldo_ena) {
2260 ret = devm_gpio_request_one(&i2c->dev, wm2200->pdata.ldo_ena,
2265 wm2200->pdata.ldo_ena, ret);
2271 if (wm2200->pdata.reset) {
2272 ret = devm_gpio_request_one(&i2c->dev, wm2200->pdata.reset,
2277 wm2200->pdata.reset, ret);
2282 ret = regmap_read(wm2200->regmap, WM2200_SOFTWARE_RESET, &reg);
2297 ret = regmap_read(wm2200->regmap, WM2200_DEVICE_REVISION, &reg);
2303 wm2200->rev = reg & WM2200_DEVICE_REVISION_MASK;
2305 dev_info(&i2c->dev, "revision %c\n", wm2200->rev + 'A');
2307 switch (wm2200->rev) {
2310 ret = regmap_register_patch(wm2200->regmap, wm2200_reva_patch,
2321 ret = wm2200_reset(wm2200);
2327 for (i = 0; i < ARRAY_SIZE(wm2200->pdata.gpio_defaults); i++) {
2328 if (!wm2200->pdata.gpio_defaults[i])
2331 regmap_write(wm2200->regmap, WM2200_GPIO_CTRL_1 + i,
2332 wm2200->pdata.gpio_defaults[i]);
2336 regmap_update_bits(wm2200->regmap, wm2200_dig_vu[i],
2341 regmap_write(wm2200->regmap, WM2200_AUDIO_IF_1_10 + i, i);
2342 regmap_write(wm2200->regmap, WM2200_AUDIO_IF_1_16 + i, i);
2346 if (!wm2200->pdata.micbias[i].mb_lvl &&
2347 !wm2200->pdata.micbias[i].bypass)
2351 if (!wm2200->pdata.micbias[i].mb_lvl)
2352 wm2200->pdata.micbias[i].mb_lvl
2355 val = (wm2200->pdata.micbias[i].mb_lvl -1)
2358 if (wm2200->pdata.micbias[i].discharge)
2361 if (wm2200->pdata.micbias[i].fast_start)
2364 if (wm2200->pdata.micbias[i].bypass)
2367 regmap_update_bits(wm2200->regmap,
2375 for (i = 0; i < ARRAY_SIZE(wm2200->pdata.in_mode); i++) {
2376 regmap_update_bits(wm2200->regmap, wm2200_mic_ctrl_reg[i],
2379 (wm2200->pdata.in_mode[i] <<
2381 (wm2200->pdata.dmic_sup[i] <<
2388 "wm2200", wm2200);
2390 regmap_update_bits(wm2200->regmap,
2414 free_irq(i2c->irq, wm2200);
2416 if (wm2200->pdata.reset)
2417 gpio_set_value_cansleep(wm2200->pdata.reset, 0);
2419 if (wm2200->pdata.ldo_ena)
2420 gpio_set_value_cansleep(wm2200->pdata.ldo_ena, 0);
2422 regulator_bulk_disable(ARRAY_SIZE(wm2200->core_supplies),
2423 wm2200->core_supplies);
2429 struct wm2200_priv *wm2200 = i2c_get_clientdata(i2c);
2433 free_irq(i2c->irq, wm2200);
2434 if (wm2200->pdata.reset)
2435 gpio_set_value_cansleep(wm2200->pdata.reset, 0);
2436 if (wm2200->pdata.ldo_ena)
2437 gpio_set_value_cansleep(wm2200->pdata.ldo_ena, 0);
2438 regulator_bulk_disable(ARRAY_SIZE(wm2200->core_supplies),
2439 wm2200->core_supplies);
2447 struct wm2200_priv *wm2200 = dev_get_drvdata(dev);
2449 regcache_cache_only(wm2200->regmap, true);
2450 regcache_mark_dirty(wm2200->regmap);
2451 if (wm2200->pdata.ldo_ena)
2452 gpio_set_value_cansleep(wm2200->pdata.ldo_ena, 0);
2453 regulator_bulk_disable(ARRAY_SIZE(wm2200->core_supplies),
2454 wm2200->core_supplies);
2461 struct wm2200_priv *wm2200 = dev_get_drvdata(dev);
2464 ret = regulator_bulk_enable(ARRAY_SIZE(wm2200->core_supplies),
2465 wm2200->core_supplies);
2472 if (wm2200->pdata.ldo_ena) {
2473 gpio_set_value_cansleep(wm2200->pdata.ldo_ena, 1);
2477 regcache_cache_only(wm2200->regmap, false);
2478 regcache_sync(wm2200->regmap);
2490 { "wm2200", 0 },
2497 .name = "wm2200",