mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 14:02:06 -04:00
usb: gadget: midi2: Add "Operation Mode" control
Add a new ALSA control element to watch the current operation mode (MIDI 1.0 or MIDI 2.0). It's a read-only control that reflects the current value of altsetting, and 0 means unused, 1 for MIDI 1.0 (altset 0) and 2 for MIDI 2.0 (altset 1). Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://lore.kernel.org/r/20230725062206.9674-7-tiwai@suse.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
8559caa985
commit
1b437d2fb3
@@ -9,6 +9,7 @@
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <sound/core.h>
|
||||
#include <sound/control.h>
|
||||
#include <sound/ump.h>
|
||||
#include <sound/ump_msg.h>
|
||||
#include <sound/ump_convert.h>
|
||||
@@ -1450,6 +1451,36 @@ static const struct snd_ump_ops f_midi2_ump_ops = {
|
||||
.drain = f_midi2_ump_drain,
|
||||
};
|
||||
|
||||
/*
|
||||
* "Operation Mode" control element
|
||||
*/
|
||||
static int f_midi2_operation_mode_info(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo)
|
||||
{
|
||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||
uinfo->count = 1;
|
||||
uinfo->value.integer.min = MIDI_OP_MODE_UNSET;
|
||||
uinfo->value.integer.max = MIDI_OP_MODE_MIDI2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int f_midi2_operation_mode_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct f_midi2 *midi2 = snd_kcontrol_chip(kcontrol);
|
||||
|
||||
ucontrol->value.integer.value[0] = midi2->operation_mode;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_kcontrol_new operation_mode_ctl = {
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_RAWMIDI,
|
||||
.name = "Operation Mode",
|
||||
.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
|
||||
.info = f_midi2_operation_mode_info,
|
||||
.get = f_midi2_operation_mode_get,
|
||||
};
|
||||
|
||||
/*
|
||||
* ALSA UMP instance creation / deletion
|
||||
*/
|
||||
@@ -1547,6 +1578,10 @@ static int f_midi2_create_card(struct f_midi2 *midi2)
|
||||
id++;
|
||||
}
|
||||
|
||||
err = snd_ctl_add(card, snd_ctl_new1(&operation_mode_ctl, midi2));
|
||||
if (err < 0)
|
||||
goto error;
|
||||
|
||||
err = snd_card_register(card);
|
||||
if (err < 0)
|
||||
goto error;
|
||||
|
||||
Reference in New Issue
Block a user