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);
813 struct wm2000_priv *wm2000;
821 wm2000 = devm_kzalloc(&i2c->dev, sizeof(*wm2000), GFP_KERNEL);
822 if (!wm2000)
825 mutex_init(&wm2000->lock);
827 dev_set_drvdata(&i2c->dev, wm2000);
829 wm2000->regmap = devm_regmap_init_i2c(i2c, &wm2000_regmap);
830 if (IS_ERR(wm2000->regmap)) {
831 ret = PTR_ERR(wm2000->regmap);
838 wm2000->supplies[i].supply = wm2000_supplies[i];
841 wm2000->supplies);
847 ret = regulator_bulk_enable(WM2000_NUM_SUPPLIES, wm2000->supplies);
854 ret = regmap_read(wm2000->regmap, WM2000_REG_ID1, ®);
860 ret = regmap_read(wm2000->regmap, WM2000_REG_ID2, ®);
873 ret = regmap_read(wm2000->regmap, WM2000_REG_REVISON, ®);
880 wm2000->mclk = devm_clk_get(&i2c->dev, "MCLK");
881 if (IS_ERR(wm2000->mclk)) {
882 ret = PTR_ERR(wm2000->mclk);
890 wm2000->speech_clarity = !pdata->speech_enh_disable;
903 wm2000->anc_download_size = fw->size + 2;
904 wm2000->anc_download = devm_kzalloc(&i2c->dev,
905 wm2000->anc_download_size,
907 if (wm2000->anc_download == NULL) {
912 wm2000->anc_download[0] = 0x80;
913 wm2000->anc_download[1] = 0x00;
914 memcpy(wm2000->anc_download + 2, fw->data, fw->size);
916 wm2000->anc_eng_ena = 1;
917 wm2000->anc_active = 1;
918 wm2000->spk_ena = 1;
919 wm2000->i2c = i2c;
921 wm2000_reset(wm2000);
927 regulator_bulk_disable(WM2000_NUM_SUPPLIES, wm2000->supplies);
935 { "wm2000", 0 },
942 .name = "wm2000",