Lines Matching +full:cmd +full:- +full:db

1 // SPDX-License-Identifier: GPL-2.0-or-later
25 #define PCXHR_LINE_CAPTURE_LEVEL_MIN 0 /* -112.0 dB */
26 #define PCXHR_LINE_CAPTURE_LEVEL_MAX 255 /* +15.5 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 */
30 #define PCXHR_LINE_PLAYBACK_LEVEL_MAX 128 /* +24.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; in pcxhr_update_analog_audio_level()
48 rmh.cmd[2] = chip->analog_capture_volume[channel]; in pcxhr_update_analog_audio_level()
50 rmh.cmd[0] |= IO_NUM_REG_OUT_ANA_LEVEL; in pcxhr_update_analog_audio_level()
51 if (chip->analog_playback_active[channel]) in pcxhr_update_analog_audio_level()
52 vol = chip->analog_playback_volume[channel]; in pcxhr_update_analog_audio_level()
56 rmh.cmd[2] = PCXHR_LINE_PLAYBACK_LEVEL_MAX - vol; in pcxhr_update_analog_audio_level()
58 rmh.cmd[1] = 1 << ((2 * chip->chip_idx) + channel); /* audio mask */ in pcxhr_update_analog_audio_level()
60 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_update_analog_audio_level()
62 dev_dbg(chip->card->dev, in pcxhr_update_analog_audio_level()
65 chip->chip_idx, is_capture, err); in pcxhr_update_analog_audio_level()
66 return -EINVAL; in pcxhr_update_analog_audio_level()
79 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in pcxhr_analog_vol_info()
80 uinfo->count = 2; in pcxhr_analog_vol_info()
81 if (kcontrol->private_value == 0) { /* playback */ in pcxhr_analog_vol_info()
82 if (chip->mgr->is_hr_stereo) { in pcxhr_analog_vol_info()
83 uinfo->value.integer.min = in pcxhr_analog_vol_info()
84 HR222_LINE_PLAYBACK_LEVEL_MIN; /* -25 dB */ in pcxhr_analog_vol_info()
85 uinfo->value.integer.max = in pcxhr_analog_vol_info()
86 HR222_LINE_PLAYBACK_LEVEL_MAX; /* +24 dB */ in pcxhr_analog_vol_info()
88 uinfo->value.integer.min = in pcxhr_analog_vol_info()
89 PCXHR_LINE_PLAYBACK_LEVEL_MIN; /*-104 dB */ in pcxhr_analog_vol_info()
90 uinfo->value.integer.max = in pcxhr_analog_vol_info()
91 PCXHR_LINE_PLAYBACK_LEVEL_MAX; /* +24 dB */ in pcxhr_analog_vol_info()
94 if (chip->mgr->is_hr_stereo) { in pcxhr_analog_vol_info()
95 uinfo->value.integer.min = in pcxhr_analog_vol_info()
96 HR222_LINE_CAPTURE_LEVEL_MIN; /*-112 dB */ in pcxhr_analog_vol_info()
97 uinfo->value.integer.max = in pcxhr_analog_vol_info()
98 HR222_LINE_CAPTURE_LEVEL_MAX; /* +15.5 dB */ in pcxhr_analog_vol_info()
100 uinfo->value.integer.min = in pcxhr_analog_vol_info()
101 PCXHR_LINE_CAPTURE_LEVEL_MIN; /*-112 dB */ in pcxhr_analog_vol_info()
102 uinfo->value.integer.max = in pcxhr_analog_vol_info()
103 PCXHR_LINE_CAPTURE_LEVEL_MAX; /* +15.5 dB */ in pcxhr_analog_vol_info()
113 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_analog_vol_get()
114 if (kcontrol->private_value == 0) { /* playback */ in pcxhr_analog_vol_get()
115 ucontrol->value.integer.value[0] = chip->analog_playback_volume[0]; in pcxhr_analog_vol_get()
116 ucontrol->value.integer.value[1] = chip->analog_playback_volume[1]; in pcxhr_analog_vol_get()
118 ucontrol->value.integer.value[0] = chip->analog_capture_volume[0]; in pcxhr_analog_vol_get()
119 ucontrol->value.integer.value[1] = chip->analog_capture_volume[1]; in pcxhr_analog_vol_get()
121 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_analog_vol_get()
132 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_analog_vol_put()
133 is_capture = (kcontrol->private_value != 0); in pcxhr_analog_vol_put()
135 int new_volume = ucontrol->value.integer.value[i]; in pcxhr_analog_vol_put()
137 &chip->analog_capture_volume[i] : in pcxhr_analog_vol_put()
138 &chip->analog_playback_volume[i]; in pcxhr_analog_vol_put()
140 if (chip->mgr->is_hr_stereo) { in pcxhr_analog_vol_put()
150 if (chip->mgr->is_hr_stereo) { in pcxhr_analog_vol_put()
163 if (chip->mgr->is_hr_stereo) in pcxhr_analog_vol_put()
171 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_analog_vol_put()
195 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_audio_sw_get()
196 ucontrol->value.integer.value[0] = chip->analog_playback_active[0]; in pcxhr_audio_sw_get()
197 ucontrol->value.integer.value[1] = chip->analog_playback_active[1]; in pcxhr_audio_sw_get()
198 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_audio_sw_get()
207 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_audio_sw_put()
209 if (chip->analog_playback_active[i] != in pcxhr_audio_sw_put()
210 ucontrol->value.integer.value[i]) { in pcxhr_audio_sw_put()
211 chip->analog_playback_active[i] = in pcxhr_audio_sw_put()
212 !!ucontrol->value.integer.value[i]; in pcxhr_audio_sw_put()
215 if (chip->mgr->is_hr_stereo) in pcxhr_audio_sw_put()
221 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_audio_sw_put()
234 #define PCXHR_DIGITAL_LEVEL_MIN 0x000 /* -110 dB */
235 #define PCXHR_DIGITAL_LEVEL_MAX 0x1ff /* +18 dB */
236 #define PCXHR_DIGITAL_ZERO_LEVEL 0x1b7 /* 0 dB */
238 static const DECLARE_TLV_DB_SCALE(db_scale_digital, -10975, 25, 1800);
250 struct pcxhr_pipe *pipe = &chip->playback_pipe; in pcxhr_update_playback_stream_level()
253 if (chip->digital_playback_active[idx][0]) in pcxhr_update_playback_stream_level()
254 left = chip->digital_playback_volume[idx][0]; in pcxhr_update_playback_stream_level()
257 if (chip->digital_playback_active[idx][1]) in pcxhr_update_playback_stream_level()
258 right = chip->digital_playback_volume[idx][1]; in pcxhr_update_playback_stream_level()
264 pcxhr_set_pipe_cmd_params(&rmh, 0, pipe->first_audio, 0, 1<<idx); in pcxhr_update_playback_stream_level()
265 /* volume left->left / right->right panoramic level */ in pcxhr_update_playback_stream_level()
266 rmh.cmd[0] |= MORE_THAN_ONE_STREAM_LEVEL; in pcxhr_update_playback_stream_level()
267 rmh.cmd[2] = VALID_STREAM_PAN_LEVEL_MASK | VALID_STREAM_LEVEL_1_MASK; in pcxhr_update_playback_stream_level()
268 rmh.cmd[2] |= (left << 10); in pcxhr_update_playback_stream_level()
269 rmh.cmd[3] = VALID_STREAM_PAN_LEVEL_MASK | VALID_STREAM_LEVEL_2_MASK; in pcxhr_update_playback_stream_level()
270 rmh.cmd[3] |= right; in pcxhr_update_playback_stream_level()
273 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_update_playback_stream_level()
275 dev_dbg(chip->card->dev, "error update_playback_stream_level " in pcxhr_update_playback_stream_level()
276 "card(%d) err(%x)\n", chip->chip_idx, err); in pcxhr_update_playback_stream_level()
277 return -EINVAL; in pcxhr_update_playback_stream_level()
297 pipe = &chip->capture_pipe[0]; in pcxhr_update_audio_pipe_level()
299 pipe = &chip->playback_pipe; in pcxhr_update_audio_pipe_level()
304 1 << (channel + pipe->first_audio)); in pcxhr_update_audio_pipe_level()
305 /* TODO : if mask (3 << pipe->first_audio) is used, left and right in pcxhr_update_audio_pipe_level()
308 rmh.cmd[0] |= VALID_AUDIO_IO_DIGITAL_LEVEL; in pcxhr_update_audio_pipe_level()
311 rmh.cmd[2] = chip->digital_capture_volume[channel]; in pcxhr_update_audio_pipe_level()
313 rmh.cmd[0] |= VALID_AUDIO_IO_MONITOR_LEVEL | in pcxhr_update_audio_pipe_level()
318 rmh.cmd[2] = chip->monitoring_volume[channel] << 10; in pcxhr_update_audio_pipe_level()
319 if (chip->monitoring_active[channel] == 0) in pcxhr_update_audio_pipe_level()
320 rmh.cmd[2] |= AUDIO_IO_HAS_MUTE_MONITOR_1; in pcxhr_update_audio_pipe_level()
324 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_update_audio_pipe_level()
326 dev_dbg(chip->card->dev, in pcxhr_update_audio_pipe_level()
328 chip->chip_idx, err); in pcxhr_update_audio_pipe_level()
329 return -EINVAL; in pcxhr_update_audio_pipe_level()
339 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in pcxhr_digital_vol_info()
340 uinfo->count = 2; in pcxhr_digital_vol_info()
341 uinfo->value.integer.min = PCXHR_DIGITAL_LEVEL_MIN; /* -109.5 dB */ in pcxhr_digital_vol_info()
342 uinfo->value.integer.max = PCXHR_DIGITAL_LEVEL_MAX; /* 18.0 dB */ in pcxhr_digital_vol_info()
351 int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); /* index */ in pcxhr_pcm_vol_get()
353 int is_capture = kcontrol->private_value; in pcxhr_pcm_vol_get()
355 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_pcm_vol_get()
357 stored_volume = chip->digital_capture_volume; in pcxhr_pcm_vol_get()
359 stored_volume = chip->digital_playback_volume[idx]; in pcxhr_pcm_vol_get()
360 ucontrol->value.integer.value[0] = stored_volume[0]; in pcxhr_pcm_vol_get()
361 ucontrol->value.integer.value[1] = stored_volume[1]; in pcxhr_pcm_vol_get()
362 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_pcm_vol_get()
370 int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); /* index */ in pcxhr_pcm_vol_put()
372 int is_capture = kcontrol->private_value; in pcxhr_pcm_vol_put()
376 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_pcm_vol_put()
378 stored_volume = chip->digital_capture_volume; in pcxhr_pcm_vol_put()
380 stored_volume = chip->digital_playback_volume[idx]; in pcxhr_pcm_vol_put()
382 int vol = ucontrol->value.integer.value[i]; in pcxhr_pcm_vol_put()
395 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_pcm_vol_put()
417 int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); /* index */ in pcxhr_pcm_sw_get()
419 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_pcm_sw_get()
420 ucontrol->value.integer.value[0] = chip->digital_playback_active[idx][0]; in pcxhr_pcm_sw_get()
421 ucontrol->value.integer.value[1] = chip->digital_playback_active[idx][1]; in pcxhr_pcm_sw_get()
422 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_pcm_sw_get()
431 int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); /* index */ in pcxhr_pcm_sw_put()
434 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_pcm_sw_put()
437 if (chip->digital_playback_active[j][i] != in pcxhr_pcm_sw_put()
438 ucontrol->value.integer.value[i]) { in pcxhr_pcm_sw_put()
439 chip->digital_playback_active[j][i] = in pcxhr_pcm_sw_put()
440 !!ucontrol->value.integer.value[i]; in pcxhr_pcm_sw_put()
446 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_pcm_sw_put()
468 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_monitor_vol_get()
469 ucontrol->value.integer.value[0] = chip->monitoring_volume[0]; in pcxhr_monitor_vol_get()
470 ucontrol->value.integer.value[1] = chip->monitoring_volume[1]; in pcxhr_monitor_vol_get()
471 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_monitor_vol_get()
482 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_monitor_vol_put()
484 if (chip->monitoring_volume[i] != in pcxhr_monitor_vol_put()
485 ucontrol->value.integer.value[i]) { in pcxhr_monitor_vol_put()
486 chip->monitoring_volume[i] = in pcxhr_monitor_vol_put()
487 ucontrol->value.integer.value[i]; in pcxhr_monitor_vol_put()
488 if (chip->monitoring_active[i]) in pcxhr_monitor_vol_put()
495 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_monitor_vol_put()
518 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_monitor_sw_get()
519 ucontrol->value.integer.value[0] = chip->monitoring_active[0]; in pcxhr_monitor_sw_get()
520 ucontrol->value.integer.value[1] = chip->monitoring_active[1]; in pcxhr_monitor_sw_get()
521 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_monitor_sw_get()
532 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_monitor_sw_put()
534 if (chip->monitoring_active[i] != in pcxhr_monitor_sw_put()
535 ucontrol->value.integer.value[i]) { in pcxhr_monitor_sw_put()
536 chip->monitoring_active[i] = in pcxhr_monitor_sw_put()
537 !!ucontrol->value.integer.value[i]; in pcxhr_monitor_sw_put()
548 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_monitor_sw_put()
578 switch (chip->chip_idx) { in pcxhr_set_audio_source()
583 default: return -EINVAL; in pcxhr_set_audio_source()
585 if (chip->audio_capture_source != 0) { in pcxhr_set_audio_source()
591 pcxhr_write_io_num_reg_cont(chip->mgr, mask, reg, &changed); in pcxhr_set_audio_source()
595 rmh.cmd[0] |= (1 << chip->chip_idx); in pcxhr_set_audio_source()
596 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_set_audio_source()
600 if (chip->mgr->board_aes_in_192k) { in pcxhr_set_audio_source()
604 for (i = 0; (i < 4) && (i < chip->mgr->capture_chips); i++) { in pcxhr_set_audio_source()
605 if (chip->mgr->chip[i]->audio_capture_source == 2) in pcxhr_set_audio_source()
606 src_config |= (1 << (3 - i)); in pcxhr_set_audio_source()
611 rmh.cmd[0] |= IO_NUM_REG_CONFIG_SRC; in pcxhr_set_audio_source()
612 rmh.cmd[1] = src_config; in pcxhr_set_audio_source()
613 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_set_audio_source()
616 if (chip->audio_capture_source == 2) in pcxhr_set_audio_source()
621 rmh.cmd[0] |= IO_NUM_UER_CHIP_REG; in pcxhr_set_audio_source()
622 rmh.cmd[1] = codec; in pcxhr_set_audio_source()
623 rmh.cmd[2] = ((CS8420_DATA_FLOW_CTL & CHIP_SIG_AND_MAP_SPI) | in pcxhr_set_audio_source()
625 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_set_audio_source()
628 rmh.cmd[2] = ((CS8420_CLOCK_SRC_CTL & CHIP_SIG_AND_MAP_SPI) | in pcxhr_set_audio_source()
630 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_set_audio_source()
645 if (chip->mgr->board_has_aes1) { in pcxhr_audio_src_info()
647 if (chip->mgr->board_has_mic) in pcxhr_audio_src_info()
657 ucontrol->value.enumerated.item[0] = chip->audio_capture_source; in pcxhr_audio_src_get()
667 if (chip->mgr->board_has_aes1) { in pcxhr_audio_src_put()
669 if (chip->mgr->board_has_mic) in pcxhr_audio_src_put()
672 if (ucontrol->value.enumerated.item[0] >= i) in pcxhr_audio_src_put()
673 return -EINVAL; in pcxhr_audio_src_put()
674 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_audio_src_put()
675 if (chip->audio_capture_source != ucontrol->value.enumerated.item[0]) { in pcxhr_audio_src_put()
676 chip->audio_capture_source = ucontrol->value.enumerated.item[0]; in pcxhr_audio_src_put()
677 if (chip->mgr->is_hr_stereo) in pcxhr_audio_src_put()
683 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_audio_src_put()
727 if (mgr->board_has_aes1) { in pcxhr_clock_type_info()
728 clock_items += mgr->capture_chips; /* add AES x */ in pcxhr_clock_type_info()
729 if (!mgr->is_hr_stereo) in pcxhr_clock_type_info()
732 if (mgr->is_hr_stereo) { in pcxhr_clock_type_info()
746 ucontrol->value.enumerated.item[0] = mgr->use_clock_type; in pcxhr_clock_type_get()
756 if (mgr->board_has_aes1) { in pcxhr_clock_type_put()
757 clock_items += mgr->capture_chips; /* add AES x */ in pcxhr_clock_type_put()
758 if (!mgr->is_hr_stereo) in pcxhr_clock_type_put()
761 if (ucontrol->value.enumerated.item[0] >= clock_items) in pcxhr_clock_type_put()
762 return -EINVAL; in pcxhr_clock_type_put()
763 mutex_lock(&mgr->mixer_mutex); in pcxhr_clock_type_put()
764 if (mgr->use_clock_type != ucontrol->value.enumerated.item[0]) { in pcxhr_clock_type_put()
765 mutex_lock(&mgr->setup_mutex); in pcxhr_clock_type_put()
766 mgr->use_clock_type = ucontrol->value.enumerated.item[0]; in pcxhr_clock_type_put()
768 if (mgr->use_clock_type != PCXHR_CLOCK_TYPE_INTERNAL) { in pcxhr_clock_type_put()
769 pcxhr_get_external_clock(mgr, mgr->use_clock_type, in pcxhr_clock_type_put()
772 rate = mgr->sample_rate; in pcxhr_clock_type_put()
778 if (mgr->sample_rate) in pcxhr_clock_type_put()
779 mgr->sample_rate = rate; in pcxhr_clock_type_put()
781 mutex_unlock(&mgr->setup_mutex); in pcxhr_clock_type_put()
784 mutex_unlock(&mgr->mixer_mutex); in pcxhr_clock_type_put()
804 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in pcxhr_clock_rate_info()
805 uinfo->count = 3 + mgr->capture_chips; in pcxhr_clock_rate_info()
806 uinfo->value.integer.min = 0; /* clock not present */ in pcxhr_clock_rate_info()
807 uinfo->value.integer.max = 192000; /* max sample rate 192 kHz */ in pcxhr_clock_rate_info()
817 mutex_lock(&mgr->mixer_mutex); in pcxhr_clock_rate_get()
818 for(i = 0; i < 3 + mgr->capture_chips; i++) { in pcxhr_clock_rate_get()
820 rate = mgr->sample_rate_real; in pcxhr_clock_rate_get()
826 ucontrol->value.integer.value[i] = rate; in pcxhr_clock_rate_get()
828 mutex_unlock(&mgr->mixer_mutex); in pcxhr_clock_rate_get()
846 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; in pcxhr_iec958_info()
847 uinfo->count = 1; in pcxhr_iec958_info()
859 rmh.cmd[0] |= IO_NUM_UER_CHIP_REG; in pcxhr_iec958_capture_byte()
860 switch (chip->chip_idx) { in pcxhr_iec958_capture_byte()
862 case 0: rmh.cmd[1] = CS8420_01_CS; break; in pcxhr_iec958_capture_byte()
863 case 1: rmh.cmd[1] = CS8420_23_CS; break; in pcxhr_iec958_capture_byte()
864 case 2: rmh.cmd[1] = CS8420_45_CS; break; in pcxhr_iec958_capture_byte()
865 case 3: rmh.cmd[1] = CS8420_67_CS; break; in pcxhr_iec958_capture_byte()
866 default: return -EINVAL; in pcxhr_iec958_capture_byte()
868 if (chip->mgr->board_aes_in_192k) { in pcxhr_iec958_capture_byte()
870 case 0: rmh.cmd[2] = CS8416_CSB0; break; in pcxhr_iec958_capture_byte()
871 case 1: rmh.cmd[2] = CS8416_CSB1; break; in pcxhr_iec958_capture_byte()
872 case 2: rmh.cmd[2] = CS8416_CSB2; break; in pcxhr_iec958_capture_byte()
873 case 3: rmh.cmd[2] = CS8416_CSB3; break; in pcxhr_iec958_capture_byte()
874 case 4: rmh.cmd[2] = CS8416_CSB4; break; in pcxhr_iec958_capture_byte()
875 default: return -EINVAL; in pcxhr_iec958_capture_byte()
880 case 0: rmh.cmd[2] = CS8420_CSB0; break; in pcxhr_iec958_capture_byte()
881 case 1: rmh.cmd[2] = CS8420_CSB1; break; in pcxhr_iec958_capture_byte()
882 case 2: rmh.cmd[2] = CS8420_CSB2; break; in pcxhr_iec958_capture_byte()
883 case 3: rmh.cmd[2] = CS8420_CSB3; break; in pcxhr_iec958_capture_byte()
884 case 4: rmh.cmd[2] = CS8420_CSB4; break; in pcxhr_iec958_capture_byte()
885 default: return -EINVAL; in pcxhr_iec958_capture_byte()
889 rmh.cmd[1] &= 0x0fffff; in pcxhr_iec958_capture_byte()
891 rmh.cmd[2] &= CHIP_SIG_AND_MAP_SPI; in pcxhr_iec958_capture_byte()
893 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_iec958_capture_byte()
897 if (chip->mgr->board_aes_in_192k) { in pcxhr_iec958_capture_byte()
908 dev_dbg(chip->card->dev, "read iec958 AES %d byte %d = 0x%x\n", in pcxhr_iec958_capture_byte()
909 chip->chip_idx, aes_idx, temp); in pcxhr_iec958_capture_byte()
921 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_iec958_get()
923 if (kcontrol->private_value == 0) /* playback */ in pcxhr_iec958_get()
924 aes_bits = chip->aes_bits[i]; in pcxhr_iec958_get()
926 if (chip->mgr->is_hr_stereo) in pcxhr_iec958_get()
935 ucontrol->value.iec958.status[i] = aes_bits; in pcxhr_iec958_get()
937 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_iec958_get()
946 ucontrol->value.iec958.status[i] = 0xff; in pcxhr_iec958_mask_get()
953 int i, err, cmd; in pcxhr_iec958_update_byte() local
955 unsigned char old_bits = chip->aes_bits[aes_idx]; in pcxhr_iec958_update_byte()
960 cmd = chip->chip_idx & 0x03; /* chip index 0..3 */ in pcxhr_iec958_update_byte()
961 if (chip->chip_idx > 3) in pcxhr_iec958_update_byte()
963 cmd |= 1 << 22; in pcxhr_iec958_update_byte()
964 cmd |= ((aes_idx << 3) + i) << 2; /* add bit offset */ in pcxhr_iec958_update_byte()
965 cmd |= (new_bits & 0x01) << 23; /* add bit value */ in pcxhr_iec958_update_byte()
967 rmh.cmd[0] |= IO_NUM_REG_CUER; in pcxhr_iec958_update_byte()
968 rmh.cmd[1] = cmd; in pcxhr_iec958_update_byte()
970 dev_dbg(chip->card->dev, in pcxhr_iec958_update_byte()
971 "write iec958 AES %d byte %d bit %d (cmd %x)\n", in pcxhr_iec958_update_byte()
972 chip->chip_idx, aes_idx, i, cmd); in pcxhr_iec958_update_byte()
973 err = pcxhr_send_msg(chip->mgr, &rmh); in pcxhr_iec958_update_byte()
980 chip->aes_bits[aes_idx] = aes_bits; in pcxhr_iec958_update_byte()
991 mutex_lock(&chip->mgr->mixer_mutex); in pcxhr_iec958_put()
993 if (ucontrol->value.iec958.status[i] != chip->aes_bits[i]) { in pcxhr_iec958_put()
994 if (chip->mgr->is_hr_stereo) in pcxhr_iec958_put()
996 ucontrol->value.iec958.status[i]); in pcxhr_iec958_put()
999 ucontrol->value.iec958.status[i]); in pcxhr_iec958_put()
1003 mutex_unlock(&chip->mgr->mixer_mutex); in pcxhr_iec958_put()
1044 if (chip->nb_streams_play) { in pcxhr_init_audio_levels()
1046 /* at boot time the digital volumes are unmuted 0dB */ in pcxhr_init_audio_levels()
1048 chip->digital_playback_active[j][i] = 1; in pcxhr_init_audio_levels()
1049 chip->digital_playback_volume[j][i] = in pcxhr_init_audio_levels()
1055 chip->aes_bits[0] = (IEC958_AES0_PROFESSIONAL | in pcxhr_init_audio_levels()
1061 chip->analog_playback_active[i] = 1; in pcxhr_init_audio_levels()
1062 if (chip->mgr->is_hr_stereo) in pcxhr_init_audio_levels()
1063 chip->analog_playback_volume[i] = in pcxhr_init_audio_levels()
1066 chip->analog_playback_volume[i] = in pcxhr_init_audio_levels()
1072 if (chip->mgr->is_hr_stereo) in pcxhr_init_audio_levels()
1075 if (chip->nb_streams_capt) { in pcxhr_init_audio_levels()
1076 /* at boot time the digital volumes are unmuted 0dB */ in pcxhr_init_audio_levels()
1077 chip->digital_capture_volume[i] = in pcxhr_init_audio_levels()
1079 chip->analog_capture_active = 1; in pcxhr_init_audio_levels()
1084 if (chip->mgr->is_hr_stereo) in pcxhr_init_audio_levels()
1085 chip->analog_capture_volume[i] = in pcxhr_init_audio_levels()
1088 chip->analog_capture_volume[i] = in pcxhr_init_audio_levels()
1094 if (chip->mgr->is_hr_stereo) in pcxhr_init_audio_levels()
1108 mutex_init(&mgr->mixer_mutex); /* can be in another place */ in pcxhr_create_mixer()
1110 for (i = 0; i < mgr->num_cards; i++) { in pcxhr_create_mixer()
1112 chip = mgr->chip[i]; in pcxhr_create_mixer()
1114 if (chip->nb_streams_play) { in pcxhr_create_mixer()
1119 if (mgr->is_hr_stereo) in pcxhr_create_mixer()
1123 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1129 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1139 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1144 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1150 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1156 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1162 if (chip->nb_streams_capt) { in pcxhr_create_mixer()
1167 if (mgr->is_hr_stereo) in pcxhr_create_mixer()
1172 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1182 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1188 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1194 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1200 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1206 if (mgr->is_hr_stereo) { in pcxhr_create_mixer()
1213 if (chip->nb_streams_capt > 0 && chip->nb_streams_play > 0) { in pcxhr_create_mixer()
1215 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1220 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1228 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()
1235 err = snd_ctl_add(chip->card, in pcxhr_create_mixer()