ALSA: snd_usb_caiaq: give better shortname
authorDaniel Mack <daniel@caiaq.de>
Tue, 2 Jun 2009 10:36:39 +0000 (12:36 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 2 Jun 2009 10:55:59 +0000 (12:55 +0200)
If not passed as module option, provide an own card ID with the newly
introduced snd_set_card_id() call.

This will prevent ALSA from calling choose_default_name() which only
takes the last part of a name containing whitespaces. This for example
caused 'Audio 4 DJ' to be shortened to 'DJ', which was not very
descriptive.

The implementation now takes the short name and removes all whitespaces
from it which is much nicer.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/caiaq/device.c

index 15052e439e30339abd830c3aaa3f35b45c0dafa4..43bd0dbaea281fe13e560ad2c12ce25fb0b0654d 100644 (file)
@@ -382,10 +382,10 @@ static int create_card(struct usb_device* usb_dev, struct snd_card **cardp)
 
 static int __devinit init_card(struct snd_usb_caiaqdev *dev)
 {
-       char usbpath[32];
+       char *c, usbpath[32];
        struct usb_device *usb_dev = dev->chip.dev;
        struct snd_card *card = dev->chip.card;
-       int err;
+       int err, len;
 
        if (usb_set_interface(usb_dev, 0, 1) != 0) {
                log("can't set alt interface.\n");
@@ -427,6 +427,23 @@ static int __devinit init_card(struct snd_usb_caiaqdev *dev)
        strlcpy(card->driver, MODNAME, sizeof(card->driver));
        strlcpy(card->shortname, dev->product_name, sizeof(card->shortname));
 
+       /* if the id was not passed as module option, fill it with a shortened
+        * version of the product string which does not contain any
+        * whitespaces */
+
+       if (*card->id == '\0') {
+               char id[sizeof(card->id)];
+
+               memset(id, 0, sizeof(id));
+
+               for (c = card->shortname, len = 0;
+                       *c && len < sizeof(card->id); c++)
+                       if (*c != ' ')
+                               id[len++] = *c;
+
+               snd_card_set_id(card, id);
+       }
+
        usb_make_path(usb_dev, usbpath, sizeof(usbpath));
        snprintf(card->longname, sizeof(card->longname),
                       "%s %s (%s)",