Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[ALSA] add more sequencer port type information bits

Add four new information flags SNDRV_SEQ_PORT_TYPE_HARDWARE, _SOFTWARE,
_SYNTHESIZER, _PORT for sequencer ports. This makes it easier for apps
like Rosegarden to make policy decisions based on the port type.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>

authored by

Clemens Ladisch and committed by
Jaroslav Kysela
450047a7 c97f3dd8

+31 -9
+4
include/sound/asequencer.h
··· 605 605 #define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11) /* Sampling device (support sample download) */ 606 606 #define SNDRV_SEQ_PORT_TYPE_SAMPLE (1<<12) /* Sampling device (sample can be downloaded at any time) */ 607 607 /*...*/ 608 + #define SNDRV_SEQ_PORT_TYPE_HARDWARE (1<<16) /* driver for a hardware device */ 609 + #define SNDRV_SEQ_PORT_TYPE_SOFTWARE (1<<17) /* implemented in software */ 610 + #define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER (1<<18) /* generates sound */ 611 + #define SNDRV_SEQ_PORT_TYPE_PORT (1<<19) /* connects to other device(s) */ 608 612 #define SNDRV_SEQ_PORT_TYPE_APPLICATION (1<<20) /* application (sequencer/editor) */ 609 613 610 614 /* misc. conditioning flags */
+3 -1
sound/core/seq/seq_dummy.c
··· 171 171 pinfo.capability |= SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE; 172 172 if (duplex) 173 173 pinfo.capability |= SNDRV_SEQ_PORT_CAP_DUPLEX; 174 - pinfo.type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC; 174 + pinfo.type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC 175 + | SNDRV_SEQ_PORT_TYPE_SOFTWARE 176 + | SNDRV_SEQ_PORT_TYPE_PORT; 175 177 memset(&pcb, 0, sizeof(pcb)); 176 178 pcb.owner = THIS_MODULE; 177 179 pcb.unuse = dummy_unuse;
+3 -1
sound/core/seq/seq_midi.c
··· 376 376 if ((port->capability & (SNDRV_SEQ_PORT_CAP_WRITE|SNDRV_SEQ_PORT_CAP_READ)) == (SNDRV_SEQ_PORT_CAP_WRITE|SNDRV_SEQ_PORT_CAP_READ) && 377 377 info->flags & SNDRV_RAWMIDI_INFO_DUPLEX) 378 378 port->capability |= SNDRV_SEQ_PORT_CAP_DUPLEX; 379 - port->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC; 379 + port->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC 380 + | SNDRV_SEQ_PORT_TYPE_HARDWARE 381 + | SNDRV_SEQ_PORT_TYPE_PORT; 380 382 port->midi_channels = 16; 381 383 memset(&pcallbacks, 0, sizeof(pcallbacks)); 382 384 pcallbacks.owner = THIS_MODULE;
+3 -1
sound/core/seq/seq_virmidi.c
··· 390 390 pinfo->capability |= SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SYNC_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE; 391 391 pinfo->capability |= SNDRV_SEQ_PORT_CAP_READ | SNDRV_SEQ_PORT_CAP_SYNC_READ | SNDRV_SEQ_PORT_CAP_SUBS_READ; 392 392 pinfo->capability |= SNDRV_SEQ_PORT_CAP_DUPLEX; 393 - pinfo->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC; 393 + pinfo->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC 394 + | SNDRV_SEQ_PORT_TYPE_SOFTWARE 395 + | SNDRV_SEQ_PORT_TYPE_PORT; 394 396 pinfo->midi_channels = 16; 395 397 memset(&pcallbacks, 0, sizeof(pcallbacks)); 396 398 pcallbacks.owner = THIS_MODULE;
+3 -1
sound/drivers/opl3/opl3_oss.c
··· 99 99 opl3->oss_chset->port = snd_seq_event_port_attach(opl3->seq_client, &callbacks, 100 100 SNDRV_SEQ_PORT_CAP_WRITE, 101 101 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | 102 - SNDRV_SEQ_PORT_TYPE_MIDI_GM, 102 + SNDRV_SEQ_PORT_TYPE_MIDI_GM | 103 + SNDRV_SEQ_PORT_TYPE_HARDWARE | 104 + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER, 103 105 voices, voices, 104 106 name); 105 107 if (opl3->oss_chset->port < 0) {
+3 -1
sound/drivers/opl3/opl3_seq.c
··· 203 203 SNDRV_SEQ_PORT_CAP_SUBS_WRITE, 204 204 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | 205 205 SNDRV_SEQ_PORT_TYPE_MIDI_GM | 206 - SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE, 206 + SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE | 207 + SNDRV_SEQ_PORT_TYPE_HARDWARE | 208 + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER, 207 209 16, voices, 208 210 name); 209 211 if (opl3->chset->port < 0) {
+3 -1
sound/drivers/opl4/opl4_seq.c
··· 164 164 SNDRV_SEQ_PORT_CAP_WRITE | 165 165 SNDRV_SEQ_PORT_CAP_SUBS_WRITE, 166 166 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | 167 - SNDRV_SEQ_PORT_TYPE_MIDI_GM, 167 + SNDRV_SEQ_PORT_TYPE_MIDI_GM | 168 + SNDRV_SEQ_PORT_TYPE_HARDWARE | 169 + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER, 168 170 16, 24, 169 171 "OPL4 Wavetable Port"); 170 172 if (opl4->chset->port < 0) {
+3 -1
sound/isa/gus/gus_synth.c
··· 194 194 &callbacks, 195 195 SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE, 196 196 SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE | 197 - SNDRV_SEQ_PORT_TYPE_SYNTH, 197 + SNDRV_SEQ_PORT_TYPE_SYNTH | 198 + SNDRV_SEQ_PORT_TYPE_HARDWARE | 199 + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER, 198 200 16, 0, 199 201 name); 200 202 if (p->chset->port < 0) {
+3 -1
sound/pci/trident/trident_synth.c
··· 914 914 &callbacks, 915 915 SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE, 916 916 SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE | 917 - SNDRV_SEQ_PORT_TYPE_SYNTH, 917 + SNDRV_SEQ_PORT_TYPE_SYNTH | 918 + SNDRV_SEQ_PORT_TYPE_HARDWARE | 919 + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER, 918 920 16, 0, 919 921 name); 920 922 if (p->chset->port < 0) {
+3 -1
sound/synth/emux/emux_seq.c
··· 54 54 #define DEFAULT_MIDI_TYPE (SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |\ 55 55 SNDRV_SEQ_PORT_TYPE_MIDI_GM |\ 56 56 SNDRV_SEQ_PORT_TYPE_MIDI_GS |\ 57 - SNDRV_SEQ_PORT_TYPE_MIDI_XG) 57 + SNDRV_SEQ_PORT_TYPE_MIDI_XG |\ 58 + SNDRV_SEQ_PORT_TYPE_HARDWARE |\ 59 + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER) 58 60 59 61 /* 60 62 * Initialise the EMUX Synth by creating a client and registering