Lines Matching refs:chip

101 static void wm8776_write_spi(struct oxygen *chip,  in wm8776_write_spi()  argument
104 oxygen_write_spi(chip, OXYGEN_SPI_TRIGGER | in wm8776_write_spi()
112 static void wm8776_write_i2c(struct oxygen *chip, in wm8776_write_i2c() argument
115 oxygen_write_i2c(chip, I2C_DEVICE_WM8776, in wm8776_write_i2c()
119 static void wm8776_write(struct oxygen *chip, in wm8776_write() argument
122 struct xonar_wm87x6 *data = chip->model_data; in wm8776_write()
124 if ((chip->model.function_flags & OXYGEN_FUNCTION_2WIRE_SPI_MASK) == in wm8776_write()
126 wm8776_write_spi(chip, reg, value); in wm8776_write()
128 wm8776_write_i2c(chip, reg, value); in wm8776_write()
136 static void wm8776_write_cached(struct oxygen *chip, in wm8776_write_cached() argument
139 struct xonar_wm87x6 *data = chip->model_data; in wm8776_write_cached()
143 wm8776_write(chip, reg, value); in wm8776_write_cached()
146 static void wm8766_write(struct oxygen *chip, in wm8766_write() argument
149 struct xonar_wm87x6 *data = chip->model_data; in wm8766_write()
151 oxygen_write_spi(chip, OXYGEN_SPI_TRIGGER | in wm8766_write()
165 static void wm8766_write_cached(struct oxygen *chip, in wm8766_write_cached() argument
168 struct xonar_wm87x6 *data = chip->model_data; in wm8766_write_cached()
172 wm8766_write(chip, reg, value); in wm8766_write_cached()
175 static void wm8776_registers_init(struct oxygen *chip) in wm8776_registers_init() argument
177 struct xonar_wm87x6 *data = chip->model_data; in wm8776_registers_init()
179 wm8776_write(chip, WM8776_RESET, 0); in wm8776_registers_init()
180 wm8776_write(chip, WM8776_PHASESWAP, WM8776_PH_MASK); in wm8776_registers_init()
181 wm8776_write(chip, WM8776_DACCTRL1, WM8776_DZCEN | in wm8776_registers_init()
183 wm8776_write(chip, WM8776_DACMUTE, chip->dac_mute ? WM8776_DMUTE : 0); in wm8776_registers_init()
184 wm8776_write(chip, WM8776_DACIFCTRL, in wm8776_registers_init()
186 wm8776_write(chip, WM8776_ADCIFCTRL, in wm8776_registers_init()
188 wm8776_write(chip, WM8776_MSTRCTRL, data->wm8776_regs[WM8776_MSTRCTRL]); in wm8776_registers_init()
189 wm8776_write(chip, WM8776_PWRDOWN, data->wm8776_regs[WM8776_PWRDOWN]); in wm8776_registers_init()
190 wm8776_write(chip, WM8776_HPLVOL, data->wm8776_regs[WM8776_HPLVOL]); in wm8776_registers_init()
191 wm8776_write(chip, WM8776_HPRVOL, data->wm8776_regs[WM8776_HPRVOL] | in wm8776_registers_init()
193 wm8776_write(chip, WM8776_ADCLVOL, data->wm8776_regs[WM8776_ADCLVOL]); in wm8776_registers_init()
194 wm8776_write(chip, WM8776_ADCRVOL, data->wm8776_regs[WM8776_ADCRVOL]); in wm8776_registers_init()
195 wm8776_write(chip, WM8776_ADCMUX, data->wm8776_regs[WM8776_ADCMUX]); in wm8776_registers_init()
196 wm8776_write(chip, WM8776_DACLVOL, chip->dac_volume[0]); in wm8776_registers_init()
197 wm8776_write(chip, WM8776_DACRVOL, chip->dac_volume[1] | WM8776_UPDATE); in wm8776_registers_init()
200 static void wm8766_registers_init(struct oxygen *chip) in wm8766_registers_init() argument
202 struct xonar_wm87x6 *data = chip->model_data; in wm8766_registers_init()
204 wm8766_write(chip, WM8766_RESET, 0); in wm8766_registers_init()
205 wm8766_write(chip, WM8766_DAC_CTRL, data->wm8766_regs[WM8766_DAC_CTRL]); in wm8766_registers_init()
206 wm8766_write(chip, WM8766_INT_CTRL, WM8766_FMT_LJUST | WM8766_IWL_24); in wm8766_registers_init()
207 wm8766_write(chip, WM8766_DAC_CTRL2, in wm8766_registers_init()
208 WM8766_ZCD | (chip->dac_mute ? WM8766_DMUTE_MASK : 0)); in wm8766_registers_init()
209 wm8766_write(chip, WM8766_LDA1, chip->dac_volume[2]); in wm8766_registers_init()
210 wm8766_write(chip, WM8766_RDA1, chip->dac_volume[3]); in wm8766_registers_init()
211 wm8766_write(chip, WM8766_LDA2, chip->dac_volume[4]); in wm8766_registers_init()
212 wm8766_write(chip, WM8766_RDA2, chip->dac_volume[5]); in wm8766_registers_init()
213 wm8766_write(chip, WM8766_LDA3, chip->dac_volume[6]); in wm8766_registers_init()
214 wm8766_write(chip, WM8766_RDA3, chip->dac_volume[7] | WM8766_UPDATE); in wm8766_registers_init()
217 static void wm8776_init(struct oxygen *chip) in wm8776_init() argument
219 struct xonar_wm87x6 *data = chip->model_data; in wm8776_init()
231 wm8776_registers_init(chip); in wm8776_init()
234 static void wm8766_init(struct oxygen *chip) in wm8766_init() argument
236 struct xonar_wm87x6 *data = chip->model_data; in wm8766_init()
240 wm8766_registers_init(chip); in wm8766_init()
243 static void xonar_ds_handle_hp_jack(struct oxygen *chip) in xonar_ds_handle_hp_jack() argument
245 struct xonar_wm87x6 *data = chip->model_data; in xonar_ds_handle_hp_jack()
249 mutex_lock(&chip->mutex); in xonar_ds_handle_hp_jack()
251 hp_plugged = !(oxygen_read16(chip, OXYGEN_GPIO_DATA) & in xonar_ds_handle_hp_jack()
254 oxygen_write16_masked(chip, OXYGEN_GPIO_DATA, in xonar_ds_handle_hp_jack()
261 wm8766_write_cached(chip, WM8766_DAC_CTRL, reg); in xonar_ds_handle_hp_jack()
265 mutex_unlock(&chip->mutex); in xonar_ds_handle_hp_jack()
268 static void xonar_ds_init(struct oxygen *chip) in xonar_ds_init() argument
270 struct xonar_wm87x6 *data = chip->model_data; in xonar_ds_init()
275 wm8776_init(chip); in xonar_ds_init()
276 wm8766_init(chip); in xonar_ds_init()
278 oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, in xonar_ds_init()
280 oxygen_clear_bits16(chip, OXYGEN_GPIO_CONTROL, in xonar_ds_init()
282 oxygen_set_bits16(chip, OXYGEN_GPIO_DATA, GPIO_DS_INPUT_ROUTE); in xonar_ds_init()
283 oxygen_set_bits16(chip, OXYGEN_GPIO_INTERRUPT_MASK, GPIO_DS_HP_DETECT); in xonar_ds_init()
284 chip->interrupt_mask |= OXYGEN_INT_GPIO; in xonar_ds_init()
286 xonar_enable_output(chip); in xonar_ds_init()
288 snd_jack_new(chip->card, "Headphone", in xonar_ds_init()
290 xonar_ds_handle_hp_jack(chip); in xonar_ds_init()
292 snd_component_add(chip->card, "WM8776"); in xonar_ds_init()
293 snd_component_add(chip->card, "WM8766"); in xonar_ds_init()
296 static void xonar_hdav_slim_init(struct oxygen *chip) in xonar_hdav_slim_init() argument
298 struct xonar_wm87x6 *data = chip->model_data; in xonar_hdav_slim_init()
303 wm8776_init(chip); in xonar_hdav_slim_init()
305 oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, in xonar_hdav_slim_init()
310 xonar_hdmi_init(chip, &data->hdmi); in xonar_hdav_slim_init()
311 xonar_enable_output(chip); in xonar_hdav_slim_init()
313 snd_component_add(chip->card, "WM8776"); in xonar_hdav_slim_init()
316 static void xonar_ds_cleanup(struct oxygen *chip) in xonar_ds_cleanup() argument
318 xonar_disable_output(chip); in xonar_ds_cleanup()
319 wm8776_write(chip, WM8776_RESET, 0); in xonar_ds_cleanup()
322 static void xonar_hdav_slim_cleanup(struct oxygen *chip) in xonar_hdav_slim_cleanup() argument
324 xonar_hdmi_cleanup(chip); in xonar_hdav_slim_cleanup()
325 xonar_disable_output(chip); in xonar_hdav_slim_cleanup()
326 wm8776_write(chip, WM8776_RESET, 0); in xonar_hdav_slim_cleanup()
330 static void xonar_ds_suspend(struct oxygen *chip) in xonar_ds_suspend() argument
332 xonar_ds_cleanup(chip); in xonar_ds_suspend()
335 static void xonar_hdav_slim_suspend(struct oxygen *chip) in xonar_hdav_slim_suspend() argument
337 xonar_hdav_slim_cleanup(chip); in xonar_hdav_slim_suspend()
340 static void xonar_ds_resume(struct oxygen *chip) in xonar_ds_resume() argument
342 wm8776_registers_init(chip); in xonar_ds_resume()
343 wm8766_registers_init(chip); in xonar_ds_resume()
344 xonar_enable_output(chip); in xonar_ds_resume()
345 xonar_ds_handle_hp_jack(chip); in xonar_ds_resume()
348 static void xonar_hdav_slim_resume(struct oxygen *chip) in xonar_hdav_slim_resume() argument
350 struct xonar_wm87x6 *data = chip->model_data; in xonar_hdav_slim_resume()
352 wm8776_registers_init(chip); in xonar_hdav_slim_resume()
353 xonar_hdmi_resume(chip, &data->hdmi); in xonar_hdav_slim_resume()
354 xonar_enable_output(chip); in xonar_hdav_slim_resume()
378 static void set_wm87x6_dac_params(struct oxygen *chip, in set_wm87x6_dac_params() argument
383 static void set_wm8776_adc_params(struct oxygen *chip, in set_wm8776_adc_params() argument
391 wm8776_write_cached(chip, WM8776_MSTRCTRL, reg); in set_wm8776_adc_params()
394 static void set_hdav_slim_dac_params(struct oxygen *chip, in set_hdav_slim_dac_params() argument
397 struct xonar_wm87x6 *data = chip->model_data; in set_hdav_slim_dac_params()
399 xonar_set_hdmi_params(chip, &data->hdmi, params); in set_hdav_slim_dac_params()
402 static void update_wm8776_volume(struct oxygen *chip) in update_wm8776_volume() argument
404 struct xonar_wm87x6 *data = chip->model_data; in update_wm8776_volume()
407 if (chip->dac_volume[0] == chip->dac_volume[1]) { in update_wm8776_volume()
408 if (chip->dac_volume[0] != data->wm8776_regs[WM8776_DACLVOL] || in update_wm8776_volume()
409 chip->dac_volume[1] != data->wm8776_regs[WM8776_DACRVOL]) { in update_wm8776_volume()
410 wm8776_write(chip, WM8776_DACMASTER, in update_wm8776_volume()
411 chip->dac_volume[0] | WM8776_UPDATE); in update_wm8776_volume()
412 data->wm8776_regs[WM8776_DACLVOL] = chip->dac_volume[0]; in update_wm8776_volume()
413 data->wm8776_regs[WM8776_DACRVOL] = chip->dac_volume[0]; in update_wm8776_volume()
416 to_change = (chip->dac_volume[0] != in update_wm8776_volume()
418 to_change |= (chip->dac_volume[1] != in update_wm8776_volume()
421 wm8776_write(chip, WM8776_DACLVOL, chip->dac_volume[0] | in update_wm8776_volume()
424 wm8776_write(chip, WM8776_DACRVOL, in update_wm8776_volume()
425 chip->dac_volume[1] | WM8776_UPDATE); in update_wm8776_volume()
429 static void update_wm87x6_volume(struct oxygen *chip) in update_wm87x6_volume() argument
436 struct xonar_wm87x6 *data = chip->model_data; in update_wm87x6_volume()
440 update_wm8776_volume(chip); in update_wm87x6_volume()
441 if (chip->dac_volume[2] == chip->dac_volume[3] && in update_wm87x6_volume()
442 chip->dac_volume[2] == chip->dac_volume[4] && in update_wm87x6_volume()
443 chip->dac_volume[2] == chip->dac_volume[5] && in update_wm87x6_volume()
444 chip->dac_volume[2] == chip->dac_volume[6] && in update_wm87x6_volume()
445 chip->dac_volume[2] == chip->dac_volume[7]) { in update_wm87x6_volume()
448 if (chip->dac_volume[2] != in update_wm87x6_volume()
452 wm8766_write(chip, WM8766_MASTDA, in update_wm87x6_volume()
453 chip->dac_volume[2] | WM8766_UPDATE); in update_wm87x6_volume()
456 chip->dac_volume[2]; in update_wm87x6_volume()
461 to_change |= (chip->dac_volume[2 + i] != in update_wm87x6_volume()
465 wm8766_write(chip, wm8766_regs[i], in update_wm87x6_volume()
466 chip->dac_volume[2 + i] | in update_wm87x6_volume()
472 static void update_wm8776_mute(struct oxygen *chip) in update_wm8776_mute() argument
474 wm8776_write_cached(chip, WM8776_DACMUTE, in update_wm8776_mute()
475 chip->dac_mute ? WM8776_DMUTE : 0); in update_wm8776_mute()
478 static void update_wm87x6_mute(struct oxygen *chip) in update_wm87x6_mute() argument
480 update_wm8776_mute(chip); in update_wm87x6_mute()
481 wm8766_write_cached(chip, WM8766_DAC_CTRL2, WM8766_ZCD | in update_wm87x6_mute()
482 (chip->dac_mute ? WM8766_DMUTE_MASK : 0)); in update_wm87x6_mute()
485 static void update_wm8766_center_lfe_mix(struct oxygen *chip, bool mixed) in update_wm8766_center_lfe_mix() argument
487 struct xonar_wm87x6 *data = chip->model_data; in update_wm8766_center_lfe_mix()
500 wm8766_write_cached(chip, WM8766_DAC_CTRL, reg); in update_wm8766_center_lfe_mix()
503 static void xonar_ds_gpio_changed(struct oxygen *chip) in xonar_ds_gpio_changed() argument
505 xonar_ds_handle_hp_jack(chip); in xonar_ds_gpio_changed()
511 struct oxygen *chip = ctl->private_data; in wm8776_bit_switch_get() local
512 struct xonar_wm87x6 *data = chip->model_data; in wm8776_bit_switch_get()
525 struct oxygen *chip = ctl->private_data; in wm8776_bit_switch_put() local
526 struct xonar_wm87x6 *data = chip->model_data; in wm8776_bit_switch_put()
533 mutex_lock(&chip->mutex); in wm8776_bit_switch_put()
539 wm8776_write(chip, reg_index, reg_value); in wm8776_bit_switch_put()
540 mutex_unlock(&chip->mutex); in wm8776_bit_switch_put()
619 struct oxygen *chip = ctl->private_data; in wm8776_field_set_from_ctl() local
620 struct xonar_wm87x6 *data = chip->model_data; in wm8776_field_set_from_ctl()
647 wm8776_write_cached(chip, reg_index, reg_value); in wm8776_field_set_from_ctl()
652 struct oxygen *chip = ctl->private_data; in wm8776_field_set() local
660 mutex_lock(&chip->mutex); in wm8776_field_set()
666 mutex_unlock(&chip->mutex); in wm8776_field_set()
709 struct oxygen *chip = ctl->private_data; in wm8776_hp_vol_get() local
710 struct xonar_wm87x6 *data = chip->model_data; in wm8776_hp_vol_get()
712 mutex_lock(&chip->mutex); in wm8776_hp_vol_get()
717 mutex_unlock(&chip->mutex); in wm8776_hp_vol_get()
724 struct oxygen *chip = ctl->private_data; in wm8776_hp_vol_put() local
725 struct xonar_wm87x6 *data = chip->model_data; in wm8776_hp_vol_put()
728 mutex_lock(&chip->mutex); in wm8776_hp_vol_put()
737 wm8776_write(chip, WM8776_HPMASTER, in wm8776_hp_vol_put()
747 wm8776_write(chip, WM8776_HPLVOL, in wm8776_hp_vol_put()
752 wm8776_write(chip, WM8776_HPRVOL, in wm8776_hp_vol_put()
756 mutex_unlock(&chip->mutex); in wm8776_hp_vol_put()
763 struct oxygen *chip = ctl->private_data; in wm8776_input_mux_get() local
764 struct xonar_wm87x6 *data = chip->model_data; in wm8776_input_mux_get()
775 struct oxygen *chip = ctl->private_data; in wm8776_input_mux_put() local
776 struct xonar_wm87x6 *data = chip->model_data; in wm8776_input_mux_put()
782 mutex_lock(&chip->mutex); in wm8776_input_mux_put()
794 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in wm8776_input_mux_put()
801 oxygen_write16_masked(chip, OXYGEN_GPIO_DATA, in wm8776_input_mux_put()
804 wm8776_write(chip, WM8776_ADCMUX, reg); in wm8776_input_mux_put()
806 mutex_unlock(&chip->mutex); in wm8776_input_mux_put()
823 struct oxygen *chip = ctl->private_data; in wm8776_input_vol_get() local
824 struct xonar_wm87x6 *data = chip->model_data; in wm8776_input_vol_get()
826 mutex_lock(&chip->mutex); in wm8776_input_vol_get()
831 mutex_unlock(&chip->mutex); in wm8776_input_vol_get()
838 struct oxygen *chip = ctl->private_data; in wm8776_input_vol_put() local
839 struct xonar_wm87x6 *data = chip->model_data; in wm8776_input_vol_put()
842 mutex_lock(&chip->mutex); in wm8776_input_vol_put()
847 wm8776_write_cached(chip, WM8776_ADCLVOL, in wm8776_input_vol_put()
849 wm8776_write_cached(chip, WM8776_ADCRVOL, in wm8776_input_vol_put()
851 mutex_unlock(&chip->mutex); in wm8776_input_vol_put()
868 struct oxygen *chip = ctl->private_data; in wm8776_level_control_get() local
869 struct xonar_wm87x6 *data = chip->model_data; in wm8776_level_control_get()
881 static void activate_control(struct oxygen *chip, in activate_control() argument
892 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_INFO, &ctl->id); in activate_control()
899 struct oxygen *chip = ctl->private_data; in wm8776_level_control_put() local
900 struct xonar_wm87x6 *data = chip->model_data; in wm8776_level_control_put()
907 mutex_lock(&chip->mutex); in wm8776_level_control_put()
915 wm8776_write_cached(chip, WM8776_ALCCTRL2, in wm8776_level_control_put()
919 wm8776_write_cached(chip, WM8776_ALCCTRL1, in wm8776_level_control_put()
922 wm8776_write_cached(chip, WM8776_ALCCTRL2, in wm8776_level_control_put()
927 wm8776_write_cached(chip, WM8776_ALCCTRL1, in wm8776_level_control_put()
930 wm8776_write_cached(chip, WM8776_ALCCTRL2, in wm8776_level_control_put()
936 activate_control(chip, data->lc_controls[i], mode); in wm8776_level_control_put()
938 mutex_unlock(&chip->mutex); in wm8776_level_control_put()
953 struct oxygen *chip = ctl->private_data; in hpf_get() local
954 struct xonar_wm87x6 *data = chip->model_data; in hpf_get()
963 struct oxygen *chip = ctl->private_data; in hpf_put() local
964 struct xonar_wm87x6 *data = chip->model_data; in hpf_put()
968 mutex_lock(&chip->mutex); in hpf_put()
974 wm8776_write(chip, WM8776_ADCIFCTRL, reg); in hpf_put()
975 mutex_unlock(&chip->mutex); in hpf_put()
1166 static int add_lc_controls(struct oxygen *chip) in add_lc_controls() argument
1168 struct xonar_wm87x6 *data = chip->model_data; in add_lc_controls()
1175 ctl = snd_ctl_new1(&lc_controls[i], chip); in add_lc_controls()
1178 err = snd_ctl_add(chip->card, ctl); in add_lc_controls()
1186 static int xonar_ds_mixer_init(struct oxygen *chip) in xonar_ds_mixer_init() argument
1188 struct xonar_wm87x6 *data = chip->model_data; in xonar_ds_mixer_init()
1194 ctl = snd_ctl_new1(&ds_controls[i], chip); in xonar_ds_mixer_init()
1197 err = snd_ctl_add(chip->card, ctl); in xonar_ds_mixer_init()
1208 return add_lc_controls(chip); in xonar_ds_mixer_init()
1211 static int xonar_hdav_slim_mixer_init(struct oxygen *chip) in xonar_hdav_slim_mixer_init() argument
1218 ctl = snd_ctl_new1(&hdav_slim_controls[i], chip); in xonar_hdav_slim_mixer_init()
1221 err = snd_ctl_add(chip->card, ctl); in xonar_hdav_slim_mixer_init()
1226 return add_lc_controls(chip); in xonar_hdav_slim_mixer_init()
1229 static void dump_wm8776_registers(struct oxygen *chip, in dump_wm8776_registers() argument
1232 struct xonar_wm87x6 *data = chip->model_data; in dump_wm8776_registers()
1244 static void dump_wm87x6_registers(struct oxygen *chip, in dump_wm87x6_registers() argument
1247 struct xonar_wm87x6 *data = chip->model_data; in dump_wm87x6_registers()
1250 dump_wm8776_registers(chip, buffer); in dump_wm87x6_registers()
1259 .chip = "AV200",
1293 .chip = "AV200",
1323 int get_xonar_wm87x6_model(struct oxygen *chip, in get_xonar_wm87x6_model() argument
1328 chip->model = model_xonar_ds; in get_xonar_wm87x6_model()
1329 chip->model.shortname = "Xonar DS"; in get_xonar_wm87x6_model()
1332 chip->model = model_xonar_ds; in get_xonar_wm87x6_model()
1333 chip->model.shortname = "Xonar DSX"; in get_xonar_wm87x6_model()
1336 chip->model = model_xonar_hdav_slim; in get_xonar_wm87x6_model()