Lines Matching +full:reg +full:- +full:names

2  * C-Media CMI8788 driver - mixer code
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31 struct oxygen *chip = ctl->private_data; in dac_volume_info()
33 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in dac_volume_info()
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()
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()
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()
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()
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()
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()
112 static const char *const names[5] = { in upmix_info() local
119 struct oxygen *chip = ctl->private_data; in upmix_info()
122 return snd_ctl_enum_info(info, 1, count, names); in upmix_info()
127 struct oxygen *chip = ctl->private_data; in upmix_get()
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()
139 /* stereo -> front */ in oxygen_update_dac_routing()
144 /* stereo -> front+surround */ in oxygen_update_dac_routing()
149 /* stereo -> front+surround+back */ in oxygen_update_dac_routing()
154 /* stereo -> front+surround+center/LFE */ in oxygen_update_dac_routing()
159 /* stereo -> front+surround+center/LFE+back */ 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()
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()
196 struct oxygen *chip = ctl->private_data; in upmix_put()
200 if (value->value.enumerated.item[0] >= count) in upmix_put()
201 return -EINVAL; in upmix_put()
202 mutex_lock(&chip->mutex); in upmix_put()
203 changed = value->value.enumerated.item[0] != chip->dac_routing; in upmix_put()
205 chip->dac_routing = value->value.enumerated.item[0]; in upmix_put()
208 mutex_unlock(&chip->mutex); in upmix_put()
215 struct oxygen *chip = ctl->private_data; in spdif_switch_get()
217 mutex_lock(&chip->mutex); in spdif_switch_get()
218 value->value.integer.value[0] = chip->spdif_playback_enable; in spdif_switch_get()
219 mutex_unlock(&chip->mutex); in spdif_switch_get()
253 if (chip->pcm_active & (1 << PCM_SPDIF)) { in oxygen_update_spdif_source()
260 } else if ((chip->pcm_active & (1 << PCM_MULTICH)) && in oxygen_update_spdif_source()
261 chip->spdif_playback_enable) { in oxygen_update_spdif_source()
282 ((chip->pcm_active & (1 << PCM_SPDIF)) ? in oxygen_update_spdif_source()
283 chip->spdif_pcm_bits : chip->spdif_bits)); in oxygen_update_spdif_source()
290 struct oxygen *chip = ctl->private_data; in spdif_switch_put()
293 mutex_lock(&chip->mutex); in spdif_switch_put()
294 changed = value->value.integer.value[0] != chip->spdif_playback_enable; in spdif_switch_put()
296 chip->spdif_playback_enable = !!value->value.integer.value[0]; in spdif_switch_put()
297 spin_lock_irq(&chip->reg_lock); in spdif_switch_put()
299 spin_unlock_irq(&chip->reg_lock); in spdif_switch_put()
301 mutex_unlock(&chip->mutex); in spdif_switch_put()
307 info->type = SNDRV_CTL_ELEM_TYPE_IEC958; in spdif_info()
308 info->count = 1; in spdif_info()
314 value->value.iec958.status[0] = in oxygen_to_iec958()
317 value->value.iec958.status[1] = /* category and original */ in oxygen_to_iec958()
325 bits = value->value.iec958.status[0] & in iec958_to_oxygen()
328 bits |= value->value.iec958.status[1] << OXYGEN_SPDIF_CATEGORY_SHIFT; in iec958_to_oxygen()
348 struct oxygen *chip = ctl->private_data; in spdif_default_get()
350 mutex_lock(&chip->mutex); in spdif_default_get()
351 oxygen_to_iec958(chip->spdif_bits, value); in spdif_default_get()
352 mutex_unlock(&chip->mutex); in spdif_default_get()
359 struct oxygen *chip = ctl->private_data; in spdif_default_put()
364 mutex_lock(&chip->mutex); in spdif_default_put()
365 changed = new_bits != chip->spdif_bits; in spdif_default_put()
367 chip->spdif_bits = new_bits; in spdif_default_put()
368 if (!(chip->pcm_active & (1 << PCM_SPDIF))) in spdif_default_put()
371 mutex_unlock(&chip->mutex); in spdif_default_put()
378 value->value.iec958.status[0] = IEC958_AES0_NONAUDIO | in spdif_mask_get()
380 value->value.iec958.status[1] = in spdif_mask_get()
388 struct oxygen *chip = ctl->private_data; in spdif_pcm_get()
390 mutex_lock(&chip->mutex); in spdif_pcm_get()
391 oxygen_to_iec958(chip->spdif_pcm_bits, value); in spdif_pcm_get()
392 mutex_unlock(&chip->mutex); in spdif_pcm_get()
399 struct oxygen *chip = ctl->private_data; in spdif_pcm_put()
404 mutex_lock(&chip->mutex); in spdif_pcm_put()
405 changed = new_bits != chip->spdif_pcm_bits; in spdif_pcm_put()
407 chip->spdif_pcm_bits = new_bits; in spdif_pcm_put()
408 if (chip->pcm_active & (1 << PCM_SPDIF)) in spdif_pcm_put()
411 mutex_unlock(&chip->mutex); in spdif_pcm_put()
418 value->value.iec958.status[0] = 0xff; in spdif_input_mask_get()
419 value->value.iec958.status[1] = 0xff; in spdif_input_mask_get()
420 value->value.iec958.status[2] = 0xff; in spdif_input_mask_get()
421 value->value.iec958.status[3] = 0xff; in spdif_input_mask_get()
428 struct oxygen *chip = ctl->private_data; in spdif_input_default_get()
432 value->value.iec958.status[0] = bits; in spdif_input_default_get()
433 value->value.iec958.status[1] = bits >> 8; in spdif_input_default_get()
434 value->value.iec958.status[2] = bits >> 16; in spdif_input_default_get()
435 value->value.iec958.status[3] = bits >> 24; in spdif_input_default_get()
442 struct oxygen *chip = ctl->private_data; in spdif_bit_switch_get()
443 u32 bit = ctl->private_value; in spdif_bit_switch_get()
445 value->value.integer.value[0] = in spdif_bit_switch_get()
453 struct oxygen *chip = ctl->private_data; in spdif_bit_switch_put()
454 u32 bit = ctl->private_value; in spdif_bit_switch_put()
458 spin_lock_irq(&chip->reg_lock); in spdif_bit_switch_put()
460 if (value->value.integer.value[0]) in spdif_bit_switch_put()
467 spin_unlock_irq(&chip->reg_lock); in spdif_bit_switch_put()
474 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in monitor_volume_info()
475 info->count = 1; in monitor_volume_info()
476 info->value.integer.min = 0; in monitor_volume_info()
477 info->value.integer.max = 1; in monitor_volume_info()
484 struct oxygen *chip = ctl->private_data; in monitor_get()
485 u8 bit = ctl->private_value; in monitor_get()
486 int invert = ctl->private_value & (1 << 8); in monitor_get()
488 value->value.integer.value[0] = in monitor_get()
496 struct oxygen *chip = ctl->private_data; in monitor_put()
497 u8 bit = ctl->private_value; in monitor_put()
498 int invert = ctl->private_value & (1 << 8); in monitor_put()
502 spin_lock_irq(&chip->reg_lock); in monitor_put()
504 if ((!!value->value.integer.value[0] ^ !!invert) != 0) in monitor_put()
511 spin_unlock_irq(&chip->reg_lock); in monitor_put()
518 struct oxygen *chip = ctl->private_data; in ac97_switch_get()
519 unsigned int codec = (ctl->private_value >> 24) & 1; in ac97_switch_get()
520 unsigned int index = ctl->private_value & 0xff; in ac97_switch_get()
521 unsigned int bitnr = (ctl->private_value >> 8) & 0xff; in ac97_switch_get()
522 int invert = ctl->private_value & (1 << 16); in ac97_switch_get()
523 u16 reg; in ac97_switch_get() local
525 mutex_lock(&chip->mutex); in ac97_switch_get()
526 reg = oxygen_read_ac97(chip, codec, index); in ac97_switch_get()
527 mutex_unlock(&chip->mutex); in ac97_switch_get()
528 if (!(reg & (1 << bitnr)) ^ !invert) in ac97_switch_get()
529 value->value.integer.value[0] = 1; in ac97_switch_get()
531 value->value.integer.value[0] = 0; in ac97_switch_get()
540 if (!chip->controls[control]) in mute_ac97_ctl()
542 priv_idx = chip->controls[control]->private_value & 0xff; in mute_ac97_ctl()
546 if (chip->model.ac97_switch) in mute_ac97_ctl()
547 chip->model.ac97_switch(chip, priv_idx, 0x8000); in mute_ac97_ctl()
548 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in mute_ac97_ctl()
549 &chip->controls[control]->id); in mute_ac97_ctl()
556 struct oxygen *chip = ctl->private_data; in ac97_switch_put()
557 unsigned int codec = (ctl->private_value >> 24) & 1; in ac97_switch_put()
558 unsigned int index = ctl->private_value & 0xff; in ac97_switch_put()
559 unsigned int bitnr = (ctl->private_value >> 8) & 0xff; in ac97_switch_put()
560 int invert = ctl->private_value & (1 << 16); in ac97_switch_put()
564 mutex_lock(&chip->mutex); in ac97_switch_put()
567 if (!value->value.integer.value[0] ^ !invert) in ac97_switch_put()
574 if (codec == 0 && chip->model.ac97_switch) in ac97_switch_put()
575 chip->model.ac97_switch(chip, index, newreg & 0x8000); in ac97_switch_put()
593 mutex_unlock(&chip->mutex); in ac97_switch_put()
600 int stereo = (ctl->private_value >> 16) & 1; in ac97_volume_info()
602 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in ac97_volume_info()
603 info->count = stereo ? 2 : 1; in ac97_volume_info()
604 info->value.integer.min = 0; in ac97_volume_info()
605 info->value.integer.max = 0x1f; in ac97_volume_info()
612 struct oxygen *chip = ctl->private_data; in ac97_volume_get()
613 unsigned int codec = (ctl->private_value >> 24) & 1; in ac97_volume_get()
614 int stereo = (ctl->private_value >> 16) & 1; in ac97_volume_get()
615 unsigned int index = ctl->private_value & 0xff; in ac97_volume_get()
616 u16 reg; in ac97_volume_get() local
618 mutex_lock(&chip->mutex); in ac97_volume_get()
619 reg = oxygen_read_ac97(chip, codec, index); in ac97_volume_get()
620 mutex_unlock(&chip->mutex); in ac97_volume_get()
622 value->value.integer.value[0] = 31 - (reg & 0x1f); in ac97_volume_get()
624 value->value.integer.value[0] = 31 - ((reg >> 8) & 0x1f); in ac97_volume_get()
625 value->value.integer.value[1] = 31 - (reg & 0x1f); in ac97_volume_get()
633 struct oxygen *chip = ctl->private_data; in ac97_volume_put()
634 unsigned int codec = (ctl->private_value >> 24) & 1; in ac97_volume_put()
635 int stereo = (ctl->private_value >> 16) & 1; in ac97_volume_put()
636 unsigned int index = ctl->private_value & 0xff; in ac97_volume_put()
640 mutex_lock(&chip->mutex); in ac97_volume_put()
644 newreg |= 31 - (value->value.integer.value[0] & 0x1f); in ac97_volume_put()
647 newreg |= (31 - (value->value.integer.value[0] & 0x1f)) << 8; in ac97_volume_put()
648 newreg |= 31 - (value->value.integer.value[1] & 0x1f); in ac97_volume_put()
653 mutex_unlock(&chip->mutex); in ac97_volume_put()
660 static const char *const names[] = { "Mic Jack", "Front Panel" }; in mic_fmic_source_info() local
662 return snd_ctl_enum_info(info, 1, 2, names); in mic_fmic_source_info()
668 struct oxygen *chip = ctl->private_data; in mic_fmic_source_get()
670 mutex_lock(&chip->mutex); in mic_fmic_source_get()
671 value->value.enumerated.item[0] = in mic_fmic_source_get()
673 mutex_unlock(&chip->mutex); in mic_fmic_source_get()
680 struct oxygen *chip = ctl->private_data; in mic_fmic_source_put()
684 mutex_lock(&chip->mutex); in mic_fmic_source_put()
686 if (value->value.enumerated.item[0]) in mic_fmic_source_put()
693 mutex_unlock(&chip->mutex); in mic_fmic_source_put()
700 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in ac97_fp_rec_volume_info()
701 info->count = 2; in ac97_fp_rec_volume_info()
702 info->value.integer.min = 0; in ac97_fp_rec_volume_info()
703 info->value.integer.max = 7; in ac97_fp_rec_volume_info()
710 struct oxygen *chip = ctl->private_data; in ac97_fp_rec_volume_get()
711 u16 reg; in ac97_fp_rec_volume_get() local
713 mutex_lock(&chip->mutex); in ac97_fp_rec_volume_get()
714 reg = oxygen_read_ac97(chip, 1, AC97_REC_GAIN); in ac97_fp_rec_volume_get()
715 mutex_unlock(&chip->mutex); in ac97_fp_rec_volume_get()
716 value->value.integer.value[0] = reg & 7; in ac97_fp_rec_volume_get()
717 value->value.integer.value[1] = (reg >> 8) & 7; in ac97_fp_rec_volume_get()
724 struct oxygen *chip = ctl->private_data; in ac97_fp_rec_volume_put()
728 mutex_lock(&chip->mutex); in ac97_fp_rec_volume_put()
731 newreg = newreg | (value->value.integer.value[0] & 7); in ac97_fp_rec_volume_put()
732 newreg = newreg | ((value->value.integer.value[0] & 7) << 8); in ac97_fp_rec_volume_put()
736 mutex_unlock(&chip->mutex); in ac97_fp_rec_volume_put()
761 static DECLARE_TLV_DB_SCALE(monitor_db_scale, -600, 600, 0);
762 static DECLARE_TLV_DB_SCALE(ac97_db_scale, -3450, 150, 0);
1002 struct oxygen *chip = ctl->private_data; in oxygen_any_ctl_free()
1005 /* I'm too lazy to write a function for each control :-) */ in oxygen_any_ctl_free()
1006 for (i = 0; i < ARRAY_SIZE(chip->controls); ++i) in oxygen_any_ctl_free()
1007 chip->controls[i] = NULL; in oxygen_any_ctl_free()
1031 if (chip->model.control_filter) { in add_controls()
1032 err = chip->model.control_filter(&template); in add_controls()
1039 chip->model.dac_channels_pcm == 2) in add_controls()
1042 !(chip->model.device_config & AC97_FMIC_SWITCH)) in add_controls()
1045 !(chip->model.device_config & AC97_CD_INPUT)) in add_controls()
1048 chip->model.dac_tlv) { in add_controls()
1049 template.tlv.p = chip->model.dac_tlv; in add_controls()
1054 return -ENOMEM; in add_controls()
1055 err = snd_ctl_add(chip->card, ctl); in add_controls()
1059 if (!strcmp(ctl->id.name, known_ctl_names[j])) { in add_controls()
1060 chip->controls[j] = ctl; in add_controls()
1061 ctl->private_free = oxygen_any_ctl_free; in add_controls()
1075 if (chip->model.device_config & CAPTURE_1_FROM_SPDIF) { in oxygen_mixer_init()
1082 if (!(chip->model.device_config & monitor_controls[i].pcm_dev)) in oxygen_mixer_init()
1089 if (chip->has_ac97_0) { in oxygen_mixer_init()
1095 if (chip->has_ac97_1) { in oxygen_mixer_init()
1101 return chip->model.mixer_init ? chip->model.mixer_init(chip) : 0; in oxygen_mixer_init()