mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 05:04:09 +08:00
ALSA: firewire-lib: move MIDI trigger helper function to AM824 layer
In IEC 61883-6, MIDI messages are transferred in MIDI conformant data channel. Essentially, packet streaming layer is not responsible for MIDI functionality. This commit moves MIDI trigger helper function from the layer to AM824 layer. The rest of codes related to MIDI functionality will be moved in later commits. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
f65be911c0
commit
03e2a67eed
@ -100,6 +100,24 @@ int amdtp_am824_add_pcm_hw_constraints(struct amdtp_stream *s,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(amdtp_am824_add_pcm_hw_constraints);
|
EXPORT_SYMBOL_GPL(amdtp_am824_add_pcm_hw_constraints);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* amdtp_am824_midi_trigger - start/stop playback/capture with a MIDI device
|
||||||
|
* @s: the AMDTP stream
|
||||||
|
* @port: index of MIDI port
|
||||||
|
* @midi: the MIDI device to be started, or %NULL to stop the current device
|
||||||
|
*
|
||||||
|
* Call this function on a running isochronous stream to enable the actual
|
||||||
|
* transmission of MIDI data. This function should be called from the MIDI
|
||||||
|
* device's .trigger callback.
|
||||||
|
*/
|
||||||
|
void amdtp_am824_midi_trigger(struct amdtp_stream *s, unsigned int port,
|
||||||
|
struct snd_rawmidi_substream *midi)
|
||||||
|
{
|
||||||
|
if (port < s->midi_ports)
|
||||||
|
ACCESS_ONCE(s->midi[port]) = midi;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(amdtp_am824_midi_trigger);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* amdtp_am824_init - initialize an AMDTP stream structure to handle AM824
|
* amdtp_am824_init - initialize an AMDTP stream structure to handle AM824
|
||||||
* data block
|
* data block
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define SOUND_FIREWIRE_AMDTP_AM824_H_INCLUDED
|
#define SOUND_FIREWIRE_AMDTP_AM824_H_INCLUDED
|
||||||
|
|
||||||
#include <sound/pcm.h>
|
#include <sound/pcm.h>
|
||||||
|
#include <sound/rawmidi.h>
|
||||||
|
|
||||||
#include "amdtp-stream.h"
|
#include "amdtp-stream.h"
|
||||||
|
|
||||||
@ -19,6 +20,9 @@ void amdtp_am824_set_midi_position(struct amdtp_stream *s,
|
|||||||
int amdtp_am824_add_pcm_hw_constraints(struct amdtp_stream *s,
|
int amdtp_am824_add_pcm_hw_constraints(struct amdtp_stream *s,
|
||||||
struct snd_pcm_runtime *runtime);
|
struct snd_pcm_runtime *runtime);
|
||||||
|
|
||||||
|
void amdtp_am824_midi_trigger(struct amdtp_stream *s, unsigned int port,
|
||||||
|
struct snd_rawmidi_substream *midi);
|
||||||
|
|
||||||
int amdtp_am824_init(struct amdtp_stream *s, struct fw_unit *unit,
|
int amdtp_am824_init(struct amdtp_stream *s, struct fw_unit *unit,
|
||||||
enum amdtp_stream_direction dir, enum cip_flags flags);
|
enum amdtp_stream_direction dir, enum cip_flags flags);
|
||||||
#endif
|
#endif
|
||||||
|
@ -248,24 +248,6 @@ static inline void amdtp_stream_pcm_trigger(struct amdtp_stream *s,
|
|||||||
ACCESS_ONCE(s->pcm) = pcm;
|
ACCESS_ONCE(s->pcm) = pcm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* amdtp_stream_midi_trigger - start/stop playback/capture with a MIDI device
|
|
||||||
* @s: the AMDTP stream
|
|
||||||
* @port: index of MIDI port
|
|
||||||
* @midi: the MIDI device to be started, or %NULL to stop the current device
|
|
||||||
*
|
|
||||||
* Call this function on a running isochronous stream to enable the actual
|
|
||||||
* transmission of MIDI data. This function should be called from the MIDI
|
|
||||||
* device's .trigger callback.
|
|
||||||
*/
|
|
||||||
static inline void amdtp_stream_midi_trigger(struct amdtp_stream *s,
|
|
||||||
unsigned int port,
|
|
||||||
struct snd_rawmidi_substream *midi)
|
|
||||||
{
|
|
||||||
if (port < s->midi_ports)
|
|
||||||
ACCESS_ONCE(s->midi[port]) = midi;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool cip_sfc_is_base_44100(enum cip_sfc sfc)
|
static inline bool cip_sfc_is_base_44100(enum cip_sfc sfc)
|
||||||
{
|
{
|
||||||
return sfc & 1;
|
return sfc & 1;
|
||||||
|
@ -72,11 +72,11 @@ static void midi_capture_trigger(struct snd_rawmidi_substream *substrm, int up)
|
|||||||
spin_lock_irqsave(&bebob->lock, flags);
|
spin_lock_irqsave(&bebob->lock, flags);
|
||||||
|
|
||||||
if (up)
|
if (up)
|
||||||
amdtp_stream_midi_trigger(&bebob->tx_stream,
|
amdtp_am824_midi_trigger(&bebob->tx_stream,
|
||||||
substrm->number, substrm);
|
substrm->number, substrm);
|
||||||
else
|
else
|
||||||
amdtp_stream_midi_trigger(&bebob->tx_stream,
|
amdtp_am824_midi_trigger(&bebob->tx_stream,
|
||||||
substrm->number, NULL);
|
substrm->number, NULL);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&bebob->lock, flags);
|
spin_unlock_irqrestore(&bebob->lock, flags);
|
||||||
}
|
}
|
||||||
@ -89,11 +89,11 @@ static void midi_playback_trigger(struct snd_rawmidi_substream *substrm, int up)
|
|||||||
spin_lock_irqsave(&bebob->lock, flags);
|
spin_lock_irqsave(&bebob->lock, flags);
|
||||||
|
|
||||||
if (up)
|
if (up)
|
||||||
amdtp_stream_midi_trigger(&bebob->rx_stream,
|
amdtp_am824_midi_trigger(&bebob->rx_stream,
|
||||||
substrm->number, substrm);
|
substrm->number, substrm);
|
||||||
else
|
else
|
||||||
amdtp_stream_midi_trigger(&bebob->rx_stream,
|
amdtp_am824_midi_trigger(&bebob->rx_stream,
|
||||||
substrm->number, NULL);
|
substrm->number, NULL);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&bebob->lock, flags);
|
spin_unlock_irqrestore(&bebob->lock, flags);
|
||||||
}
|
}
|
||||||
|
@ -52,10 +52,10 @@ static void midi_capture_trigger(struct snd_rawmidi_substream *substrm, int up)
|
|||||||
spin_lock_irqsave(&dice->lock, flags);
|
spin_lock_irqsave(&dice->lock, flags);
|
||||||
|
|
||||||
if (up)
|
if (up)
|
||||||
amdtp_stream_midi_trigger(&dice->tx_stream,
|
amdtp_am824_midi_trigger(&dice->tx_stream,
|
||||||
substrm->number, substrm);
|
substrm->number, substrm);
|
||||||
else
|
else
|
||||||
amdtp_stream_midi_trigger(&dice->tx_stream,
|
amdtp_am824_midi_trigger(&dice->tx_stream,
|
||||||
substrm->number, NULL);
|
substrm->number, NULL);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dice->lock, flags);
|
spin_unlock_irqrestore(&dice->lock, flags);
|
||||||
@ -69,11 +69,11 @@ static void midi_playback_trigger(struct snd_rawmidi_substream *substrm, int up)
|
|||||||
spin_lock_irqsave(&dice->lock, flags);
|
spin_lock_irqsave(&dice->lock, flags);
|
||||||
|
|
||||||
if (up)
|
if (up)
|
||||||
amdtp_stream_midi_trigger(&dice->rx_stream,
|
amdtp_am824_midi_trigger(&dice->rx_stream,
|
||||||
substrm->number, substrm);
|
substrm->number, substrm);
|
||||||
else
|
else
|
||||||
amdtp_stream_midi_trigger(&dice->rx_stream,
|
amdtp_am824_midi_trigger(&dice->rx_stream,
|
||||||
substrm->number, NULL);
|
substrm->number, NULL);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dice->lock, flags);
|
spin_unlock_irqrestore(&dice->lock, flags);
|
||||||
}
|
}
|
||||||
|
@ -73,10 +73,10 @@ static void midi_capture_trigger(struct snd_rawmidi_substream *substrm, int up)
|
|||||||
spin_lock_irqsave(&efw->lock, flags);
|
spin_lock_irqsave(&efw->lock, flags);
|
||||||
|
|
||||||
if (up)
|
if (up)
|
||||||
amdtp_stream_midi_trigger(&efw->tx_stream,
|
amdtp_am824_midi_trigger(&efw->tx_stream,
|
||||||
substrm->number, substrm);
|
substrm->number, substrm);
|
||||||
else
|
else
|
||||||
amdtp_stream_midi_trigger(&efw->tx_stream,
|
amdtp_am824_midi_trigger(&efw->tx_stream,
|
||||||
substrm->number, NULL);
|
substrm->number, NULL);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&efw->lock, flags);
|
spin_unlock_irqrestore(&efw->lock, flags);
|
||||||
@ -90,11 +90,11 @@ static void midi_playback_trigger(struct snd_rawmidi_substream *substrm, int up)
|
|||||||
spin_lock_irqsave(&efw->lock, flags);
|
spin_lock_irqsave(&efw->lock, flags);
|
||||||
|
|
||||||
if (up)
|
if (up)
|
||||||
amdtp_stream_midi_trigger(&efw->rx_stream,
|
amdtp_am824_midi_trigger(&efw->rx_stream,
|
||||||
substrm->number, substrm);
|
substrm->number, substrm);
|
||||||
else
|
else
|
||||||
amdtp_stream_midi_trigger(&efw->rx_stream,
|
amdtp_am824_midi_trigger(&efw->rx_stream,
|
||||||
substrm->number, NULL);
|
substrm->number, NULL);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&efw->lock, flags);
|
spin_unlock_irqrestore(&efw->lock, flags);
|
||||||
}
|
}
|
||||||
|
@ -90,11 +90,11 @@ static void midi_capture_trigger(struct snd_rawmidi_substream *substrm, int up)
|
|||||||
spin_lock_irqsave(&oxfw->lock, flags);
|
spin_lock_irqsave(&oxfw->lock, flags);
|
||||||
|
|
||||||
if (up)
|
if (up)
|
||||||
amdtp_stream_midi_trigger(&oxfw->tx_stream,
|
amdtp_am824_midi_trigger(&oxfw->tx_stream,
|
||||||
substrm->number, substrm);
|
substrm->number, substrm);
|
||||||
else
|
else
|
||||||
amdtp_stream_midi_trigger(&oxfw->tx_stream,
|
amdtp_am824_midi_trigger(&oxfw->tx_stream,
|
||||||
substrm->number, NULL);
|
substrm->number, NULL);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&oxfw->lock, flags);
|
spin_unlock_irqrestore(&oxfw->lock, flags);
|
||||||
}
|
}
|
||||||
@ -107,11 +107,11 @@ static void midi_playback_trigger(struct snd_rawmidi_substream *substrm, int up)
|
|||||||
spin_lock_irqsave(&oxfw->lock, flags);
|
spin_lock_irqsave(&oxfw->lock, flags);
|
||||||
|
|
||||||
if (up)
|
if (up)
|
||||||
amdtp_stream_midi_trigger(&oxfw->rx_stream,
|
amdtp_am824_midi_trigger(&oxfw->rx_stream,
|
||||||
substrm->number, substrm);
|
substrm->number, substrm);
|
||||||
else
|
else
|
||||||
amdtp_stream_midi_trigger(&oxfw->rx_stream,
|
amdtp_am824_midi_trigger(&oxfw->rx_stream,
|
||||||
substrm->number, NULL);
|
substrm->number, NULL);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&oxfw->lock, flags);
|
spin_unlock_irqrestore(&oxfw->lock, flags);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user