Lines Matching +full:synth +full:- +full:master
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 msnd_pinnacle_mixer.c - description
4 -------------------
59 unsigned items = test_bit(F_HAVEDIGITAL, &chip->flags) ? 3 : 2;
69 ucontrol->value.enumerated.item[0] = 0;
71 if (chip->recsrc & MSND_MASK_SYNTH) {
72 ucontrol->value.enumerated.item[0] = 1;
73 } else if ((chip->recsrc & MSND_MASK_DIGITAL) &&
74 test_bit(F_HAVEDIGITAL, &chip->flags)) {
75 ucontrol->value.enumerated.item[0] = 2;
102 return -EINVAL;
104 change = newrecsrc != chip->recsrc;
109 chip->recsrc = newrecsrc;
120 return snd_msndmix_set_mux(msnd, ucontrol->value.enumerated.item[0]);
127 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
128 uinfo->count = 2;
129 uinfo->value.integer.min = 0;
130 uinfo->value.integer.max = 100;
138 int addr = kcontrol->private_value;
140 guard(spinlock_irqsave)(&msnd->mixer_lock);
141 ucontrol->value.integer.value[0] = msnd->left_levels[addr] * 100;
142 ucontrol->value.integer.value[0] /= 0xFFFF;
143 ucontrol->value.integer.value[1] = msnd->right_levels[addr] * 100;
144 ucontrol->value.integer.value[1] /= 0xFFFF;
150 writew((dev->left_levels[a] >> 1) * \
151 readw(dev->SMA + SMA_wCurrMastVolLeft) / 0xffff, \
152 dev->SMA + SMA_##b##Left); \
153 writew((dev->right_levels[a] >> 1) * \
154 readw(dev->SMA + SMA_wCurrMastVolRight) / 0xffff, \
155 dev->SMA + SMA_##b##Right); \
160 writeb((dev->left_levels[d] >> 8) * \
161 readw(dev->SMA + SMA_wCurrMastVolLeft) / 0xffff, \
162 dev->SMA + SMA_##s##Left); \
163 writeb((dev->right_levels[d] >> 8) * \
164 readw(dev->SMA + SMA_wCurrMastVolRight) / 0xffff, \
165 dev->SMA + SMA_##s##Right); \
172 writeb(dev->left_levels[d] >> 8, \
173 dev->SMA + SMA_##s##Left); \
174 writeb(dev->right_levels[d] >> 8, \
175 dev->SMA + SMA_##s##Right); \
188 return -EINVAL;
196 dev->left_levels[d] = wLeft;
197 dev->right_levels[d] = wRight;
200 /* master volume unscaled controls */
203 writeb(bLeft, dev->SMA + SMA_bInPotPosLeft);
204 writeb(bRight, dev->SMA + SMA_bInPotPosRight);
209 if (dev->type == msndClassic)
210 return -EINVAL;
212 writeb(bLeft, dev->SMA + SMA_bMicPotPosLeft);
213 writeb(bRight, dev->SMA + SMA_bMicPotPosRight);
217 case MSND_MIXER_VOLUME: /* master volume */
218 writew(wLeft, dev->SMA + SMA_wCurrMastVolLeft);
219 writew(wRight, dev->SMA + SMA_wCurrMastVolRight);
222 /* scaled by master volume */
225 case MSND_MIXER_SYNTH: /* synth vol (dsp mix) */
228 /* scaled by master volume */
233 return -EINVAL;
237 /* update master volume scaled controls */
240 if (dev->type == msndPinnacle)
252 int change, addr = kcontrol->private_value;
255 left = ucontrol->value.integer.value[0] % 101;
256 right = ucontrol->value.integer.value[1] % 101;
257 guard(spinlock_irqsave)(&msnd->mixer_lock);
258 change = msnd->left_levels[addr] != left
259 || msnd->right_levels[addr] != right;
273 DUMMY_VOLUME("Master Volume", 0, MSND_MIXER_VOLUME),
291 struct snd_msnd *chip = card->private_data;
296 return -EINVAL;
297 spin_lock_init(&chip->mixer_lock);
298 strscpy(card->mixername, "MSND Pinnacle Mixer");
317 if (dev->type == msndPinnacle) {
326 dev->recsrc = -1;