Lines Matching defs:wm2000

3  * wm2000.c  --  WM2000 ALSA Soc Audio driver
41 #include <sound/wm2000.h>
43 #include "wm2000.h"
84 struct wm2000_priv *wm2000 = i2c_get_clientdata(i2c);
85 return regmap_write(wm2000->regmap, reg, value);
88 static void wm2000_reset(struct wm2000_priv *wm2000)
90 struct i2c_client *i2c = wm2000->i2c;
96 wm2000->anc_mode = ANC_OFF;
102 struct wm2000_priv *wm2000 = i2c_get_clientdata(i2c);
106 regmap_read(wm2000->regmap, reg, &val);
110 regmap_read(wm2000->regmap, reg, &val);
121 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
126 if (WARN_ON(wm2000->anc_mode != ANC_OFF))
131 ret = regulator_bulk_enable(WM2000_NUM_SUPPLIES, wm2000->supplies);
137 rate = clk_get_rate(wm2000->mclk);
155 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
162 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
171 wm2000->anc_download_size - 2);
173 ret = i2c_master_send(i2c, wm2000->anc_download,
174 wm2000->anc_download_size);
177 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
180 if (ret != wm2000->anc_download_size) {
182 ret, wm2000->anc_download_size);
183 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
202 ret = regmap_read(wm2000->regmap, WM2000_REG_SPEECH_CLARITY, &val);
205 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
208 if (wm2000->speech_clarity)
222 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
229 wm2000->anc_mode = ANC_ACTIVE;
236 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
260 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
263 wm2000->anc_mode = ANC_OFF;
270 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
272 if (WARN_ON(wm2000->anc_mode != ANC_ACTIVE))
301 wm2000->anc_mode = ANC_BYPASS;
309 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
311 if (WARN_ON(wm2000->anc_mode != ANC_BYPASS))
336 wm2000->anc_mode = ANC_ACTIVE;
344 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
346 if (WARN_ON(wm2000->anc_mode != ANC_ACTIVE))
378 wm2000->anc_mode = ANC_STANDBY;
388 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
390 if (WARN_ON(wm2000->anc_mode != ANC_STANDBY))
417 wm2000->anc_mode = ANC_ACTIVE;
534 static int wm2000_anc_transition(struct wm2000_priv *wm2000,
537 struct i2c_client *i2c = wm2000->i2c;
541 if (wm2000->anc_mode == mode)
545 if (anc_transitions[i].source == wm2000->anc_mode &&
550 wm2000->anc_mode, mode);
556 ret = clk_prepare_enable(wm2000->mclk);
573 clk_disable_unprepare(wm2000->mclk);
578 static int wm2000_anc_set_mode(struct wm2000_priv *wm2000)
580 struct i2c_client *i2c = wm2000->i2c;
583 if (wm2000->anc_eng_ena && wm2000->spk_ena)
584 if (wm2000->anc_active)
592 mode, wm2000->anc_eng_ena, !wm2000->spk_ena,
593 wm2000->anc_active);
595 return wm2000_anc_transition(wm2000, mode);
602 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
604 ucontrol->value.integer.value[0] = wm2000->anc_active;
613 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
620 mutex_lock(&wm2000->lock);
622 wm2000->anc_active = anc_active;
624 ret = wm2000_anc_set_mode(wm2000);
626 mutex_unlock(&wm2000->lock);
635 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
637 ucontrol->value.integer.value[0] = wm2000->spk_ena;
646 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
653 mutex_lock(&wm2000->lock);
655 wm2000->spk_ena = val;
657 ret = wm2000_anc_set_mode(wm2000);
659 mutex_unlock(&wm2000->lock);
678 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
681 mutex_lock(&wm2000->lock);
684 wm2000->anc_eng_ena = 1;
687 wm2000->anc_eng_ena = 0;
689 ret = wm2000_anc_set_mode(wm2000);
691 mutex_unlock(&wm2000->lock);
720 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
722 return wm2000_anc_transition(wm2000, ANC_OFF);
727 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
729 return wm2000_anc_set_mode(wm2000);
778 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
781 wm2000_anc_set_mode(wm2000);
788 struct wm2000_priv *wm2000 = dev_get_drvdata(component->dev);
790 wm2000_anc_transition(wm2000, ANC_OFF);
810 struct wm2000_priv *wm2000;
818 wm2000 = devm_kzalloc(&i2c->dev, sizeof(*wm2000), GFP_KERNEL);
819 if (!wm2000)
822 mutex_init(&wm2000->lock);
824 dev_set_drvdata(&i2c->dev, wm2000);
826 wm2000->regmap = devm_regmap_init_i2c(i2c, &wm2000_regmap);
827 if (IS_ERR(wm2000->regmap)) {
828 ret = PTR_ERR(wm2000->regmap);
835 wm2000->supplies[i].supply = wm2000_supplies[i];
838 wm2000->supplies);
844 ret = regulator_bulk_enable(WM2000_NUM_SUPPLIES, wm2000->supplies);
851 ret = regmap_read(wm2000->regmap, WM2000_REG_ID1, &reg);
857 ret = regmap_read(wm2000->regmap, WM2000_REG_ID2, &reg);
870 ret = regmap_read(wm2000->regmap, WM2000_REG_REVISON, &reg);
877 wm2000->mclk = devm_clk_get(&i2c->dev, "MCLK");
878 if (IS_ERR(wm2000->mclk)) {
879 ret = PTR_ERR(wm2000->mclk);
887 wm2000->speech_clarity = !pdata->speech_enh_disable;
900 wm2000->anc_download_size = fw->size + 2;
901 wm2000->anc_download = devm_kzalloc(&i2c->dev,
902 wm2000->anc_download_size,
904 if (wm2000->anc_download == NULL) {
909 wm2000->anc_download[0] = 0x80;
910 wm2000->anc_download[1] = 0x00;
911 memcpy(wm2000->anc_download + 2, fw->data, fw->size);
913 wm2000->anc_eng_ena = 1;
914 wm2000->anc_active = 1;
915 wm2000->spk_ena = 1;
916 wm2000->i2c = i2c;
918 wm2000_reset(wm2000);
924 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
932 { "wm2000" },
939 .name = "wm2000",