Lines Matching refs:codec

63 static void wait_for_dc_servo(struct snd_soc_codec *codec, unsigned int op)  in wait_for_dc_servo()  argument
65 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wait_for_dc_servo()
74 snd_soc_write(codec, WM8993_DC_SERVO_0, val); in wait_for_dc_servo()
76 dev_dbg(codec->dev, "Waiting for DC servo...\n"); in wait_for_dc_servo()
92 reg = snd_soc_read(codec, WM8993_DC_SERVO_0); in wait_for_dc_servo()
93 dev_dbg(codec->dev, "DC servo: %x\n", reg); in wait_for_dc_servo()
97 dev_err(codec->dev, "Timed out waiting for DC Servo %x\n", in wait_for_dc_servo()
111 static bool wm_hubs_dac_hp_direct(struct snd_soc_codec *codec) in wm_hubs_dac_hp_direct() argument
116 reg = snd_soc_read(codec, WM8993_OUTPUT_MIXER1); in wm_hubs_dac_hp_direct()
119 dev_vdbg(codec->dev, "Analogue paths connected: %x\n", in wm_hubs_dac_hp_direct()
123 dev_vdbg(codec->dev, "HPL connected to mixer\n"); in wm_hubs_dac_hp_direct()
126 dev_vdbg(codec->dev, "HPL connected to DAC\n"); in wm_hubs_dac_hp_direct()
129 reg = snd_soc_read(codec, WM8993_OUTPUT_MIXER2); in wm_hubs_dac_hp_direct()
132 dev_vdbg(codec->dev, "Analogue paths connected: %x\n", in wm_hubs_dac_hp_direct()
136 dev_vdbg(codec->dev, "HPR connected to mixer\n"); in wm_hubs_dac_hp_direct()
139 dev_vdbg(codec->dev, "HPR connected to DAC\n"); in wm_hubs_dac_hp_direct()
152 static bool wm_hubs_dcs_cache_get(struct snd_soc_codec *codec, in wm_hubs_dcs_cache_get() argument
155 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_dcs_cache_get()
159 left = snd_soc_read(codec, WM8993_LEFT_OUTPUT_VOLUME); in wm_hubs_dcs_cache_get()
162 right = snd_soc_read(codec, WM8993_RIGHT_OUTPUT_VOLUME); in wm_hubs_dcs_cache_get()
176 static void wm_hubs_dcs_cache_set(struct snd_soc_codec *codec, u16 dcs_cfg) in wm_hubs_dcs_cache_set() argument
178 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_dcs_cache_set()
184 cache = devm_kzalloc(codec->dev, sizeof(*cache), GFP_KERNEL); in wm_hubs_dcs_cache_set()
188 cache->left = snd_soc_read(codec, WM8993_LEFT_OUTPUT_VOLUME); in wm_hubs_dcs_cache_set()
191 cache->right = snd_soc_read(codec, WM8993_RIGHT_OUTPUT_VOLUME); in wm_hubs_dcs_cache_set()
199 static int wm_hubs_read_dc_servo(struct snd_soc_codec *codec, in wm_hubs_read_dc_servo() argument
202 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_read_dc_servo()
223 *reg_l = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_1) in wm_hubs_read_dc_servo()
225 *reg_r = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_2) in wm_hubs_read_dc_servo()
230 reg = snd_soc_read(codec, dcs_reg); in wm_hubs_read_dc_servo()
245 static void enable_dc_servo(struct snd_soc_codec *codec) in enable_dc_servo() argument
247 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in enable_dc_servo()
263 if (wm_hubs_dac_hp_direct(codec) && in enable_dc_servo()
264 wm_hubs_dcs_cache_get(codec, &cache)) { in enable_dc_servo()
265 dev_dbg(codec->dev, "Using cached DCS offset %x for %d,%d\n", in enable_dc_servo()
267 snd_soc_write(codec, dcs_reg, cache->dcs_cfg); in enable_dc_servo()
268 wait_for_dc_servo(codec, in enable_dc_servo()
276 snd_soc_update_bits(codec, WM8993_DC_SERVO_1, in enable_dc_servo()
279 wait_for_dc_servo(codec, in enable_dc_servo()
283 wait_for_dc_servo(codec, in enable_dc_servo()
288 if (wm_hubs_read_dc_servo(codec, &reg_l, &reg_r) < 0) in enable_dc_servo()
291 dev_dbg(codec->dev, "DCS input: %x %x\n", reg_l, reg_r); in enable_dc_servo()
295 dev_dbg(codec->dev, in enable_dc_servo()
301 dev_dbg(codec->dev, "DCS right %d->%d\n", offset, in enable_dc_servo()
308 dev_dbg(codec->dev, "DCS left %d->%d\n", offset, in enable_dc_servo()
313 dev_dbg(codec->dev, "DCS result: %x\n", dcs_cfg); in enable_dc_servo()
316 snd_soc_write(codec, dcs_reg, dcs_cfg); in enable_dc_servo()
317 wait_for_dc_servo(codec, in enable_dc_servo()
327 if (wm_hubs_dac_hp_direct(codec)) in enable_dc_servo()
328 wm_hubs_dcs_cache_set(codec, dcs_cfg); in enable_dc_servo()
337 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); in wm8993_put_dc_servo() local
338 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm8993_put_dc_servo()
349 if (snd_soc_read(codec, WM8993_POWER_MANAGEMENT_1) in wm8993_put_dc_servo()
351 snd_soc_update_bits(codec, in wm8993_put_dc_servo()
502 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in hp_supply_event() local
503 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in hp_supply_event()
512 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_1, in hp_supply_event()
519 snd_soc_update_bits(codec, WM8993_ANALOGUE_HP_0, in hp_supply_event()
526 dev_err(codec->dev, "Unknown HP startup mode %d\n", in hp_supply_event()
533 snd_soc_update_bits(codec, WM8993_CHARGE_PUMP_1, in hp_supply_event()
544 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in hp_event() local
545 unsigned int reg = snd_soc_read(codec, WM8993_ANALOGUE_HP_0); in hp_event()
549 snd_soc_update_bits(codec, WM8993_CHARGE_PUMP_1, in hp_event()
554 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_1, in hp_event()
559 snd_soc_write(codec, WM8993_ANALOGUE_HP_0, reg); in hp_event()
561 snd_soc_update_bits(codec, WM8993_DC_SERVO_1, in hp_event()
564 enable_dc_servo(codec); in hp_event()
568 snd_soc_write(codec, WM8993_ANALOGUE_HP_0, reg); in hp_event()
572 snd_soc_update_bits(codec, WM8993_ANALOGUE_HP_0, in hp_event()
578 snd_soc_update_bits(codec, WM8993_ANALOGUE_HP_0, in hp_event()
582 snd_soc_write(codec, WM8993_DC_SERVO_0, 0); in hp_event()
584 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_1, in hp_event()
596 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in earpiece_event() local
597 u16 reg = snd_soc_read(codec, WM8993_ANTIPOP1) & ~WM8993_HPOUT2_IN_ENA; in earpiece_event()
602 snd_soc_write(codec, WM8993_ANTIPOP1, reg); in earpiece_event()
607 snd_soc_write(codec, WM8993_ANTIPOP1, reg); in earpiece_event()
621 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in lineout_event() local
622 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in lineout_event()
651 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); in micbias_event() local
652 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in micbias_event()
670 void wm_hubs_update_class_w(struct snd_soc_codec *codec) in wm_hubs_update_class_w() argument
672 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_update_class_w()
675 if (!wm_hubs_dac_hp_direct(codec)) in wm_hubs_update_class_w()
678 if (hubs->check_class_w_digital && !hubs->check_class_w_digital(codec)) in wm_hubs_update_class_w()
681 dev_vdbg(codec->dev, "Class W %s\n", enable ? "enabled" : "disabled"); in wm_hubs_update_class_w()
683 snd_soc_update_bits(codec, WM8993_CLASS_W_0, in wm_hubs_update_class_w()
686 snd_soc_write(codec, WM8993_LEFT_OUTPUT_VOLUME, in wm_hubs_update_class_w()
687 snd_soc_read(codec, WM8993_LEFT_OUTPUT_VOLUME)); in wm_hubs_update_class_w()
688 snd_soc_write(codec, WM8993_RIGHT_OUTPUT_VOLUME, in wm_hubs_update_class_w()
689 snd_soc_read(codec, WM8993_RIGHT_OUTPUT_VOLUME)); in wm_hubs_update_class_w()
700 struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kcontrol); in class_w_put_volsw() local
705 wm_hubs_update_class_w(codec); in class_w_put_volsw()
720 struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kcontrol); in class_w_put_double() local
725 wm_hubs_update_class_w(codec); in class_w_put_double()
1116 int wm_hubs_add_analogue_controls(struct snd_soc_codec *codec) in wm_hubs_add_analogue_controls() argument
1118 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); in wm_hubs_add_analogue_controls()
1121 snd_soc_update_bits(codec, WM8993_LEFT_LINE_INPUT_1_2_VOLUME, in wm_hubs_add_analogue_controls()
1123 snd_soc_update_bits(codec, WM8993_RIGHT_LINE_INPUT_1_2_VOLUME, in wm_hubs_add_analogue_controls()
1125 snd_soc_update_bits(codec, WM8993_LEFT_LINE_INPUT_3_4_VOLUME, in wm_hubs_add_analogue_controls()
1127 snd_soc_update_bits(codec, WM8993_RIGHT_LINE_INPUT_3_4_VOLUME, in wm_hubs_add_analogue_controls()
1130 snd_soc_update_bits(codec, WM8993_SPEAKER_VOLUME_LEFT, in wm_hubs_add_analogue_controls()
1132 snd_soc_update_bits(codec, WM8993_SPEAKER_VOLUME_RIGHT, in wm_hubs_add_analogue_controls()
1135 snd_soc_update_bits(codec, WM8993_LEFT_OUTPUT_VOLUME, in wm_hubs_add_analogue_controls()
1138 snd_soc_update_bits(codec, WM8993_RIGHT_OUTPUT_VOLUME, in wm_hubs_add_analogue_controls()
1142 snd_soc_update_bits(codec, WM8993_LEFT_OPGA_VOLUME, in wm_hubs_add_analogue_controls()
1145 snd_soc_update_bits(codec, WM8993_RIGHT_OPGA_VOLUME, in wm_hubs_add_analogue_controls()
1149 snd_soc_add_codec_controls(codec, analogue_snd_controls, in wm_hubs_add_analogue_controls()
1158 int wm_hubs_add_analogue_routes(struct snd_soc_codec *codec, in wm_hubs_add_analogue_routes() argument
1161 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_add_analogue_routes()
1162 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); in wm_hubs_add_analogue_routes()
1164 hubs->codec = codec; in wm_hubs_add_analogue_routes()
1194 int wm_hubs_handle_analogue_pdata(struct snd_soc_codec *codec, in wm_hubs_handle_analogue_pdata() argument
1201 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_handle_analogue_pdata()
1209 snd_soc_update_bits(codec, WM8993_LINE_MIXER1, in wm_hubs_handle_analogue_pdata()
1213 snd_soc_update_bits(codec, WM8993_LINE_MIXER2, in wm_hubs_handle_analogue_pdata()
1218 snd_soc_update_bits(codec, WM8993_ANTIPOP1, in wm_hubs_handle_analogue_pdata()
1223 snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, in wm_hubs_handle_analogue_pdata()
1227 snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, in wm_hubs_handle_analogue_pdata()
1230 snd_soc_update_bits(codec, WM8993_MICBIAS, in wm_hubs_handle_analogue_pdata()
1242 void wm_hubs_vmid_ena(struct snd_soc_codec *codec) in wm_hubs_vmid_ena() argument
1244 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_vmid_ena()
1254 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_3, val, val); in wm_hubs_vmid_ena()
1258 void wm_hubs_set_bias_level(struct snd_soc_codec *codec, in wm_hubs_set_bias_level() argument
1261 struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); in wm_hubs_set_bias_level()
1267 snd_soc_update_bits(codec, WM8993_INPUTS_CLAMP_REG, in wm_hubs_set_bias_level()
1294 snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_3, in wm_hubs_set_bias_level()
1298 snd_soc_update_bits(codec, WM8993_INPUTS_CLAMP_REG, in wm_hubs_set_bias_level()