Commit ff222b7e authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai
Browse files

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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20200519111641.123211-5-o-takashi@sakamocchi.jp


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 61d79c70
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -133,7 +133,6 @@ static int init_hw_info(struct snd_motu *motu,
static int pcm_open(struct snd_pcm_substream *substream)
{
	struct snd_motu *motu = substream->private_data;
	const struct snd_motu_protocol *const protocol = motu->spec->protocol;
	struct amdtp_domain *d = &motu->domain;
	enum snd_motu_clock_source src;
	int err;
@@ -152,7 +151,7 @@ static int pcm_open(struct snd_pcm_substream *substream)
	if (err < 0)
		goto err_locked;

	err = protocol->get_clock_source(motu, &src);
	err = snd_motu_protocol_get_clock_source(motu, &src);
	if (err < 0)
		goto err_locked;

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

		err = protocol->get_clock_rate(motu, &rate);
		err = snd_motu_protocol_get_clock_rate(motu, &rate);
		if (err < 0)
			goto err_locked;

+3 −5
Original line number Diff line number Diff line
@@ -28,13 +28,12 @@ static void proc_read_clock(struct snd_info_entry *entry,
{

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

	if (protocol->get_clock_rate(motu, &rate) < 0)
	if (snd_motu_protocol_get_clock_rate(motu, &rate) < 0)
		return;
	if (protocol->get_clock_source(motu, &source) < 0)
	if (snd_motu_protocol_get_clock_source(motu, &source) < 0)
		return;

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

	if (protocol->cache_packet_formats(motu) < 0)
	if (snd_motu_protocol_cache_packet_formats(motu) < 0)
		return;

	snd_iprintf(buffer, "tx:\tmsg\tfixed\tdiffered\n");
+9 −11
Original line number Diff line number Diff line
@@ -35,7 +35,8 @@ static int get_clock_rate(u32 data, unsigned int *rate)
	return 0;
}

static int v2_get_clock_rate(struct snd_motu *motu, unsigned int *rate)
int snd_motu_protocol_v2_get_clock_rate(struct snd_motu *motu,
					unsigned int *rate)
{
	__be32 reg;
	int err;
@@ -48,7 +49,8 @@ static int v2_get_clock_rate(struct snd_motu *motu, unsigned int *rate)
	return get_clock_rate(be32_to_cpu(reg), rate);
}

static int v2_set_clock_rate(struct snd_motu *motu, unsigned int rate)
int snd_motu_protocol_v2_set_clock_rate(struct snd_motu *motu,
					unsigned int rate)
{
	__be32 reg;
	u32 data;
@@ -122,7 +124,7 @@ static int get_clock_source(struct snd_motu *motu, u32 data,
	return 0;
}

static int v2_get_clock_source(struct snd_motu *motu,
int snd_motu_protocol_v2_get_clock_source(struct snd_motu *motu,
					  enum snd_motu_clock_source *src)
{
	__be32 reg;
@@ -136,7 +138,8 @@ static int v2_get_clock_source(struct snd_motu *motu,
	return get_clock_source(motu, be32_to_cpu(reg), src);
}

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

static int v2_cache_packet_formats(struct snd_motu *motu)
int snd_motu_protocol_v2_cache_packet_formats(struct snd_motu *motu)
{
	__be32 reg;
	u32 data;
@@ -294,11 +297,6 @@ static int v2_cache_packet_formats(struct snd_motu *motu)
}

static const struct snd_motu_protocol snd_motu_protocol_v2 = {
	.get_clock_rate		= v2_get_clock_rate,
	.set_clock_rate		= v2_set_clock_rate,
	.get_clock_source	= v2_get_clock_source,
	.switch_fetching_mode	= v2_switch_fetching_mode,
	.cache_packet_formats	= v2_cache_packet_formats,
};

const struct snd_motu_spec snd_motu_spec_828mk2 = {
+9 −11
Original line number Diff line number Diff line
@@ -24,7 +24,8 @@
#define  V3_NO_ADAT_OPT_OUT_IFACE_A	0x00040000
#define  V3_NO_ADAT_OPT_OUT_IFACE_B	0x00400000

static int v3_get_clock_rate(struct snd_motu *motu, unsigned int *rate)
int snd_motu_protocol_v3_get_clock_rate(struct snd_motu *motu,
					unsigned int *rate)
{
	__be32 reg;
	u32 data;
@@ -45,7 +46,8 @@ static int v3_get_clock_rate(struct snd_motu *motu, unsigned int *rate)
	return 0;
}

static int v3_set_clock_rate(struct snd_motu *motu, unsigned int rate)
int snd_motu_protocol_v3_set_clock_rate(struct snd_motu *motu,
					unsigned int rate)
{
	__be32 reg;
	u32 data;
@@ -85,7 +87,7 @@ static int v3_set_clock_rate(struct snd_motu *motu, unsigned int rate)
	return 0;
}

static int v3_get_clock_source(struct snd_motu *motu,
int snd_motu_protocol_v3_get_clock_source(struct snd_motu *motu,
					  enum snd_motu_clock_source *src)
{
	__be32 reg;
@@ -133,7 +135,8 @@ static int v3_get_clock_source(struct snd_motu *motu,
	return 0;
}

static int v3_switch_fetching_mode(struct snd_motu *motu, bool enable)
int snd_motu_protocol_v3_switch_fetching_mode(struct snd_motu *motu,
					      bool enable)
{
	__be32 reg;
	u32 data;
@@ -275,7 +278,7 @@ static void calculate_differed_part(struct snd_motu_packet_format *formats,
	}
}

static int v3_cache_packet_formats(struct snd_motu *motu)
int snd_motu_protocol_v3_cache_packet_formats(struct snd_motu *motu)
{
	__be32 reg;
	u32 data;
@@ -308,11 +311,6 @@ static int v3_cache_packet_formats(struct snd_motu *motu)
}

static const struct snd_motu_protocol snd_motu_protocol_v3 = {
	.get_clock_rate		= v3_get_clock_rate,
	.set_clock_rate		= v3_set_clock_rate,
	.get_clock_source	= v3_get_clock_source,
	.switch_fetching_mode	= v3_switch_fetching_mode,
	.cache_packet_formats	= v3_cache_packet_formats,
};

const struct snd_motu_spec snd_motu_spec_828mk3 = {
+5 −5
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ static void finish_session(struct snd_motu *motu)
	u32 data;
	int err;

	err = motu->spec->protocol->switch_fetching_mode(motu, false);
	err = snd_motu_protocol_switch_fetching_mode(motu, false);
	if (err < 0)
		return;

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

	err = motu->spec->protocol->cache_packet_formats(motu);
	err = snd_motu_protocol_cache_packet_formats(motu);
	if (err < 0)
		return err;

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

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

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

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