Lines Matching refs:chip

31 	struct oxygen *chip = ctl->private_data;  in dac_volume_info()  local
34 info->count = chip->model.dac_channels_mixer; in dac_volume_info()
35 info->value.integer.min = chip->model.dac_volume_min; in dac_volume_info()
36 info->value.integer.max = chip->model.dac_volume_max; in dac_volume_info()
43 struct oxygen *chip = ctl->private_data; in dac_volume_get() local
46 mutex_lock(&chip->mutex); in dac_volume_get()
47 for (i = 0; i < chip->model.dac_channels_mixer; ++i) in dac_volume_get()
48 value->value.integer.value[i] = chip->dac_volume[i]; in dac_volume_get()
49 mutex_unlock(&chip->mutex); in dac_volume_get()
56 struct oxygen *chip = ctl->private_data; in dac_volume_put() local
61 mutex_lock(&chip->mutex); in dac_volume_put()
62 for (i = 0; i < chip->model.dac_channels_mixer; ++i) in dac_volume_put()
63 if (value->value.integer.value[i] != chip->dac_volume[i]) { in dac_volume_put()
64 chip->dac_volume[i] = value->value.integer.value[i]; in dac_volume_put()
68 chip->model.update_dac_volume(chip); in dac_volume_put()
69 mutex_unlock(&chip->mutex); in dac_volume_put()
76 struct oxygen *chip = ctl->private_data; in dac_mute_get() local
78 mutex_lock(&chip->mutex); in dac_mute_get()
79 value->value.integer.value[0] = !chip->dac_mute; in dac_mute_get()
80 mutex_unlock(&chip->mutex); in dac_mute_get()
87 struct oxygen *chip = ctl->private_data; in dac_mute_put() local
90 mutex_lock(&chip->mutex); in dac_mute_put()
91 changed = !value->value.integer.value[0] != chip->dac_mute; in dac_mute_put()
93 chip->dac_mute = !value->value.integer.value[0]; in dac_mute_put()
94 chip->model.update_dac_mute(chip); in dac_mute_put()
96 mutex_unlock(&chip->mutex); in dac_mute_put()
100 static unsigned int upmix_item_count(struct oxygen *chip) in upmix_item_count() argument
102 if (chip->model.dac_channels_pcm < 8) in upmix_item_count()
104 else if (chip->model.update_center_lfe_mix) in upmix_item_count()
119 struct oxygen *chip = ctl->private_data; in upmix_info() local
120 unsigned int count = upmix_item_count(chip); in upmix_info()
127 struct oxygen *chip = ctl->private_data; in upmix_get() local
129 mutex_lock(&chip->mutex); in upmix_get()
130 value->value.enumerated.item[0] = chip->dac_routing; in upmix_get()
131 mutex_unlock(&chip->mutex); in upmix_get()
135 void oxygen_update_dac_routing(struct oxygen *chip) in oxygen_update_dac_routing() argument
168 channels = oxygen_read8(chip, OXYGEN_PLAY_CHANNELS) & in oxygen_update_dac_routing()
171 reg_value = reg_values[chip->dac_routing]; in oxygen_update_dac_routing()
183 if (chip->model.adjust_dac_routing) in oxygen_update_dac_routing()
184 reg_value = chip->model.adjust_dac_routing(chip, reg_value); in oxygen_update_dac_routing()
185 oxygen_write16_masked(chip, OXYGEN_PLAY_ROUTING, reg_value, in oxygen_update_dac_routing()
190 if (chip->model.update_center_lfe_mix) in oxygen_update_dac_routing()
191 chip->model.update_center_lfe_mix(chip, chip->dac_routing > 2); in oxygen_update_dac_routing()
197 struct oxygen *chip = ctl->private_data; in upmix_put() local
198 unsigned int count = upmix_item_count(chip); in upmix_put()
203 mutex_lock(&chip->mutex); in upmix_put()
204 changed = value->value.enumerated.item[0] != chip->dac_routing; in upmix_put()
206 chip->dac_routing = value->value.enumerated.item[0]; in upmix_put()
207 oxygen_update_dac_routing(chip); in upmix_put()
209 mutex_unlock(&chip->mutex); in upmix_put()
216 struct oxygen *chip = ctl->private_data; in spdif_switch_get() local
218 mutex_lock(&chip->mutex); in spdif_switch_get()
219 value->value.integer.value[0] = chip->spdif_playback_enable; in spdif_switch_get()
220 mutex_unlock(&chip->mutex); in spdif_switch_get()
246 void oxygen_update_spdif_source(struct oxygen *chip) in oxygen_update_spdif_source() argument
252 old_control = oxygen_read32(chip, OXYGEN_SPDIF_CONTROL); in oxygen_update_spdif_source()
253 old_routing = oxygen_read16(chip, OXYGEN_PLAY_ROUTING); in oxygen_update_spdif_source()
254 if (chip->pcm_active & (1 << PCM_SPDIF)) { in oxygen_update_spdif_source()
261 } else if ((chip->pcm_active & (1 << PCM_MULTICH)) && in oxygen_update_spdif_source()
262 chip->spdif_playback_enable) { in oxygen_update_spdif_source()
265 oxygen_rate = oxygen_read16(chip, OXYGEN_I2S_MULTICH_FORMAT) in oxygen_update_spdif_source()
276 oxygen_write32(chip, OXYGEN_SPDIF_CONTROL, in oxygen_update_spdif_source()
278 oxygen_write16(chip, OXYGEN_PLAY_ROUTING, new_routing); in oxygen_update_spdif_source()
281 oxygen_write32(chip, OXYGEN_SPDIF_OUTPUT_BITS, in oxygen_update_spdif_source()
283 ((chip->pcm_active & (1 << PCM_SPDIF)) ? in oxygen_update_spdif_source()
284 chip->spdif_pcm_bits : chip->spdif_bits)); in oxygen_update_spdif_source()
285 oxygen_write32(chip, OXYGEN_SPDIF_CONTROL, new_control); in oxygen_update_spdif_source()
291 struct oxygen *chip = ctl->private_data; in spdif_switch_put() local
294 mutex_lock(&chip->mutex); in spdif_switch_put()
295 changed = value->value.integer.value[0] != chip->spdif_playback_enable; in spdif_switch_put()
297 chip->spdif_playback_enable = !!value->value.integer.value[0]; in spdif_switch_put()
298 spin_lock_irq(&chip->reg_lock); in spdif_switch_put()
299 oxygen_update_spdif_source(chip); in spdif_switch_put()
300 spin_unlock_irq(&chip->reg_lock); in spdif_switch_put()
302 mutex_unlock(&chip->mutex); in spdif_switch_put()
335 static inline void write_spdif_bits(struct oxygen *chip, u32 bits) in write_spdif_bits() argument
337 oxygen_write32_masked(chip, OXYGEN_SPDIF_OUTPUT_BITS, bits, in write_spdif_bits()
349 struct oxygen *chip = ctl->private_data; in spdif_default_get() local
351 mutex_lock(&chip->mutex); in spdif_default_get()
352 oxygen_to_iec958(chip->spdif_bits, value); in spdif_default_get()
353 mutex_unlock(&chip->mutex); in spdif_default_get()
360 struct oxygen *chip = ctl->private_data; in spdif_default_put() local
365 mutex_lock(&chip->mutex); in spdif_default_put()
366 changed = new_bits != chip->spdif_bits; in spdif_default_put()
368 chip->spdif_bits = new_bits; in spdif_default_put()
369 if (!(chip->pcm_active & (1 << PCM_SPDIF))) in spdif_default_put()
370 write_spdif_bits(chip, new_bits); in spdif_default_put()
372 mutex_unlock(&chip->mutex); in spdif_default_put()
389 struct oxygen *chip = ctl->private_data; in spdif_pcm_get() local
391 mutex_lock(&chip->mutex); in spdif_pcm_get()
392 oxygen_to_iec958(chip->spdif_pcm_bits, value); in spdif_pcm_get()
393 mutex_unlock(&chip->mutex); in spdif_pcm_get()
400 struct oxygen *chip = ctl->private_data; in spdif_pcm_put() local
405 mutex_lock(&chip->mutex); in spdif_pcm_put()
406 changed = new_bits != chip->spdif_pcm_bits; in spdif_pcm_put()
408 chip->spdif_pcm_bits = new_bits; in spdif_pcm_put()
409 if (chip->pcm_active & (1 << PCM_SPDIF)) in spdif_pcm_put()
410 write_spdif_bits(chip, new_bits); in spdif_pcm_put()
412 mutex_unlock(&chip->mutex); in spdif_pcm_put()
429 struct oxygen *chip = ctl->private_data; in spdif_input_default_get() local
432 bits = oxygen_read32(chip, OXYGEN_SPDIF_INPUT_BITS); in spdif_input_default_get()
443 struct oxygen *chip = ctl->private_data; in spdif_bit_switch_get() local
447 !!(oxygen_read32(chip, OXYGEN_SPDIF_CONTROL) & bit); in spdif_bit_switch_get()
454 struct oxygen *chip = ctl->private_data; in spdif_bit_switch_put() local
459 spin_lock_irq(&chip->reg_lock); in spdif_bit_switch_put()
460 oldreg = oxygen_read32(chip, OXYGEN_SPDIF_CONTROL); in spdif_bit_switch_put()
467 oxygen_write32(chip, OXYGEN_SPDIF_CONTROL, newreg); in spdif_bit_switch_put()
468 spin_unlock_irq(&chip->reg_lock); in spdif_bit_switch_put()
485 struct oxygen *chip = ctl->private_data; in monitor_get() local
490 !!invert ^ !!(oxygen_read8(chip, OXYGEN_ADC_MONITOR) & bit); in monitor_get()
497 struct oxygen *chip = ctl->private_data; in monitor_put() local
503 spin_lock_irq(&chip->reg_lock); in monitor_put()
504 oldreg = oxygen_read8(chip, OXYGEN_ADC_MONITOR); in monitor_put()
511 oxygen_write8(chip, OXYGEN_ADC_MONITOR, newreg); in monitor_put()
512 spin_unlock_irq(&chip->reg_lock); in monitor_put()
519 struct oxygen *chip = ctl->private_data; in ac97_switch_get() local
526 mutex_lock(&chip->mutex); in ac97_switch_get()
527 reg = oxygen_read_ac97(chip, codec, index); in ac97_switch_get()
528 mutex_unlock(&chip->mutex); in ac97_switch_get()
536 static void mute_ac97_ctl(struct oxygen *chip, unsigned int control) in mute_ac97_ctl() argument
541 if (!chip->controls[control]) in mute_ac97_ctl()
543 priv_idx = chip->controls[control]->private_value & 0xff; in mute_ac97_ctl()
544 value = oxygen_read_ac97(chip, 0, priv_idx); in mute_ac97_ctl()
546 oxygen_write_ac97(chip, 0, priv_idx, value | 0x8000); in mute_ac97_ctl()
547 if (chip->model.ac97_switch) in mute_ac97_ctl()
548 chip->model.ac97_switch(chip, priv_idx, 0x8000); in mute_ac97_ctl()
549 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in mute_ac97_ctl()
550 &chip->controls[control]->id); in mute_ac97_ctl()
557 struct oxygen *chip = ctl->private_data; in ac97_switch_put() local
565 mutex_lock(&chip->mutex); in ac97_switch_put()
566 oldreg = oxygen_read_ac97(chip, codec, index); in ac97_switch_put()
574 oxygen_write_ac97(chip, codec, index, newreg); in ac97_switch_put()
575 if (codec == 0 && chip->model.ac97_switch) in ac97_switch_put()
576 chip->model.ac97_switch(chip, index, newreg & 0x8000); in ac97_switch_put()
578 oxygen_write_ac97_masked(chip, 0, CM9780_GPIO_STATUS, in ac97_switch_put()
582 mute_ac97_ctl(chip, CONTROL_MIC_CAPTURE_SWITCH); in ac97_switch_put()
583 mute_ac97_ctl(chip, CONTROL_CD_CAPTURE_SWITCH); in ac97_switch_put()
584 mute_ac97_ctl(chip, CONTROL_AUX_CAPTURE_SWITCH); in ac97_switch_put()
589 mute_ac97_ctl(chip, CONTROL_LINE_CAPTURE_SWITCH); in ac97_switch_put()
590 oxygen_write_ac97_masked(chip, 0, CM9780_GPIO_STATUS, in ac97_switch_put()
594 mutex_unlock(&chip->mutex); in ac97_switch_put()
613 struct oxygen *chip = ctl->private_data; in ac97_volume_get() local
619 mutex_lock(&chip->mutex); in ac97_volume_get()
620 reg = oxygen_read_ac97(chip, codec, index); in ac97_volume_get()
621 mutex_unlock(&chip->mutex); in ac97_volume_get()
634 struct oxygen *chip = ctl->private_data; in ac97_volume_put() local
641 mutex_lock(&chip->mutex); in ac97_volume_put()
642 oldreg = oxygen_read_ac97(chip, codec, index); in ac97_volume_put()
653 oxygen_write_ac97(chip, codec, index, newreg); in ac97_volume_put()
654 mutex_unlock(&chip->mutex); in ac97_volume_put()
669 struct oxygen *chip = ctl->private_data; in mic_fmic_source_get() local
671 mutex_lock(&chip->mutex); in mic_fmic_source_get()
673 !!(oxygen_read_ac97(chip, 0, CM9780_JACK) & CM9780_FMIC2MIC); in mic_fmic_source_get()
674 mutex_unlock(&chip->mutex); in mic_fmic_source_get()
681 struct oxygen *chip = ctl->private_data; in mic_fmic_source_put() local
685 mutex_lock(&chip->mutex); in mic_fmic_source_put()
686 oldreg = oxygen_read_ac97(chip, 0, CM9780_JACK); in mic_fmic_source_put()
693 oxygen_write_ac97(chip, 0, CM9780_JACK, newreg); in mic_fmic_source_put()
694 mutex_unlock(&chip->mutex); in mic_fmic_source_put()
711 struct oxygen *chip = ctl->private_data; in ac97_fp_rec_volume_get() local
714 mutex_lock(&chip->mutex); in ac97_fp_rec_volume_get()
715 reg = oxygen_read_ac97(chip, 1, AC97_REC_GAIN); in ac97_fp_rec_volume_get()
716 mutex_unlock(&chip->mutex); in ac97_fp_rec_volume_get()
725 struct oxygen *chip = ctl->private_data; in ac97_fp_rec_volume_put() local
729 mutex_lock(&chip->mutex); in ac97_fp_rec_volume_put()
730 oldreg = oxygen_read_ac97(chip, 1, AC97_REC_GAIN); in ac97_fp_rec_volume_put()
736 oxygen_write_ac97(chip, 1, AC97_REC_GAIN, newreg); in ac97_fp_rec_volume_put()
737 mutex_unlock(&chip->mutex); in ac97_fp_rec_volume_put()
1033 struct oxygen *chip = ctl->private_data; in oxygen_any_ctl_free() local
1037 for (i = 0; i < ARRAY_SIZE(chip->controls); ++i) in oxygen_any_ctl_free()
1038 chip->controls[i] = NULL; in oxygen_any_ctl_free()
1041 static int add_controls(struct oxygen *chip, in add_controls() argument
1062 if (chip->model.control_filter) { in add_controls()
1063 err = chip->model.control_filter(&template); in add_controls()
1070 chip->model.dac_channels_pcm == 2) in add_controls()
1073 !(chip->model.device_config & AC97_FMIC_SWITCH)) in add_controls()
1076 !(chip->model.device_config & AC97_CD_INPUT)) in add_controls()
1079 chip->model.dac_tlv) { in add_controls()
1080 template.tlv.p = chip->model.dac_tlv; in add_controls()
1083 ctl = snd_ctl_new1(&template, chip); in add_controls()
1086 err = snd_ctl_add(chip->card, ctl); in add_controls()
1091 chip->controls[j] = ctl; in add_controls()
1098 int oxygen_mixer_init(struct oxygen *chip) in oxygen_mixer_init() argument
1103 err = add_controls(chip, controls, ARRAY_SIZE(controls)); in oxygen_mixer_init()
1106 if (chip->model.device_config & PLAYBACK_1_TO_SPDIF) { in oxygen_mixer_init()
1107 err = add_controls(chip, spdif_output_controls, in oxygen_mixer_init()
1112 if (chip->model.device_config & CAPTURE_1_FROM_SPDIF) { in oxygen_mixer_init()
1113 err = add_controls(chip, spdif_input_controls, in oxygen_mixer_init()
1119 if (!(chip->model.device_config & monitor_controls[i].pcm_dev)) in oxygen_mixer_init()
1121 err = add_controls(chip, monitor_controls[i].controls, in oxygen_mixer_init()
1126 if (chip->has_ac97_0) { in oxygen_mixer_init()
1127 err = add_controls(chip, ac97_controls, in oxygen_mixer_init()
1132 if (chip->has_ac97_1) { in oxygen_mixer_init()
1133 err = add_controls(chip, ac97_fp_controls, in oxygen_mixer_init()
1138 return chip->model.mixer_init ? chip->model.mixer_init(chip) : 0; in oxygen_mixer_init()