awacs.c (2d8ad8719591fa803b0d589ed057fa46f49b7155) | awacs.c (15afafc2565bc785eb7a440b8b4a53f77910cf04) |
---|---|
1/* 2 * PMac AWACS lowlevel functions 3 * 4 * Copyright (c) by Takashi Iwai <tiwai@suse.de> 5 * code based on dmasound.c. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by --- 463 unchanged lines hidden (view full) --- 472 return 1; 473 } 474 return 0; 475} 476 477#define AMP_CH_SPK 0 478#define AMP_CH_HD 1 479 | 1/* 2 * PMac AWACS lowlevel functions 3 * 4 * Copyright (c) by Takashi Iwai <tiwai@suse.de> 5 * code based on dmasound.c. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by --- 463 unchanged lines hidden (view full) --- 472 return 1; 473 } 474 return 0; 475} 476 477#define AMP_CH_SPK 0 478#define AMP_CH_HD 1 479 |
480static struct snd_kcontrol_new snd_pmac_awacs_amp_vol[] __devinitdata = { | 480static struct snd_kcontrol_new snd_pmac_awacs_amp_vol[] = { |
481 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 482 .name = "Speaker Playback Volume", 483 .info = snd_pmac_awacs_info_volume_amp, 484 .get = snd_pmac_awacs_get_volume_amp, 485 .put = snd_pmac_awacs_put_volume_amp, 486 .private_value = AMP_CH_SPK, 487 }, 488 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, --- 20 unchanged lines hidden (view full) --- 509 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 510 .name = "Amp Master Playback Volume", 511 .info = snd_pmac_awacs_info_master_amp, 512 .get = snd_pmac_awacs_get_master_amp, 513 .put = snd_pmac_awacs_put_master_amp, 514 }, 515}; 516 | 481 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 482 .name = "Speaker Playback Volume", 483 .info = snd_pmac_awacs_info_volume_amp, 484 .get = snd_pmac_awacs_get_volume_amp, 485 .put = snd_pmac_awacs_put_volume_amp, 486 .private_value = AMP_CH_SPK, 487 }, 488 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, --- 20 unchanged lines hidden (view full) --- 509 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 510 .name = "Amp Master Playback Volume", 511 .info = snd_pmac_awacs_info_master_amp, 512 .get = snd_pmac_awacs_get_master_amp, 513 .put = snd_pmac_awacs_put_master_amp, 514 }, 515}; 516 |
517static struct snd_kcontrol_new snd_pmac_awacs_amp_hp_sw __devinitdata = { | 517static struct snd_kcontrol_new snd_pmac_awacs_amp_hp_sw = { |
518 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 519 .name = "Headphone Playback Switch", 520 .info = snd_pmac_boolean_stereo_info, 521 .get = snd_pmac_awacs_get_switch_amp, 522 .put = snd_pmac_awacs_put_switch_amp, 523 .private_value = AMP_CH_HD, 524}; 525 | 518 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 519 .name = "Headphone Playback Switch", 520 .info = snd_pmac_boolean_stereo_info, 521 .get = snd_pmac_awacs_get_switch_amp, 522 .put = snd_pmac_awacs_put_switch_amp, 523 .private_value = AMP_CH_HD, 524}; 525 |
526static struct snd_kcontrol_new snd_pmac_awacs_amp_spk_sw __devinitdata = { | 526static struct snd_kcontrol_new snd_pmac_awacs_amp_spk_sw = { |
527 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 528 .name = "Speaker Playback Switch", 529 .info = snd_pmac_boolean_stereo_info, 530 .get = snd_pmac_awacs_get_switch_amp, 531 .put = snd_pmac_awacs_put_switch_amp, 532 .private_value = AMP_CH_SPK, 533}; 534 --- 55 unchanged lines hidden (view full) --- 590 } 591 spin_unlock_irqrestore(&chip->reg_lock, flags); 592 return changed; 593} 594 595/* 596 * lists of mixer elements 597 */ | 527 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 528 .name = "Speaker Playback Switch", 529 .info = snd_pmac_boolean_stereo_info, 530 .get = snd_pmac_awacs_get_switch_amp, 531 .put = snd_pmac_awacs_put_switch_amp, 532 .private_value = AMP_CH_SPK, 533}; 534 --- 55 unchanged lines hidden (view full) --- 590 } 591 spin_unlock_irqrestore(&chip->reg_lock, flags); 592 return changed; 593} 594 595/* 596 * lists of mixer elements 597 */ |
598static struct snd_kcontrol_new snd_pmac_awacs_mixers[] __devinitdata = { | 598static struct snd_kcontrol_new snd_pmac_awacs_mixers[] = { |
599 AWACS_SWITCH("Master Capture Switch", 1, SHIFT_LOOPTHRU, 0), 600 AWACS_VOLUME("Master Capture Volume", 0, 4, 0), 601/* AWACS_SWITCH("Unknown Playback Switch", 6, SHIFT_PAROUT0, 0), */ 602}; 603 | 599 AWACS_SWITCH("Master Capture Switch", 1, SHIFT_LOOPTHRU, 0), 600 AWACS_VOLUME("Master Capture Volume", 0, 4, 0), 601/* AWACS_SWITCH("Unknown Playback Switch", 6, SHIFT_PAROUT0, 0), */ 602}; 603 |
604static struct snd_kcontrol_new snd_pmac_screamer_mixers_beige[] __devinitdata = { | 604static struct snd_kcontrol_new snd_pmac_screamer_mixers_beige[] = { |
605 AWACS_VOLUME("Master Playback Volume", 2, 6, 1), 606 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1), 607 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), 608 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_LINE, 0), 609}; 610 | 605 AWACS_VOLUME("Master Playback Volume", 2, 6, 1), 606 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1), 607 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), 608 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_LINE, 0), 609}; 610 |
611static struct snd_kcontrol_new snd_pmac_screamer_mixers_lo[] __devinitdata = { | 611static struct snd_kcontrol_new snd_pmac_screamer_mixers_lo[] = { |
612 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), 613}; 614 | 612 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), 613}; 614 |
615static struct snd_kcontrol_new snd_pmac_screamer_mixers_imac[] __devinitdata = { | 615static struct snd_kcontrol_new snd_pmac_screamer_mixers_imac[] = { |
616 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1), 617 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 618}; 619 | 616 AWACS_VOLUME("Play-through Playback Volume", 5, 6, 1), 617 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 618}; 619 |
620static struct snd_kcontrol_new snd_pmac_screamer_mixers_g4agp[] __devinitdata = { | 620static struct snd_kcontrol_new snd_pmac_screamer_mixers_g4agp[] = { |
621 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), 622 AWACS_VOLUME("Master Playback Volume", 5, 6, 1), 623 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 624 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), 625}; 626 | 621 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), 622 AWACS_VOLUME("Master Playback Volume", 5, 6, 1), 623 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 624 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), 625}; 626 |
627static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac7500[] __devinitdata = { | 627static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac7500[] = { |
628 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), 629 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 630 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), 631}; 632 | 628 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), 629 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 630 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), 631}; 632 |
633static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac5500[] __devinitdata = { | 633static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac5500[] = { |
634 AWACS_VOLUME("Headphone Playback Volume", 2, 6, 1), 635}; 636 | 634 AWACS_VOLUME("Headphone Playback Volume", 2, 6, 1), 635}; 636 |
637static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac[] __devinitdata = { | 637static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac[] = { |
638 AWACS_VOLUME("Master Playback Volume", 2, 6, 1), 639 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 640}; 641 642/* FIXME: is this correct order? 643 * screamer (powerbook G3 pismo) seems to have different bits... 644 */ | 638 AWACS_VOLUME("Master Playback Volume", 2, 6, 1), 639 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 640}; 641 642/* FIXME: is this correct order? 643 * screamer (powerbook G3 pismo) seems to have different bits... 644 */ |
645static struct snd_kcontrol_new snd_pmac_awacs_mixers2[] __devinitdata = { | 645static struct snd_kcontrol_new snd_pmac_awacs_mixers2[] = { |
646 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_LINE, 0), 647 AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_MIC, 0), 648}; 649 | 646 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_LINE, 0), 647 AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_MIC, 0), 648}; 649 |
650static struct snd_kcontrol_new snd_pmac_screamer_mixers2[] __devinitdata = { | 650static struct snd_kcontrol_new snd_pmac_screamer_mixers2[] = { |
651 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), 652 AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_LINE, 0), 653}; 654 | 651 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), 652 AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_LINE, 0), 653}; 654 |
655static struct snd_kcontrol_new snd_pmac_awacs_mixers2_pmac5500[] __devinitdata = { | 655static struct snd_kcontrol_new snd_pmac_awacs_mixers2_pmac5500[] = { |
656 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 657}; 658 | 656 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), 657}; 658 |
659static struct snd_kcontrol_new snd_pmac_awacs_master_sw __devinitdata = | 659static struct snd_kcontrol_new snd_pmac_awacs_master_sw = |
660AWACS_SWITCH("Master Playback Switch", 1, SHIFT_HDMUTE, 1); 661 | 660AWACS_SWITCH("Master Playback Switch", 1, SHIFT_HDMUTE, 1); 661 |
662static struct snd_kcontrol_new snd_pmac_awacs_master_sw_imac __devinitdata = | 662static struct snd_kcontrol_new snd_pmac_awacs_master_sw_imac = |
663AWACS_SWITCH("Line out Playback Switch", 1, SHIFT_HDMUTE, 1); 664 | 663AWACS_SWITCH("Line out Playback Switch", 1, SHIFT_HDMUTE, 1); 664 |
665static struct snd_kcontrol_new snd_pmac_awacs_master_sw_pmac5500 __devinitdata = | 665static struct snd_kcontrol_new snd_pmac_awacs_master_sw_pmac5500 = |
666AWACS_SWITCH("Headphone Playback Switch", 1, SHIFT_HDMUTE, 1); 667 | 666AWACS_SWITCH("Headphone Playback Switch", 1, SHIFT_HDMUTE, 1); 667 |
668static struct snd_kcontrol_new snd_pmac_awacs_mic_boost[] __devinitdata = { | 668static struct snd_kcontrol_new snd_pmac_awacs_mic_boost[] = { |
669 AWACS_SWITCH("Mic Boost Capture Switch", 0, SHIFT_GAINLINE, 0), 670}; 671 | 669 AWACS_SWITCH("Mic Boost Capture Switch", 0, SHIFT_GAINLINE, 0), 670}; 671 |
672static struct snd_kcontrol_new snd_pmac_screamer_mic_boost[] __devinitdata = { | 672static struct snd_kcontrol_new snd_pmac_screamer_mic_boost[] = { |
673 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 674 .name = "Mic Boost Capture Volume", 675 .info = snd_pmac_screamer_mic_boost_info, 676 .get = snd_pmac_screamer_mic_boost_get, 677 .put = snd_pmac_screamer_mic_boost_put, 678 }, 679}; 680 | 673 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 674 .name = "Mic Boost Capture Volume", 675 .info = snd_pmac_screamer_mic_boost_info, 676 .get = snd_pmac_screamer_mic_boost_get, 677 .put = snd_pmac_screamer_mic_boost_put, 678 }, 679}; 680 |
681static struct snd_kcontrol_new snd_pmac_awacs_mic_boost_pmac7500[] __devinitdata = | 681static struct snd_kcontrol_new snd_pmac_awacs_mic_boost_pmac7500[] = |
682{ 683 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0), 684}; 685 | 682{ 683 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0), 684}; 685 |
686static struct snd_kcontrol_new snd_pmac_screamer_mic_boost_beige[] __devinitdata = | 686static struct snd_kcontrol_new snd_pmac_screamer_mic_boost_beige[] = |
687{ 688 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0), 689 AWACS_SWITCH("CD Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0), 690}; 691 | 687{ 688 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0), 689 AWACS_SWITCH("CD Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0), 690}; 691 |
692static struct snd_kcontrol_new snd_pmac_screamer_mic_boost_imac[] __devinitdata = | 692static struct snd_kcontrol_new snd_pmac_screamer_mic_boost_imac[] = |
693{ 694 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0), 695 AWACS_SWITCH("Mic Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0), 696}; 697 | 693{ 694 AWACS_SWITCH("Line Boost Capture Switch", 0, SHIFT_GAINLINE, 0), 695 AWACS_SWITCH("Mic Boost Capture Switch", 6, SHIFT_MIC_BOOST, 0), 696}; 697 |
698static struct snd_kcontrol_new snd_pmac_awacs_speaker_vol[] __devinitdata = { | 698static struct snd_kcontrol_new snd_pmac_awacs_speaker_vol[] = { |
699 AWACS_VOLUME("Speaker Playback Volume", 4, 6, 1), 700}; 701 | 699 AWACS_VOLUME("Speaker Playback Volume", 4, 6, 1), 700}; 701 |
702static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw __devinitdata = | 702static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw = |
703AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1); 704 | 703AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1); 704 |
705static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac1 __devinitdata = | 705static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac1 = |
706AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_PAROUT1, 1); 707 | 706AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_PAROUT1, 1); 707 |
708static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac2 __devinitdata = | 708static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac2 = |
709AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_PAROUT1, 0); 710 711 712/* 713 * add new mixer elements to the card 714 */ 715static int build_mixers(struct snd_pmac *chip, int nums, 716 struct snd_kcontrol_new *mixers) --- 150 unchanged lines hidden (view full) --- 867 } 868} 869#endif /* PMAC_SUPPORT_AUTOMUTE */ 870 871 872/* 873 * initialize chip 874 */ | 709AWACS_SWITCH("Speaker Playback Switch", 1, SHIFT_PAROUT1, 0); 710 711 712/* 713 * add new mixer elements to the card 714 */ 715static int build_mixers(struct snd_pmac *chip, int nums, 716 struct snd_kcontrol_new *mixers) --- 150 unchanged lines hidden (view full) --- 867 } 868} 869#endif /* PMAC_SUPPORT_AUTOMUTE */ 870 871 872/* 873 * initialize chip 874 */ |
875int __devinit | 875int |
876snd_pmac_awacs_init(struct snd_pmac *chip) 877{ 878 int pm7500 = IS_PM7500; 879 int pm5500 = IS_PM5500; 880 int beige = IS_BEIGE; 881 int g4agp = IS_G4AGP; 882 int lombard = IS_LOMBARD; 883 int imac; --- 263 unchanged lines hidden --- | 876snd_pmac_awacs_init(struct snd_pmac *chip) 877{ 878 int pm7500 = IS_PM7500; 879 int pm5500 = IS_PM5500; 880 int beige = IS_BEIGE; 881 int g4agp = IS_G4AGP; 882 int lombard = IS_LOMBARD; 883 int imac; --- 263 unchanged lines hidden --- |