All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Daniel Mack <daniel@caiaq.org>
Cc: alsa-devel@alsa-project.org
Subject: Re: [PATCH] cleanup controllers in snd-usb-caiaq
Date: Wed, 26 Nov 2008 21:28:02 +0100	[thread overview]
Message-ID: <s5hbpw2cjvx.wl%tiwai@suse.de> (raw)
In-Reply-To: <20081126185720.GA22925@buzzloop.caiaq.de>

At Wed, 26 Nov 2008 19:57:20 +0100,
Daniel Mack wrote:
> 
> Hi Takashi,
> 
> On Wed, Nov 26, 2008 at 04:44:08PM +0100, Takashi Iwai wrote:
> > > this patch does some code cleanup in snd-usb-caiaq. No functional change
> > > whatsoever. Version number bumped to 1.3.9.
> > 
> > A macro for such is ugly and potentially dangerous, IMO.
> > Make a function instead.
> > 
> > Also, please add an error check of the return value from
> > snd_ctl_add().
> 
> Ok, agreed and done. However, I considered it a good idea as it avoided
> writing the array's name more than once.

In that case, you can use a macro, such as,

#define ADD_CTRLS(c, list) add_controls(c, ARRAY_SIZE(list), (list))

But, don't make a too complex block as a macro.  A function often
gives a better code (in this case it'll get smaller) in addition to a
better readability than a big macro.


thanks,

Takashi

> 
> Daniel
> 
> [2 caiaq-controls-cleanup.diff <text/x-diff; us-ascii (7bit)>]
> snd-usb-caiaq: clean up the control adding code by moving dulpicate code
> to a function.
> 
> Signed-off-by: Daniel Mack <daniel@caiaq.de>
> 
> diff --git a/sound/usb/caiaq/caiaq-control.c b/sound/usb/caiaq/caiaq-control.c
> index 798ca12..ccd763d 100644
> --- a/sound/usb/caiaq/caiaq-control.c
> +++ b/sound/usb/caiaq/caiaq-control.c
> @@ -247,69 +247,56 @@ static struct caiaq_controller a8dj_controller[] = {
>  	{ "Software lock", 			40 		}
>  };
>  
> -int __devinit snd_usb_caiaq_control_init(struct snd_usb_caiaqdev *dev)
> +static int __devinit add_controls(struct caiaq_controller *c, int num,
> +				  struct snd_usb_caiaqdev *dev)
>  {
> -	int i;
> +	int i, ret;
>  	struct snd_kcontrol *kc;
>  
> +	for (i = 0; i < num; i++, c++) {
> +		kcontrol_template.name = c->name;
> +		kcontrol_template.private_value = c->index;
> +		kc = snd_ctl_new1(&kcontrol_template, dev);
> +		ret = snd_ctl_add(dev->chip.card, kc);
> +		if (ret < 0)
> +			return ret;
> +	}
> +
> +	return 0;
> +}
> +
> +int __devinit snd_usb_caiaq_control_init(struct snd_usb_caiaqdev *dev)
> +{
> +	int ret = 0;
> +
>  	switch (dev->chip.usb_id) {
>  	case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AK1):
> -		for (i = 0; i < ARRAY_SIZE(ak1_controller); i++) {
> -			struct caiaq_controller *c = ak1_controller + i;
> -			kcontrol_template.name = c->name;
> -			kcontrol_template.private_value = c->index;
> -			kc = snd_ctl_new1(&kcontrol_template, dev);
> -			snd_ctl_add(dev->chip.card, kc);
> -		}
> -
> +		ret = add_controls(ak1_controller,
> +			ARRAY_SIZE(ak1_controller), dev);
>  		break;
>  
>  	case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL2):
> -		for (i = 0; i < ARRAY_SIZE(rk2_controller); i++) {
> -			struct caiaq_controller *c = rk2_controller + i;
> -			kcontrol_template.name = c->name;
> -			kcontrol_template.private_value = c->index;
> -			kc = snd_ctl_new1(&kcontrol_template, dev);
> -			snd_ctl_add(dev->chip.card, kc);
> -		}
> -
> +		ret = add_controls(rk2_controller,
> +			ARRAY_SIZE(rk2_controller), dev);
>  		break;
>  
>  	case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL3):
> -		for (i = 0; i < ARRAY_SIZE(rk3_controller); i++) {
> -			struct caiaq_controller *c = rk3_controller + i;
> -			kcontrol_template.name = c->name;
> -			kcontrol_template.private_value = c->index;
> -			kc = snd_ctl_new1(&kcontrol_template, dev);
> -			snd_ctl_add(dev->chip.card, kc);
> -		}
> -
> +		ret = add_controls(rk3_controller,
> +			ARRAY_SIZE(rk3_controller), dev);
>  		break;
>  
>  	case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER):
>  	case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2):
> -		for (i = 0; i < ARRAY_SIZE(kore_controller); i++) {
> -			struct caiaq_controller *c = kore_controller + i;
> -			kcontrol_template.name = c->name;
> -			kcontrol_template.private_value = c->index;
> -			kc = snd_ctl_new1(&kcontrol_template, dev);
> -			snd_ctl_add(dev->chip.card, kc);
> -		}
> -
> +		ret = add_controls(kore_controller,
> +			ARRAY_SIZE(kore_controller), dev);
>  		break;
>  
>  	case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO8DJ):
> -		for (i = 0; i < ARRAY_SIZE(a8dj_controller); i++) {
> -			struct caiaq_controller *c = a8dj_controller + i;
> -			kcontrol_template.name = c->name;
> -			kcontrol_template.private_value = c->index;
> -			kc = snd_ctl_new1(&kcontrol_template, dev);
> -			snd_ctl_add(dev->chip.card, kc);
> -		}
> -
> +		ret = add_controls(a8dj_controller,
> +			ARRAY_SIZE(a8dj_controller), dev);
>  		break;
>  	}
>  
> -	return 0;
> +	return ret;
>  }
>  
> diff --git a/sound/usb/caiaq/caiaq-device.c b/sound/usb/caiaq/caiaq-device.c
> index 8317508..b143ef7 100644
> --- a/sound/usb/caiaq/caiaq-device.c
> +++ b/sound/usb/caiaq/caiaq-device.c
> @@ -42,7 +42,7 @@
>  #endif
>  
>  MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>");
> -MODULE_DESCRIPTION("caiaq USB audio, version 1.3.8");
> +MODULE_DESCRIPTION("caiaq USB audio, version 1.3.9");
>  MODULE_LICENSE("GPL");
>  MODULE_SUPPORTED_DEVICE("{{Native Instruments, RigKontrol2},"
>  			 "{Native Instruments, RigKontrol3},"

  reply	other threads:[~2008-11-26 20:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-26 15:19 [PATCH] cleanup controllers in snd-usb-caiaq Daniel Mack
2008-11-26 15:44 ` Takashi Iwai
2008-11-26 18:57   ` Daniel Mack
2008-11-26 20:28     ` Takashi Iwai [this message]
2008-11-26 20:31       ` Daniel Mack
2008-11-27  7:24         ` Takashi Iwai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5hbpw2cjvx.wl%tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=daniel@caiaq.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.