[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>
This commit is contained in:
parent
d6649bc76a
commit
9ae250d175
|
@ -876,7 +876,7 @@ static void __init detect_byte_swap(pmac_t *chip)
|
||||||
*/
|
*/
|
||||||
static int __init snd_pmac_detect(pmac_t *chip)
|
static int __init snd_pmac_detect(pmac_t *chip)
|
||||||
{
|
{
|
||||||
struct device_node *sound;
|
struct device_node *sound = NULL;
|
||||||
unsigned int *prop, l;
|
unsigned int *prop, l;
|
||||||
struct macio_chip* macio;
|
struct macio_chip* macio;
|
||||||
|
|
||||||
|
@ -906,20 +906,22 @@ static int __init snd_pmac_detect(pmac_t *chip)
|
||||||
chip->is_pbook_G3 = 1;
|
chip->is_pbook_G3 = 1;
|
||||||
chip->node = find_devices("awacs");
|
chip->node = find_devices("awacs");
|
||||||
if (chip->node)
|
if (chip->node)
|
||||||
return 0; /* ok */
|
sound = chip->node;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* powermac G3 models have a node called "davbus"
|
* powermac G3 models have a node called "davbus"
|
||||||
* with a child called "sound".
|
* with a child called "sound".
|
||||||
*/
|
*/
|
||||||
chip->node = find_devices("davbus");
|
if (!chip->node)
|
||||||
|
chip->node = find_devices("davbus");
|
||||||
/*
|
/*
|
||||||
* if we didn't find a davbus device, try 'i2s-a' since
|
* if we didn't find a davbus device, try 'i2s-a' since
|
||||||
* this seems to be what iBooks have
|
* this seems to be what iBooks have
|
||||||
*/
|
*/
|
||||||
if (! chip->node) {
|
if (! chip->node) {
|
||||||
chip->node = find_devices("i2s-a");
|
chip->node = find_devices("i2s-a");
|
||||||
if (chip->node && chip->node->parent && chip->node->parent->parent) {
|
if (chip->node && chip->node->parent &&
|
||||||
|
chip->node->parent->parent) {
|
||||||
if (device_is_compatible(chip->node->parent->parent,
|
if (device_is_compatible(chip->node->parent->parent,
|
||||||
"K2-Keylargo"))
|
"K2-Keylargo"))
|
||||||
chip->is_k2 = 1;
|
chip->is_k2 = 1;
|
||||||
|
@ -928,9 +930,11 @@ static int __init snd_pmac_detect(pmac_t *chip)
|
||||||
if (! chip->node)
|
if (! chip->node)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
sound = find_devices("sound");
|
if (!sound) {
|
||||||
while (sound && sound->parent != chip->node)
|
sound = find_devices("sound");
|
||||||
sound = sound->next;
|
while (sound && sound->parent != chip->node)
|
||||||
|
sound = sound->next;
|
||||||
|
}
|
||||||
if (! sound)
|
if (! sound)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
prop = (unsigned int *) get_property(sound, "sub-frame", NULL);
|
prop = (unsigned int *) get_property(sound, "sub-frame", NULL);
|
||||||
|
@ -1019,7 +1023,8 @@ static int __init snd_pmac_detect(pmac_t *chip)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chip->pdev == NULL)
|
if (chip->pdev == NULL)
|
||||||
printk(KERN_WARNING "snd-powermac: can't locate macio PCI device !\n");
|
printk(KERN_WARNING "snd-powermac: can't locate macio PCI"
|
||||||
|
" device !\n");
|
||||||
|
|
||||||
detect_byte_swap(chip);
|
detect_byte_swap(chip);
|
||||||
|
|
||||||
|
@ -1027,7 +1032,8 @@ static int __init snd_pmac_detect(pmac_t *chip)
|
||||||
are available */
|
are available */
|
||||||
prop = (unsigned int *) get_property(sound, "sample-rates", &l);
|
prop = (unsigned int *) get_property(sound, "sample-rates", &l);
|
||||||
if (! prop)
|
if (! prop)
|
||||||
prop = (unsigned int *) get_property(sound, "output-frame-rates", &l);
|
prop = (unsigned int *) get_property(sound,
|
||||||
|
"output-frame-rates", &l);
|
||||||
if (prop) {
|
if (prop) {
|
||||||
int i;
|
int i;
|
||||||
chip->freqs_ok = 0;
|
chip->freqs_ok = 0;
|
||||||
|
@ -1054,7 +1060,8 @@ static int __init snd_pmac_detect(pmac_t *chip)
|
||||||
/*
|
/*
|
||||||
* exported - boolean info callbacks for ease of programming
|
* exported - boolean info callbacks for ease of programming
|
||||||
*/
|
*/
|
||||||
int snd_pmac_boolean_stereo_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
|
int snd_pmac_boolean_stereo_info(snd_kcontrol_t *kcontrol,
|
||||||
|
snd_ctl_elem_info_t *uinfo)
|
||||||
{
|
{
|
||||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
|
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
|
||||||
uinfo->count = 2;
|
uinfo->count = 2;
|
||||||
|
@ -1063,7 +1070,8 @@ int snd_pmac_boolean_stereo_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int snd_pmac_boolean_mono_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
|
int snd_pmac_boolean_mono_info(snd_kcontrol_t *kcontrol,
|
||||||
|
snd_ctl_elem_info_t *uinfo)
|
||||||
{
|
{
|
||||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
|
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
|
||||||
uinfo->count = 1;
|
uinfo->count = 1;
|
||||||
|
|
Loading…
Reference in a new issue