Skip to content

Commit ff222b7

Browse files
takaswietiwai
authored andcommitted
ALSA: firewire-motu: add wrapper functions for protocol-dependent operations
This commit adds helper functions which wraps function call for each protocol. Signed-off-by: Takashi Sakamoto <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Takashi Iwai <[email protected]>
1 parent 61d79c7 commit ff222b7

File tree

6 files changed

+103
-35
lines changed

6 files changed

+103
-35
lines changed

sound/firewire/motu/motu-pcm.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ static int init_hw_info(struct snd_motu *motu,
133133
static int pcm_open(struct snd_pcm_substream *substream)
134134
{
135135
struct snd_motu *motu = substream->private_data;
136-
const struct snd_motu_protocol *const protocol = motu->spec->protocol;
137136
struct amdtp_domain *d = &motu->domain;
138137
enum snd_motu_clock_source src;
139138
int err;
@@ -152,7 +151,7 @@ static int pcm_open(struct snd_pcm_substream *substream)
152151
if (err < 0)
153152
goto err_locked;
154153

155-
err = protocol->get_clock_source(motu, &src);
154+
err = snd_motu_protocol_get_clock_source(motu, &src);
156155
if (err < 0)
157156
goto err_locked;
158157

@@ -166,7 +165,7 @@ static int pcm_open(struct snd_pcm_substream *substream)
166165
unsigned int frames_per_buffer = d->events_per_buffer;
167166
unsigned int rate;
168167

169-
err = protocol->get_clock_rate(motu, &rate);
168+
err = snd_motu_protocol_get_clock_rate(motu, &rate);
170169
if (err < 0)
171170
goto err_locked;
172171

sound/firewire/motu/motu-proc.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,12 @@ static void proc_read_clock(struct snd_info_entry *entry,
2828
{
2929

3030
struct snd_motu *motu = entry->private_data;
31-
const struct snd_motu_protocol *const protocol = motu->spec->protocol;
3231
unsigned int rate;
3332
enum snd_motu_clock_source source;
3433

35-
if (protocol->get_clock_rate(motu, &rate) < 0)
34+
if (snd_motu_protocol_get_clock_rate(motu, &rate) < 0)
3635
return;
37-
if (protocol->get_clock_source(motu, &source) < 0)
36+
if (snd_motu_protocol_get_clock_source(motu, &source) < 0)
3837
return;
3938

4039
snd_iprintf(buffer, "Rate:\t%d\n", rate);
@@ -45,12 +44,11 @@ static void proc_read_format(struct snd_info_entry *entry,
4544
struct snd_info_buffer *buffer)
4645
{
4746
struct snd_motu *motu = entry->private_data;
48-
const struct snd_motu_protocol *const protocol = motu->spec->protocol;
4947
unsigned int mode;
5048
struct snd_motu_packet_format *formats;
5149
int i;
5250

53-
if (protocol->cache_packet_formats(motu) < 0)
51+
if (snd_motu_protocol_cache_packet_formats(motu) < 0)
5452
return;
5553

5654
snd_iprintf(buffer, "tx:\tmsg\tfixed\tdiffered\n");

sound/firewire/motu/motu-protocol-v2.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ static int get_clock_rate(u32 data, unsigned int *rate)
3535
return 0;
3636
}
3737

38-
static int v2_get_clock_rate(struct snd_motu *motu, unsigned int *rate)
38+
int snd_motu_protocol_v2_get_clock_rate(struct snd_motu *motu,
39+
unsigned int *rate)
3940
{
4041
__be32 reg;
4142
int err;
@@ -48,7 +49,8 @@ static int v2_get_clock_rate(struct snd_motu *motu, unsigned int *rate)
4849
return get_clock_rate(be32_to_cpu(reg), rate);
4950
}
5051

51-
static int v2_set_clock_rate(struct snd_motu *motu, unsigned int rate)
52+
int snd_motu_protocol_v2_set_clock_rate(struct snd_motu *motu,
53+
unsigned int rate)
5254
{
5355
__be32 reg;
5456
u32 data;
@@ -122,8 +124,8 @@ static int get_clock_source(struct snd_motu *motu, u32 data,
122124
return 0;
123125
}
124126

125-
static int v2_get_clock_source(struct snd_motu *motu,
126-
enum snd_motu_clock_source *src)
127+
int snd_motu_protocol_v2_get_clock_source(struct snd_motu *motu,
128+
enum snd_motu_clock_source *src)
127129
{
128130
__be32 reg;
129131
int err;
@@ -136,7 +138,8 @@ static int v2_get_clock_source(struct snd_motu *motu,
136138
return get_clock_source(motu, be32_to_cpu(reg), src);
137139
}
138140

139-
static int v2_switch_fetching_mode(struct snd_motu *motu, bool enable)
141+
int snd_motu_protocol_v2_switch_fetching_mode(struct snd_motu *motu,
142+
bool enable)
140143
{
141144
enum snd_motu_clock_source src;
142145
__be32 reg;
@@ -265,7 +268,7 @@ static void calculate_differed_part(struct snd_motu_packet_format *formats,
265268
formats->differed_part_pcm_chunks[1] = pcm_chunks[1];
266269
}
267270

268-
static int v2_cache_packet_formats(struct snd_motu *motu)
271+
int snd_motu_protocol_v2_cache_packet_formats(struct snd_motu *motu)
269272
{
270273
__be32 reg;
271274
u32 data;
@@ -294,11 +297,6 @@ static int v2_cache_packet_formats(struct snd_motu *motu)
294297
}
295298

296299
static const struct snd_motu_protocol snd_motu_protocol_v2 = {
297-
.get_clock_rate = v2_get_clock_rate,
298-
.set_clock_rate = v2_set_clock_rate,
299-
.get_clock_source = v2_get_clock_source,
300-
.switch_fetching_mode = v2_switch_fetching_mode,
301-
.cache_packet_formats = v2_cache_packet_formats,
302300
};
303301

304302
const struct snd_motu_spec snd_motu_spec_828mk2 = {

sound/firewire/motu/motu-protocol-v3.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
#define V3_NO_ADAT_OPT_OUT_IFACE_A 0x00040000
2525
#define V3_NO_ADAT_OPT_OUT_IFACE_B 0x00400000
2626

27-
static int v3_get_clock_rate(struct snd_motu *motu, unsigned int *rate)
27+
int snd_motu_protocol_v3_get_clock_rate(struct snd_motu *motu,
28+
unsigned int *rate)
2829
{
2930
__be32 reg;
3031
u32 data;
@@ -45,7 +46,8 @@ static int v3_get_clock_rate(struct snd_motu *motu, unsigned int *rate)
4546
return 0;
4647
}
4748

48-
static int v3_set_clock_rate(struct snd_motu *motu, unsigned int rate)
49+
int snd_motu_protocol_v3_set_clock_rate(struct snd_motu *motu,
50+
unsigned int rate)
4951
{
5052
__be32 reg;
5153
u32 data;
@@ -85,8 +87,8 @@ static int v3_set_clock_rate(struct snd_motu *motu, unsigned int rate)
8587
return 0;
8688
}
8789

88-
static int v3_get_clock_source(struct snd_motu *motu,
89-
enum snd_motu_clock_source *src)
90+
int snd_motu_protocol_v3_get_clock_source(struct snd_motu *motu,
91+
enum snd_motu_clock_source *src)
9092
{
9193
__be32 reg;
9294
u32 data;
@@ -133,7 +135,8 @@ static int v3_get_clock_source(struct snd_motu *motu,
133135
return 0;
134136
}
135137

136-
static int v3_switch_fetching_mode(struct snd_motu *motu, bool enable)
138+
int snd_motu_protocol_v3_switch_fetching_mode(struct snd_motu *motu,
139+
bool enable)
137140
{
138141
__be32 reg;
139142
u32 data;
@@ -275,7 +278,7 @@ static void calculate_differed_part(struct snd_motu_packet_format *formats,
275278
}
276279
}
277280

278-
static int v3_cache_packet_formats(struct snd_motu *motu)
281+
int snd_motu_protocol_v3_cache_packet_formats(struct snd_motu *motu)
279282
{
280283
__be32 reg;
281284
u32 data;
@@ -308,11 +311,6 @@ static int v3_cache_packet_formats(struct snd_motu *motu)
308311
}
309312

310313
static const struct snd_motu_protocol snd_motu_protocol_v3 = {
311-
.get_clock_rate = v3_get_clock_rate,
312-
.set_clock_rate = v3_set_clock_rate,
313-
.get_clock_source = v3_get_clock_source,
314-
.switch_fetching_mode = v3_switch_fetching_mode,
315-
.cache_packet_formats = v3_cache_packet_formats,
316314
};
317315

318316
const struct snd_motu_spec snd_motu_spec_828mk3 = {

sound/firewire/motu/motu-stream.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ static void finish_session(struct snd_motu *motu)
8888
u32 data;
8989
int err;
9090

91-
err = motu->spec->protocol->switch_fetching_mode(motu, false);
91+
err = snd_motu_protocol_switch_fetching_mode(motu, false);
9292
if (err < 0)
9393
return;
9494

@@ -110,7 +110,7 @@ int snd_motu_stream_cache_packet_formats(struct snd_motu *motu)
110110
{
111111
int err;
112112

113-
err = motu->spec->protocol->cache_packet_formats(motu);
113+
err = snd_motu_protocol_cache_packet_formats(motu);
114114
if (err < 0)
115115
return err;
116116

@@ -140,7 +140,7 @@ int snd_motu_stream_reserve_duplex(struct snd_motu *motu, unsigned int rate,
140140
unsigned int curr_rate;
141141
int err;
142142

143-
err = motu->spec->protocol->get_clock_rate(motu, &curr_rate);
143+
err = snd_motu_protocol_get_clock_rate(motu, &curr_rate);
144144
if (err < 0)
145145
return err;
146146
if (rate == 0)
@@ -153,7 +153,7 @@ int snd_motu_stream_reserve_duplex(struct snd_motu *motu, unsigned int rate,
153153
fw_iso_resources_free(&motu->tx_resources);
154154
fw_iso_resources_free(&motu->rx_resources);
155155

156-
err = motu->spec->protocol->set_clock_rate(motu, rate);
156+
err = snd_motu_protocol_set_clock_rate(motu, rate);
157157
if (err < 0) {
158158
dev_err(&motu->unit->device,
159159
"fail to set sampling rate: %d\n", err);
@@ -272,7 +272,7 @@ int snd_motu_stream_start_duplex(struct snd_motu *motu)
272272
goto stop_streams;
273273
}
274274

275-
err = motu->spec->protocol->switch_fetching_mode(motu, true);
275+
err = snd_motu_protocol_switch_fetching_mode(motu, true);
276276
if (err < 0) {
277277
dev_err(&motu->unit->device,
278278
"fail to enable frame fetching: %d\n", err);

sound/firewire/motu/motu.h

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,79 @@ int snd_motu_create_pcm_devices(struct snd_motu *motu);
179179
int snd_motu_create_midi_devices(struct snd_motu *motu);
180180

181181
int snd_motu_create_hwdep_device(struct snd_motu *motu);
182+
183+
int snd_motu_protocol_v2_get_clock_rate(struct snd_motu *motu,
184+
unsigned int *rate);
185+
int snd_motu_protocol_v2_set_clock_rate(struct snd_motu *motu,
186+
unsigned int rate);
187+
int snd_motu_protocol_v2_get_clock_source(struct snd_motu *motu,
188+
enum snd_motu_clock_source *src);
189+
int snd_motu_protocol_v2_switch_fetching_mode(struct snd_motu *motu,
190+
bool enable);
191+
int snd_motu_protocol_v2_cache_packet_formats(struct snd_motu *motu);
192+
193+
int snd_motu_protocol_v3_get_clock_rate(struct snd_motu *motu,
194+
unsigned int *rate);
195+
int snd_motu_protocol_v3_set_clock_rate(struct snd_motu *motu,
196+
unsigned int rate);
197+
int snd_motu_protocol_v3_get_clock_source(struct snd_motu *motu,
198+
enum snd_motu_clock_source *src);
199+
int snd_motu_protocol_v3_switch_fetching_mode(struct snd_motu *motu,
200+
bool enable);
201+
int snd_motu_protocol_v3_cache_packet_formats(struct snd_motu *motu);
202+
203+
static inline int snd_motu_protocol_get_clock_rate(struct snd_motu *motu,
204+
unsigned int *rate)
205+
{
206+
if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V2)
207+
return snd_motu_protocol_v2_get_clock_rate(motu, rate);
208+
else if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V3)
209+
return snd_motu_protocol_v3_get_clock_rate(motu, rate);
210+
else
211+
return -ENXIO;
212+
}
213+
214+
static inline int snd_motu_protocol_set_clock_rate(struct snd_motu *motu,
215+
unsigned int rate)
216+
{
217+
if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V2)
218+
return snd_motu_protocol_v2_set_clock_rate(motu, rate);
219+
else if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V3)
220+
return snd_motu_protocol_v3_set_clock_rate(motu, rate);
221+
else
222+
return -ENXIO;
223+
}
224+
225+
static inline int snd_motu_protocol_get_clock_source(struct snd_motu *motu,
226+
enum snd_motu_clock_source *source)
227+
{
228+
if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V2)
229+
return snd_motu_protocol_v2_get_clock_source(motu, source);
230+
else if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V3)
231+
return snd_motu_protocol_v3_get_clock_source(motu, source);
232+
else
233+
return -ENXIO;
234+
}
235+
236+
static inline int snd_motu_protocol_switch_fetching_mode(struct snd_motu *motu,
237+
bool enable)
238+
{
239+
if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V2)
240+
return snd_motu_protocol_v2_switch_fetching_mode(motu, enable);
241+
else if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V3)
242+
return snd_motu_protocol_v3_switch_fetching_mode(motu, enable);
243+
else
244+
return -ENXIO;
245+
}
246+
247+
static inline int snd_motu_protocol_cache_packet_formats(struct snd_motu *motu)
248+
{
249+
if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V2)
250+
return snd_motu_protocol_v2_cache_packet_formats(motu);
251+
else if (motu->spec->protocol_version == SND_MOTU_PROTOCOL_V3)
252+
return snd_motu_protocol_v3_cache_packet_formats(motu);
253+
else
254+
return -ENXIO;
255+
}
256+
182257
#endif

0 commit comments

Comments
 (0)