ALSA: snd-usb-caiaq: Do not expose hardware input mode 0 of A4DJ
In the context of the Audio 4 DJ (when compared to Audio 8 DJ), hardware input mode 0 is not used. Expose modes 1 (line) and 2 (phono) to the user as modes 0 and 1 respectively. Signed-off-by: Mark Hills <mark@pogo.org.uk> Acked-by: Daniel Mack <daniel@caiaq.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
e3ca4c9982
commit
9a9527ed49
@ -44,16 +44,24 @@ static int control_info(struct snd_kcontrol *kcontrol,
|
|||||||
uinfo->count = 1;
|
uinfo->count = 1;
|
||||||
pos &= ~CNT_INTVAL;
|
pos &= ~CNT_INTVAL;
|
||||||
|
|
||||||
if (((id == USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO8DJ)) ||
|
if (id == USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO8DJ)
|
||||||
(id == USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO4DJ)))
|
|
||||||
&& (pos == 0)) {
|
&& (pos == 0)) {
|
||||||
/* current input mode of A8DJ and A4DJ */
|
/* current input mode of A8DJ */
|
||||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||||
uinfo->value.integer.min = 0;
|
uinfo->value.integer.min = 0;
|
||||||
uinfo->value.integer.max = 2;
|
uinfo->value.integer.max = 2;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (id == USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO4DJ)
|
||||||
|
&& (pos == 0)) {
|
||||||
|
/* current input mode of A4DJ */
|
||||||
|
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||||
|
uinfo->value.integer.min = 0;
|
||||||
|
uinfo->value.integer.max = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (is_intval) {
|
if (is_intval) {
|
||||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||||
uinfo->value.integer.min = 0;
|
uinfo->value.integer.min = 0;
|
||||||
@ -74,6 +82,14 @@ static int control_get(struct snd_kcontrol *kcontrol,
|
|||||||
struct snd_usb_caiaqdev *dev = caiaqdev(chip->card);
|
struct snd_usb_caiaqdev *dev = caiaqdev(chip->card);
|
||||||
int pos = kcontrol->private_value;
|
int pos = kcontrol->private_value;
|
||||||
|
|
||||||
|
if (dev->chip.usb_id ==
|
||||||
|
USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO4DJ)) {
|
||||||
|
/* A4DJ has only one control */
|
||||||
|
/* do not expose hardware input mode 0 */
|
||||||
|
ucontrol->value.integer.value[0] = dev->control_state[0] - 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (pos & CNT_INTVAL)
|
if (pos & CNT_INTVAL)
|
||||||
ucontrol->value.integer.value[0]
|
ucontrol->value.integer.value[0]
|
||||||
= dev->control_state[pos & ~CNT_INTVAL];
|
= dev->control_state[pos & ~CNT_INTVAL];
|
||||||
@ -91,6 +107,16 @@ static int control_put(struct snd_kcontrol *kcontrol,
|
|||||||
struct snd_usb_caiaqdev *dev = caiaqdev(chip->card);
|
struct snd_usb_caiaqdev *dev = caiaqdev(chip->card);
|
||||||
int pos = kcontrol->private_value;
|
int pos = kcontrol->private_value;
|
||||||
|
|
||||||
|
if (dev->chip.usb_id ==
|
||||||
|
USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO4DJ)) {
|
||||||
|
/* A4DJ has only one control */
|
||||||
|
/* do not expose hardware input mode 0 */
|
||||||
|
dev->control_state[0] = ucontrol->value.integer.value[0] + 1;
|
||||||
|
snd_usb_caiaq_send_command(dev, EP1_CMD_WRITE_IO,
|
||||||
|
dev->control_state, sizeof(dev->control_state));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (pos & CNT_INTVAL) {
|
if (pos & CNT_INTVAL) {
|
||||||
dev->control_state[pos & ~CNT_INTVAL]
|
dev->control_state[pos & ~CNT_INTVAL]
|
||||||
= ucontrol->value.integer.value[0];
|
= ucontrol->value.integer.value[0];
|
||||||
|
Loading…
Reference in New Issue
Block a user