ALSA: snd-powermac: HP detection for 1st iMac G3 SL

Correct headphone detection for 1st generation iMac G3 Slot-loading (Screamer).

This patch fixes the regression in the recent snd-powermac which
doesn't support some G3/G4 PowerMacs:
http://lkml.org/lkml/2008/10/1/220

Signed-off-by: Risto Suominen <Risto.Suominen@gmail.com>
Tested-by: Mariusz Kozlowski <m.kozlowski@tuxland.pl>
Cc: stable@kernel.org
Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by Risto Suominen and committed by Takashi Iwai 030b655b 4dbf95ba

+22 -9
+22 -9
sound/ppc/awacs.c
··· 695 static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw __initdata = 696 AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1); 697 698 - static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac __initdata = 699 AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 0); 700 701 ··· 775 776 #define IS_PM7500 (machine_is_compatible("AAPL,7500")) 777 #define IS_BEIGE (machine_is_compatible("AAPL,Gossamer")) 778 - #define IS_IMAC (machine_is_compatible("PowerMac2,1") \ 779 - || machine_is_compatible("PowerMac2,2") \ 780 || machine_is_compatible("PowerMac4,1")) 781 #define IS_G4AGP (machine_is_compatible("PowerMac3,1")) 782 783 - static int imac; 784 785 #ifdef PMAC_SUPPORT_AUTOMUTE 786 /* ··· 826 { 827 int reg = chip->awacs_reg[1] 828 | (MASK_HDMUTE | MASK_SPKMUTE); 829 - if (imac) { 830 reg &= ~MASK_SPKMUTE; 831 reg &= ~MASK_PAROUT1; 832 } 833 if (snd_pmac_awacs_detect_headphone(chip)) 834 reg &= ~MASK_HDMUTE; 835 - else if (imac) 836 reg |= MASK_PAROUT1; 837 else 838 reg &= ~MASK_SPKMUTE; ··· 867 int pm7500 = IS_PM7500; 868 int beige = IS_BEIGE; 869 int g4agp = IS_G4AGP; 870 int err, vol; 871 872 - imac = IS_IMAC; 873 /* looks like MASK_GAINLINE triggers something, so we set here 874 * as start-up 875 */ ··· 1028 snd_pmac_awacs_speaker_vol); 1029 if (err < 0) 1030 return err; 1031 - chip->speaker_sw_ctl = snd_ctl_new1(imac 1032 - ? &snd_pmac_awacs_speaker_sw_imac 1033 : &snd_pmac_awacs_speaker_sw, chip); 1034 err = snd_ctl_add(chip->card, chip->speaker_sw_ctl); 1035 if (err < 0)
··· 695 static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw __initdata = 696 AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1); 697 698 + static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac1 __initdata = 699 + AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 1); 700 + 701 + static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac2 __initdata = 702 AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 0); 703 704 ··· 772 773 #define IS_PM7500 (machine_is_compatible("AAPL,7500")) 774 #define IS_BEIGE (machine_is_compatible("AAPL,Gossamer")) 775 + #define IS_IMAC1 (machine_is_compatible("PowerMac2,1")) 776 + #define IS_IMAC2 (machine_is_compatible("PowerMac2,2") \ 777 || machine_is_compatible("PowerMac4,1")) 778 #define IS_G4AGP (machine_is_compatible("PowerMac3,1")) 779 780 + static int imac1, imac2; 781 782 #ifdef PMAC_SUPPORT_AUTOMUTE 783 /* ··· 823 { 824 int reg = chip->awacs_reg[1] 825 | (MASK_HDMUTE | MASK_SPKMUTE); 826 + if (imac1) { 827 + reg &= ~MASK_SPKMUTE; 828 + reg |= MASK_PAROUT1; 829 + } else if (imac2) { 830 reg &= ~MASK_SPKMUTE; 831 reg &= ~MASK_PAROUT1; 832 } 833 if (snd_pmac_awacs_detect_headphone(chip)) 834 reg &= ~MASK_HDMUTE; 835 + else if (imac1) 836 + reg &= ~MASK_PAROUT1; 837 + else if (imac2) 838 reg |= MASK_PAROUT1; 839 else 840 reg &= ~MASK_SPKMUTE; ··· 859 int pm7500 = IS_PM7500; 860 int beige = IS_BEIGE; 861 int g4agp = IS_G4AGP; 862 + int imac; 863 int err, vol; 864 865 + imac1 = IS_IMAC1; 866 + imac2 = IS_IMAC2; 867 + imac = imac1 || imac2; 868 /* looks like MASK_GAINLINE triggers something, so we set here 869 * as start-up 870 */ ··· 1017 snd_pmac_awacs_speaker_vol); 1018 if (err < 0) 1019 return err; 1020 + chip->speaker_sw_ctl = snd_ctl_new1(imac1 1021 + ? &snd_pmac_awacs_speaker_sw_imac1 1022 + : imac2 1023 + ? &snd_pmac_awacs_speaker_sw_imac2 1024 : &snd_pmac_awacs_speaker_sw, chip); 1025 err = snd_ctl_add(chip->card, chip->speaker_sw_ctl); 1026 if (err < 0)