diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2005-05-18 10:31:51 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2005-05-29 04:11:14 -0400 |
commit | 5218064c885af5c49e380d09d54f3cc86891a580 (patch) | |
tree | d4698bad2c3fd7425bb52d1d3cae7c6a8ad48ce8 | |
parent | 9502dcad6c1138a3ce2bae23ccd4be44c718d2a9 (diff) |
[ALSA] ppc32: Fix Alsa PowerMac driver on old machines
PPC PMAC driver
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: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/ppc/pmac.c | 30 |
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 | */ |
877 | static int __init snd_pmac_detect(pmac_t *chip) | 877 | static 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 | */ |
1057 | int snd_pmac_boolean_stereo_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) | 1063 | int 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 | ||
1066 | int snd_pmac_boolean_mono_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) | 1073 | int 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; |