[alsa-devel] [Fwd: Scratch Live amplifier switch]
Takashi Iwai
tiwai at suse.de
Mon Nov 2 14:03:25 CET 2009
At Fri, 16 Oct 2009 21:52:48 +0200,
LCID Fire wrote:
>
> Signed-off-by: Andreas Bergmeier <andreas.bergmeier at gmx.net>
Thanks for the renewed patch. Below is a quick review.
> diff --git a/sound/usb/usbmixer.c b/sound/usb/usbmixer.c
> index 00397c8..532d02d 100644
> --- a/sound/usb/usbmixer.c
> +++ b/sound/usb/usbmixer.c
> @@ -2013,6 +2013,281 @@ static void snd_audigy2nx_proc_read(struct snd_info_entry *entry,
> }
> }
>
> +static void snd_usb_cleanup_interrupt_urb(struct urb *pUrb)
Avoid Windows-style variable names as much as possible.
> +{
> + if (pUrb->transfer_buffer_length > 0)
> + kfree(pUrb->transfer_buffer);
> +
> + kfree(pUrb->context);
> +
> + usb_free_urb(pUrb);
> +}
> +
> +/* Wrapper for setting and submitting the interrupt urb().*/
> +static int snd_usb_interrupt_trans(struct usb_device *dev,
> + unsigned int pipe, void *data, __u16 size, usb_complete_t callback)
No need to use __u16. Here it can be simply unsigned int.
> +{
> + int err = 0;
> + void *buf = NULL;
> + struct urb *pUrb = NULL;
No need for initializations of all of these.
(snip)
> +/* gets called multiple times! */
> +static int snd_sl_controls_create(struct usb_mixer_interface *mixer)
> +{
> + int i, err;
> +
> + for (i = 0; i < ARRAY_SIZE(snd_sl_controls); ++i) {
> + struct snd_kcontrol *kcontrol =
> + snd_ctl_new1(&snd_sl_controls[i], mixer);
Missing NULL check here.
> +
> + /* Since we only need one control and the routine
> + * is called multiple times we have to ignore all
> + * attempts to attach controls multiple times*/
Hm, why is it called so many times?
Can't it be limited with a check of iface or altsetting?
> + if (snd_ctl_find_id(mixer->chip->card, &kcontrol->id)) {
> + /* we found the control - it is already present
> + * so just continue*/
> + snd_ctl_free_one(kcontrol);
> + continue;
> + }
> +
> + /* add frees the control if on err < 0! */
> + err = snd_ctl_add(mixer->chip->card,
> + kcontrol);
> + if (err < 0)
> + return err;
> +
> + /* Make sure device is set to default */
> + err = snd_sl_phono_set(kcontrol, kcontrol->private_value);
> +
> + if (err < 0) {
> + snd_ctl_free_one(kcontrol);
Don't free this after adding via snd_ctl_add(). Just keep it.
The final destructor will clean up everything eventually.
thanks,
Takashi
More information about the Alsa-devel
mailing list