Re: [alsa-devel] Why my linux OS has only 8 sound cards ? How can I modify it ?
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.
Linus
On Tue, Nov 8, 2011 at 12:30 AM, Chris Shen chris2shen@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!
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@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@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@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;
Takashi Iwai wrote:
Linus Torvalds wrote:
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 ... The above code is, however, about OSS-emulation. And I guess it's just a left-over of the old static limitation.
Yes; I didn't change the limit in the OSS emulation because the minor number layout doesn't have space for all 32 cards, and extending the limit to 16 did not seem worth the effort for a 'legacy' interface.
Actually OSS could support up to 16 cards (in theory).
Below is an untested fix patch. Does it work?
Not without increasing SNDRV_OSS_MINORS, too:
diff --git a/sound/core/sound_oss.c b/sound/core/sound_oss.c index 0c164e5..d6dbe46 100644 --- a/sound/core/sound_oss.c +++ b/sound/core/sound_oss.c @@ -34,7 +34,7 @@ #include <linux/sound.h> #include <linux/mutex.h>
-#define SNDRV_OSS_MINORS 128 +#define SNDRV_OSS_MINORS 256
static struct snd_minor *snd_oss_minors[SNDRV_OSS_MINORS]; static DEFINE_MUTEX(sound_oss_mutex);
At Tue, 08 Nov 2011 18:37:53 +0100, Clemens Ladisch wrote:
Takashi Iwai wrote:
Linus Torvalds wrote:
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 ... The above code is, however, about OSS-emulation. And I guess it's just a left-over of the old static limitation.
Yes; I didn't change the limit in the OSS emulation because the minor number layout doesn't have space for all 32 cards, and extending the limit to 16 did not seem worth the effort for a 'legacy' interface.
Actually OSS could support up to 16 cards (in theory).
Below is an untested fix patch. Does it work?
Not without increasing SNDRV_OSS_MINORS, too:
Ah, good catch. Below is the revised patch.
Takashi
--- From: Takashi Iwai tiwai@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@suse.de --- v2: fix SNDRV_OSS_MINORS, too
sound/core/sound_oss.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/sound/core/sound_oss.c b/sound/core/sound_oss.c index c700920..e952833 100644 --- a/sound/core/sound_oss.c +++ b/sound/core/sound_oss.c @@ -35,7 +35,7 @@ #include <linux/sound.h> #include <linux/mutex.h>
-#define SNDRV_OSS_MINORS 128 +#define SNDRV_OSS_MINORS 256
static struct snd_minor *snd_oss_minors[SNDRV_OSS_MINORS]; static DEFINE_MUTEX(sound_oss_mutex); @@ -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;
participants (3)
-
Clemens Ladisch
-
Linus Torvalds
-
Takashi Iwai