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