Skip to content

Commit

Permalink
ALSA: usb-audio: parameterize FTU effect unit control
Browse files Browse the repository at this point in the history
Adds the unit ID and the control as parameters to the creation of the
effect unit control for the M-Audio Fast Track Ultra. This allows the
code to be shared with other devices that use different unit ID and
control, such as the M-Audio Fast Track C400.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Eldad Zack authored and Takashi Iwai committed Nov 29, 2012
1 parent 5dae5fd commit d847ce0
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions sound/usb/mixer_quirks.c
Original file line number Diff line number Diff line change
Expand Up @@ -635,11 +635,13 @@ static int snd_nativeinstruments_create_mixer(struct usb_mixer_interface *mixer,
}

/* M-Audio FastTrack Ultra quirks */
/* FTU Effect switch */
/* FTU Effect switch (also used by C400) */
struct snd_ftu_eff_switch_priv_val {
struct usb_mixer_interface *mixer;
int cached_value;
int is_cached;
int bUnitID;
int validx;
};

static int snd_ftu_eff_switch_info(struct snd_kcontrol *kcontrol,
Expand Down Expand Up @@ -674,9 +676,8 @@ static int snd_ftu_eff_switch_get(struct snd_kcontrol *kctl,
struct snd_ftu_eff_switch_priv_val *pval;
int err;
unsigned char value[2];
int id, validx;

const int id = 6;
const int validx = 1;
const int val_len = 2;

value[0] = 0x00;
Expand All @@ -698,6 +699,8 @@ static int snd_ftu_eff_switch_get(struct snd_kcontrol *kctl,
if (snd_BUG_ON(!chip))
return -EINVAL;

id = pval->bUnitID;
validx = pval->validx;

down_read(&mixer->chip->shutdown_rwsem);
if (mixer->chip->shutdown)
Expand Down Expand Up @@ -728,10 +731,8 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl,
struct usb_mixer_interface *mixer;
int changed, cur_val, err, new_val;
unsigned char value[2];
int id, validx;


const int id = 6;
const int validx = 1;
const int val_len = 2;

changed = 0;
Expand All @@ -749,6 +750,9 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl,
if (snd_BUG_ON(!chip))
return -EINVAL;

id = pval->bUnitID;
validx = pval->validx;

if (!pval->is_cached) {
/* Read current value */
down_read(&mixer->chip->shutdown_rwsem);
Expand Down Expand Up @@ -793,7 +797,8 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl,
return changed;
}

static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer)
static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer,
int validx, int bUnitID)
{
static struct snd_kcontrol_new template = {
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
Expand All @@ -816,6 +821,8 @@ static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer)
pval->cached_value = 0;
pval->is_cached = 0;
pval->mixer = mixer;
pval->bUnitID = bUnitID;
pval->validx = validx;

template.private_value = (unsigned long) pval;
kctl = snd_ctl_new1(&template, mixer->chip);
Expand Down Expand Up @@ -974,9 +981,10 @@ static int snd_ftu_create_mixer(struct usb_mixer_interface *mixer)
if (err < 0)
return err;

err = snd_ftu_create_effect_switch(mixer);
err = snd_ftu_create_effect_switch(mixer, 1, 6);
if (err < 0)
return err;

err = snd_ftu_create_effect_volume_ctl(mixer);
if (err < 0)
return err;
Expand Down

0 comments on commit d847ce0

Please sign in to comment.