|
@@ -48,10 +48,6 @@ struct amdtp_dot {
|
|
|
struct snd_rawmidi_substream *midi[MAX_MIDI_PORTS];
|
|
|
int midi_fifo_used[MAX_MIDI_PORTS];
|
|
|
int midi_fifo_limit;
|
|
|
-
|
|
|
- void (*transfer_samples)(struct amdtp_stream *s,
|
|
|
- struct snd_pcm_substream *pcm,
|
|
|
- __be32 *buffer, unsigned int frames);
|
|
|
};
|
|
|
|
|
|
/*
|
|
@@ -173,32 +169,6 @@ static void write_pcm_s32(struct amdtp_stream *s, struct snd_pcm_substream *pcm,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void write_pcm_s16(struct amdtp_stream *s, struct snd_pcm_substream *pcm,
|
|
|
- __be32 *buffer, unsigned int frames)
|
|
|
-{
|
|
|
- struct amdtp_dot *p = s->protocol;
|
|
|
- struct snd_pcm_runtime *runtime = pcm->runtime;
|
|
|
- unsigned int channels, remaining_frames, i, c;
|
|
|
- const u16 *src;
|
|
|
-
|
|
|
- channels = p->pcm_channels;
|
|
|
- src = (void *)runtime->dma_area +
|
|
|
- frames_to_bytes(runtime, s->pcm_buffer_pointer);
|
|
|
- remaining_frames = runtime->buffer_size - s->pcm_buffer_pointer;
|
|
|
-
|
|
|
- buffer++;
|
|
|
- for (i = 0; i < frames; ++i) {
|
|
|
- for (c = 0; c < channels; ++c) {
|
|
|
- buffer[c] = cpu_to_be32((*src << 8) | 0x40000000);
|
|
|
- dot_encode_step(&p->state, &buffer[c]);
|
|
|
- src++;
|
|
|
- }
|
|
|
- buffer += s->data_block_quadlets;
|
|
|
- if (--remaining_frames == 0)
|
|
|
- src = (void *)runtime->dma_area;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
static void read_pcm_s32(struct amdtp_stream *s, struct snd_pcm_substream *pcm,
|
|
|
__be32 *buffer, unsigned int frames)
|
|
|
{
|
|
@@ -351,33 +321,6 @@ int amdtp_dot_add_pcm_hw_constraints(struct amdtp_stream *s,
|
|
|
return amdtp_stream_add_pcm_hw_constraints(s, runtime);
|
|
|
}
|
|
|
|
|
|
-void amdtp_dot_set_pcm_format(struct amdtp_stream *s, snd_pcm_format_t format)
|
|
|
-{
|
|
|
- struct amdtp_dot *p = s->protocol;
|
|
|
-
|
|
|
- if (WARN_ON(amdtp_stream_pcm_running(s)))
|
|
|
- return;
|
|
|
-
|
|
|
- switch (format) {
|
|
|
- default:
|
|
|
- WARN_ON(1);
|
|
|
- /* fall through */
|
|
|
- case SNDRV_PCM_FORMAT_S16:
|
|
|
- if (s->direction == AMDTP_OUT_STREAM) {
|
|
|
- p->transfer_samples = write_pcm_s16;
|
|
|
- break;
|
|
|
- }
|
|
|
- WARN_ON(1);
|
|
|
- /* fall through */
|
|
|
- case SNDRV_PCM_FORMAT_S32:
|
|
|
- if (s->direction == AMDTP_OUT_STREAM)
|
|
|
- p->transfer_samples = write_pcm_s32;
|
|
|
- else
|
|
|
- p->transfer_samples = read_pcm_s32;
|
|
|
- break;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
void amdtp_dot_midi_trigger(struct amdtp_stream *s, unsigned int port,
|
|
|
struct snd_rawmidi_substream *midi)
|
|
|
{
|
|
@@ -392,13 +335,12 @@ static unsigned int process_tx_data_blocks(struct amdtp_stream *s,
|
|
|
unsigned int data_blocks,
|
|
|
unsigned int *syt)
|
|
|
{
|
|
|
- struct amdtp_dot *p = (struct amdtp_dot *)s->protocol;
|
|
|
struct snd_pcm_substream *pcm;
|
|
|
unsigned int pcm_frames;
|
|
|
|
|
|
pcm = ACCESS_ONCE(s->pcm);
|
|
|
if (pcm) {
|
|
|
- p->transfer_samples(s, pcm, buffer, data_blocks);
|
|
|
+ read_pcm_s32(s, pcm, buffer, data_blocks);
|
|
|
pcm_frames = data_blocks;
|
|
|
} else {
|
|
|
pcm_frames = 0;
|
|
@@ -414,13 +356,12 @@ static unsigned int process_rx_data_blocks(struct amdtp_stream *s,
|
|
|
unsigned int data_blocks,
|
|
|
unsigned int *syt)
|
|
|
{
|
|
|
- struct amdtp_dot *p = (struct amdtp_dot *)s->protocol;
|
|
|
struct snd_pcm_substream *pcm;
|
|
|
unsigned int pcm_frames;
|
|
|
|
|
|
pcm = ACCESS_ONCE(s->pcm);
|
|
|
if (pcm) {
|
|
|
- p->transfer_samples(s, pcm, buffer, data_blocks);
|
|
|
+ write_pcm_s32(s, pcm, buffer, data_blocks);
|
|
|
pcm_frames = data_blocks;
|
|
|
} else {
|
|
|
write_pcm_silence(s, buffer, data_blocks);
|