Lines Matching refs:wm8996

105 	struct wm8996_priv *wm8996 = container_of(nb, struct wm8996_priv, \
108 regcache_mark_dirty(wm8996->regmap); \
336 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_set_retune_mobile() local
337 struct wm8996_pdata *pdata = &wm8996->pdata; in wm8996_set_retune_mobile()
340 if (!wm8996->num_retune_mobile_texts) in wm8996_set_retune_mobile()
366 cfg = wm8996->retune_mobile_cfg[block]; in wm8996_set_retune_mobile()
371 wm8996->retune_mobile_texts[cfg]) == 0 && in wm8996_set_retune_mobile()
373 - wm8996->rx_rate[iface]) < best_val) { in wm8996_set_retune_mobile()
376 - wm8996->rx_rate[iface]); in wm8996_set_retune_mobile()
384 wm8996->rx_rate[iface]); in wm8996_set_retune_mobile()
413 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_put_retune_mobile_enum() local
414 struct wm8996_pdata *pdata = &wm8996->pdata; in wm8996_put_retune_mobile_enum()
424 wm8996->retune_mobile_cfg[block] = value; in wm8996_put_retune_mobile_enum()
435 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_get_retune_mobile_enum() local
440 ucontrol->value.enumerated.item[0] = wm8996->retune_mobile_cfg[block]; in wm8996_get_retune_mobile_enum()
576 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_bg_enable() local
578 wm8996->bg_ena++; in wm8996_bg_enable()
579 if (wm8996->bg_ena == 1) { in wm8996_bg_enable()
588 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_bg_disable() local
590 wm8996->bg_ena--; in wm8996_bg_disable()
591 if (!wm8996->bg_ena) in wm8996_bg_disable()
635 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in rmv_short_event() local
640 wm8996->hpout_pending &= ~w->shift; in rmv_short_event()
643 wm8996->hpout_pending |= w->shift; in rmv_short_event()
656 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wait_for_dc_servo() local
665 timeout = wait_for_completion_timeout(&wm8996->dcs_done, in wait_for_dc_servo()
688 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_seq_notifier() local
692 if (wm8996->dcs_pending) { in wm8996_seq_notifier()
694 wm8996->dcs_pending); in wm8996_seq_notifier()
697 wait_for_dc_servo(component, wm8996->dcs_pending in wm8996_seq_notifier()
700 wm8996->dcs_pending = 0; in wm8996_seq_notifier()
703 if (wm8996->hpout_pending != wm8996->hpout_ena) { in wm8996_seq_notifier()
705 wm8996->hpout_ena, wm8996->hpout_pending); in wm8996_seq_notifier()
709 if (wm8996->hpout_pending & HPOUT1L) { in wm8996_seq_notifier()
718 if (wm8996->hpout_pending & HPOUT1R) { in wm8996_seq_notifier()
731 if (wm8996->hpout_pending & HPOUT2L) { in wm8996_seq_notifier()
740 if (wm8996->hpout_pending & HPOUT2R) { in wm8996_seq_notifier()
751 wm8996->hpout_ena = wm8996->hpout_pending; in wm8996_seq_notifier()
759 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in dcs_start() local
763 wm8996->dcs_pending |= 1 << w->shift; in dcs_start()
1533 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_update_bclk() local
1539 if (wm8996->sysclk < 64000) in wm8996_update_bclk()
1552 bclk_rate = wm8996->bclk_rate[aif]; in wm8996_update_bclk()
1557 cur_val = (wm8996->sysclk / bclk_divs[i]) - bclk_rate; in wm8996_update_bclk()
1562 bclk_rate = wm8996->sysclk / bclk_divs[best]; in wm8996_update_bclk()
1574 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_set_bias_level() local
1590 ret = regulator_bulk_enable(ARRAY_SIZE(wm8996->supplies), in wm8996_set_bias_level()
1591 wm8996->supplies); in wm8996_set_bias_level()
1599 if (wm8996->pdata.ldo_ena >= 0) { in wm8996_set_bias_level()
1600 gpio_set_value_cansleep(wm8996->pdata.ldo_ena, in wm8996_set_bias_level()
1605 regcache_cache_only(wm8996->regmap, false); in wm8996_set_bias_level()
1606 regcache_sync(wm8996->regmap); in wm8996_set_bias_level()
1617 regcache_cache_only(wm8996->regmap, true); in wm8996_set_bias_level()
1618 if (wm8996->pdata.ldo_ena >= 0) { in wm8996_set_bias_level()
1619 gpio_set_value_cansleep(wm8996->pdata.ldo_ena, 0); in wm8996_set_bias_level()
1620 regcache_cache_only(wm8996->regmap, true); in wm8996_set_bias_level()
1622 regulator_bulk_disable(ARRAY_SIZE(wm8996->supplies), in wm8996_set_bias_level()
1623 wm8996->supplies); in wm8996_set_bias_level()
1734 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_hw_params() local
1775 wm8996->bclk_rate[dai->id] = bclk_rate; in wm8996_hw_params()
1776 wm8996->rx_rate[dai->id] = params_rate(params); in wm8996_hw_params()
1814 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_set_sysclk() local
1821 if (freq == wm8996->sysclk && clk_id == wm8996->sysclk_src) in wm8996_set_sysclk()
1831 wm8996->sysclk = freq; in wm8996_set_sysclk()
1835 wm8996->sysclk = freq; in wm8996_set_sysclk()
1839 wm8996->sysclk = freq; in wm8996_set_sysclk()
1847 switch (wm8996->sysclk) { in wm8996_set_sysclk()
1856 wm8996->sysclk /= 2; in wm8996_set_sysclk()
1870 wm8996->sysclk); in wm8996_set_sysclk()
1885 wm8996->sysclk_src = clk_id; in wm8996_set_sysclk()
2004 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_set_fll() local
2011 if (source == wm8996->fll_src && Fref == wm8996->fll_fref && in wm8996_set_fll()
2012 Fout == wm8996->fll_fout) in wm8996_set_fll()
2018 wm8996->fll_fref = 0; in wm8996_set_fll()
2019 wm8996->fll_fout = 0; in wm8996_set_fll()
2086 try_wait_for_completion(&wm8996->fll_lock); in wm8996_set_fll()
2112 time_left = wait_for_completion_timeout(&wm8996->fll_lock, in wm8996_set_fll()
2131 wm8996->fll_fref = Fref; in wm8996_set_fll()
2132 wm8996->fll_fout = Fout; in wm8996_set_fll()
2133 wm8996->fll_src = source; in wm8996_set_fll()
2141 struct wm8996_priv *wm8996 = gpiochip_get_data(chip); in wm8996_gpio_set() local
2143 regmap_update_bits(wm8996->regmap, WM8996_GPIO_1 + offset, in wm8996_gpio_set()
2150 struct wm8996_priv *wm8996 = gpiochip_get_data(chip); in wm8996_gpio_direction_out() local
2155 return regmap_update_bits(wm8996->regmap, WM8996_GPIO_1 + offset, in wm8996_gpio_direction_out()
2162 struct wm8996_priv *wm8996 = gpiochip_get_data(chip); in wm8996_gpio_get() local
2166 ret = regmap_read(wm8996->regmap, WM8996_GPIO_1 + offset, &reg); in wm8996_gpio_get()
2175 struct wm8996_priv *wm8996 = gpiochip_get_data(chip); in wm8996_gpio_direction_in() local
2177 return regmap_update_bits(wm8996->regmap, WM8996_GPIO_1 + offset, in wm8996_gpio_direction_in()
2193 static void wm8996_init_gpio(struct wm8996_priv *wm8996) in wm8996_init_gpio() argument
2197 wm8996->gpio_chip = wm8996_template_chip; in wm8996_init_gpio()
2198 wm8996->gpio_chip.ngpio = 5; in wm8996_init_gpio()
2199 wm8996->gpio_chip.parent = wm8996->dev; in wm8996_init_gpio()
2201 if (wm8996->pdata.gpio_base) in wm8996_init_gpio()
2202 wm8996->gpio_chip.base = wm8996->pdata.gpio_base; in wm8996_init_gpio()
2204 wm8996->gpio_chip.base = -1; in wm8996_init_gpio()
2206 ret = gpiochip_add_data(&wm8996->gpio_chip, wm8996); in wm8996_init_gpio()
2208 dev_err(wm8996->dev, "Failed to add GPIOs: %d\n", ret); in wm8996_init_gpio()
2211 static void wm8996_free_gpio(struct wm8996_priv *wm8996) in wm8996_free_gpio() argument
2213 gpiochip_remove(&wm8996->gpio_chip); in wm8996_free_gpio()
2216 static void wm8996_init_gpio(struct wm8996_priv *wm8996) in wm8996_init_gpio() argument
2220 static void wm8996_free_gpio(struct wm8996_priv *wm8996) in wm8996_free_gpio() argument
2242 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_detect() local
2245 wm8996->jack = jack; in wm8996_detect()
2246 wm8996->detecting = true; in wm8996_detect()
2247 wm8996->polarity_cb = polarity_cb; in wm8996_detect()
2248 wm8996->jack_flips = 0; in wm8996_detect()
2250 if (wm8996->polarity_cb) in wm8996_detect()
2251 wm8996->polarity_cb(component, 0); in wm8996_detect()
2289 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_hpdet_irq() local
2321 if (wm8996->jack_mic) in wm8996_hpdet_irq()
2324 snd_soc_jack_report(wm8996->jack, report, in wm8996_hpdet_irq()
2327 wm8996->detecting = false; in wm8996_hpdet_irq()
2386 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_micd() local
2401 wm8996->jack_mic = false; in wm8996_micd()
2402 wm8996->detecting = true; in wm8996_micd()
2403 wm8996->jack_flips = 0; in wm8996_micd()
2404 snd_soc_jack_report(wm8996->jack, 0, in wm8996_micd()
2421 if (wm8996->detecting) { in wm8996_micd()
2423 wm8996->jack_mic = true; in wm8996_micd()
2435 snd_soc_jack_report(wm8996->jack, 0, SND_JACK_BTN_0); in wm8996_micd()
2447 if (wm8996->detecting && (val & 0x3f0)) { in wm8996_micd()
2448 wm8996->jack_flips++; in wm8996_micd()
2450 if (wm8996->jack_flips > 1) { in wm8996_micd()
2462 if (wm8996->polarity_cb) in wm8996_micd()
2463 wm8996->polarity_cb(component, in wm8996_micd()
2476 if (wm8996->jack_mic) { in wm8996_micd()
2478 snd_soc_jack_report(wm8996->jack, SND_JACK_BTN_0, in wm8996_micd()
2480 } else if (wm8996->detecting) { in wm8996_micd()
2489 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_irq() local
2507 complete(&wm8996->dcs_done); in wm8996_irq()
2515 complete(&wm8996->fll_lock); in wm8996_irq()
2543 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_retune_mobile_pdata() local
2544 struct wm8996_pdata *pdata = &wm8996->pdata; in wm8996_retune_mobile_pdata()
2548 wm8996->retune_mobile_enum, in wm8996_retune_mobile_pdata()
2552 wm8996->retune_mobile_enum, in wm8996_retune_mobile_pdata()
2563 wm8996->num_retune_mobile_texts = 0; in wm8996_retune_mobile_pdata()
2564 wm8996->retune_mobile_texts = NULL; in wm8996_retune_mobile_pdata()
2566 for (j = 0; j < wm8996->num_retune_mobile_texts; j++) { in wm8996_retune_mobile_pdata()
2568 wm8996->retune_mobile_texts[j]) == 0) in wm8996_retune_mobile_pdata()
2572 if (j != wm8996->num_retune_mobile_texts) in wm8996_retune_mobile_pdata()
2576 t = krealloc(wm8996->retune_mobile_texts, in wm8996_retune_mobile_pdata()
2578 (wm8996->num_retune_mobile_texts + 1), in wm8996_retune_mobile_pdata()
2584 t[wm8996->num_retune_mobile_texts] = in wm8996_retune_mobile_pdata()
2588 wm8996->num_retune_mobile_texts++; in wm8996_retune_mobile_pdata()
2589 wm8996->retune_mobile_texts = t; in wm8996_retune_mobile_pdata()
2593 wm8996->num_retune_mobile_texts); in wm8996_retune_mobile_pdata()
2595 wm8996->retune_mobile_enum.items = wm8996->num_retune_mobile_texts; in wm8996_retune_mobile_pdata()
2596 wm8996->retune_mobile_enum.texts = wm8996->retune_mobile_texts; in wm8996_retune_mobile_pdata()
2619 struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component); in wm8996_probe() local
2623 wm8996->component = component; in wm8996_probe()
2625 init_completion(&wm8996->dcs_done); in wm8996_probe()
2626 init_completion(&wm8996->fll_lock); in wm8996_probe()
2628 if (wm8996->pdata.num_retune_mobile_cfgs) in wm8996_probe()
2635 if (wm8996->pdata.irq_flags) in wm8996_probe()
2636 irq_flags = wm8996->pdata.irq_flags; in wm8996_probe()
2761 struct wm8996_priv *wm8996; in wm8996_i2c_probe() local
2765 wm8996 = devm_kzalloc(&i2c->dev, sizeof(struct wm8996_priv), in wm8996_i2c_probe()
2767 if (wm8996 == NULL) in wm8996_i2c_probe()
2770 i2c_set_clientdata(i2c, wm8996); in wm8996_i2c_probe()
2771 wm8996->dev = &i2c->dev; in wm8996_i2c_probe()
2774 memcpy(&wm8996->pdata, dev_get_platdata(&i2c->dev), in wm8996_i2c_probe()
2775 sizeof(wm8996->pdata)); in wm8996_i2c_probe()
2777 if (wm8996->pdata.ldo_ena > 0) { in wm8996_i2c_probe()
2778 ret = gpio_request_one(wm8996->pdata.ldo_ena, in wm8996_i2c_probe()
2782 wm8996->pdata.ldo_ena, ret); in wm8996_i2c_probe()
2787 for (i = 0; i < ARRAY_SIZE(wm8996->supplies); i++) in wm8996_i2c_probe()
2788 wm8996->supplies[i].supply = wm8996_supply_names[i]; in wm8996_i2c_probe()
2790 ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(wm8996->supplies), in wm8996_i2c_probe()
2791 wm8996->supplies); in wm8996_i2c_probe()
2797 wm8996->disable_nb[0].notifier_call = wm8996_regulator_event_0; in wm8996_i2c_probe()
2798 wm8996->disable_nb[1].notifier_call = wm8996_regulator_event_1; in wm8996_i2c_probe()
2799 wm8996->disable_nb[2].notifier_call = wm8996_regulator_event_2; in wm8996_i2c_probe()
2802 for (i = 0; i < ARRAY_SIZE(wm8996->supplies); i++) { in wm8996_i2c_probe()
2804 wm8996->supplies[i].consumer, in wm8996_i2c_probe()
2805 &wm8996->disable_nb[i]); in wm8996_i2c_probe()
2813 ret = regulator_bulk_enable(ARRAY_SIZE(wm8996->supplies), in wm8996_i2c_probe()
2814 wm8996->supplies); in wm8996_i2c_probe()
2820 if (wm8996->pdata.ldo_ena > 0) { in wm8996_i2c_probe()
2821 gpio_set_value_cansleep(wm8996->pdata.ldo_ena, 1); in wm8996_i2c_probe()
2825 wm8996->regmap = devm_regmap_init_i2c(i2c, &wm8996_regmap); in wm8996_i2c_probe()
2826 if (IS_ERR(wm8996->regmap)) { in wm8996_i2c_probe()
2827 ret = PTR_ERR(wm8996->regmap); in wm8996_i2c_probe()
2832 ret = regmap_read(wm8996->regmap, WM8996_SOFTWARE_RESET, &reg); in wm8996_i2c_probe()
2843 ret = regmap_read(wm8996->regmap, WM8996_CHIP_REVISION, &reg); in wm8996_i2c_probe()
2853 if (wm8996->pdata.ldo_ena > 0) { in wm8996_i2c_probe()
2854 gpio_set_value_cansleep(wm8996->pdata.ldo_ena, 0); in wm8996_i2c_probe()
2855 regcache_cache_only(wm8996->regmap, true); in wm8996_i2c_probe()
2857 ret = regmap_write(wm8996->regmap, WM8996_SOFTWARE_RESET, in wm8996_i2c_probe()
2865 regulator_bulk_disable(ARRAY_SIZE(wm8996->supplies), wm8996->supplies); in wm8996_i2c_probe()
2868 regmap_update_bits(wm8996->regmap, WM8996_LINE_INPUT_CONTROL, in wm8996_i2c_probe()
2870 wm8996->pdata.inl_mode << WM8996_INL_MODE_SHIFT | in wm8996_i2c_probe()
2871 wm8996->pdata.inr_mode); in wm8996_i2c_probe()
2873 for (i = 0; i < ARRAY_SIZE(wm8996->pdata.gpio_default); i++) { in wm8996_i2c_probe()
2874 if (!wm8996->pdata.gpio_default[i]) in wm8996_i2c_probe()
2877 regmap_write(wm8996->regmap, WM8996_GPIO_1 + i, in wm8996_i2c_probe()
2878 wm8996->pdata.gpio_default[i] & 0xffff); in wm8996_i2c_probe()
2881 if (wm8996->pdata.spkmute_seq) in wm8996_i2c_probe()
2882 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2886 wm8996->pdata.spkmute_seq); in wm8996_i2c_probe()
2888 regmap_update_bits(wm8996->regmap, WM8996_ACCESSORY_DETECT_MODE_2, in wm8996_i2c_probe()
2890 WM8996_MICD_SRC, wm8996->pdata.micdet_def); in wm8996_i2c_probe()
2893 regmap_update_bits(wm8996->regmap, WM8996_LEFT_LINE_INPUT_VOLUME, in wm8996_i2c_probe()
2895 regmap_update_bits(wm8996->regmap, WM8996_RIGHT_LINE_INPUT_VOLUME, in wm8996_i2c_probe()
2898 regmap_update_bits(wm8996->regmap, WM8996_DAC1_LEFT_VOLUME, in wm8996_i2c_probe()
2900 regmap_update_bits(wm8996->regmap, WM8996_DAC1_RIGHT_VOLUME, in wm8996_i2c_probe()
2902 regmap_update_bits(wm8996->regmap, WM8996_DAC2_LEFT_VOLUME, in wm8996_i2c_probe()
2904 regmap_update_bits(wm8996->regmap, WM8996_DAC2_RIGHT_VOLUME, in wm8996_i2c_probe()
2907 regmap_update_bits(wm8996->regmap, WM8996_OUTPUT1_LEFT_VOLUME, in wm8996_i2c_probe()
2909 regmap_update_bits(wm8996->regmap, WM8996_OUTPUT1_RIGHT_VOLUME, in wm8996_i2c_probe()
2911 regmap_update_bits(wm8996->regmap, WM8996_OUTPUT2_LEFT_VOLUME, in wm8996_i2c_probe()
2913 regmap_update_bits(wm8996->regmap, WM8996_OUTPUT2_RIGHT_VOLUME, in wm8996_i2c_probe()
2916 regmap_update_bits(wm8996->regmap, WM8996_DSP1_TX_LEFT_VOLUME, in wm8996_i2c_probe()
2918 regmap_update_bits(wm8996->regmap, WM8996_DSP1_TX_RIGHT_VOLUME, in wm8996_i2c_probe()
2920 regmap_update_bits(wm8996->regmap, WM8996_DSP2_TX_LEFT_VOLUME, in wm8996_i2c_probe()
2922 regmap_update_bits(wm8996->regmap, WM8996_DSP2_TX_RIGHT_VOLUME, in wm8996_i2c_probe()
2925 regmap_update_bits(wm8996->regmap, WM8996_DSP1_RX_LEFT_VOLUME, in wm8996_i2c_probe()
2927 regmap_update_bits(wm8996->regmap, WM8996_DSP1_RX_RIGHT_VOLUME, in wm8996_i2c_probe()
2929 regmap_update_bits(wm8996->regmap, WM8996_DSP2_RX_LEFT_VOLUME, in wm8996_i2c_probe()
2931 regmap_update_bits(wm8996->regmap, WM8996_DSP2_RX_RIGHT_VOLUME, in wm8996_i2c_probe()
2937 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2942 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2947 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2952 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2957 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2962 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2968 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2973 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2979 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2984 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2989 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2994 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
2999 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
3004 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
3010 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
3015 regmap_update_bits(wm8996->regmap, in wm8996_i2c_probe()
3024 ret = regmap_read(wm8996->regmap, WM8996_GPIO_1, &reg); in wm8996_i2c_probe()
3031 regmap_update_bits(wm8996->regmap, WM8996_AIF1_TX_LRCLK_2, in wm8996_i2c_probe()
3035 ret = regmap_read(wm8996->regmap, WM8996_GPIO_2, &reg); in wm8996_i2c_probe()
3042 regmap_update_bits(wm8996->regmap, WM8996_AIF2_TX_LRCLK_2, in wm8996_i2c_probe()
3046 wm8996_init_gpio(wm8996); in wm8996_i2c_probe()
3057 wm8996_free_gpio(wm8996); in wm8996_i2c_probe()
3060 if (wm8996->pdata.ldo_ena > 0) in wm8996_i2c_probe()
3061 gpio_set_value_cansleep(wm8996->pdata.ldo_ena, 0); in wm8996_i2c_probe()
3062 regulator_bulk_disable(ARRAY_SIZE(wm8996->supplies), wm8996->supplies); in wm8996_i2c_probe()
3064 if (wm8996->pdata.ldo_ena > 0) in wm8996_i2c_probe()
3065 gpio_free(wm8996->pdata.ldo_ena); in wm8996_i2c_probe()
3073 struct wm8996_priv *wm8996 = i2c_get_clientdata(client); in wm8996_i2c_remove() local
3075 wm8996_free_gpio(wm8996); in wm8996_i2c_remove()
3076 if (wm8996->pdata.ldo_ena > 0) { in wm8996_i2c_remove()
3077 gpio_set_value_cansleep(wm8996->pdata.ldo_ena, 0); in wm8996_i2c_remove()
3078 gpio_free(wm8996->pdata.ldo_ena); in wm8996_i2c_remove()