[alsa-devel] Why my linux OS has only 8 sound cards ? How can I modify it ?
Takashi Iwai
tiwai at suse.de
Tue Nov 8 16:57:34 CET 2011
At Tue, 8 Nov 2011 07:43:26 -0800,
Linus Torvalds wrote:
>
> Chris - you need to pick a better set of people to ask. A mailing
> list, right maintainer etc.
>
> Takashi, any idea? Do we have some 8-sound-card limit somewhere?
>
> I do see that we have that odd
>
> if (card && card->number >= 8)
> return 0; /* ignore silently */
>
> in sound/core/sound_oss.c: snd_register_oss_device(), but it has no
> comments. The thing goes back to 2005 with the commit log entry of
> "[ALSA] dynamic minors (6/6): increase maximum number of sound cards",
> but the value '8'isn't explained.
ALSA itself can support 32 cards when CONFIG_SND_DYNAMIC_MINORS is
set, which assumes the use of udev. Most of modern distros set this
already. That's why Chris got already more than 8 devices seen in
ALSA side.
The above code is, however, about OSS-emulation. And I guess it's
just a left-over of the old static limitation. Actually OSS could
support up to 16 cards (in theory).
Below is an untested fix patch. Does it work?
thanks,
Takashi
>
> Linus
>
>
> On Tue, Nov 8, 2011 at 12:30 AM, Chris Shen <chris2shen at gmail.com> wrote:
> > Hi,everyone!
> > My version of kernel is linux-2.6.35 .And my board has 10 sounds
> > cards.After system was up,I used the comand "aplay -l ".Then console
> > would display this:
> > **** List of PLAYBACK Hardware Devices ****
> > card 0: imx3stack [imx-3stack], device 0: WM8731 WM8731-0 []
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 1: default [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 2: default_1 [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 3: default_2 [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 4: default_3 [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 5: default_4 [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 6: default_5 [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 7: default_6 [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 8: default_7 [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > card 9: default_8 [C-Media USB Headphone Set ], device 0: USB Audio
> > [USB Audio]
> > Subdevices: 1/1
> > Subdevice #0: subdevice #0
> > But,when I used the command "ls /dev/dsp*" ,the console display:
> > /dev/dsp /dev/dsp2 /dev/dsp4 /dev/dsp6
> > /dev/dsp1 /dev/dsp3 /dev/dsp5 /dev/dsp7
> > when the board is up ,I found have this err "unable to register OSS
> > mixer device 8:0" and "unable to register OSS mixer device 9:0" .
> > I think the kernel's max sound cards is 8 .How can I modify it ?
> > Thank you!
> >
>
---
From: Takashi Iwai <tiwai at suse.de>
Subject: [PATCH] ALSA: Fix the card number limit of OSS-emulation
There are left-over codes from the ancient days with the static device
number limitation of 8. Actaully OSS can support up to 16 cards.
Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
sound/core/sound_oss.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/core/sound_oss.c b/sound/core/sound_oss.c
index c700920..075fc86 100644
--- a/sound/core/sound_oss.c
+++ b/sound/core/sound_oss.c
@@ -111,7 +111,7 @@ int snd_register_oss_device(int type, struct snd_card *card, int dev,
int register1 = -1, register2 = -1;
struct device *carddev = snd_card_get_device_link(card);
- if (card && card->number >= 8)
+ if (card && card->number >= SNDRV_MINOR_OSS_DEVICES)
return 0; /* ignore silently */
if (minor < 0)
return minor;
@@ -170,7 +170,7 @@ int snd_unregister_oss_device(int type, struct snd_card *card, int dev)
int track2 = -1;
struct snd_minor *mptr;
- if (card && card->number >= 8)
+ if (card && card->number >= SNDRV_MINOR_OSS_DEVICES)
return 0;
if (minor < 0)
return minor;
--
1.7.7
More information about the Alsa-devel
mailing list