awacs.c (75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37) awacs.c (c031b0cc77a1bef980eb360e317a6bbd54211326)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * PMac AWACS lowlevel functions
4 *
5 * Copyright (c) by Takashi Iwai <tiwai@suse.de>
6 * code based on dmasound.c.
7 */
8

--- 450 unchanged lines hidden (view full) ---

459 return 1;
460 }
461 return 0;
462}
463
464#define AMP_CH_SPK 0
465#define AMP_CH_HD 1
466
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * PMac AWACS lowlevel functions
4 *
5 * Copyright (c) by Takashi Iwai <tiwai@suse.de>
6 * code based on dmasound.c.
7 */
8

--- 450 unchanged lines hidden (view full) ---

459 return 1;
460 }
461 return 0;
462}
463
464#define AMP_CH_SPK 0
465#define AMP_CH_HD 1
466
467static struct snd_kcontrol_new snd_pmac_awacs_amp_vol[] = {
467static const struct snd_kcontrol_new snd_pmac_awacs_amp_vol[] = {
468 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
469 .name = "Speaker Playback Volume",
470 .info = snd_pmac_awacs_info_volume_amp,
471 .get = snd_pmac_awacs_get_volume_amp,
472 .put = snd_pmac_awacs_put_volume_amp,
473 .private_value = AMP_CH_SPK,
474 },
475 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER,

--- 101 unchanged lines hidden (view full) ---

577 }
578 spin_unlock_irqrestore(&chip->reg_lock, flags);
579 return changed;
580}
581
582/*
583 * lists of mixer elements
584 */
468 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
469 .name = "Speaker Playback Volume",
470 .info = snd_pmac_awacs_info_volume_amp,
471 .get = snd_pmac_awacs_get_volume_amp,
472 .put = snd_pmac_awacs_put_volume_amp,
473 .private_value = AMP_CH_SPK,
474 },
475 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER,

--- 101 unchanged lines hidden (view full) ---

577 }
578 spin_unlock_irqrestore(&chip->reg_lock, flags);
579 return changed;
580}
581
582/*
583 * lists of mixer elements
584 */
585static struct snd_kcontrol_new snd_pmac_awacs_mixers[] = {
585static const struct snd_kcontrol_new snd_pmac_awacs_mixers[] = {
586 AWACS_SWITCH("Master Capture Switch", 1, SHIFT_LOOPTHRU, 0),
587 AWACS_VOLUME("Master Capture Volume", 0, 4, 0),
588/* AWACS_SWITCH("Unknown Playback Switch", 6, SHIFT_PAROUT0, 0), */
589};
590
586 AWACS_SWITCH("Master Capture Switch", 1, SHIFT_LOOPTHRU, 0),
587 AWACS_VOLUME("Master Capture Volume", 0, 4, 0),
588/* AWACS_SWITCH("Unknown Playback Switch", 6, SHIFT_PAROUT0, 0), */
589};
590
591static struct snd_kcontrol_new snd_pmac_screamer_mixers_beige[] = {
591static const struct snd_kcontrol_new snd_pmac_screamer_mixers_beige[] = {
592 AWACS_VOLUME("Master Playback Volume", 2, 6, 1),
593 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1),
594 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
595 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_LINE, 0),
596};
597
592 AWACS_VOLUME("Master Playback Volume", 2, 6, 1),
593 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1),
594 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
595 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_LINE, 0),
596};
597
598static struct snd_kcontrol_new snd_pmac_screamer_mixers_lo[] = {
598static const struct snd_kcontrol_new snd_pmac_screamer_mixers_lo[] = {
599 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
600};
601
599 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
600};
601
602static struct snd_kcontrol_new snd_pmac_screamer_mixers_imac[] = {
602static const struct snd_kcontrol_new snd_pmac_screamer_mixers_imac[] = {
603 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1),
604 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
605};
606
603 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1),
604 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
605};
606
607static struct snd_kcontrol_new snd_pmac_screamer_mixers_g4agp[] = {
607static const struct snd_kcontrol_new snd_pmac_screamer_mixers_g4agp[] = {
608 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
609 AWACS_VOLUME("Master Playback Volume", 5, 6, 1),
610 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
611 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
612};
613
608 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
609 AWACS_VOLUME("Master Playback Volume", 5, 6, 1),
610 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
611 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
612};
613
614static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac7500[] = {
614static const struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac7500[] = {
615 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
616 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
617 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
618};
619
615 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
616 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
617 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
618};
619
620static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac5500[] = {
620static const struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac5500[] = {
621 AWACS_VOLUME("Headphone Playback Volume", 2, 6, 1),
622};
623
621 AWACS_VOLUME("Headphone Playback Volume", 2, 6, 1),
622};
623
624static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac[] = {
624static const struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac[] = {
625 AWACS_VOLUME("Master Playback Volume", 2, 6, 1),
626 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
627};
628
629/* FIXME: is this correct order?
630 * screamer (powerbook G3 pismo) seems to have different bits...
631 */
625 AWACS_VOLUME("Master Playback Volume", 2, 6, 1),
626 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
627};
628
629/* FIXME: is this correct order?
630 * screamer (powerbook G3 pismo) seems to have different bits...
631 */
632static struct snd_kcontrol_new snd_pmac_awacs_mixers2[] = {
632static const struct snd_kcontrol_new snd_pmac_awacs_mixers2[] = {
633 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_LINE, 0),
634 AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_MIC, 0),
635};
636
633 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_LINE, 0),
634 AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_MIC, 0),
635};
636
637static struct snd_kcontrol_new snd_pmac_screamer_mixers2[] = {
637static const struct snd_kcontrol_new snd_pmac_screamer_mixers2[] = {
638 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
639 AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_LINE, 0),
640};
641
638 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
639 AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_LINE, 0),
640};
641
642static struct snd_kcontrol_new snd_pmac_awacs_mixers2_pmac5500[] = {
642static const struct snd_kcontrol_new snd_pmac_awacs_mixers2_pmac5500[] = {
643 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
644};
645
643 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
644};
645
646static struct snd_kcontrol_new snd_pmac_awacs_master_sw =
646static const struct snd_kcontrol_new snd_pmac_awacs_master_sw =
647AWACS_SWITCH("Master Playback Switch", 1, SHIFT_HDMUTE, 1);
648
647AWACS_SWITCH("Master Playback Switch", 1, SHIFT_HDMUTE, 1);
648
649static struct snd_kcontrol_new snd_pmac_awacs_master_sw_imac =
649static const struct snd_kcontrol_new snd_pmac_awacs_master_sw_imac =
650AWACS_SWITCH("Line out Playback Switch", 1, SHIFT_HDMUTE, 1);
651
650AWACS_SWITCH("Line out Playback Switch", 1, SHIFT_HDMUTE, 1);
651
652static struct snd_kcontrol_new snd_pmac_awacs_master_sw_pmac5500 =
652static const struct snd_kcontrol_new snd_pmac_awacs_master_sw_pmac5500 =
653AWACS_SWITCH("Headphone Playback Switch", 1, SHIFT_HDMUTE, 1);
654
653AWACS_SWITCH("Headphone Playback Switch", 1, SHIFT_HDMUTE, 1);
654
655static struct snd_kcontrol_new snd_pmac_awacs_mic_boost[] = {
655static const struct snd_kcontrol_new snd_pmac_awacs_mic_boost[] = {
656 AWACS_SWITCH("Mic Boost Capture Switch", 0, SHIFT_GAINLINE, 0),
657};
658
656 AWACS_SWITCH("Mic Boost Capture Switch", 0, SHIFT_GAINLINE, 0),
657};
658
659static struct snd_kcontrol_new snd_pmac_screamer_mic_boost[] = {
659static const struct snd_kcontrol_new snd_pmac_screamer_mic_boost[] = {
660 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
661 .name = "Mic Boost Capture Volume",
662 .info = snd_pmac_screamer_mic_boost_info,
663 .get = snd_pmac_screamer_mic_boost_get,
664 .put = snd_pmac_screamer_mic_boost_put,
665 },
666};
667
660 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
661 .name = "Mic Boost Capture Volume",
662 .info = snd_pmac_screamer_mic_boost_info,
663 .get = snd_pmac_screamer_mic_boost_get,
664 .put = snd_pmac_screamer_mic_boost_put,
665 },
666};
667
668static struct snd_kcontrol_new snd_pmac_awacs_mic_boost_pmac7500[] =
668static const struct snd_kcontrol_new snd_pmac_awacs_mic_boost_pmac7500[] =
669{
670 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0),
671};
672
669{
670 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0),
671};
672
673static struct snd_kcontrol_new snd_pmac_screamer_mic_boost_beige[] =
673static const struct snd_kcontrol_new snd_pmac_screamer_mic_boost_beige[] =
674{
675 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0),
676 AWACS_SWITCH("CD Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0),
677};
678
674{
675 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0),
676 AWACS_SWITCH("CD Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0),
677};
678
679static struct snd_kcontrol_new snd_pmac_screamer_mic_boost_imac[] =
679static const struct snd_kcontrol_new snd_pmac_screamer_mic_boost_imac[] =
680{
681 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0),
682 AWACS_SWITCH("Mic Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0),
683};
684
680{
681 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0),
682 AWACS_SWITCH("Mic Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0),
683};
684
685static struct snd_kcontrol_new snd_pmac_awacs_speaker_vol[] = {
685static const struct snd_kcontrol_new snd_pmac_awacs_speaker_vol[] = {
686 AWACS_VOLUME("Speaker Playback Volume", 4, 6, 1),
687};
688
686 AWACS_VOLUME("Speaker Playback Volume", 4, 6, 1),
687};
688
689static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw =
689static const struct snd_kcontrol_new snd_pmac_awacs_speaker_sw =
690AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1);
691
690AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1);
691
692static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac1 =
692static const struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac1 =
693AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_PAROUT1, 1);
694
693AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_PAROUT1, 1);
694
695static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac2 =
695static const struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac2 =
696AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_PAROUT1, 0);
697
698
699/*
700 * add new mixer elements to the card
701 */
702static int build_mixers(struct snd_pmac *chip, int nums,
696AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_PAROUT1, 0);
697
698
699/*
700 * add new mixer elements to the card
701 */
702static int build_mixers(struct snd_pmac *chip, int nums,
703 struct snd_kcontrol_new *mixers)
703 const struct snd_kcontrol_new *mixers)
704{
705 int i, err;
706
707 for (i = 0; i < nums; i++) {
708 err = snd_ctl_add(chip->card, snd_ctl_new1(&mixers[i], chip));
709 if (err < 0)
710 return err;
711 }

--- 423 unchanged lines hidden ---
704{
705 int i, err;
706
707 for (i = 0; i < nums; i++) {
708 err = snd_ctl_add(chip->card, snd_ctl_new1(&mixers[i], chip));
709 if (err < 0)
710 return err;
711 }

--- 423 unchanged lines hidden ---