xref: /linux/sound/firewire/amdtp-am824.h (revision c0c914eca7f251c70facc37dfebeaf176601918d)
1 #ifndef SOUND_FIREWIRE_AMDTP_AM824_H_INCLUDED
2 #define SOUND_FIREWIRE_AMDTP_AM824_H_INCLUDED
3 
4 #include <sound/pcm.h>
5 #include <sound/rawmidi.h>
6 
7 #include "amdtp-stream.h"
8 
9 #define AM824_IN_PCM_FORMAT_BITS	SNDRV_PCM_FMTBIT_S32
10 
11 #define AM824_OUT_PCM_FORMAT_BITS	(SNDRV_PCM_FMTBIT_S16 | \
12 					 SNDRV_PCM_FMTBIT_S32)
13 
14 /*
15  * This module supports maximum 64 PCM channels for one PCM stream
16  * This is for our convenience.
17  */
18 #define AM824_MAX_CHANNELS_FOR_PCM	64
19 
20 /*
21  * AMDTP packet can include channels for MIDI conformant data.
22  * Each MIDI conformant data channel includes 8 MPX-MIDI data stream.
23  * Each MPX-MIDI data stream includes one data stream from/to MIDI ports.
24  *
25  * This module supports maximum 1 MIDI conformant data channels.
26  * Then this AMDTP packets can transfer maximum 8 MIDI data streams.
27  */
28 #define AM824_MAX_CHANNELS_FOR_MIDI	1
29 
30 int amdtp_am824_set_parameters(struct amdtp_stream *s, unsigned int rate,
31 			       unsigned int pcm_channels,
32 			       unsigned int midi_ports,
33 			       bool double_pcm_frames);
34 
35 void amdtp_am824_set_pcm_position(struct amdtp_stream *s, unsigned int index,
36 				 unsigned int position);
37 
38 void amdtp_am824_set_midi_position(struct amdtp_stream *s,
39 				   unsigned int position);
40 
41 int amdtp_am824_add_pcm_hw_constraints(struct amdtp_stream *s,
42 				       struct snd_pcm_runtime *runtime);
43 
44 void amdtp_am824_set_pcm_format(struct amdtp_stream *s,
45 				snd_pcm_format_t format);
46 
47 void amdtp_am824_midi_trigger(struct amdtp_stream *s, unsigned int port,
48 			      struct snd_rawmidi_substream *midi);
49 
50 int amdtp_am824_init(struct amdtp_stream *s, struct fw_unit *unit,
51 		     enum amdtp_stream_direction dir, enum cip_flags flags);
52 #endif
53