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: Eldad Zack <eldad@fogrefinery.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
5dae5fd240
commit
d847ce0e9a
1 changed files with 16 additions and 8 deletions
|
@ -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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue