Lines Matching +full:playback +full:- +full:only
1 // SPDX-License-Identifier: GPL-2.0-or-later
23 dev_dbg(chip->card->dev, "mixer_write 0x%x 0x%x\n", reg, data); in snd_sbmixer_write()
36 dev_dbg(chip->card->dev, "mixer_read 0x%x 0x%x\n", reg, result); in snd_sbmixer_read()
47 int mask = (kcontrol->private_value >> 24) & 0xff; in snd_sbmixer_info_single()
49 uinfo->type = mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_sbmixer_info_single()
50 uinfo->count = 1; in snd_sbmixer_info_single()
51 uinfo->value.integer.min = 0; in snd_sbmixer_info_single()
52 uinfo->value.integer.max = mask; in snd_sbmixer_info_single()
60 int reg = kcontrol->private_value & 0xff; in snd_sbmixer_get_single()
61 int shift = (kcontrol->private_value >> 16) & 0xff; in snd_sbmixer_get_single()
62 int mask = (kcontrol->private_value >> 24) & 0xff; in snd_sbmixer_get_single()
65 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_sbmixer_get_single()
67 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_sbmixer_get_single()
68 ucontrol->value.integer.value[0] = val; in snd_sbmixer_get_single()
76 int reg = kcontrol->private_value & 0xff; in snd_sbmixer_put_single()
77 int shift = (kcontrol->private_value >> 16) & 0x07; in snd_sbmixer_put_single()
78 int mask = (kcontrol->private_value >> 24) & 0xff; in snd_sbmixer_put_single()
82 val = (ucontrol->value.integer.value[0] & mask) << shift; in snd_sbmixer_put_single()
83 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_sbmixer_put_single()
89 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_sbmixer_put_single()
99 int mask = (kcontrol->private_value >> 24) & 0xff; in snd_sbmixer_info_double()
101 uinfo->type = mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_sbmixer_info_double()
102 uinfo->count = 2; in snd_sbmixer_info_double()
103 uinfo->value.integer.min = 0; in snd_sbmixer_info_double()
104 uinfo->value.integer.max = mask; in snd_sbmixer_info_double()
112 int left_reg = kcontrol->private_value & 0xff; in snd_sbmixer_get_double()
113 int right_reg = (kcontrol->private_value >> 8) & 0xff; in snd_sbmixer_get_double()
114 int left_shift = (kcontrol->private_value >> 16) & 0x07; in snd_sbmixer_get_double()
115 int right_shift = (kcontrol->private_value >> 19) & 0x07; in snd_sbmixer_get_double()
116 int mask = (kcontrol->private_value >> 24) & 0xff; in snd_sbmixer_get_double()
119 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_sbmixer_get_double()
122 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_sbmixer_get_double()
123 ucontrol->value.integer.value[0] = left; in snd_sbmixer_get_double()
124 ucontrol->value.integer.value[1] = right; in snd_sbmixer_get_double()
132 int left_reg = kcontrol->private_value & 0xff; in snd_sbmixer_put_double()
133 int right_reg = (kcontrol->private_value >> 8) & 0xff; in snd_sbmixer_put_double()
134 int left_shift = (kcontrol->private_value >> 16) & 0x07; in snd_sbmixer_put_double()
135 int right_shift = (kcontrol->private_value >> 19) & 0x07; in snd_sbmixer_put_double()
136 int mask = (kcontrol->private_value >> 24) & 0xff; in snd_sbmixer_put_double()
140 left = (ucontrol->value.integer.value[0] & mask) << left_shift; in snd_sbmixer_put_double()
141 right = (ucontrol->value.integer.value[1] & mask) << right_shift; in snd_sbmixer_put_double()
142 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_sbmixer_put_double()
160 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_sbmixer_put_double()
165 * DT-019x / ALS-007 capture/input switch
183 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_dt019x_input_sw_get()
185 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_dt019x_input_sw_get()
188 ucontrol->value.enumerated.item[0] = 0; in snd_dt019x_input_sw_get()
191 ucontrol->value.enumerated.item[0] = 1; in snd_dt019x_input_sw_get()
194 ucontrol->value.enumerated.item[0] = 2; in snd_dt019x_input_sw_get()
197 ucontrol->value.enumerated.item[0] = 4; in snd_dt019x_input_sw_get()
203 * ucontrol->value.enumerated.item[0] = 3; in snd_dt019x_input_sw_get()
207 ucontrol->value.enumerated.item[0] = 4; in snd_dt019x_input_sw_get()
220 if (ucontrol->value.enumerated.item[0] > 4) in snd_dt019x_input_sw_put()
221 return -EINVAL; in snd_dt019x_input_sw_put()
222 switch (ucontrol->value.enumerated.item[0]) { in snd_dt019x_input_sw_put()
241 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_dt019x_input_sw_put()
246 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_dt019x_input_sw_put()
258 "L chan only", "R chan only", "L ch/2 + R ch/2" in snd_als4k_mono_capture_route_info()
271 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_als4k_mono_capture_route_get()
273 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_als4k_mono_capture_route_get()
278 ucontrol->value.enumerated.item[0] = oval; in snd_als4k_mono_capture_route_get()
290 if (ucontrol->value.enumerated.item[0] > 2) in snd_als4k_mono_capture_route_put()
291 return -EINVAL; in snd_als4k_mono_capture_route_put()
292 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_als4k_mono_capture_route_put()
296 | (ucontrol->value.enumerated.item[0] << 6); in snd_als4k_mono_capture_route_put()
300 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_als4k_mono_capture_route_put()
324 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_sb8mixer_get_mux()
326 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_sb8mixer_get_mux()
329 ucontrol->value.enumerated.item[0] = 1; in snd_sb8mixer_get_mux()
332 ucontrol->value.enumerated.item[0] = 2; in snd_sb8mixer_get_mux()
335 ucontrol->value.enumerated.item[0] = 0; in snd_sb8mixer_get_mux()
348 if (ucontrol->value.enumerated.item[0] > 2) in snd_sb8mixer_put_mux()
349 return -EINVAL; in snd_sb8mixer_put_mux()
350 switch (ucontrol->value.enumerated.item[0]) { in snd_sb8mixer_put_mux()
361 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_sb8mixer_put_mux()
367 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_sb8mixer_put_mux()
377 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; in snd_sb16mixer_info_input_sw()
378 uinfo->count = 4; in snd_sb16mixer_info_input_sw()
379 uinfo->value.integer.min = 0; in snd_sb16mixer_info_input_sw()
380 uinfo->value.integer.max = 1; in snd_sb16mixer_info_input_sw()
388 int reg1 = kcontrol->private_value & 0xff; in snd_sb16mixer_get_input_sw()
389 int reg2 = (kcontrol->private_value >> 8) & 0xff; in snd_sb16mixer_get_input_sw()
390 int left_shift = (kcontrol->private_value >> 16) & 0x0f; in snd_sb16mixer_get_input_sw()
391 int right_shift = (kcontrol->private_value >> 24) & 0x0f; in snd_sb16mixer_get_input_sw()
394 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_sb16mixer_get_input_sw()
397 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_sb16mixer_get_input_sw()
398 ucontrol->value.integer.value[0] = (val1 >> left_shift) & 0x01; in snd_sb16mixer_get_input_sw()
399 ucontrol->value.integer.value[1] = (val2 >> left_shift) & 0x01; in snd_sb16mixer_get_input_sw()
400 ucontrol->value.integer.value[2] = (val1 >> right_shift) & 0x01; in snd_sb16mixer_get_input_sw()
401 ucontrol->value.integer.value[3] = (val2 >> right_shift) & 0x01; in snd_sb16mixer_get_input_sw()
409 int reg1 = kcontrol->private_value & 0xff; in snd_sb16mixer_put_input_sw()
410 int reg2 = (kcontrol->private_value >> 8) & 0xff; in snd_sb16mixer_put_input_sw()
411 int left_shift = (kcontrol->private_value >> 16) & 0x0f; in snd_sb16mixer_put_input_sw()
412 int right_shift = (kcontrol->private_value >> 24) & 0x0f; in snd_sb16mixer_put_input_sw()
416 spin_lock_irqsave(&sb->mixer_lock, flags); in snd_sb16mixer_put_input_sw()
421 val1 |= (ucontrol->value.integer.value[0] & 1) << left_shift; in snd_sb16mixer_put_input_sw()
422 val2 |= (ucontrol->value.integer.value[1] & 1) << left_shift; in snd_sb16mixer_put_input_sw()
423 val1 |= (ucontrol->value.integer.value[2] & 1) << right_shift; in snd_sb16mixer_put_input_sw()
424 val2 |= (ucontrol->value.integer.value[3] & 1) << right_shift; in snd_sb16mixer_put_input_sw()
430 spin_unlock_irqrestore(&sb->mixer_lock, flags); in snd_sb16mixer_put_input_sw()
484 return -ENOMEM; in snd_sbmixer_add_ctl()
485 strscpy(ctl->id.name, name, sizeof(ctl->id.name)); in snd_sbmixer_add_ctl()
486 ctl->id.index = index; in snd_sbmixer_add_ctl()
487 ctl->private_value = value; in snd_sbmixer_add_ctl()
488 err = snd_ctl_add(chip->card, ctl); in snd_sbmixer_add_ctl()
499 SB_SINGLE("Master Playback Volume", SB_DSP20_MASTER_DEV, 1, 7),
500 SB_SINGLE("PCM Playback Volume", SB_DSP20_PCM_DEV, 1, 3),
501 SB_SINGLE("Synth Playback Volume", SB_DSP20_FM_DEV, 1, 7),
502 SB_SINGLE("CD Playback Volume", SB_DSP20_CD_DEV, 1, 7)
514 SB_DOUBLE("Master Playback Volume",
516 SB_DOUBLE("PCM Playback Volume",
518 SB_SINGLE("PCM Playback Filter", SB_DSP_PLAYBACK_FILT, 5, 1),
519 SB_DOUBLE("Synth Playback Volume",
521 SB_DOUBLE("CD Playback Volume", SB_DSP_CD_DEV, SB_DSP_CD_DEV, 5, 1, 7),
522 SB_DOUBLE("Line Playback Volume",
524 SB_SINGLE("Mic Playback Volume", SB_DSP_MIC_DEV, 1, 3),
530 SB_SINGLE("Capture Low-Pass Filter", SB_DSP_CAPTURE_FILT, 3, 1)
543 SB_DOUBLE("Master Playback Volume",
545 SB_DOUBLE("PCM Playback Volume",
549 SB_DOUBLE("Synth Playback Volume",
553 SB_DOUBLE("CD Playback Switch",
555 SB_DOUBLE("CD Playback Volume",
559 SB_SINGLE("Mic Playback Switch", SB_DSP4_OUTPUT_SW, 0, 1),
560 SB_SINGLE("Mic Playback Volume", SB_DSP4_MIC_DEV, 3, 31),
564 SB_DOUBLE("Playback Volume",
568 SB_DOUBLE("Line Playback Switch",
570 SB_DOUBLE("Line Playback Volume",
574 SB_DOUBLE("Tone Control - Bass",
576 SB_DOUBLE("Tone Control - Treble",
598 * e.g. snd_als4000_ctl_mono_playback_switch - check it! */
599 SB_DOUBLE("Master Playback Volume",
601 SB_DOUBLE("PCM Playback Switch",
603 SB_DOUBLE("PCM Playback Volume",
605 SB_DOUBLE("Synth Playback Switch",
607 SB_DOUBLE("Synth Playback Volume",
609 SB_DOUBLE("CD Playback Switch",
611 SB_DOUBLE("CD Playback Volume",
613 SB_SINGLE("Mic Playback Switch", SB_DSP4_OUTPUT_SW, 0, 1),
614 SB_SINGLE("Mic Playback Volume", SB_DT019X_MIC_DEV, 4, 7),
616 SB_DOUBLE("Line Playback Switch",
618 SB_DOUBLE("Line Playback Volume",
631 { SB_DT019X_MIC_DEV, 0 }, /* Includes PC-speaker in high nibble */
642 SB_DOUBLE("PCM Playback Switch",
644 SB_DOUBLE("Synth Playback Switch",
647 SB_SINGLE("Master Mono Playback Switch", SB_ALS4000_MONO_IO_CTRL, 5, 1),
652 SB_SINGLE("Mono Playback Switch", SB_DT019X_OUTPUT_SW2, 0, 1),
654 SB_SINGLE("3D Control - Switch", SB_ALS4000_3D_SND_FX, 6, 0x01),
659 SB_SINGLE("3D Control - Level", SB_ALS4000_3D_SND_FX, 0, 0x07),
661 SB_SINGLE("3D Control - Freq", SB_ALS4000_3D_SND_FX, 4, 0x03),
665 SB_SINGLE("3D Control - Wide", SB_ALS4000_3D_TIME_DELAY, 0, 0x0f),
667 SB_SINGLE("Master Playback 8kHz / 20kHz LPF Switch",
700 struct snd_card *card = chip->card; in snd_sbmixer_init()
704 spin_lock_irqsave(&chip->mixer_lock, flags); in snd_sbmixer_init()
706 spin_unlock_irqrestore(&chip->mixer_lock, flags); in snd_sbmixer_init()
710 spin_lock_irqsave(&chip->mixer_lock, flags); in snd_sbmixer_init()
712 spin_unlock_irqrestore(&chip->mixer_lock, flags); in snd_sbmixer_init()
721 strcpy(card->mixername, name); in snd_sbmixer_init()
730 if (snd_BUG_ON(!chip || !chip->card)) in snd_sbmixer_new()
731 return -EINVAL; in snd_sbmixer_new()
733 card = chip->card; in snd_sbmixer_new()
735 switch (chip->hardware) { in snd_sbmixer_new()
773 /* use only the first 16 controls from SB16 */ in snd_sbmixer_new()
802 strcpy(card->mixername, "???"); in snd_sbmixer_new()
882 unsigned char *val = chip->saved_regs; in save_mixer()
883 if (snd_BUG_ON(num_regs > ARRAY_SIZE(chip->saved_regs))) in save_mixer()
885 for (; num_regs; num_regs--) in save_mixer()
891 unsigned char *val = chip->saved_regs; in restore_mixer()
892 if (snd_BUG_ON(num_regs > ARRAY_SIZE(chip->saved_regs))) in restore_mixer()
894 for (; num_regs; num_regs--) in restore_mixer()
900 switch (chip->hardware) { in snd_sbmixer_suspend()
927 switch (chip->hardware) { in snd_sbmixer_resume()