[alsa-devel] [PATCH] cleanup controllers in snd-usb-caiaq

Takashi Iwai tiwai at suse.de
Wed Nov 26 21:28:02 CET 2008


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 at 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 at 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},"


More information about the Alsa-devel mailing list