Commit d847ce0e authored by Eldad Zack's avatar Eldad Zack Committed by Takashi Iwai

ALSA: usb-audio: parameterize FTU effect unit control

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: default avatarEldad Zack <eldad@fogrefinery.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 5dae5fd2
...@@ -635,11 +635,13 @@ static int snd_nativeinstruments_create_mixer(struct usb_mixer_interface *mixer, ...@@ -635,11 +635,13 @@ static int snd_nativeinstruments_create_mixer(struct usb_mixer_interface *mixer,
} }
/* M-Audio FastTrack Ultra quirks */ /* M-Audio FastTrack Ultra quirks */
/* FTU Effect switch */ /* FTU Effect switch (also used by C400) */
struct snd_ftu_eff_switch_priv_val { struct snd_ftu_eff_switch_priv_val {
struct usb_mixer_interface *mixer; struct usb_mixer_interface *mixer;
int cached_value; int cached_value;
int is_cached; int is_cached;
int bUnitID;
int validx;
}; };
static int snd_ftu_eff_switch_info(struct snd_kcontrol *kcontrol, static int snd_ftu_eff_switch_info(struct snd_kcontrol *kcontrol,
...@@ -674,9 +676,8 @@ static int snd_ftu_eff_switch_get(struct snd_kcontrol *kctl, ...@@ -674,9 +676,8 @@ static int snd_ftu_eff_switch_get(struct snd_kcontrol *kctl,
struct snd_ftu_eff_switch_priv_val *pval; struct snd_ftu_eff_switch_priv_val *pval;
int err; int err;
unsigned char value[2]; unsigned char value[2];
int id, validx;
const int id = 6;
const int validx = 1;
const int val_len = 2; const int val_len = 2;
value[0] = 0x00; value[0] = 0x00;
...@@ -698,6 +699,8 @@ static int snd_ftu_eff_switch_get(struct snd_kcontrol *kctl, ...@@ -698,6 +699,8 @@ static int snd_ftu_eff_switch_get(struct snd_kcontrol *kctl,
if (snd_BUG_ON(!chip)) if (snd_BUG_ON(!chip))
return -EINVAL; return -EINVAL;
id = pval->bUnitID;
validx = pval->validx;
down_read(&mixer->chip->shutdown_rwsem); down_read(&mixer->chip->shutdown_rwsem);
if (mixer->chip->shutdown) if (mixer->chip->shutdown)
...@@ -728,10 +731,8 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl, ...@@ -728,10 +731,8 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl,
struct usb_mixer_interface *mixer; struct usb_mixer_interface *mixer;
int changed, cur_val, err, new_val; int changed, cur_val, err, new_val;
unsigned char value[2]; unsigned char value[2];
int id, validx;
const int id = 6;
const int validx = 1;
const int val_len = 2; const int val_len = 2;
changed = 0; changed = 0;
...@@ -749,6 +750,9 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl, ...@@ -749,6 +750,9 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl,
if (snd_BUG_ON(!chip)) if (snd_BUG_ON(!chip))
return -EINVAL; return -EINVAL;
id = pval->bUnitID;
validx = pval->validx;
if (!pval->is_cached) { if (!pval->is_cached) {
/* Read current value */ /* Read current value */
down_read(&mixer->chip->shutdown_rwsem); down_read(&mixer->chip->shutdown_rwsem);
...@@ -793,7 +797,8 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl, ...@@ -793,7 +797,8 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol *kctl,
return changed; 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 = { static struct snd_kcontrol_new template = {
.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
...@@ -816,6 +821,8 @@ static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer) ...@@ -816,6 +821,8 @@ static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer)
pval->cached_value = 0; pval->cached_value = 0;
pval->is_cached = 0; pval->is_cached = 0;
pval->mixer = mixer; pval->mixer = mixer;
pval->bUnitID = bUnitID;
pval->validx = validx;
template.private_value = (unsigned long) pval; template.private_value = (unsigned long) pval;
kctl = snd_ctl_new1(&template, mixer->chip); kctl = snd_ctl_new1(&template, mixer->chip);
...@@ -974,9 +981,10 @@ static int snd_ftu_create_mixer(struct usb_mixer_interface *mixer) ...@@ -974,9 +981,10 @@ static int snd_ftu_create_mixer(struct usb_mixer_interface *mixer)
if (err < 0) if (err < 0)
return err; return err;
err = snd_ftu_create_effect_switch(mixer); err = snd_ftu_create_effect_switch(mixer, 1, 6);
if (err < 0) if (err < 0)
return err; return err;
err = snd_ftu_create_effect_volume_ctl(mixer); err = snd_ftu_create_effect_volume_ctl(mixer);
if (err < 0) if (err < 0)
return err; return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment