aboutsummaryrefslogtreecommitdiffstats
path: root/sound/ppc
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2005-05-27 15:52:57 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-28 14:13:59 -0400
commit9ae250d175e1cbff82223ce2c07897c790c5b948 (patch)
treec869acbf3cf6170400257658974f8c754af36e2e /sound/ppc
parentd6649bc76a57523209a6b2ee4844c9078a4dd8bb (diff)
[PATCH] ppc32: Fix Alsa PowerMac driver on old machines
The g5 support code broke some earlier models unfortunately as those bail out early from the detect function, before the point where I added the code to locate the PCI device for use with DMA allocations. This patch fixes it. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'sound/ppc')
-rw-r--r--sound/ppc/pmac.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/sound/ppc/pmac.c b/sound/ppc/pmac.c
index 32d94754acf8..080ef3928465 100644
--- a/sound/ppc/pmac.c
+++ b/sound/ppc/pmac.c
@@ -876,7 +876,7 @@ static void __init detect_byte_swap(pmac_t *chip)
876 */ 876 */
877static int __init snd_pmac_detect(pmac_t *chip) 877static int __init snd_pmac_detect(pmac_t *chip)
878{ 878{
879 struct device_node *sound; 879 struct device_node *sound = NULL;
880 unsigned int *prop, l; 880 unsigned int *prop, l;
881 struct macio_chip* macio; 881 struct macio_chip* macio;
882 882
@@ -906,20 +906,22 @@ static int __init snd_pmac_detect(pmac_t *chip)
906 chip->is_pbook_G3 = 1; 906 chip->is_pbook_G3 = 1;
907 chip->node = find_devices("awacs"); 907 chip->node = find_devices("awacs");
908 if (chip->node) 908 if (chip->node)
909 return 0; /* ok */ 909 sound = chip->node;
910 910
911 /* 911 /*
912 * powermac G3 models have a node called "davbus" 912 * powermac G3 models have a node called "davbus"
913 * with a child called "sound". 913 * with a child called "sound".
914 */ 914 */
915 chip->node = find_devices("davbus"); 915 if (!chip->node)
916 chip->node = find_devices("davbus");
916 /* 917 /*
917 * if we didn't find a davbus device, try 'i2s-a' since 918 * if we didn't find a davbus device, try 'i2s-a' since
918 * this seems to be what iBooks have 919 * this seems to be what iBooks have
919 */ 920 */
920 if (! chip->node) { 921 if (! chip->node) {
921 chip->node = find_devices("i2s-a"); 922 chip->node = find_devices("i2s-a");
922 if (chip->node && chip->node->parent && chip->node->parent->parent) { 923 if (chip->node && chip->node->parent &&
924 chip->node->parent->parent) {
923 if (device_is_compatible(chip->node->parent->parent, 925 if (device_is_compatible(chip->node->parent->parent,
924 "K2-Keylargo")) 926 "K2-Keylargo"))
925 chip->is_k2 = 1; 927 chip->is_k2 = 1;
@@ -928,9 +930,11 @@ static int __init snd_pmac_detect(pmac_t *chip)
928 if (! chip->node) 930 if (! chip->node)
929 return -ENODEV; 931 return -ENODEV;
930 932
931 sound = find_devices("sound"); 933 if (!sound) {
932 while (sound && sound->parent != chip->node) 934 sound = find_devices("sound");
933 sound = sound->next; 935 while (sound && sound->parent != chip->node)
936 sound = sound->next;
937 }
934 if (! sound) 938 if (! sound)
935 return -ENODEV; 939 return -ENODEV;
936 prop = (unsigned int *) get_property(sound, "sub-frame", NULL); 940 prop = (unsigned int *) get_property(sound, "sub-frame", NULL);
@@ -1019,7 +1023,8 @@ static int __init snd_pmac_detect(pmac_t *chip)
1019 } 1023 }
1020 } 1024 }
1021 if (chip->pdev == NULL) 1025 if (chip->pdev == NULL)
1022 printk(KERN_WARNING "snd-powermac: can't locate macio PCI device !\n"); 1026 printk(KERN_WARNING "snd-powermac: can't locate macio PCI"
1027 " device !\n");
1023 1028
1024 detect_byte_swap(chip); 1029 detect_byte_swap(chip);
1025 1030
@@ -1027,7 +1032,8 @@ static int __init snd_pmac_detect(pmac_t *chip)
1027 are available */ 1032 are available */
1028 prop = (unsigned int *) get_property(sound, "sample-rates", &l); 1033 prop = (unsigned int *) get_property(sound, "sample-rates", &l);
1029 if (! prop) 1034 if (! prop)
1030 prop = (unsigned int *) get_property(sound, "output-frame-rates", &l); 1035 prop = (unsigned int *) get_property(sound,
1036 "output-frame-rates", &l);
1031 if (prop) { 1037 if (prop) {
1032 int i; 1038 int i;
1033 chip->freqs_ok = 0; 1039 chip->freqs_ok = 0;
@@ -1054,7 +1060,8 @@ static int __init snd_pmac_detect(pmac_t *chip)
1054/* 1060/*
1055 * exported - boolean info callbacks for ease of programming 1061 * exported - boolean info callbacks for ease of programming
1056 */ 1062 */
1057int snd_pmac_boolean_stereo_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) 1063int snd_pmac_boolean_stereo_info(snd_kcontrol_t *kcontrol,
1064 snd_ctl_elem_info_t *uinfo)
1058{ 1065{
1059 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1066 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1060 uinfo->count = 2; 1067 uinfo->count = 2;
@@ -1063,7 +1070,8 @@ int snd_pmac_boolean_stereo_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *
1063 return 0; 1070 return 0;
1064} 1071}
1065 1072
1066int snd_pmac_boolean_mono_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) 1073int snd_pmac_boolean_mono_info(snd_kcontrol_t *kcontrol,
1074 snd_ctl_elem_info_t *uinfo)
1067{ 1075{
1068 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1076 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1069 uinfo->count = 1; 1077 uinfo->count = 1;