forked from Minki/linux
ALSA: firewire-lib: add data block processing layer for AM824 format
This commit adds data block processing layer for AM824 format. The new layer initializes streaming layer with its value for fmt field. Currently, most implementation of data block processing still remains streaming layer. In later commits, these codes will be moved to the layer. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
d67c46b953
commit
5955815e71
@ -1,5 +1,5 @@
|
|||||||
snd-firewire-lib-objs := lib.o iso-resources.o packets-buffer.o \
|
snd-firewire-lib-objs := lib.o iso-resources.o packets-buffer.o \
|
||||||
fcp.o cmp.o amdtp-stream.o
|
fcp.o cmp.o amdtp-stream.o amdtp-am824.o
|
||||||
snd-oxfw-objs := oxfw.o
|
snd-oxfw-objs := oxfw.o
|
||||||
snd-isight-objs := isight.o
|
snd-isight-objs := isight.o
|
||||||
snd-scs1x-objs := scs1x.o
|
snd-scs1x-objs := scs1x.o
|
||||||
|
26
sound/firewire/amdtp-am824.c
Normal file
26
sound/firewire/amdtp-am824.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* AM824 format in Audio and Music Data Transmission Protocol (IEC 61883-6)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||||||
|
*
|
||||||
|
* Licensed under the terms of the GNU General Public License, version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "amdtp-am824.h"
|
||||||
|
|
||||||
|
#define CIP_FMT_AM 0x10
|
||||||
|
|
||||||
|
/**
|
||||||
|
* amdtp_am824_init - initialize an AMDTP stream structure to handle AM824
|
||||||
|
* data block
|
||||||
|
* @s: the AMDTP stream to initialize
|
||||||
|
* @unit: the target of the stream
|
||||||
|
* @dir: the direction of stream
|
||||||
|
* @flags: the packet transmission method to use
|
||||||
|
*/
|
||||||
|
int amdtp_am824_init(struct amdtp_stream *s, struct fw_unit *unit,
|
||||||
|
enum amdtp_stream_direction dir, enum cip_flags flags)
|
||||||
|
{
|
||||||
|
return amdtp_stream_init(s, unit, dir, flags, CIP_FMT_AM);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(amdtp_am824_init);
|
8
sound/firewire/amdtp-am824.h
Normal file
8
sound/firewire/amdtp-am824.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef SOUND_FIREWIRE_AMDTP_AM824_H_INCLUDED
|
||||||
|
#define SOUND_FIREWIRE_AMDTP_AM824_H_INCLUDED
|
||||||
|
|
||||||
|
#include "amdtp-stream.h"
|
||||||
|
|
||||||
|
int amdtp_am824_init(struct amdtp_stream *s, struct fw_unit *unit,
|
||||||
|
enum amdtp_stream_direction dir, enum cip_flags flags);
|
||||||
|
#endif
|
@ -11,7 +11,6 @@
|
|||||||
#include <linux/firewire.h>
|
#include <linux/firewire.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <sound/pcm.h>
|
#include <sound/pcm.h>
|
||||||
#include <sound/pcm_params.h>
|
#include <sound/pcm_params.h>
|
||||||
#include <sound/rawmidi.h>
|
#include <sound/rawmidi.h>
|
||||||
@ -78,9 +77,11 @@ static void pcm_period_tasklet(unsigned long data);
|
|||||||
* @unit: the target of the stream
|
* @unit: the target of the stream
|
||||||
* @dir: the direction of stream
|
* @dir: the direction of stream
|
||||||
* @flags: the packet transmission method to use
|
* @flags: the packet transmission method to use
|
||||||
|
* @fmt: the value of fmt field in CIP header
|
||||||
*/
|
*/
|
||||||
int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
|
int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
|
||||||
enum amdtp_stream_direction dir, enum cip_flags flags)
|
enum amdtp_stream_direction dir, enum cip_flags flags,
|
||||||
|
unsigned int fmt)
|
||||||
{
|
{
|
||||||
s->unit = unit;
|
s->unit = unit;
|
||||||
s->direction = dir;
|
s->direction = dir;
|
||||||
@ -94,7 +95,7 @@ int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
|
|||||||
s->callbacked = false;
|
s->callbacked = false;
|
||||||
s->sync_slave = NULL;
|
s->sync_slave = NULL;
|
||||||
|
|
||||||
s->fmt = CIP_FMT_AM;
|
s->fmt = fmt;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
#include <sound/asound.h>
|
#include <sound/asound.h>
|
||||||
#include "packets-buffer.h"
|
#include "packets-buffer.h"
|
||||||
|
|
||||||
@ -174,7 +175,7 @@ struct amdtp_stream {
|
|||||||
|
|
||||||
int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
|
int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
|
||||||
enum amdtp_stream_direction dir,
|
enum amdtp_stream_direction dir,
|
||||||
enum cip_flags flags);
|
enum cip_flags flags, unsigned int fmt);
|
||||||
void amdtp_stream_destroy(struct amdtp_stream *s);
|
void amdtp_stream_destroy(struct amdtp_stream *s);
|
||||||
|
|
||||||
int amdtp_stream_set_parameters(struct amdtp_stream *s,
|
int amdtp_stream_set_parameters(struct amdtp_stream *s,
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#include "../fcp.h"
|
#include "../fcp.h"
|
||||||
#include "../packets-buffer.h"
|
#include "../packets-buffer.h"
|
||||||
#include "../iso-resources.h"
|
#include "../iso-resources.h"
|
||||||
#include "../amdtp-stream.h"
|
#include "../amdtp-am824.h"
|
||||||
#include "../cmp.h"
|
#include "../cmp.h"
|
||||||
|
|
||||||
/* basic register addresses on DM1000/DM1100/DM1500 */
|
/* basic register addresses on DM1000/DM1100/DM1500 */
|
||||||
|
@ -537,8 +537,8 @@ int snd_bebob_stream_init_duplex(struct snd_bebob *bebob)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
err = amdtp_stream_init(&bebob->tx_stream, bebob->unit,
|
err = amdtp_am824_init(&bebob->tx_stream, bebob->unit,
|
||||||
AMDTP_IN_STREAM, CIP_BLOCKING);
|
AMDTP_IN_STREAM, CIP_BLOCKING);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
amdtp_stream_destroy(&bebob->tx_stream);
|
amdtp_stream_destroy(&bebob->tx_stream);
|
||||||
destroy_both_connections(bebob);
|
destroy_both_connections(bebob);
|
||||||
@ -566,8 +566,8 @@ int snd_bebob_stream_init_duplex(struct snd_bebob *bebob)
|
|||||||
if (bebob->maudio_special_quirk)
|
if (bebob->maudio_special_quirk)
|
||||||
bebob->tx_stream.flags |= CIP_EMPTY_HAS_WRONG_DBC;
|
bebob->tx_stream.flags |= CIP_EMPTY_HAS_WRONG_DBC;
|
||||||
|
|
||||||
err = amdtp_stream_init(&bebob->rx_stream, bebob->unit,
|
err = amdtp_am824_init(&bebob->rx_stream, bebob->unit,
|
||||||
AMDTP_OUT_STREAM, CIP_BLOCKING);
|
AMDTP_OUT_STREAM, CIP_BLOCKING);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
amdtp_stream_destroy(&bebob->tx_stream);
|
amdtp_stream_destroy(&bebob->tx_stream);
|
||||||
amdtp_stream_destroy(&bebob->rx_stream);
|
amdtp_stream_destroy(&bebob->rx_stream);
|
||||||
|
@ -305,7 +305,7 @@ static int init_stream(struct snd_dice *dice, struct amdtp_stream *stream)
|
|||||||
goto end;
|
goto end;
|
||||||
resources->channels_mask = 0x00000000ffffffffuLL;
|
resources->channels_mask = 0x00000000ffffffffuLL;
|
||||||
|
|
||||||
err = amdtp_stream_init(stream, dice->unit, dir, CIP_BLOCKING);
|
err = amdtp_am824_init(stream, dice->unit, dir, CIP_BLOCKING);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
amdtp_stream_destroy(stream);
|
amdtp_stream_destroy(stream);
|
||||||
fw_iso_resources_destroy(resources);
|
fw_iso_resources_destroy(resources);
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#include <sound/pcm_params.h>
|
#include <sound/pcm_params.h>
|
||||||
#include <sound/rawmidi.h>
|
#include <sound/rawmidi.h>
|
||||||
|
|
||||||
#include "../amdtp-stream.h"
|
#include "../amdtp-am824.h"
|
||||||
#include "../iso-resources.h"
|
#include "../iso-resources.h"
|
||||||
#include "../lib.h"
|
#include "../lib.h"
|
||||||
#include "dice-interface.h"
|
#include "dice-interface.h"
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
#include "../packets-buffer.h"
|
#include "../packets-buffer.h"
|
||||||
#include "../iso-resources.h"
|
#include "../iso-resources.h"
|
||||||
#include "../amdtp-stream.h"
|
#include "../amdtp-am824.h"
|
||||||
#include "../cmp.h"
|
#include "../cmp.h"
|
||||||
#include "../lib.h"
|
#include "../lib.h"
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ init_stream(struct snd_efw *efw, struct amdtp_stream *stream)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
err = amdtp_stream_init(stream, efw->unit, s_dir, CIP_BLOCKING);
|
err = amdtp_am824_init(stream, efw->unit, s_dir, CIP_BLOCKING);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
amdtp_stream_destroy(stream);
|
amdtp_stream_destroy(stream);
|
||||||
cmp_connection_destroy(conn);
|
cmp_connection_destroy(conn);
|
||||||
|
@ -228,7 +228,7 @@ int snd_oxfw_stream_init_simplex(struct snd_oxfw *oxfw,
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
err = amdtp_stream_init(stream, oxfw->unit, s_dir, CIP_NONBLOCKING);
|
err = amdtp_am824_init(stream, oxfw->unit, s_dir, CIP_NONBLOCKING);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
amdtp_stream_destroy(stream);
|
amdtp_stream_destroy(stream);
|
||||||
cmp_connection_destroy(conn);
|
cmp_connection_destroy(conn);
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
#include "../fcp.h"
|
#include "../fcp.h"
|
||||||
#include "../packets-buffer.h"
|
#include "../packets-buffer.h"
|
||||||
#include "../iso-resources.h"
|
#include "../iso-resources.h"
|
||||||
#include "../amdtp-stream.h"
|
#include "../amdtp-am824.h"
|
||||||
#include "../cmp.h"
|
#include "../cmp.h"
|
||||||
|
|
||||||
struct device_info {
|
struct device_info {
|
||||||
|
Loading…
Reference in New Issue
Block a user