Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

ALSA: firewire-lib: move PCM substream constraint to AM824 layer



In IEC 61883-6, PCM frames are transferred in Multi Bit Linear Audio data
channel. The data channel transfers 16/20/24 bit PCM samples. Thus, PCM
substream has a constrain about it.

This commit moves codes related to the constraint from packet streaming
layer to AM824 data block processing layer.

Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 51c29fd2
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -52,6 +52,26 @@ int amdtp_am824_set_parameters(struct amdtp_stream *s, unsigned int rate,
}
EXPORT_SYMBOL_GPL(amdtp_am824_set_parameters);

/**
 * amdtp_am824_add_pcm_hw_constraints - add hw constraints for PCM substream
 * @s:		the AMDTP stream for AM824 data block, must be initialized.
 * @runtime:	the PCM substream runtime
 *
 */
int amdtp_am824_add_pcm_hw_constraints(struct amdtp_stream *s,
				       struct snd_pcm_runtime *runtime)
{
	int err;

	err = amdtp_stream_add_pcm_hw_constraints(s, runtime);
	if (err < 0)
		return err;

	/* AM824 in IEC 61883-6 can deliver 24bit data. */
	return snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
}
EXPORT_SYMBOL_GPL(amdtp_am824_add_pcm_hw_constraints);

/**
 * amdtp_am824_init - initialize an AMDTP stream structure to handle AM824
 *		      data block
+5 −0
Original line number Diff line number Diff line
#ifndef SOUND_FIREWIRE_AMDTP_AM824_H_INCLUDED
#define SOUND_FIREWIRE_AMDTP_AM824_H_INCLUDED

#include <sound/pcm.h>

#include "amdtp-stream.h"

int amdtp_am824_set_parameters(struct amdtp_stream *s, unsigned int rate,
@@ -8,6 +10,9 @@ int amdtp_am824_set_parameters(struct amdtp_stream *s, unsigned int rate,
			       unsigned int midi_ports,
			       bool double_pcm_frames);

int amdtp_am824_add_pcm_hw_constraints(struct amdtp_stream *s,
				       struct snd_pcm_runtime *runtime);

int amdtp_am824_init(struct amdtp_stream *s, struct fw_unit *unit,
		     enum amdtp_stream_direction dir, enum cip_flags flags);
#endif
+0 −5
Original line number Diff line number Diff line
@@ -140,11 +140,6 @@ int amdtp_stream_add_pcm_hw_constraints(struct amdtp_stream *s,
{
	int err;

	/* AM824 in IEC 61883-6 can deliver 24bit data */
	err = snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
	if (err < 0)
		goto end;

	/*
	 * Currently firewire-lib processes 16 packets in one software
	 * interrupt callback. This equals to 2msec but actually the
+1 −1
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ pcm_init_hw_params(struct snd_bebob *bebob,
	if (err < 0)
		goto end;

	err = amdtp_stream_add_pcm_hw_constraints(s, runtime);
	err = amdtp_am824_add_pcm_hw_constraints(s, runtime);
end:
	return err;
}
+1 −1
Original line number Diff line number Diff line
@@ -156,7 +156,7 @@ static int init_hw_info(struct snd_dice *dice,
	if (err < 0)
		goto end;

	err = amdtp_stream_add_pcm_hw_constraints(stream, runtime);
	err = amdtp_am824_add_pcm_hw_constraints(stream, runtime);
end:
	return err;
}
Loading