Lines Matching refs:wm2000

87 	struct wm2000_priv *wm2000 = i2c_get_clientdata(i2c);  in wm2000_write()  local
88 return regmap_write(wm2000->regmap, reg, value); in wm2000_write()
93 struct wm2000_priv *wm2000 = i2c_get_clientdata(i2c); in wm2000_read() local
97 ret = regmap_read(wm2000->regmap, r, &val); in wm2000_read()
104 static void wm2000_reset(struct wm2000_priv *wm2000) in wm2000_reset() argument
106 struct i2c_client *i2c = wm2000->i2c; in wm2000_reset()
112 wm2000->anc_mode = ANC_OFF; in wm2000_reset()
136 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_power_up() local
140 if (WARN_ON(wm2000->anc_mode != ANC_OFF)) in wm2000_power_up()
145 ret = regulator_bulk_enable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_power_up()
151 rate = clk_get_rate(wm2000->mclk); in wm2000_power_up()
169 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_power_up()
176 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_power_up()
185 wm2000->anc_download_size - 2); in wm2000_power_up()
187 ret = i2c_master_send(i2c, wm2000->anc_download, in wm2000_power_up()
188 wm2000->anc_download_size); in wm2000_power_up()
191 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_power_up()
194 if (ret != wm2000->anc_download_size) { in wm2000_power_up()
196 ret, wm2000->anc_download_size); in wm2000_power_up()
197 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_power_up()
217 if (wm2000->speech_clarity) in wm2000_power_up()
231 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_power_up()
238 wm2000->anc_mode = ANC_ACTIVE; in wm2000_power_up()
245 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_power_down() local
269 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_power_down()
272 wm2000->anc_mode = ANC_OFF; in wm2000_power_down()
279 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_enter_bypass() local
281 if (WARN_ON(wm2000->anc_mode != ANC_ACTIVE)) in wm2000_enter_bypass()
310 wm2000->anc_mode = ANC_BYPASS; in wm2000_enter_bypass()
318 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_exit_bypass() local
320 if (WARN_ON(wm2000->anc_mode != ANC_BYPASS)) in wm2000_exit_bypass()
345 wm2000->anc_mode = ANC_ACTIVE; in wm2000_exit_bypass()
353 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_enter_standby() local
355 if (WARN_ON(wm2000->anc_mode != ANC_ACTIVE)) in wm2000_enter_standby()
387 wm2000->anc_mode = ANC_STANDBY; in wm2000_enter_standby()
397 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_exit_standby() local
399 if (WARN_ON(wm2000->anc_mode != ANC_STANDBY)) in wm2000_exit_standby()
426 wm2000->anc_mode = ANC_ACTIVE; in wm2000_exit_standby()
543 static int wm2000_anc_transition(struct wm2000_priv *wm2000, in wm2000_anc_transition() argument
546 struct i2c_client *i2c = wm2000->i2c; in wm2000_anc_transition()
550 if (wm2000->anc_mode == mode) in wm2000_anc_transition()
554 if (anc_transitions[i].source == wm2000->anc_mode && in wm2000_anc_transition()
559 wm2000->anc_mode, mode); in wm2000_anc_transition()
565 ret = clk_prepare_enable(wm2000->mclk); in wm2000_anc_transition()
582 clk_disable_unprepare(wm2000->mclk); in wm2000_anc_transition()
587 static int wm2000_anc_set_mode(struct wm2000_priv *wm2000) in wm2000_anc_set_mode() argument
589 struct i2c_client *i2c = wm2000->i2c; in wm2000_anc_set_mode()
592 if (wm2000->anc_eng_ena && wm2000->spk_ena) in wm2000_anc_set_mode()
593 if (wm2000->anc_active) in wm2000_anc_set_mode()
601 mode, wm2000->anc_eng_ena, !wm2000->spk_ena, in wm2000_anc_set_mode()
602 wm2000->anc_active); in wm2000_anc_set_mode()
604 return wm2000_anc_transition(wm2000, mode); in wm2000_anc_set_mode()
611 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_anc_mode_get() local
613 ucontrol->value.integer.value[0] = wm2000->anc_active; in wm2000_anc_mode_get()
622 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_anc_mode_put() local
629 mutex_lock(&wm2000->lock); in wm2000_anc_mode_put()
631 wm2000->anc_active = anc_active; in wm2000_anc_mode_put()
633 ret = wm2000_anc_set_mode(wm2000); in wm2000_anc_mode_put()
635 mutex_unlock(&wm2000->lock); in wm2000_anc_mode_put()
644 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_speaker_get() local
646 ucontrol->value.integer.value[0] = wm2000->spk_ena; in wm2000_speaker_get()
655 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_speaker_put() local
662 mutex_lock(&wm2000->lock); in wm2000_speaker_put()
664 wm2000->spk_ena = val; in wm2000_speaker_put()
666 ret = wm2000_anc_set_mode(wm2000); in wm2000_speaker_put()
668 mutex_unlock(&wm2000->lock); in wm2000_speaker_put()
687 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_anc_power_event() local
690 mutex_lock(&wm2000->lock); in wm2000_anc_power_event()
693 wm2000->anc_eng_ena = 1; in wm2000_anc_power_event()
696 wm2000->anc_eng_ena = 0; in wm2000_anc_power_event()
698 ret = wm2000_anc_set_mode(wm2000); in wm2000_anc_power_event()
700 mutex_unlock(&wm2000->lock); in wm2000_anc_power_event()
729 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_suspend() local
731 return wm2000_anc_transition(wm2000, ANC_OFF); in wm2000_suspend()
736 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_resume() local
738 return wm2000_anc_set_mode(wm2000); in wm2000_resume()
787 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_probe() local
790 wm2000_anc_set_mode(wm2000); in wm2000_probe()
797 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev); in wm2000_remove() local
799 return wm2000_anc_transition(wm2000, ANC_OFF); in wm2000_remove()
819 struct wm2000_priv *wm2000; in wm2000_i2c_probe() local
827 wm2000 = devm_kzalloc(&i2c->dev, sizeof(struct wm2000_priv), in wm2000_i2c_probe()
829 if (!wm2000) in wm2000_i2c_probe()
832 mutex_init(&wm2000->lock); in wm2000_i2c_probe()
834 dev_set_drvdata(&i2c->dev, wm2000); in wm2000_i2c_probe()
836 wm2000->regmap = devm_regmap_init_i2c(i2c, &wm2000_regmap); in wm2000_i2c_probe()
837 if (IS_ERR(wm2000->regmap)) { in wm2000_i2c_probe()
838 ret = PTR_ERR(wm2000->regmap); in wm2000_i2c_probe()
845 wm2000->supplies[i].supply = wm2000_supplies[i]; in wm2000_i2c_probe()
848 wm2000->supplies); in wm2000_i2c_probe()
854 ret = regulator_bulk_enable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_i2c_probe()
875 wm2000->mclk = devm_clk_get(&i2c->dev, "MCLK"); in wm2000_i2c_probe()
876 if (IS_ERR(wm2000->mclk)) { in wm2000_i2c_probe()
877 ret = PTR_ERR(wm2000->mclk); in wm2000_i2c_probe()
885 wm2000->speech_clarity = !pdata->speech_enh_disable; in wm2000_i2c_probe()
898 wm2000->anc_download_size = fw->size + 2; in wm2000_i2c_probe()
899 wm2000->anc_download = devm_kzalloc(&i2c->dev, in wm2000_i2c_probe()
900 wm2000->anc_download_size, in wm2000_i2c_probe()
902 if (wm2000->anc_download == NULL) { in wm2000_i2c_probe()
908 wm2000->anc_download[0] = 0x80; in wm2000_i2c_probe()
909 wm2000->anc_download[1] = 0x00; in wm2000_i2c_probe()
910 memcpy(wm2000->anc_download + 2, fw->data, fw->size); in wm2000_i2c_probe()
912 wm2000->anc_eng_ena = 1; in wm2000_i2c_probe()
913 wm2000->anc_active = 1; in wm2000_i2c_probe()
914 wm2000->spk_ena = 1; in wm2000_i2c_probe()
915 wm2000->i2c = i2c; in wm2000_i2c_probe()
917 wm2000_reset(wm2000); in wm2000_i2c_probe()
922 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies); in wm2000_i2c_probe()