Lines Matching +full:cmd +full:- +full:max +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0-or-later
25 #define PCXHR_LINE_CAPTURE_LEVEL_MIN 0 /* -112.0 dB */
27 #define PCXHR_LINE_CAPTURE_ZERO_LEVEL 224 /* 0.0 dB ( 0 dBu -> 0 dBFS ) */
29 #define PCXHR_LINE_PLAYBACK_LEVEL_MIN 0 /* -104.0 dB */
31 #define PCXHR_LINE_PLAYBACK_ZERO_LEVEL 104 /* 0.0 dB ( 0 dBFS -> 0 dBu ) */
33 static const DECLARE_TLV_DB_SCALE(db_scale_analog_capture, -11200, 50, 1550);
34 static const DECLARE_TLV_DB_SCALE(db_scale_analog_playback, -10400, 100, 2400);
36 static const DECLARE_TLV_DB_SCALE(db_scale_a_hr222_capture, -11150, 50, 1600);
37 static const DECLARE_TLV_DB_SCALE(db_scale_a_hr222_playback, -2550, 50, 2400);
47 rmh.cmd[0] |= IO_NUM_REG_IN_ANA_LEVEL;
48 rmh.cmd[2] = chip->analog_capture_volume[channel];
50 rmh.cmd[0] |= IO_NUM_REG_OUT_ANA_LEVEL;
51 if (chip->analog_playback_active[channel])
52 vol = chip->analog_playback_volume[channel];
56 rmh.cmd[2] = PCXHR_LINE_PLAYBACK_LEVEL_MAX - vol;
58 rmh.cmd[1] = 1 << ((2 * chip->chip_idx) + channel); /* audio mask */
60 err = pcxhr_send_msg(chip->mgr, &rmh);
62 dev_dbg(chip->card->dev,
65 chip->chip_idx, is_capture, err);
66 return -EINVAL;
79 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
80 uinfo->count = 2;
81 if (kcontrol->private_value == 0) { /* playback */
82 if (chip->mgr->is_hr_stereo) {
83 uinfo->value.integer.min =
84 HR222_LINE_PLAYBACK_LEVEL_MIN; /* -25 dB */
85 uinfo->value.integer.max =
88 uinfo->value.integer.min =
89 PCXHR_LINE_PLAYBACK_LEVEL_MIN; /*-104 dB */
90 uinfo->value.integer.max =
94 if (chip->mgr->is_hr_stereo) {
95 uinfo->value.integer.min =
96 HR222_LINE_CAPTURE_LEVEL_MIN; /*-112 dB */
97 uinfo->value.integer.max =
100 uinfo->value.integer.min =
101 PCXHR_LINE_CAPTURE_LEVEL_MIN; /*-112 dB */
102 uinfo->value.integer.max =
114 guard(mutex)(&chip->mgr->mixer_mutex);
115 if (kcontrol->private_value == 0) { /* playback */
116 ucontrol->value.integer.value[0] = chip->analog_playback_volume[0];
117 ucontrol->value.integer.value[1] = chip->analog_playback_volume[1];
119 ucontrol->value.integer.value[0] = chip->analog_capture_volume[0];
120 ucontrol->value.integer.value[1] = chip->analog_capture_volume[1];
132 guard(mutex)(&chip->mgr->mixer_mutex);
133 is_capture = (kcontrol->private_value != 0);
135 int new_volume = ucontrol->value.integer.value[i];
137 &chip->analog_capture_volume[i] :
138 &chip->analog_playback_volume[i];
140 if (chip->mgr->is_hr_stereo) {
150 if (chip->mgr->is_hr_stereo) {
163 if (chip->mgr->is_hr_stereo)
178 /* name will be filled later */
194 guard(mutex)(&chip->mgr->mixer_mutex);
195 ucontrol->value.integer.value[0] = chip->analog_playback_active[0];
196 ucontrol->value.integer.value[1] = chip->analog_playback_active[1];
206 guard(mutex)(&chip->mgr->mixer_mutex);
208 if (chip->analog_playback_active[i] !=
209 ucontrol->value.integer.value[i]) {
210 chip->analog_playback_active[i] =
211 !!ucontrol->value.integer.value[i];
214 if (chip->mgr->is_hr_stereo)
225 .name = "Master Playback Switch",
232 #define PCXHR_DIGITAL_LEVEL_MIN 0x000 /* -110 dB */
236 static const DECLARE_TLV_DB_SCALE(db_scale_digital, -10975, 25, 1800);
248 struct pcxhr_pipe *pipe = &chip->playback_pipe;
251 if (chip->digital_playback_active[idx][0])
252 left = chip->digital_playback_volume[idx][0];
255 if (chip->digital_playback_active[idx][1])
256 right = chip->digital_playback_volume[idx][1];
262 pcxhr_set_pipe_cmd_params(&rmh, 0, pipe->first_audio, 0, 1<<idx);
263 /* volume left->left / right->right panoramic level */
264 rmh.cmd[0] |= MORE_THAN_ONE_STREAM_LEVEL;
265 rmh.cmd[2] = VALID_STREAM_PAN_LEVEL_MASK | VALID_STREAM_LEVEL_1_MASK;
266 rmh.cmd[2] |= (left << 10);
267 rmh.cmd[3] = VALID_STREAM_PAN_LEVEL_MASK | VALID_STREAM_LEVEL_2_MASK;
268 rmh.cmd[3] |= right;
271 err = pcxhr_send_msg(chip->mgr, &rmh);
273 dev_dbg(chip->card->dev, "error update_playback_stream_level "
274 "card(%d) err(%x)\n", chip->chip_idx, err);
275 return -EINVAL;
295 pipe = &chip->capture_pipe[0];
297 pipe = &chip->playback_pipe;
302 1 << (channel + pipe->first_audio));
303 /* TODO : if mask (3 << pipe->first_audio) is used, left and right
306 rmh.cmd[0] |= VALID_AUDIO_IO_DIGITAL_LEVEL;
309 rmh.cmd[2] = chip->digital_capture_volume[channel];
311 rmh.cmd[0] |= VALID_AUDIO_IO_MONITOR_LEVEL |
316 rmh.cmd[2] = chip->monitoring_volume[channel] << 10;
317 if (chip->monitoring_active[channel] == 0)
318 rmh.cmd[2] |= AUDIO_IO_HAS_MUTE_MONITOR_1;
322 err = pcxhr_send_msg(chip->mgr, &rmh);
324 dev_dbg(chip->card->dev,
326 chip->chip_idx, err);
327 return -EINVAL;
337 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
338 uinfo->count = 2;
339 uinfo->value.integer.min = PCXHR_DIGITAL_LEVEL_MIN; /* -109.5 dB */
340 uinfo->value.integer.max = PCXHR_DIGITAL_LEVEL_MAX; /* 18.0 dB */
349 int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); /* index */
351 int is_capture = kcontrol->private_value;
353 guard(mutex)(&chip->mgr->mixer_mutex);
355 stored_volume = chip->digital_capture_volume;
357 stored_volume = chip->digital_playback_volume[idx];
358 ucontrol->value.integer.value[0] = stored_volume[0];
359 ucontrol->value.integer.value[1] = stored_volume[1];
367 int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); /* index */
369 int is_capture = kcontrol->private_value;
373 guard(mutex)(&chip->mgr->mixer_mutex);
375 stored_volume = chip->digital_capture_volume;
377 stored_volume = chip->digital_playback_volume[idx];
379 int vol = ucontrol->value.integer.value[i];
400 /* name will be filled later */
413 int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); /* index */
415 guard(mutex)(&chip->mgr->mixer_mutex);
416 ucontrol->value.integer.value[0] = chip->digital_playback_active[idx][0];
417 ucontrol->value.integer.value[1] = chip->digital_playback_active[idx][1];
426 int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); /* index */
429 guard(mutex)(&chip->mgr->mixer_mutex);
432 if (chip->digital_playback_active[j][i] !=
433 ucontrol->value.integer.value[i]) {
434 chip->digital_playback_active[j][i] =
435 !!ucontrol->value.integer.value[i];
446 .name = "PCM Playback Switch",
463 guard(mutex)(&chip->mgr->mixer_mutex);
464 ucontrol->value.integer.value[0] = chip->monitoring_volume[0];
465 ucontrol->value.integer.value[1] = chip->monitoring_volume[1];
476 guard(mutex)(&chip->mgr->mixer_mutex);
478 if (chip->monitoring_volume[i] !=
479 ucontrol->value.integer.value[i]) {
480 chip->monitoring_volume[i] =
481 ucontrol->value.integer.value[i];
482 if (chip->monitoring_active[i])
496 .name = "Monitoring Playback Volume",
512 guard(mutex)(&chip->mgr->mixer_mutex);
513 ucontrol->value.integer.value[0] = chip->monitoring_active[0];
514 ucontrol->value.integer.value[1] = chip->monitoring_active[1];
525 guard(mutex)(&chip->mgr->mixer_mutex);
527 if (chip->monitoring_active[i] !=
528 ucontrol->value.integer.value[i]) {
529 chip->monitoring_active[i] =
530 !!ucontrol->value.integer.value[i];
546 .name = "Monitoring Playback Switch",
570 switch (chip->chip_idx) {
575 default: return -EINVAL;
577 if (chip->audio_capture_source != 0) {
583 pcxhr_write_io_num_reg_cont(chip->mgr, mask, reg, &changed);
587 rmh.cmd[0] |= (1 << chip->chip_idx);
588 err = pcxhr_send_msg(chip->mgr, &rmh);
592 if (chip->mgr->board_aes_in_192k) {
596 for (i = 0; (i < 4) && (i < chip->mgr->capture_chips); i++) {
597 if (chip->mgr->chip[i]->audio_capture_source == 2)
598 src_config |= (1 << (3 - i));
603 rmh.cmd[0] |= IO_NUM_REG_CONFIG_SRC;
604 rmh.cmd[1] = src_config;
605 err = pcxhr_send_msg(chip->mgr, &rmh);
608 if (chip->audio_capture_source == 2)
613 rmh.cmd[0] |= IO_NUM_UER_CHIP_REG;
614 rmh.cmd[1] = codec;
615 rmh.cmd[2] = ((CS8420_DATA_FLOW_CTL & CHIP_SIG_AND_MAP_SPI) |
617 err = pcxhr_send_msg(chip->mgr, &rmh);
620 rmh.cmd[2] = ((CS8420_CLOCK_SRC_CTL & CHIP_SIG_AND_MAP_SPI) |
622 err = pcxhr_send_msg(chip->mgr, &rmh);
637 if (chip->mgr->board_has_aes1) {
639 if (chip->mgr->board_has_mic)
649 ucontrol->value.enumerated.item[0] = chip->audio_capture_source;
659 if (chip->mgr->board_has_aes1) {
661 if (chip->mgr->board_has_mic)
664 if (ucontrol->value.enumerated.item[0] >= i)
665 return -EINVAL;
666 guard(mutex)(&chip->mgr->mixer_mutex);
667 if (chip->audio_capture_source != ucontrol->value.enumerated.item[0]) {
668 chip->audio_capture_source = ucontrol->value.enumerated.item[0];
669 if (chip->mgr->is_hr_stereo)
680 .name = "Capture Source",
718 if (mgr->board_has_aes1) {
719 clock_items += mgr->capture_chips; /* add AES x */
720 if (!mgr->is_hr_stereo)
723 if (mgr->is_hr_stereo) {
737 ucontrol->value.enumerated.item[0] = mgr->use_clock_type;
747 if (mgr->board_has_aes1) {
748 clock_items += mgr->capture_chips; /* add AES x */
749 if (!mgr->is_hr_stereo)
752 if (ucontrol->value.enumerated.item[0] >= clock_items)
753 return -EINVAL;
754 guard(mutex)(&mgr->mixer_mutex);
755 if (mgr->use_clock_type != ucontrol->value.enumerated.item[0]) {
756 guard(mutex)(&mgr->setup_mutex);
757 mgr->use_clock_type = ucontrol->value.enumerated.item[0];
759 if (mgr->use_clock_type != PCXHR_CLOCK_TYPE_INTERNAL) {
760 pcxhr_get_external_clock(mgr, mgr->use_clock_type,
763 rate = mgr->sample_rate;
769 if (mgr->sample_rate)
770 mgr->sample_rate = rate;
779 .name = "Clock Mode",
793 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
794 uinfo->count = 3 + mgr->capture_chips;
795 uinfo->value.integer.min = 0; /* clock not present */
796 uinfo->value.integer.max = 192000; /* max sample rate 192 kHz */
806 guard(mutex)(&mgr->mixer_mutex);
807 for(i = 0; i < 3 + mgr->capture_chips; i++) {
809 rate = mgr->sample_rate_real;
815 ucontrol->value.integer.value[i] = rate;
823 .name = "Clock Rates",
834 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
835 uinfo->count = 1;
847 rmh.cmd[0] |= IO_NUM_UER_CHIP_REG;
848 switch (chip->chip_idx) {
850 case 0: rmh.cmd[1] = CS8420_01_CS; break;
851 case 1: rmh.cmd[1] = CS8420_23_CS; break;
852 case 2: rmh.cmd[1] = CS8420_45_CS; break;
853 case 3: rmh.cmd[1] = CS8420_67_CS; break;
854 default: return -EINVAL;
856 if (chip->mgr->board_aes_in_192k) {
858 case 0: rmh.cmd[2] = CS8416_CSB0; break;
859 case 1: rmh.cmd[2] = CS8416_CSB1; break;
860 case 2: rmh.cmd[2] = CS8416_CSB2; break;
861 case 3: rmh.cmd[2] = CS8416_CSB3; break;
862 case 4: rmh.cmd[2] = CS8416_CSB4; break;
863 default: return -EINVAL;
868 case 0: rmh.cmd[2] = CS8420_CSB0; break;
869 case 1: rmh.cmd[2] = CS8420_CSB1; break;
870 case 2: rmh.cmd[2] = CS8420_CSB2; break;
871 case 3: rmh.cmd[2] = CS8420_CSB3; break;
872 case 4: rmh.cmd[2] = CS8420_CSB4; break;
873 default: return -EINVAL;
877 rmh.cmd[1] &= 0x0fffff;
879 rmh.cmd[2] &= CHIP_SIG_AND_MAP_SPI;
881 err = pcxhr_send_msg(chip->mgr, &rmh);
885 if (chip->mgr->board_aes_in_192k) {
896 dev_dbg(chip->card->dev, "read iec958 AES %d byte %d = 0x%x\n",
897 chip->chip_idx, aes_idx, temp);
909 guard(mutex)(&chip->mgr->mixer_mutex);
911 if (kcontrol->private_value == 0) /* playback */
912 aes_bits = chip->aes_bits[i];
914 if (chip->mgr->is_hr_stereo)
923 ucontrol->value.iec958.status[i] = aes_bits;
933 ucontrol->value.iec958.status[i] = 0xff;
940 int i, err, cmd;
942 unsigned char old_bits = chip->aes_bits[aes_idx];
947 cmd = chip->chip_idx & 0x03; /* chip index 0..3 */
948 if (chip->chip_idx > 3)
950 cmd |= 1 << 22;
951 cmd |= ((aes_idx << 3) + i) << 2; /* add bit offset */
952 cmd |= (new_bits & 0x01) << 23; /* add bit value */
954 rmh.cmd[0] |= IO_NUM_REG_CUER;
955 rmh.cmd[1] = cmd;
957 dev_dbg(chip->card->dev,
958 "write iec958 AES %d byte %d bit %d (cmd %x)\n",
959 chip->chip_idx, aes_idx, i, cmd);
960 err = pcxhr_send_msg(chip->mgr, &rmh);
967 chip->aes_bits[aes_idx] = aes_bits;
978 guard(mutex)(&chip->mgr->mixer_mutex);
980 if (ucontrol->value.iec958.status[i] != chip->aes_bits[i]) {
981 if (chip->mgr->is_hr_stereo)
983 ucontrol->value.iec958.status[i]);
986 ucontrol->value.iec958.status[i]);
996 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,MASK),
1002 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
1012 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,MASK),
1019 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT),
1030 if (chip->nb_streams_play) {
1034 chip->digital_playback_active[j][i] = 1;
1035 chip->digital_playback_volume[j][i] =
1041 chip->aes_bits[0] = (IEC958_AES0_PROFESSIONAL |
1047 chip->analog_playback_active[i] = 1;
1048 if (chip->mgr->is_hr_stereo)
1049 chip->analog_playback_volume[i] =
1052 chip->analog_playback_volume[i] =
1058 if (chip->mgr->is_hr_stereo)
1061 if (chip->nb_streams_capt) {
1063 chip->digital_capture_volume[i] =
1065 chip->analog_capture_active = 1;
1070 if (chip->mgr->is_hr_stereo)
1071 chip->analog_capture_volume[i] =
1074 chip->analog_capture_volume[i] =
1080 if (chip->mgr->is_hr_stereo)
1094 mutex_init(&mgr->mixer_mutex); /* can be in another place */
1096 for (i = 0; i < mgr->num_cards; i++) {
1098 chip = mgr->chip[i];
1100 if (chip->nb_streams_play) {
1103 temp.name = "Master Playback Volume";
1105 if (mgr->is_hr_stereo)
1109 err = snd_ctl_add(chip->card,
1115 err = snd_ctl_add(chip->card,
1122 temp.name = "PCM Playback Volume";
1125 err = snd_ctl_add(chip->card,
1130 err = snd_ctl_add(chip->card,
1136 err = snd_ctl_add(chip->card,
1142 err = snd_ctl_add(chip->card,
1148 if (chip->nb_streams_capt) {
1151 temp.name = "Line Capture Volume";
1153 if (mgr->is_hr_stereo)
1158 err = snd_ctl_add(chip->card,
1164 temp.name = "PCM Capture Volume";
1168 err = snd_ctl_add(chip->card,
1174 err = snd_ctl_add(chip->card,
1180 err = snd_ctl_add(chip->card,
1186 err = snd_ctl_add(chip->card,
1192 if (mgr->is_hr_stereo) {
1199 if (chip->nb_streams_capt > 0 && chip->nb_streams_play > 0) {
1201 err = snd_ctl_add(chip->card,
1206 err = snd_ctl_add(chip->card,
1214 err = snd_ctl_add(chip->card,
1221 err = snd_ctl_add(chip->card,