[PATCH] ALSA: usb-audio: Add mixer support for Pioneer DJ DJM-250MK2

Takashi Iwai tiwai at suse.de
Tue Sep 22 12:02:53 CEST 2020


On Mon, 21 Sep 2020 21:09:36 +0200,
František Kučera wrote:
> 
> From: František Kučera <franta-linux at frantovo.cz>
> 
> This patch extends support for DJM-250MK2 and allows mapping
> playback and capture channels to available sources.
> Configures the card through USB commands.

First off, your Signed-off-by line is missing.  This should have been
pointed by checkpatch.pl.

About the code changes:

> +static const struct snd_pioneer_djm_option SND_PIONEER_DJM_OPTIONS_CAPTURE_LEVEL[] = {

Avoid using the capital letters unless macros.
Ditto for other snd_pioneer_djm_option items.

> +struct snd_pioneer_djm_option_group {
> +	const char *name;
> +	const struct snd_pioneer_djm_option *options;
> +	const size_t count;
> +	const u16 default_value;
> +} snd_pioneer_djm_option_group;

Why you define an object here (snd_pioneer_djm_option_group), not only
struct?  I guess it was forgotten to remove when dropping typedef?

> +static int snd_pioneer_djm_controls_info(struct snd_kcontrol *kctl, struct snd_ctl_elem_info *info)
> +{
> +	u16 group_index = kctl->private_value >> SND_PIONEER_DJM_GROUP_SHIFT;
> +	size_t count;
> +	const char *name;
> +	const struct snd_pioneer_djm_option_group *group;
> +
> +	if (group_index < ARRAY_SIZE(SND_PIONEER_DJM_OPTION_GROUPS)) {
> +		group = &SND_PIONEER_DJM_OPTION_GROUPS[group_index];
> +		count = group->count;
> +		if (info->value.enumerated.item >= count)
> +			info->value.enumerated.item = count - 1;
> +		name = group->options[info->value.enumerated.item].name;
> +		strlcpy(info->value.enumerated.name, name, sizeof(info->value.enumerated.name));
> +		info->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
> +		info->count = 1;
> +		info->value.enumerated.items = count;
> +		return 0;
> +	} else {
> +		return -EINVAL;
> +	}

This can be a bit simpler if you write like:

	if (group_index >= ARRAY_SIZE(....))
		return -EINVAL;

	group = &SND_PIONEER_DJM_OPTION_GROUPS[group_index];
	count = group->count;
	.....
	
The same applied to other functions.

> +static int snd_pioneer_djm_controls_put(struct snd_kcontrol *kctl, struct snd_ctl_elem_value *elem)
> +{
> +	struct usb_mixer_elem_list *list = snd_kcontrol_chip(kctl);
> +	struct usb_mixer_interface *mixer = list->mixer;
> +	unsigned long private_value = kctl->private_value;
> +
> +	u16 group = (private_value & SND_PIONEER_DJM_GROUP_MASK) >> SND_PIONEER_DJM_GROUP_SHIFT;

Avoid the unnecessary blank line in the above.


> +	u16 value = elem->value.enumerated.item[0];
> +
> +	kctl->private_value = group << SND_PIONEER_DJM_GROUP_SHIFT | value;

Better to wrap write parentheses around the bit operation for avoiding
confusions.  (Also a similar expression is found in another place).


thanks,

Takashi


More information about the Alsa-devel mailing list