-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

thanks for your replies. I have my modules.conf already configured similar to 
Miguel's description. Sorry for not including it right away. From Georgi's 
very complete system information I found out some new spots in proc to look 
for things and I found out that oss emulation devices are there for both 
cards on my setup. Only the device names are not created.

I modified Georgi's mknod commands like this:

echo Creating missing Sound devices
mknod  /dev/sound/dsp1 c 14 19
mknod  /dev/sound/mixer1 c 14 16
chown root.audio /dev/sound/dsp1
chown root.audio /dev/sound/mixer1
chmod 664 /dev/sound/dsp1 /dev/sound/mixer1
ln -s /dev/sound/dsp1 /dev/dsp1
ln -s /dev/sound/mixer1 /dev/mixer1
echo "Sound should be ok now!"

and put them in my rc.local script. That does the job as a workaround. I'll 
also try the patch later. Hopefully it works with my 2.4.20 kernel. Jaroslav, 
do you know if the patch got rejected completely or only delayed? Any 
information from the kernel masters about the subject?

Thanks again to all of you for your help. Finally both soundcards are usable, 
cool!

CU,

Richard



On Friday 03 January 2003 10:53, Jaroslav Kysela wrote:
> On Fri, 3 Jan 2003, Georgi Georgiev wrote:
> > The devfs code of alsa seems to not work correctly.
> > Even though my setup is as described below, the device /dev/sound/dsp1
> > for example, is not created (just check the whole mail).
> >
> > Creating a device manually does the job, but creating a device on boot is
> > annoying.
>
> It's not an ALSA problem, but the sound_core.c from the 2.4 kernel is
> buggy. Unfortunately, Marcelo hasn't accepted our patch. Here is it:
>
> --- /home/src/linux/drivers/sound/sound_core.c        Thu Sep 19 10:36:04 2002
> +++ out.txt   Fri Jan  3 10:51:26 2003
> @@ -17,7 +17,7 @@
>   *   plug into this. The fact they dont all go via OSS doesn't mean
>   *   they don't have to implement the OSS API. There is a lot of logic
>   *   to keeping much of the OSS weight out of the code in a compatibility
> - *   module, but its up to the driver to rember to load it...
> + *   module, but it's up to the driver to rember to load it...
>   *
>   *   The code provides a set of functions for registration of devices
>   *   by type. This is done rather than providing a single call so that
> @@ -173,10 +173,10 @@
>               return r;
>       }
>
> -     if (r == low)
> +     if (r < SOUND_STEP)
>               sprintf (name_buf, "%s", name);
>       else
> -             sprintf (name_buf, "%s%d", name, (r - low) / SOUND_STEP);
> +             sprintf (name_buf, "%s%d", name, r / SOUND_STEP);
>       s->de = devfs_register (devfs_handle, name_buf,
>                               DEVFS_FL_NONE, SOUND_MAJOR, s->unit_minor,
>                               S_IFCHR | mode, fops, NULL);
> @@ -217,7 +217,7 @@
>   *   15      *16             unused
>   */
>
> -static struct sound_unit *chains[16];
> +static struct sound_unit *chains[SOUND_STEP];
>
>  /**
>   *   register_sound_special - register a special sound node
> @@ -231,73 +231,62 @@
>
>  int register_sound_special(struct file_operations *fops, int unit)
>  {
> -     char *name, name_ext[32];
> -     int suffix = 0;
> +     const int chain = unit % SOUND_STEP;
> +     int max_unit = 128 + chain;
> +     const char *name;
> +     char _name[16];
>
> -     switch (unit & 15) {
> +     switch (chain) {
>           case 0:
>               name = "mixer";
> -             suffix = 1;
>               break;
>           case 1:
>               name = "sequencer";
> +             if (unit >= SOUND_STEP)
> +                     goto __unknown;
> +             max_unit = unit + 1;
>               break;
>           case 2:
> -             sprintf(name_ext, "midi0%d", unit / SOUND_STEP);
> -             name = name_ext;
> +             name = "midi";
>               break;
>           case 3:
>               name = "dsp";
> -             suffix = 1;
>               break;
>           case 4:
>               name = "audio";
> -             suffix = 1;
> -             break;
> -         case 5:
> -             name = "unknown5";
> -             break;
> -         case 6:             /* Was once sndstat */
> -             name = "unknown6";
> -             break;
> -         case 7:
> -             name = "unknown7";
>               break;
>           case 8:
>               name = "sequencer2";
> +             if (unit >= SOUND_STEP)
> +                     goto __unknown;
> +             max_unit = unit + 1;
>               break;
>           case 9:
>               name = "dmmidi";
> -             suffix = 1;
>               break;
>           case 10:
>               name = "dmfm";
> -             suffix = 1;
> -             break;
> -         case 11:
> -             name = "unknown11";
>               break;
>           case 12:
>               name = "adsp";
> -             suffix = 1;
>               break;
>           case 13:
>               name = "amidi";
> -             suffix = 1;
>               break;
>           case 14:
>               name = "admmidi";
> -             suffix = 1;
>               break;
>           default:
> -             name = "unknown";
> +             {
> +                 __unknown:
> +                     sprintf(_name, "unknown%d", chain);
> +                     if (unit >= SOUND_STEP)
> +                             strcat(_name, "-");
> +                     name = _name;
> +             }
>               break;
>       }
> -     if (suffix && unit >= SOUND_STEP) {
> -         sprintf(name_ext, "%s%d", name, unit / SOUND_STEP);
> -         name = name_ext;
> -     }
> -     return sound_insert_unit(&chains[unit&15], fops, -1, unit, unit+1,
> +     return sound_insert_unit(&chains[chain], fops, -1, unit, max_unit,
>                                name, S_IRUSR | S_IWUSR);
>  }
>
> @@ -396,7 +385,7 @@
>
>  void unregister_sound_special(int unit)
>  {
> -     sound_remove_unit(&chains[unit&15], unit);
> +     sound_remove_unit(&chains[unit % SOUND_STEP], unit);
>  }
>
>  EXPORT_SYMBOL(unregister_sound_special);
> @@ -494,7 +483,7 @@
>  int soundcore_open(struct inode *inode, struct file *file)
>  {
>       int chain;
> -     int unit=MINOR(inode->i_rdev);
> +     int unit = MINOR(inode->i_rdev);
>       struct sound_unit *s;
>       struct file_operations *new_fops = NULL;
>
>
>                                               Jaroslav
>
> -----
> Jaroslav Kysela <[EMAIL PROTECTED]>
> Linux Kernel Sound Maintainer
> ALSA Project, SuSE Labs
>
>
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Alsa-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/alsa-user
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+FYDpWQvEMJfcXlQRAsdiAKCIDarRhAzsnzITPGGxTOWgQi4B4gCfby84
PI1musYnzEV5o48lY4WbZE8=
=A2Da
-----END PGP SIGNATURE-----



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to