Lines Matching +full:clock +full:- +full:output +full:- +full:names
21 * --------
25 * SPI 0 -> WM8766 (surround, center/LFE, back)
26 * SPI 1 -> WM8776 (front, input)
28 * GPIO 4 <- headphone detect, 0 = plugged
29 * GPIO 6 -> route input jack to mic-in (0) or line-in (1)
30 * GPIO 7 -> enable output to front L/R speaker channels
31 * GPIO 8 -> enable output to other speaker channels and front panel headphone
35 * input 1 <- line
36 * input 2 <- mic
37 * input 3 <- front mic
38 * input 4 <- aux
43 * ------------------
47 * I²C <-> WM8776 (addr 0011010)
49 * GPIO 0 -> disable HDMI output
50 * GPIO 1 -> enable HP output
51 * GPIO 6 -> firmware EEPROM I²C clock
52 * GPIO 7 <-> firmware EEPROM I²C data
54 * UART <-> HDMI controller
58 * input 1 <- mic
59 * input 2 <- aux
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()
129 if (reg < ARRAY_SIZE(data->wm8776_regs)) { in wm8776_write()
132 data->wm8776_regs[reg] = value; in wm8776_write()
139 struct xonar_wm87x6 *data = chip->model_data; in wm8776_write_cached()
141 if (reg >= ARRAY_SIZE(data->wm8776_regs) || in wm8776_write_cached()
142 value != data->wm8776_regs[reg]) in wm8776_write_cached()
149 struct xonar_wm87x6 *data = chip->model_data; in wm8766_write()
157 if (reg < ARRAY_SIZE(data->wm8766_regs)) { in wm8766_write()
161 data->wm8766_regs[reg] = value; in wm8766_write()
168 struct xonar_wm87x6 *data = chip->model_data; in wm8766_write_cached()
170 if (reg >= ARRAY_SIZE(data->wm8766_regs) || in wm8766_write_cached()
171 value != data->wm8766_regs[reg]) in wm8766_write_cached()
177 struct xonar_wm87x6 *data = chip->model_data; in wm8776_registers_init()
183 wm8776_write(chip, WM8776_DACMUTE, chip->dac_mute ? WM8776_DMUTE : 0); in wm8776_registers_init()
187 data->wm8776_regs[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()
202 struct xonar_wm87x6 *data = chip->model_data; in wm8766_registers_init()
205 wm8766_write(chip, WM8766_DAC_CTRL, data->wm8766_regs[WM8766_DAC_CTRL]); 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()
219 struct xonar_wm87x6 *data = chip->model_data; in wm8776_init()
221 data->wm8776_regs[WM8776_HPLVOL] = (0x79 - 60) | WM8776_HPZCEN; in wm8776_init()
222 data->wm8776_regs[WM8776_HPRVOL] = (0x79 - 60) | WM8776_HPZCEN; in wm8776_init()
223 data->wm8776_regs[WM8776_ADCIFCTRL] = in wm8776_init()
225 data->wm8776_regs[WM8776_MSTRCTRL] = in wm8776_init()
227 data->wm8776_regs[WM8776_PWRDOWN] = WM8776_HPPD; in wm8776_init()
228 data->wm8776_regs[WM8776_ADCLVOL] = 0xa5 | WM8776_ZCA; in wm8776_init()
229 data->wm8776_regs[WM8776_ADCRVOL] = 0xa5 | WM8776_ZCA; in wm8776_init()
230 data->wm8776_regs[WM8776_ADCMUX] = 0x001; in wm8776_init()
236 struct xonar_wm87x6 *data = chip->model_data; in wm8766_init()
238 data->wm8766_regs[WM8766_DAC_CTRL] = in wm8766_init()
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()
258 reg = data->wm8766_regs[WM8766_DAC_CTRL] & ~WM8766_MUTEALL; in xonar_ds_handle_hp_jack()
263 snd_jack_report(data->hp_jack, hp_plugged ? SND_JACK_HEADPHONE : 0); in xonar_ds_handle_hp_jack()
265 mutex_unlock(&chip->mutex); in xonar_ds_handle_hp_jack()
270 struct xonar_wm87x6 *data = chip->model_data; in xonar_ds_init()
272 data->generic.anti_pop_delay = 300; in xonar_ds_init()
273 data->generic.output_enable_bit = GPIO_DS_OUTPUT_ENABLE; in xonar_ds_init()
284 chip->interrupt_mask |= OXYGEN_INT_GPIO; in xonar_ds_init()
288 snd_jack_new(chip->card, "Headphone", in xonar_ds_init()
289 SND_JACK_HEADPHONE, &data->hp_jack); 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()
298 struct xonar_wm87x6 *data = chip->model_data; in xonar_hdav_slim_init()
300 data->generic.anti_pop_delay = 300; in xonar_hdav_slim_init()
301 data->generic.output_enable_bit = GPIO_SLIM_OUTPUT_ENABLE; in xonar_hdav_slim_init()
310 xonar_hdmi_init(chip, &data->hdmi); in xonar_hdav_slim_init()
313 snd_component_add(chip->card, "WM8776"); in xonar_hdav_slim_init()
350 struct xonar_wm87x6 *data = chip->model_data; in xonar_hdav_slim_resume()
353 xonar_hdmi_resume(chip, &data->hdmi); in xonar_hdav_slim_resume()
361 hardware->rates = SNDRV_PCM_RATE_32000 | in wm8776_adc_hardware_filter()
367 hardware->rate_max = 96000; in wm8776_adc_hardware_filter()
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()
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()
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()
417 data->wm8776_regs[WM8776_DACLVOL]) << 0; in update_wm8776_volume()
418 to_change |= (chip->dac_volume[1] != in update_wm8776_volume()
419 data->wm8776_regs[WM8776_DACLVOL]) << 1; in update_wm8776_volume()
421 wm8776_write(chip, WM8776_DACLVOL, chip->dac_volume[0] | in update_wm8776_volume()
425 chip->dac_volume[1] | WM8776_UPDATE); in update_wm8776_volume()
436 struct xonar_wm87x6 *data = chip->model_data; 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()
449 data->wm8766_regs[wm8766_regs[i]]) in update_wm87x6_volume()
453 chip->dac_volume[2] | WM8766_UPDATE); in update_wm87x6_volume()
455 data->wm8766_regs[wm8766_regs[i]] = 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()
462 data->wm8766_regs[wm8766_regs[i]]) << i; in update_wm87x6_volume()
466 chip->dac_volume[2 + i] | in update_wm87x6_volume()
475 chip->dac_mute ? WM8776_DMUTE : 0); in update_wm8776_mute()
482 (chip->dac_mute ? WM8766_DMUTE_MASK : 0)); in update_wm87x6_mute()
487 struct xonar_wm87x6 *data = chip->model_data; in update_wm8766_center_lfe_mix()
494 reg = data->wm8766_regs[WM8766_DAC_CTRL] & in update_wm8766_center_lfe_mix()
511 struct oxygen *chip = ctl->private_data; in wm8776_bit_switch_get()
512 struct xonar_wm87x6 *data = chip->model_data; in wm8776_bit_switch_get()
513 u16 bit = ctl->private_value & 0xffff; in wm8776_bit_switch_get()
514 unsigned int reg_index = (ctl->private_value >> 16) & 0xff; in wm8776_bit_switch_get()
515 bool invert = (ctl->private_value >> 24) & 1; in wm8776_bit_switch_get()
517 value->value.integer.value[0] = in wm8776_bit_switch_get()
518 ((data->wm8776_regs[reg_index] & bit) != 0) ^ invert; in wm8776_bit_switch_get()
525 struct oxygen *chip = ctl->private_data; in wm8776_bit_switch_put()
526 struct xonar_wm87x6 *data = chip->model_data; in wm8776_bit_switch_put()
527 u16 bit = ctl->private_value & 0xffff; in wm8776_bit_switch_put()
529 unsigned int reg_index = (ctl->private_value >> 16) & 0xff; in wm8776_bit_switch_put()
530 bool invert = (ctl->private_value >> 24) & 1; in wm8776_bit_switch_put()
533 mutex_lock(&chip->mutex); in wm8776_bit_switch_put()
534 reg_value = data->wm8776_regs[reg_index] & ~bit; in wm8776_bit_switch_put()
535 if (value->value.integer.value[0] ^ invert) in wm8776_bit_switch_put()
537 changed = reg_value != data->wm8776_regs[reg_index]; in wm8776_bit_switch_put()
540 mutex_unlock(&chip->mutex); in wm8776_bit_switch_put()
578 const char *const *names; in wm8776_field_enum_info() local
580 max = (ctl->private_value >> 12) & 0xf; in wm8776_field_enum_info()
581 switch ((ctl->private_value >> 24) & 0x1f) { in wm8776_field_enum_info()
583 names = hld; in wm8776_field_enum_info()
586 if (((ctl->private_value >> 20) & 0xf) == 0) { in wm8776_field_enum_info()
587 if (ctl->private_value & LC_CONTROL_LIMITER) in wm8776_field_enum_info()
588 names = atk_lim; in wm8776_field_enum_info()
590 names = atk_alc; in wm8776_field_enum_info()
592 if (ctl->private_value & LC_CONTROL_LIMITER) in wm8776_field_enum_info()
593 names = dcy_lim; in wm8776_field_enum_info()
595 names = dcy_alc; in wm8776_field_enum_info()
599 names = tranwin; in wm8776_field_enum_info()
602 return -ENXIO; in wm8776_field_enum_info()
604 return snd_ctl_enum_info(info, 1, max + 1, names); in wm8776_field_enum_info()
610 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in wm8776_field_volume_info()
611 info->count = 1; in wm8776_field_volume_info()
612 info->value.integer.min = (ctl->private_value >> 8) & 0xf; in wm8776_field_volume_info()
613 info->value.integer.max = (ctl->private_value >> 12) & 0xf; in wm8776_field_volume_info()
619 struct oxygen *chip = ctl->private_data; in wm8776_field_set_from_ctl()
620 struct xonar_wm87x6 *data = chip->model_data; in wm8776_field_set_from_ctl()
626 if ((data->wm8776_regs[WM8776_ALCCTRL1] & WM8776_LCSEL_MASK) == in wm8776_field_set_from_ctl()
631 if (!(ctl->private_value & mode)) in wm8776_field_set_from_ctl()
634 value = ctl->private_value & 0xf; in wm8776_field_set_from_ctl()
635 min = (ctl->private_value >> 8) & 0xf; in wm8776_field_set_from_ctl()
636 max = (ctl->private_value >> 12) & 0xf; in wm8776_field_set_from_ctl()
637 mask = (ctl->private_value >> 16) & 0xf; in wm8776_field_set_from_ctl()
638 shift = (ctl->private_value >> 20) & 0xf; in wm8776_field_set_from_ctl()
639 reg_index = (ctl->private_value >> 24) & 0x1f; in wm8776_field_set_from_ctl()
640 invert = (ctl->private_value >> 29) & 0x1; in wm8776_field_set_from_ctl()
643 value = max - (value - min); in wm8776_field_set_from_ctl()
644 reg_value = data->wm8776_regs[reg_index]; in wm8776_field_set_from_ctl()
652 struct oxygen *chip = ctl->private_data; in wm8776_field_set()
656 min = (ctl->private_value >> 8) & 0xf; in wm8776_field_set()
657 max = (ctl->private_value >> 12) & 0xf; in wm8776_field_set()
659 return -EINVAL; in wm8776_field_set()
660 mutex_lock(&chip->mutex); in wm8776_field_set()
661 changed = value != (ctl->private_value & 0xf); in wm8776_field_set()
663 ctl->private_value = (ctl->private_value & ~0xf) | value; in wm8776_field_set()
666 mutex_unlock(&chip->mutex); in wm8776_field_set()
673 value->value.enumerated.item[0] = ctl->private_value & 0xf; in wm8776_field_enum_get()
680 value->value.integer.value[0] = ctl->private_value & 0xf; in wm8776_field_volume_get()
687 return wm8776_field_set(ctl, value->value.enumerated.item[0]); in wm8776_field_enum_put()
693 return wm8776_field_set(ctl, value->value.integer.value[0]); in wm8776_field_volume_put()
699 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in wm8776_hp_vol_info()
700 info->count = 2; in wm8776_hp_vol_info()
701 info->value.integer.min = 0x79 - 60; in wm8776_hp_vol_info()
702 info->value.integer.max = 0x7f; in wm8776_hp_vol_info()
709 struct oxygen *chip = ctl->private_data; in wm8776_hp_vol_get()
710 struct xonar_wm87x6 *data = chip->model_data; in wm8776_hp_vol_get()
712 mutex_lock(&chip->mutex); in wm8776_hp_vol_get()
713 value->value.integer.value[0] = in wm8776_hp_vol_get()
714 data->wm8776_regs[WM8776_HPLVOL] & WM8776_HPATT_MASK; in wm8776_hp_vol_get()
715 value->value.integer.value[1] = in wm8776_hp_vol_get()
716 data->wm8776_regs[WM8776_HPRVOL] & WM8776_HPATT_MASK; 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()
725 struct xonar_wm87x6 *data = chip->model_data; in wm8776_hp_vol_put()
728 mutex_lock(&chip->mutex); in wm8776_hp_vol_put()
729 to_update = (value->value.integer.value[0] != in wm8776_hp_vol_put()
730 (data->wm8776_regs[WM8776_HPLVOL] & WM8776_HPATT_MASK)) in wm8776_hp_vol_put()
732 to_update |= (value->value.integer.value[1] != in wm8776_hp_vol_put()
733 (data->wm8776_regs[WM8776_HPRVOL] & WM8776_HPATT_MASK)) in wm8776_hp_vol_put()
735 if (value->value.integer.value[0] == value->value.integer.value[1]) { in wm8776_hp_vol_put()
738 value->value.integer.value[0] | in wm8776_hp_vol_put()
740 data->wm8776_regs[WM8776_HPLVOL] = in wm8776_hp_vol_put()
741 value->value.integer.value[0] | WM8776_HPZCEN; in wm8776_hp_vol_put()
742 data->wm8776_regs[WM8776_HPRVOL] = in wm8776_hp_vol_put()
743 value->value.integer.value[0] | WM8776_HPZCEN; in wm8776_hp_vol_put()
748 value->value.integer.value[0] | in wm8776_hp_vol_put()
753 value->value.integer.value[1] | 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()
764 struct xonar_wm87x6 *data = chip->model_data; in wm8776_input_mux_get()
765 unsigned int mux_bit = ctl->private_value; in wm8776_input_mux_get()
767 value->value.integer.value[0] = in wm8776_input_mux_get()
768 !!(data->wm8776_regs[WM8776_ADCMUX] & mux_bit); in wm8776_input_mux_get()
775 struct oxygen *chip = ctl->private_data; in wm8776_input_mux_put()
776 struct xonar_wm87x6 *data = chip->model_data; in wm8776_input_mux_put()
778 unsigned int mux_bit = ctl->private_value; in wm8776_input_mux_put()
782 mutex_lock(&chip->mutex); in wm8776_input_mux_put()
783 reg = data->wm8776_regs[WM8776_ADCMUX]; in wm8776_input_mux_put()
784 if (value->value.integer.value[0]) { in wm8776_input_mux_put()
786 /* line-in and mic-in are exclusive */ in wm8776_input_mux_put()
791 other_ctl = data->line_adcmux_control; in wm8776_input_mux_put()
793 other_ctl = data->mic_adcmux_control; in wm8776_input_mux_put()
794 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in wm8776_input_mux_put()
795 &other_ctl->id); in wm8776_input_mux_put()
799 changed = reg != data->wm8776_regs[WM8776_ADCMUX]; in wm8776_input_mux_put()
806 mutex_unlock(&chip->mutex); in wm8776_input_mux_put()
813 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in wm8776_input_vol_info()
814 info->count = 2; in wm8776_input_vol_info()
815 info->value.integer.min = 0xa5; in wm8776_input_vol_info()
816 info->value.integer.max = 0xff; in wm8776_input_vol_info()
823 struct oxygen *chip = ctl->private_data; in wm8776_input_vol_get()
824 struct xonar_wm87x6 *data = chip->model_data; in wm8776_input_vol_get()
826 mutex_lock(&chip->mutex); in wm8776_input_vol_get()
827 value->value.integer.value[0] = in wm8776_input_vol_get()
828 data->wm8776_regs[WM8776_ADCLVOL] & WM8776_AGMASK; in wm8776_input_vol_get()
829 value->value.integer.value[1] = in wm8776_input_vol_get()
830 data->wm8776_regs[WM8776_ADCRVOL] & WM8776_AGMASK; 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()
839 struct xonar_wm87x6 *data = chip->model_data; in wm8776_input_vol_put()
842 mutex_lock(&chip->mutex); in wm8776_input_vol_put()
843 changed = (value->value.integer.value[0] != in wm8776_input_vol_put()
844 (data->wm8776_regs[WM8776_ADCLVOL] & WM8776_AGMASK)) || in wm8776_input_vol_put()
845 (value->value.integer.value[1] != in wm8776_input_vol_put()
846 (data->wm8776_regs[WM8776_ADCRVOL] & WM8776_AGMASK)); in wm8776_input_vol_put()
848 value->value.integer.value[0] | WM8776_ZCA); in wm8776_input_vol_put()
850 value->value.integer.value[1] | WM8776_ZCA); in wm8776_input_vol_put()
851 mutex_unlock(&chip->mutex); in wm8776_input_vol_put()
858 static const char *const names[3] = { in wm8776_level_control_info() local
862 return snd_ctl_enum_info(info, 1, 3, names); in wm8776_level_control_info()
868 struct oxygen *chip = ctl->private_data; in wm8776_level_control_get()
869 struct xonar_wm87x6 *data = chip->model_data; in wm8776_level_control_get()
871 if (!(data->wm8776_regs[WM8776_ALCCTRL2] & WM8776_LCEN)) in wm8776_level_control_get()
872 value->value.enumerated.item[0] = 0; in wm8776_level_control_get()
873 else if ((data->wm8776_regs[WM8776_ALCCTRL1] & WM8776_LCSEL_MASK) == in wm8776_level_control_get()
875 value->value.enumerated.item[0] = 1; in wm8776_level_control_get()
877 value->value.enumerated.item[0] = 2; in wm8776_level_control_get()
886 if (ctl->private_value & mode) in activate_control()
890 if ((ctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_INACTIVE) != access) { in activate_control()
891 ctl->vd[0].access ^= SNDRV_CTL_ELEM_ACCESS_INACTIVE; in activate_control()
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()
900 struct xonar_wm87x6 *data = chip->model_data; in wm8776_level_control_put()
905 if (value->value.enumerated.item[0] >= 3) in wm8776_level_control_put()
906 return -EINVAL; in wm8776_level_control_put()
907 mutex_lock(&chip->mutex); in wm8776_level_control_put()
908 changed = value->value.enumerated.item[0] != ctl->private_value; in wm8776_level_control_put()
910 ctl->private_value = value->value.enumerated.item[0]; in wm8776_level_control_put()
911 ctrl1 = data->wm8776_regs[WM8776_ALCCTRL1]; in wm8776_level_control_put()
912 ctrl2 = data->wm8776_regs[WM8776_ALCCTRL2]; in wm8776_level_control_put()
913 switch (value->value.enumerated.item[0]) { in wm8776_level_control_put()
935 for (i = 0; i < ARRAY_SIZE(data->lc_controls); ++i) 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()
944 static const char *const names[2] = { in hpf_info() local
945 "None", "High-pass Filter" in hpf_info()
948 return snd_ctl_enum_info(info, 1, 2, names); in hpf_info()
953 struct oxygen *chip = ctl->private_data; in hpf_get()
954 struct xonar_wm87x6 *data = chip->model_data; in hpf_get()
956 value->value.enumerated.item[0] = in hpf_get()
957 !(data->wm8776_regs[WM8776_ADCIFCTRL] & WM8776_ADCHPD); in hpf_get()
963 struct oxygen *chip = ctl->private_data; in hpf_put()
964 struct xonar_wm87x6 *data = chip->model_data; in hpf_put()
968 mutex_lock(&chip->mutex); in hpf_put()
969 reg = data->wm8776_regs[WM8776_ADCIFCTRL] & ~WM8776_ADCHPD; in hpf_put()
970 if (!value->value.enumerated.item[0]) in hpf_put()
972 changed = reg != data->wm8776_regs[WM8776_ADCIFCTRL]; in hpf_put()
975 mutex_unlock(&chip->mutex); in hpf_put()
1012 static const DECLARE_TLV_DB_SCALE(wm87x6_dac_db_scale, -6000, 50, 0);
1013 static const DECLARE_TLV_DB_SCALE(wm8776_adc_db_scale, -2100, 50, 0);
1014 static const DECLARE_TLV_DB_SCALE(wm8776_hp_db_scale, -6000, 100, 0);
1015 static const DECLARE_TLV_DB_SCALE(wm8776_lct_db_scale, -1600, 100, 0);
1017 static const DECLARE_TLV_DB_SCALE(wm8776_ngth_db_scale, -7800, 600, 0);
1018 static const DECLARE_TLV_DB_SCALE(wm8776_maxatten_lim_db_scale, -1200, 100, 0);
1019 static const DECLARE_TLV_DB_SCALE(wm8776_maxatten_alc_db_scale, -2100, 400, 0);
1168 struct xonar_wm87x6 *data = chip->model_data; in add_lc_controls()
1173 BUILD_BUG_ON(ARRAY_SIZE(lc_controls) != ARRAY_SIZE(data->lc_controls)); in add_lc_controls()
1177 return -ENOMEM; in add_lc_controls()
1178 err = snd_ctl_add(chip->card, ctl); in add_lc_controls()
1181 data->lc_controls[i] = ctl; in add_lc_controls()
1188 struct xonar_wm87x6 *data = chip->model_data; in xonar_ds_mixer_init()
1196 return -ENOMEM; in xonar_ds_mixer_init()
1197 err = snd_ctl_add(chip->card, ctl); in xonar_ds_mixer_init()
1200 if (!strcmp(ctl->id.name, "Line Capture Switch")) in xonar_ds_mixer_init()
1201 data->line_adcmux_control = ctl; in xonar_ds_mixer_init()
1202 else if (!strcmp(ctl->id.name, "Mic Capture Switch")) in xonar_ds_mixer_init()
1203 data->mic_adcmux_control = ctl; in xonar_ds_mixer_init()
1205 if (!data->line_adcmux_control || !data->mic_adcmux_control) in xonar_ds_mixer_init()
1206 return -ENXIO; in xonar_ds_mixer_init()
1220 return -ENOMEM; in xonar_hdav_slim_mixer_init()
1221 err = snd_ctl_add(chip->card, ctl); in xonar_hdav_slim_mixer_init()
1232 struct xonar_wm87x6 *data = chip->model_data; in dump_wm8776_registers()
1237 snd_iprintf(buffer, " %03x", data->wm8776_regs[i]); in dump_wm8776_registers()
1240 snd_iprintf(buffer, " %03x", data->wm8776_regs[i]); in dump_wm8776_registers()
1247 struct xonar_wm87x6 *data = chip->model_data; in dump_wm87x6_registers()
1253 snd_iprintf(buffer, " %03x", data->wm8766_regs[i]); in dump_wm87x6_registers()
1282 .dac_volume_min = 255 - 2*60,
1315 .dac_volume_min = 255 - 2*60,
1327 switch (id->subdevice) { in get_xonar_wm87x6_model()
1329 chip->model = model_xonar_ds; in get_xonar_wm87x6_model()
1332 chip->model = model_xonar_hdav_slim; in get_xonar_wm87x6_model()
1335 return -EINVAL; in get_xonar_wm87x6_model()