mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 18:21:24 +02:00
ALSA: seq: dummy: Allow UMP conversion
Although the purpose of dummy seq client is a direct pass-through, it's sometimes helpful for debugging if it can convert to a certain UMP MIDI version. This patch adds an option to specify the UMP event conversion. As default, it skips the conversion and does passthrough, while user can pass ump=1 or ump=2 to enforce the conversion to UMP MIDI1 or MIDI2 format. Message-ID: <20240419101105.15571-1-tiwai@suse.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
3e2f2235b5
commit
32cb23a0f9
|
|
@ -58,6 +58,12 @@ MODULE_PARM_DESC(ports, "number of ports to be created");
|
||||||
module_param(duplex, bool, 0444);
|
module_param(duplex, bool, 0444);
|
||||||
MODULE_PARM_DESC(duplex, "create DUPLEX ports");
|
MODULE_PARM_DESC(duplex, "create DUPLEX ports");
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SND_SEQ_UMP)
|
||||||
|
static int ump;
|
||||||
|
module_param(ump, int, 0444);
|
||||||
|
MODULE_PARM_DESC(ump, "UMP conversion (0: no convert, 1: MIDI 1.0, 2: MIDI 2.0)");
|
||||||
|
#endif
|
||||||
|
|
||||||
struct snd_seq_dummy_port {
|
struct snd_seq_dummy_port {
|
||||||
int client;
|
int client;
|
||||||
int port;
|
int port;
|
||||||
|
|
@ -152,7 +158,9 @@ static int __init
|
||||||
register_client(void)
|
register_client(void)
|
||||||
{
|
{
|
||||||
struct snd_seq_dummy_port *rec1, *rec2;
|
struct snd_seq_dummy_port *rec1, *rec2;
|
||||||
|
#if IS_ENABLED(CONFIG_SND_SEQ_UMP)
|
||||||
struct snd_seq_client *client;
|
struct snd_seq_client *client;
|
||||||
|
#endif
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (ports < 1) {
|
if (ports < 1) {
|
||||||
|
|
@ -166,12 +174,24 @@ register_client(void)
|
||||||
if (my_client < 0)
|
if (my_client < 0)
|
||||||
return my_client;
|
return my_client;
|
||||||
|
|
||||||
/* don't convert events but just pass-through */
|
#if IS_ENABLED(CONFIG_SND_SEQ_UMP)
|
||||||
client = snd_seq_kernel_client_get(my_client);
|
client = snd_seq_kernel_client_get(my_client);
|
||||||
if (!client)
|
if (!client)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
client->filter = SNDRV_SEQ_FILTER_NO_CONVERT;
|
switch (ump) {
|
||||||
|
case 1:
|
||||||
|
client->midi_version = SNDRV_SEQ_CLIENT_UMP_MIDI_1_0;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
client->midi_version = SNDRV_SEQ_CLIENT_UMP_MIDI_2_0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* don't convert events but just pass-through */
|
||||||
|
client->filter = SNDRV_SEQ_FILTER_NO_CONVERT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
snd_seq_kernel_client_put(client);
|
snd_seq_kernel_client_put(client);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* create ports */
|
/* create ports */
|
||||||
for (i = 0; i < ports; i++) {
|
for (i = 0; i < ports; i++) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user