Lines Matching refs:codec

64 static void wait_for_dc_servo(struct snd_soc_codec *codec, unsigned int op)  in wait_for_dc_servo()  argument
66 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wait_for_dc_servo()
75 snd_soc_write(codec, WM8993_DC_SERVO_0, val); in wait_for_dc_servo()
77 dev_dbg(codec->dev, "Waiting for DC servo...\n"); in wait_for_dc_servo()
93 reg = snd_soc_read(codec, WM8993_DC_SERVO_0); in wait_for_dc_servo()
94 dev_dbg(codec->dev, "DC servo: %x\n", reg); in wait_for_dc_servo()
98 dev_err(codec->dev, "Timed out waiting for DC Servo %x\n", in wait_for_dc_servo()
112 static bool wm_hubs_dac_hp_direct(struct snd_soc_codec *codec) in wm_hubs_dac_hp_direct() argument
117 reg = snd_soc_read(codec, WM8993_OUTPUT_MIXER1); in wm_hubs_dac_hp_direct()
120 dev_vdbg(codec->dev, "Analogue paths connected: %x\n", in wm_hubs_dac_hp_direct()
124 dev_vdbg(codec->dev, "HPL connected to mixer\n"); in wm_hubs_dac_hp_direct()
127 dev_vdbg(codec->dev, "HPL connected to DAC\n"); in wm_hubs_dac_hp_direct()
130 reg = snd_soc_read(codec, WM8993_OUTPUT_MIXER2); in wm_hubs_dac_hp_direct()
133 dev_vdbg(codec->dev, "Analogue paths connected: %x\n", in wm_hubs_dac_hp_direct()
137 dev_vdbg(codec->dev, "HPR connected to mixer\n"); in wm_hubs_dac_hp_direct()
140 dev_vdbg(codec->dev, "HPR connected to DAC\n"); in wm_hubs_dac_hp_direct()
153 static bool wm_hubs_dcs_cache_get(struct snd_soc_codec *codec, in wm_hubs_dcs_cache_get() argument
156 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_dcs_cache_get()
160 left = snd_soc_read(codec, WM8993_LEFT_OUTPUT_VOLUME); in wm_hubs_dcs_cache_get()
163 right = snd_soc_read(codec, WM8993_RIGHT_OUTPUT_VOLUME); in wm_hubs_dcs_cache_get()
177 static void wm_hubs_dcs_cache_set(struct snd_soc_codec *codec, u16 dcs_cfg) in wm_hubs_dcs_cache_set() argument
179 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_dcs_cache_set()
185 cache = devm_kzalloc(codec->dev, sizeof(*cache), GFP_KERNEL); in wm_hubs_dcs_cache_set()
189 cache->left = snd_soc_read(codec, WM8993_LEFT_OUTPUT_VOLUME); in wm_hubs_dcs_cache_set()
192 cache->right = snd_soc_read(codec, WM8993_RIGHT_OUTPUT_VOLUME); in wm_hubs_dcs_cache_set()
200 static int wm_hubs_read_dc_servo(struct snd_soc_codec *codec, in wm_hubs_read_dc_servo() argument
203 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_read_dc_servo()
224 *reg_l = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_1) in wm_hubs_read_dc_servo()
226 *reg_r = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_2) in wm_hubs_read_dc_servo()
231 reg = snd_soc_read(codec, dcs_reg); in wm_hubs_read_dc_servo()
246 static void enable_dc_servo(struct snd_soc_codec *codec) in enable_dc_servo() argument
248 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in enable_dc_servo()
264 if (wm_hubs_dac_hp_direct(codec) && in enable_dc_servo()
265 wm_hubs_dcs_cache_get(codec, &cache)) { in enable_dc_servo()
266 dev_dbg(codec->dev, "Using cached DCS offset %x for %d,%d\n", in enable_dc_servo()
268 snd_soc_write(codec, dcs_reg, cache->dcs_cfg); in enable_dc_servo()
269 wait_for_dc_servo(codec, in enable_dc_servo()
277 snd_soc_update_bits(codec, WM8993_DC_SERVO_1, in enable_dc_servo()
280 wait_for_dc_servo(codec, in enable_dc_servo()
284 wait_for_dc_servo(codec, in enable_dc_servo()
289 if (wm_hubs_read_dc_servo(codec, &reg_l, &reg_r) < 0) in enable_dc_servo()
292 dev_dbg(codec->dev, "DCS input: %x %x\n", reg_l, reg_r); in enable_dc_servo()
296 dev_dbg(codec->dev, in enable_dc_servo()
302 dev_dbg(codec->dev, "DCS right %d->%d\n", offset, in enable_dc_servo()
309 dev_dbg(codec->dev, "DCS left %d->%d\n", offset, in enable_dc_servo()
314 dev_dbg(codec->dev, "DCS result: %x\n", dcs_cfg); in enable_dc_servo()
317 snd_soc_write(codec, dcs_reg, dcs_cfg); in enable_dc_servo()
318 wait_for_dc_servo(codec, in enable_dc_servo()
328 if (wm_hubs_dac_hp_direct(codec)) in enable_dc_servo()
329 wm_hubs_dcs_cache_set(codec, dcs_cfg); in enable_dc_servo()
338 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); in wm8993_put_dc_servo() local
339 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm8993_put_dc_servo()
350 if (snd_soc_read(codec, WM8993_POWER_MANAGEMENT_1) in wm8993_put_dc_servo()
352 snd_soc_update_bits(codec, in wm8993_put_dc_servo()
503 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in hp_supply_event() local
504 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in hp_supply_event()
513 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_1, in hp_supply_event()
520 snd_soc_update_bits(codec, WM8993_ANALOGUE_HP_0, in hp_supply_event()
527 dev_err(codec->dev, "Unknown HP startup mode %d\n", in hp_supply_event()
534 snd_soc_update_bits(codec, WM8993_CHARGE_PUMP_1, in hp_supply_event()
545 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in hp_event() local
546 unsigned int reg = snd_soc_read(codec, WM8993_ANALOGUE_HP_0); in hp_event()
550 snd_soc_update_bits(codec, WM8993_CHARGE_PUMP_1, in hp_event()
555 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_1, in hp_event()
560 snd_soc_write(codec, WM8993_ANALOGUE_HP_0, reg); in hp_event()
562 snd_soc_update_bits(codec, WM8993_DC_SERVO_1, in hp_event()
565 enable_dc_servo(codec); in hp_event()
569 snd_soc_write(codec, WM8993_ANALOGUE_HP_0, reg); in hp_event()
573 snd_soc_update_bits(codec, WM8993_ANALOGUE_HP_0, in hp_event()
579 snd_soc_update_bits(codec, WM8993_ANALOGUE_HP_0, in hp_event()
583 snd_soc_write(codec, WM8993_DC_SERVO_0, 0); in hp_event()
585 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_1, in hp_event()
597 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in earpiece_event() local
598 u16 reg = snd_soc_read(codec, WM8993_ANTIPOP1) & ~WM8993_HPOUT2_IN_ENA; in earpiece_event()
603 snd_soc_write(codec, WM8993_ANTIPOP1, reg); in earpiece_event()
608 snd_soc_write(codec, WM8993_ANTIPOP1, reg); in earpiece_event()
622 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in lineout_event() local
623 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in lineout_event()
652 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in micbias_event() local
653 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in micbias_event()
671 void wm_hubs_update_class_w(struct snd_soc_codec *codec) in wm_hubs_update_class_w() argument
673 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_update_class_w()
676 if (!wm_hubs_dac_hp_direct(codec)) in wm_hubs_update_class_w()
679 if (hubs->check_class_w_digital && !hubs->check_class_w_digital(codec)) in wm_hubs_update_class_w()
682 dev_vdbg(codec->dev, "Class W %s\n", enable ? "enabled" : "disabled"); in wm_hubs_update_class_w()
684 snd_soc_update_bits(codec, WM8993_CLASS_W_0, in wm_hubs_update_class_w()
687 snd_soc_write(codec, WM8993_LEFT_OUTPUT_VOLUME, in wm_hubs_update_class_w()
688 snd_soc_read(codec, WM8993_LEFT_OUTPUT_VOLUME)); in wm_hubs_update_class_w()
689 snd_soc_write(codec, WM8993_RIGHT_OUTPUT_VOLUME, in wm_hubs_update_class_w()
690 snd_soc_read(codec, WM8993_RIGHT_OUTPUT_VOLUME)); in wm_hubs_update_class_w()
701 struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kcontrol); in class_w_put_volsw() local
706 wm_hubs_update_class_w(codec); in class_w_put_volsw()
721 struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kcontrol); in class_w_put_double() local
726 wm_hubs_update_class_w(codec); in class_w_put_double()
1117 int wm_hubs_add_analogue_controls(struct snd_soc_codec *codec) in wm_hubs_add_analogue_controls() argument
1119 struct snd_soc_dapm_context *dapm = &codec->dapm; in wm_hubs_add_analogue_controls()
1122 snd_soc_update_bits(codec, WM8993_LEFT_LINE_INPUT_1_2_VOLUME, in wm_hubs_add_analogue_controls()
1124 snd_soc_update_bits(codec, WM8993_RIGHT_LINE_INPUT_1_2_VOLUME, in wm_hubs_add_analogue_controls()
1126 snd_soc_update_bits(codec, WM8993_LEFT_LINE_INPUT_3_4_VOLUME, in wm_hubs_add_analogue_controls()
1128 snd_soc_update_bits(codec, WM8993_RIGHT_LINE_INPUT_3_4_VOLUME, in wm_hubs_add_analogue_controls()
1131 snd_soc_update_bits(codec, WM8993_SPEAKER_VOLUME_LEFT, in wm_hubs_add_analogue_controls()
1133 snd_soc_update_bits(codec, WM8993_SPEAKER_VOLUME_RIGHT, in wm_hubs_add_analogue_controls()
1136 snd_soc_update_bits(codec, WM8993_LEFT_OUTPUT_VOLUME, in wm_hubs_add_analogue_controls()
1139 snd_soc_update_bits(codec, WM8993_RIGHT_OUTPUT_VOLUME, in wm_hubs_add_analogue_controls()
1143 snd_soc_update_bits(codec, WM8993_LEFT_OPGA_VOLUME, in wm_hubs_add_analogue_controls()
1146 snd_soc_update_bits(codec, WM8993_RIGHT_OPGA_VOLUME, in wm_hubs_add_analogue_controls()
1150 snd_soc_add_codec_controls(codec, analogue_snd_controls, in wm_hubs_add_analogue_controls()
1159 int wm_hubs_add_analogue_routes(struct snd_soc_codec *codec, in wm_hubs_add_analogue_routes() argument
1162 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_add_analogue_routes()
1163 struct snd_soc_dapm_context *dapm = &codec->dapm; in wm_hubs_add_analogue_routes()
1165 hubs->codec = codec; in wm_hubs_add_analogue_routes()
1195 int wm_hubs_handle_analogue_pdata(struct snd_soc_codec *codec, in wm_hubs_handle_analogue_pdata() argument
1202 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_handle_analogue_pdata()
1210 snd_soc_update_bits(codec, WM8993_LINE_MIXER1, in wm_hubs_handle_analogue_pdata()
1214 snd_soc_update_bits(codec, WM8993_LINE_MIXER2, in wm_hubs_handle_analogue_pdata()
1219 snd_soc_update_bits(codec, WM8993_ANTIPOP1, in wm_hubs_handle_analogue_pdata()
1224 snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, in wm_hubs_handle_analogue_pdata()
1228 snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, in wm_hubs_handle_analogue_pdata()
1231 snd_soc_update_bits(codec, WM8993_MICBIAS, in wm_hubs_handle_analogue_pdata()
1243 void wm_hubs_vmid_ena(struct snd_soc_codec *codec) in wm_hubs_vmid_ena() argument
1245 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_vmid_ena()
1255 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_3, val, val); in wm_hubs_vmid_ena()
1259 void wm_hubs_set_bias_level(struct snd_soc_codec *codec, in wm_hubs_set_bias_level() argument
1262 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_set_bias_level()
1268 snd_soc_update_bits(codec, WM8993_INPUTS_CLAMP_REG, in wm_hubs_set_bias_level()
1295 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_3, in wm_hubs_set_bias_level()
1299 snd_soc_update_bits(codec, WM8993_INPUTS_CLAMP_REG, in wm_hubs_set_bias_level()