[alsa-devel] [PATCH 2/2] ALSA: hdspm - Provide unique driver id based on card serial

Takashi Iwai tiwai at suse.de
Wed Jan 11 09:09:51 CET 2012


At Tue, 10 Jan 2012 20:53:23 +0100,
Adrian Knoth wrote:
> 
> > Also, if multiple boards have the same serial number (who can trust
> > the hardware? :), it gets -EBUSY at registration.
> 
> Is that true? I don't have two RME cards here, but I've simply
> duplicated a string from my mainboard chip. snd_card_register() was just
> fine:
> 
> $ cat /proc/asound/cards
>   0 [PCH            ]: HDA-Intel - HDA Intel PCH
>                        HDA Intel PCH at 0xf7420000 irq 55
>   1 [NVidia         ]: HDA-Intel - HDA NVidia
>                        HDA NVidia at 0xf7080000 irq 17
>   2 [PCH            ]: HDSPM - RME RayDAT_f1cd85
>                        RME RayDAT S/N 0xf1cd85 at 0xf7300000, irq 18
> 
> 
> Note that snd_card_create() is still called without any serial number
> magic, so card->id will first be set to "Default", "Default_1" and so on
> and only later modified before calling snd_card_register().

These strings are set in snd_card_register().  At the point of
snd_card_create(), the string should be still empty.

> Since I don't see anything in snd_card_register() that could possibly
> fail, it would at least still work. Anyway, I'm now using
> snd_card_set_id(), and this function claims to check for duplicates. ;)

Well, it looks like a bug.  Maybe it got broken when the device id
handling was changed sometime ago for allowing dynamic renaming.

Anyway, the fix should be done individually from this patch.

> > And, MADIface will have no serial number, so it'll look strange.
> 
> The code in question is limited to "if (!MADIface)", so no problem.
> 
> 
> > (Also the string with "%s_%04x" would be better, IMO.)
> 
> I chose %06x, since the serial is masked with 0xFFFFFF.
> 
> 
> > For these, I'd suggest the following changes:
> > - check whether serial is non-zero
> 
> That's actually 0xFFFFFF in case there is no serial. All PCI revisions
> behave like that.
> 
> 
> > - modify sound core registration part to re-generate the id string
> >    with suffix whenever conflicted, only not when the automated id
> >    string generation via card->id = NULL.
> 
> I did not address this. Firstly, because snd_card_register() worked well
> even in case of colliding card->ids, and secondly, because
> snd_card_set_id would take care now to make it unique.

I'll fix snd_card_register() to make the string unique.


thanks,

Takashi


More information about the Alsa-devel mailing list