Merge branch 'fix/usx2y' into for-linus
authorTakashi Iwai <tiwai@suse.de>
Tue, 21 Apr 2009 05:43:10 +0000 (07:43 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 21 Apr 2009 05:43:10 +0000 (07:43 +0200)
* fix/usx2y:
  ALSA: us122l: add snd_us122l_free()
  ALSA: us122l: Fix signedness in comparisions

1  2 
sound/usb/usx2y/us122l.c

diff --combined sound/usb/usx2y/us122l.c
index 012ff1f6f8af50436d27ffeb28113aab72e16c1d,463f3ffe3fb97abb4214c36a2f9eb89713f86969..a5aae9d67f31707e585de8de10689d8099df5f1c
@@@ -349,10 -349,14 +349,10 @@@ static int usb_stream_hwdep_ioctl(struc
        if (cmd != SNDRV_USB_STREAM_IOCTL_SET_PARAMS)
                return -ENOTTY;
  
 -      cfg = kmalloc(sizeof(*cfg), GFP_KERNEL);
 -      if (!cfg)
 -              return -ENOMEM;
 +      cfg = memdup_user((void *)arg, sizeof(*cfg));
 +      if (IS_ERR(cfg))
 +              return PTR_ERR(cfg);
  
 -      if (copy_from_user(cfg, (void *)arg, sizeof(*cfg))) {
 -              err = -EFAULT;
 -              goto free;
 -      }
        if (cfg->version != USB_STREAM_INTERFACE_VERSION) {
                err = -ENXIO;
                goto free;
@@@ -474,6 -478,14 +474,14 @@@ static bool us122l_create_card(struct s
        return true;
  }
  
+ static void snd_us122l_free(struct snd_card *card)
+ {
+       struct us122l   *us122l = US122L(card);
+       int             index = us122l->chip.index;
+       if (index >= 0  &&  index < SNDRV_CARDS)
+               snd_us122l_card_used[index] = 0;
+ }
  static int usx2y_create_card(struct usb_device *device, struct snd_card **cardp)
  {
        int             dev;
        if (err < 0)
                return err;
        snd_us122l_card_used[US122L(card)->chip.index = dev] = 1;
+       card->private_free = snd_us122l_free;
        US122L(card)->chip.dev = device;
        US122L(card)->chip.card = card;
        mutex_init(&US122L(card)->mutex);
@@@ -584,7 -596,7 +592,7 @@@ static void snd_us122l_disconnect(struc
        }
  
        usb_put_intf(intf);
-       usb_put_dev(US122L(card)->chip.dev);
+       usb_put_dev(us122l->chip.dev);
  
        while (atomic_read(&us122l->mmap_count))
                msleep(500);