Lines Matching +full:cd +full:- +full:inverted
1 // SPDX-License-Identifier: GPL-2.0-or-later
39 while (!(in_le32(&chip->awacs->codec_stat) & MASK_VALID)) {
41 if (! --timeout) {
42 dev_dbg(chip->card->dev, "%s timeout\n", __func__);
56 if (chip->model == PMAC_SCREAMER)
58 out_le32(&chip->awacs->codec_ctrl, val | (chip->subframe << 22));
59 while (in_le32(&chip->awacs->codec_ctrl) & MASK_NEWECMD) {
60 if (! --timeout) {
61 dev_dbg(chip->card->dev, "%s timeout\n", __func__);
71 chip->awacs_reg[reg] = val;
84 if (chip->model != PMAC_SCREAMER)
90 snd_pmac_awacs_write_noreg(chip, 1, chip->awacs_reg[1]);
91 if (chip->manufacturer == 0x1)
95 chip->awacs_reg[1] | MASK_RECALIBRATE |
97 snd_pmac_awacs_write_noreg(chip, 1, chip->awacs_reg[1]);
98 snd_pmac_awacs_write_noreg(chip, 6, chip->awacs_reg[6]);
111 chip->awacs_reg[1] &= ~MASK_SAMPLERATE;
112 chip->awacs_reg[1] |= chip->rate_index << 3;
113 snd_pmac_awacs_write_reg(chip, 1, chip->awacs_reg[1]);
121 * volumes: 0-15 stereo
126 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
127 uinfo->count = 2;
128 uinfo->value.integer.min = 0;
129 uinfo->value.integer.max = 15;
137 int reg = kcontrol->private_value & 0xff;
138 int lshift = (kcontrol->private_value >> 8) & 0xff;
139 int inverted = (kcontrol->private_value >> 16) & 1;
142 guard(spinlock_irqsave)(&chip->reg_lock);
143 vol[0] = (chip->awacs_reg[reg] >> lshift) & 0xf;
144 vol[1] = chip->awacs_reg[reg] & 0xf;
145 if (inverted) {
146 vol[0] = 0x0f - vol[0];
147 vol[1] = 0x0f - vol[1];
149 ucontrol->value.integer.value[0] = vol[0];
150 ucontrol->value.integer.value[1] = vol[1];
158 int reg = kcontrol->private_value & 0xff;
159 int lshift = (kcontrol->private_value >> 8) & 0xff;
160 int inverted = (kcontrol->private_value >> 16) & 1;
164 vol[0] = ucontrol->value.integer.value[0];
165 vol[1] = ucontrol->value.integer.value[1];
167 return -EINVAL;
168 if (inverted) {
169 vol[0] = 0x0f - vol[0];
170 vol[1] = 0x0f - vol[1];
174 guard(spinlock_irqsave)(&chip->reg_lock);
175 oldval = chip->awacs_reg[reg];
199 int reg = kcontrol->private_value & 0xff;
200 int shift = (kcontrol->private_value >> 8) & 0xff;
201 int invert = (kcontrol->private_value >> 16) & 1;
204 guard(spinlock_irqsave)(&chip->reg_lock);
205 val = (chip->awacs_reg[reg] >> shift) & 1;
207 val = 1 - val;
208 ucontrol->value.integer.value[0] = val;
216 int reg = kcontrol->private_value & 0xff;
217 int shift = (kcontrol->private_value >> 8) & 0xff;
218 int invert = (kcontrol->private_value >> 16) & 1;
222 guard(spinlock_irqsave)(&chip->reg_lock);
223 val = chip->awacs_reg[reg] & ~mask;
224 if (ucontrol->value.integer.value[0] != invert)
226 changed = chip->awacs_reg[reg] != val;
257 * level = 0 - 14, 7 = 0 dB
261 amp->amp_tone[0] = bass;
262 amp->amp_tone[1] = treble;
264 bass = (14 - bass) + 8;
266 treble = (14 - treble) + 8;
271 * vol = 0 - 31 (attenuation), 32 = mute bit, stereo
276 if (do_check && amp->amp_vol[index][0] == lvol &&
277 amp->amp_vol[index][1] == rvol)
281 amp->amp_vol[index][0] = lvol;
282 amp->amp_vol[index][1] = rvol;
287 * 0 = -79 dB, 79 = 0 dB, 99 = +20 dB
291 amp->amp_master = vol;
293 vol = 32 + (79 - vol);
295 vol = 32 - (vol - 79);
301 struct awacs_amp *amp = chip->mixer_data;
305 chip->mixer_data = NULL;
306 chip->mixer_free = NULL;
316 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
317 uinfo->count = 2;
318 uinfo->value.integer.min = 0;
319 uinfo->value.integer.max = 31;
327 int index = kcontrol->private_value;
328 struct awacs_amp *amp = chip->mixer_data;
330 ucontrol->value.integer.value[0] = 31 - (amp->amp_vol[index][0] & 31);
331 ucontrol->value.integer.value[1] = 31 - (amp->amp_vol[index][1] & 31);
339 int index = kcontrol->private_value;
341 struct awacs_amp *amp = chip->mixer_data;
343 vol[0] = (31 - (ucontrol->value.integer.value[0] & 31))
344 | (amp->amp_vol[index][0] & 32);
345 vol[1] = (31 - (ucontrol->value.integer.value[1] & 31))
346 | (amp->amp_vol[index][1] & 32);
354 int index = kcontrol->private_value;
355 struct awacs_amp *amp = chip->mixer_data;
357 ucontrol->value.integer.value[0] = (amp->amp_vol[index][0] & 32)
359 ucontrol->value.integer.value[1] = (amp->amp_vol[index][1] & 32)
368 int index = kcontrol->private_value;
370 struct awacs_amp *amp = chip->mixer_data;
372 vol[0] = (ucontrol->value.integer.value[0] ? 0 : 32)
373 | (amp->amp_vol[index][0] & 31);
374 vol[1] = (ucontrol->value.integer.value[1] ? 0 : 32)
375 | (amp->amp_vol[index][1] & 31);
382 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
383 uinfo->count = 1;
384 uinfo->value.integer.min = 0;
385 uinfo->value.integer.max = 14;
393 int index = kcontrol->private_value;
394 struct awacs_amp *amp = chip->mixer_data;
396 ucontrol->value.integer.value[0] = amp->amp_tone[index];
404 int index = kcontrol->private_value;
405 struct awacs_amp *amp = chip->mixer_data;
408 val = ucontrol->value.integer.value[0];
410 return -EINVAL;
411 if (val != amp->amp_tone[index]) {
412 amp->amp_tone[index] = val;
413 awacs_amp_set_tone(amp, amp->amp_tone[0], amp->amp_tone[1]);
422 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
423 uinfo->count = 1;
424 uinfo->value.integer.min = 0;
425 uinfo->value.integer.max = 99;
433 struct awacs_amp *amp = chip->mixer_data;
435 ucontrol->value.integer.value[0] = amp->amp_master;
443 struct awacs_amp *amp = chip->mixer_data;
446 val = ucontrol->value.integer.value[0];
448 return -EINVAL;
449 if (val != amp->amp_master) {
450 amp->amp_master = val;
451 awacs_amp_set_master(amp, amp->amp_master);
476 .name = "Tone Control - Bass",
483 .name = "Tone Control - Treble",
524 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
525 uinfo->count = 1;
526 uinfo->value.integer.min = 0;
527 uinfo->value.integer.max = 3;
537 guard(spinlock_irqsave)(&chip->reg_lock);
538 if (chip->awacs_reg[6] & MASK_MIC_BOOST)
540 if (chip->awacs_reg[0] & MASK_GAINLINE)
542 ucontrol->value.integer.value[0] = val;
553 guard(spinlock_irqsave)(&chip->reg_lock);
554 val0 = chip->awacs_reg[0] & ~MASK_GAINLINE;
555 val6 = chip->awacs_reg[6] & ~MASK_MIC_BOOST;
556 if (ucontrol->value.integer.value[0] & 1)
558 if (ucontrol->value.integer.value[0] & 2)
560 if (val0 != chip->awacs_reg[0]) {
564 if (val6 != chip->awacs_reg[6]) {
582 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1),
584 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_LINE, 0),
592 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1),
593 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
599 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
605 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
615 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
632 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
665 AWACS_SWITCH("CD Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0),
697 err = snd_ctl_add(chip->card, snd_ctl_new1(&mixers[i], chip));
710 snd_pmac_awacs_write_noreg(chip, 0, chip->awacs_reg[0]);
711 snd_pmac_awacs_write_noreg(chip, 1, chip->awacs_reg[1]);
712 snd_pmac_awacs_write_noreg(chip, 2, chip->awacs_reg[2]);
713 snd_pmac_awacs_write_noreg(chip, 4, chip->awacs_reg[4]);
714 if (chip->model == PMAC_SCREAMER) {
715 snd_pmac_awacs_write_noreg(chip, 5, chip->awacs_reg[5]);
716 snd_pmac_awacs_write_noreg(chip, 6, chip->awacs_reg[6]);
717 snd_pmac_awacs_write_noreg(chip, 7, chip->awacs_reg[7]);
724 snd_pmac_awacs_write_noreg(chip, 1, (chip->awacs_reg[1]
734 chip->awacs_reg[1] & ~MASK_PAROUT);
739 if (chip->model == PMAC_SCREAMER) {
742 snd_pmac_awacs_write_noreg(chip, 6, chip->awacs_reg[6]);
746 if (chip->mixer_data) {
747 struct awacs_amp *amp = chip->mixer_data;
749 amp->amp_vol[0][0], amp->amp_vol[0][1], 0);
751 amp->amp_vol[1][0], amp->amp_vol[1][1], 0);
752 awacs_amp_set_tone(amp, amp->amp_tone[0], amp->amp_tone[1]);
753 awacs_amp_set_master(amp, amp->amp_master);
774 * auto-mute stuffs
778 return (in_le32(&chip->awacs->codec_stat) & chip->hp_stat_mask) ? 1 : 0;
785 vol[0] = amp->amp_vol[index][0] & 31;
786 vol[1] = amp->amp_vol[index][1] & 31;
797 if (chip->auto_mute) {
799 if (chip->mixer_data) {
800 struct awacs_amp *amp = chip->mixer_data;
814 int reg = chip->awacs_reg[1]
831 if (do_notify && reg == chip->awacs_reg[1])
836 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
837 &chip->master_sw_ctl->id);
838 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
839 &chip->speaker_sw_ctl->id);
840 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
841 &chip->hp_detect_ctl->id);
868 * as start-up
870 chip->awacs_reg[0] = MASK_MUX_CD | 0xff | MASK_GAINLINE;
871 chip->awacs_reg[1] = MASK_CMUTE | MASK_AMUTE;
873 if (chip->has_iic || chip->device_id == 0x5 ||
874 /* chip->_device_id == 0x8 || */
875 chip->device_id == 0xb)
876 chip->awacs_reg[1] |= MASK_PAROUT;
882 chip->awacs_reg[2] = vol;
883 chip->awacs_reg[4] = vol;
884 if (chip->model == PMAC_SCREAMER) {
886 chip->awacs_reg[5] = vol;
888 chip->awacs_reg[6] = MASK_MIC_BOOST;
889 chip->awacs_reg[7] = 0;
893 chip->manufacturer = (in_le32(&chip->awacs->codec_stat) >> 8) & 0xf;
896 chip->revision = (in_le32(&chip->awacs->codec_stat) >> 12) & 0xf;
898 if (chip->revision == 3 && chip->has_iic && CHECK_CUDA_AMP()) {
901 return -ENOMEM;
902 chip->mixer_data = amp;
903 chip->mixer_free = awacs_amp_free;
912 if (chip->hp_stat_mask == 0) {
913 /* set headphone-jack detection bit */
914 switch (chip->model) {
916 chip->hp_stat_mask = pm7500 || pm5500 ? MASK_HDPCONN
920 switch (chip->device_id) {
923 chip->hp_stat_mask = imac
931 chip->hp_stat_mask = MASK_LOCONN;
934 chip->hp_stat_mask = MASK_HDPCONN;
947 strscpy(chip->card->mixername, "PowerMac AWACS");
955 else if (chip->model == PMAC_SCREAMER || pm5500)
976 err = snd_ctl_add(chip->card,
984 err = snd_ctl_add(chip->card,
1002 chip->master_sw_ctl = snd_ctl_new1((pm7500 || imac || g4agp || lombard)
1007 err = snd_ctl_add(chip->card, chip->master_sw_ctl);
1011 if (chip->mixer_data) {
1023 chip->master_sw_ctl = snd_ctl_new1(&snd_pmac_awacs_amp_hp_sw,
1025 err = snd_ctl_add(chip->card, chip->master_sw_ctl);
1028 chip->speaker_sw_ctl = snd_ctl_new1(&snd_pmac_awacs_amp_spk_sw,
1030 err = snd_ctl_add(chip->card, chip->speaker_sw_ctl);
1037 err = snd_ctl_add(chip->card,
1042 chip->speaker_sw_ctl = snd_ctl_new1(imac1
1047 err = snd_ctl_add(chip->card, chip->speaker_sw_ctl);
1056 chip->master_sw_ctl);
1060 chip->speaker_sw_ctl);
1063 err = snd_ctl_add(chip->card, vmaster_sw);
1074 err = snd_ctl_add(chip->card, vmaster_vol);
1087 else if (chip->model == PMAC_SCREAMER)
1104 chip->set_format = snd_pmac_awacs_set_format;
1106 chip->suspend = snd_pmac_awacs_suspend;
1107 chip->resume = snd_pmac_awacs_resume;
1113 chip->detect_headphone = snd_pmac_awacs_detect_headphone;
1114 chip->update_automute = snd_pmac_awacs_update_automute;
1117 if (chip->model == PMAC_SCREAMER) {
1118 snd_pmac_awacs_write_noreg(chip, 6, chip->awacs_reg[6]);
1119 snd_pmac_awacs_write_noreg(chip, 0, chip->awacs_reg[0]);