Commit a06b7ee2 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

Merge branch 'for-linus' into for-next

parents 6efb943b 814b4312
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ config SND_OXFW
	   * Mackie(Loud) Onyx 1640i (former model)
	   * Mackie(Loud) Onyx Satellite
	   * Mackie(Loud) Tapco Link.Firewire
	   * Mackie(Loud) d.2 pro/d.4 pro
	   * Mackie(Loud) d.4 pro
	   * Mackie(Loud) U.420/U.420d
	   * TASCAM FireOne
	   * Stanton Controllers & Systems 1 Deck/Mixer
@@ -84,7 +84,7 @@ config SND_BEBOB
	  * PreSonus FIREBOX/FIREPOD/FP10/Inspire1394
	  * BridgeCo RDAudio1/Audio5
	  * Mackie Onyx 1220/1620/1640 (FireWire I/O Card)
	  * Mackie d.2 (FireWire Option)
	  * Mackie d.2 (FireWire Option) and d.2 Pro
	  * Stanton FinalScratch 2 (ScratchAmp)
	  * Tascam IF-FW/DM
	  * Behringer XENIX UFX 1204/1604
+3 −3
Original line number Diff line number Diff line
@@ -14,8 +14,8 @@
#include <linux/tracepoint.h>

TRACE_EVENT(amdtp_packet,
	TP_PROTO(const struct amdtp_stream *s, u32 cycles, const __be32 *cip_header, unsigned int payload_length, unsigned int data_blocks, unsigned int data_block_counter, unsigned int index),
	TP_ARGS(s, cycles, cip_header, payload_length, data_blocks, data_block_counter, index),
	TP_PROTO(const struct amdtp_stream *s, u32 cycles, const __be32 *cip_header, unsigned int payload_length, unsigned int data_blocks, unsigned int data_block_counter, unsigned int packet_index, unsigned int index),
	TP_ARGS(s, cycles, cip_header, payload_length, data_blocks, data_block_counter, packet_index, index),
	TP_STRUCT__entry(
		__field(unsigned int, second)
		__field(unsigned int, cycle)
@@ -48,7 +48,7 @@ TRACE_EVENT(amdtp_packet,
		__entry->payload_quadlets = payload_length / sizeof(__be32);
		__entry->data_blocks = data_blocks;
		__entry->data_block_counter = data_block_counter,
		__entry->packet_index = s->packet_index;
		__entry->packet_index = packet_index;
		__entry->irq = !!in_interrupt();
		__entry->index = index;
	),
+25 −17
Original line number Diff line number Diff line
@@ -526,7 +526,7 @@ static void build_it_pkt_header(struct amdtp_stream *s, unsigned int cycle,
	}

	trace_amdtp_packet(s, cycle, cip_header, payload_length, data_blocks,
			   data_block_counter, index);
			   data_block_counter, s->packet_index, index);
}

static int check_cip_header(struct amdtp_stream *s, const __be32 *buf,
@@ -630,21 +630,27 @@ static int parse_ir_ctx_header(struct amdtp_stream *s, unsigned int cycle,
			       unsigned int *payload_length,
			       unsigned int *data_blocks,
			       unsigned int *data_block_counter,
			       unsigned int *syt, unsigned int index)
			       unsigned int *syt, unsigned int packet_index, unsigned int index)
{
	const __be32 *cip_header;
	unsigned int cip_header_size;
	int err;

	*payload_length = be32_to_cpu(ctx_header[0]) >> ISO_DATA_LENGTH_SHIFT;
	if (*payload_length > s->ctx_data.tx.ctx_header_size +
					s->ctx_data.tx.max_ctx_payload_length) {

	if (!(s->flags & CIP_NO_HEADER))
		cip_header_size = 8;
	else
		cip_header_size = 0;

	if (*payload_length > cip_header_size + s->ctx_data.tx.max_ctx_payload_length) {
		dev_err(&s->unit->device,
			"Detect jumbo payload: %04x %04x\n",
			*payload_length, s->ctx_data.tx.max_ctx_payload_length);
			*payload_length, cip_header_size + s->ctx_data.tx.max_ctx_payload_length);
		return -EIO;
	}

	if (!(s->flags & CIP_NO_HEADER)) {
	if (cip_header_size > 0) {
		cip_header = ctx_header + 2;
		err = check_cip_header(s, cip_header, *payload_length,
				       data_blocks, data_block_counter, syt);
@@ -662,7 +668,7 @@ static int parse_ir_ctx_header(struct amdtp_stream *s, unsigned int cycle,
	}

	trace_amdtp_packet(s, cycle, cip_header, *payload_length, *data_blocks,
			   *data_block_counter, index);
			   *data_block_counter, packet_index, index);

	return err;
}
@@ -701,12 +707,13 @@ static int generate_device_pkt_descs(struct amdtp_stream *s,
				     unsigned int packets)
{
	unsigned int dbc = s->data_block_counter;
	unsigned int packet_index = s->packet_index;
	unsigned int queue_size = s->queue_size;
	int i;
	int err;

	for (i = 0; i < packets; ++i) {
		struct pkt_desc *desc = descs + i;
		unsigned int index = (s->packet_index + i) % s->queue_size;
		unsigned int cycle;
		unsigned int payload_length;
		unsigned int data_blocks;
@@ -715,7 +722,7 @@ static int generate_device_pkt_descs(struct amdtp_stream *s,
		cycle = compute_cycle_count(ctx_header[1]);

		err = parse_ir_ctx_header(s, cycle, ctx_header, &payload_length,
					  &data_blocks, &dbc, &syt, i);
					  &data_blocks, &dbc, &syt, packet_index, i);
		if (err < 0)
			return err;

@@ -723,13 +730,15 @@ static int generate_device_pkt_descs(struct amdtp_stream *s,
		desc->syt = syt;
		desc->data_blocks = data_blocks;
		desc->data_block_counter = dbc;
		desc->ctx_payload = s->buffer.packets[index].buffer;
		desc->ctx_payload = s->buffer.packets[packet_index].buffer;

		if (!(s->flags & CIP_DBC_IS_END_EVENT))
			dbc = (dbc + desc->data_blocks) & 0xff;

		ctx_header +=
			s->ctx_data.tx.ctx_header_size / sizeof(*ctx_header);

		packet_index = (packet_index + 1) % queue_size;
	}

	s->data_block_counter = dbc;
@@ -1065,23 +1074,22 @@ static int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed,
		s->data_block_counter = 0;
	}

	/* initialize packet buffer */
	// initialize packet buffer.
	max_ctx_payload_size = amdtp_stream_get_max_payload(s);
	if (s->direction == AMDTP_IN_STREAM) {
		dir = DMA_FROM_DEVICE;
		type = FW_ISO_CONTEXT_RECEIVE;
		if (!(s->flags & CIP_NO_HEADER))
		if (!(s->flags & CIP_NO_HEADER)) {
			max_ctx_payload_size -= 8;
			ctx_header_size = IR_CTX_HEADER_SIZE_CIP;
		else
		} else {
			ctx_header_size = IR_CTX_HEADER_SIZE_NO_CIP;

		max_ctx_payload_size = amdtp_stream_get_max_payload(s) -
				       ctx_header_size;
		}
	} else {
		dir = DMA_TO_DEVICE;
		type = FW_ISO_CONTEXT_TRANSMIT;
		ctx_header_size = 0;	// No effect for IT context.

		max_ctx_payload_size = amdtp_stream_get_max_payload(s);
		if (!(s->flags & CIP_NO_HEADER))
			max_ctx_payload_size -= IT_PKT_HEADER_SIZE_CIP;
	}
+1 −1
Original line number Diff line number Diff line
@@ -387,7 +387,7 @@ static const struct ieee1394_device_id bebob_id_table[] = {
	SND_BEBOB_DEV_ENTRY(VEN_BRIDGECO, 0x00010049, &spec_normal),
	/* Mackie, Onyx 1220/1620/1640 (Firewire I/O Card) */
	SND_BEBOB_DEV_ENTRY(VEN_MACKIE2, 0x00010065, &spec_normal),
	/* Mackie, d.2 (Firewire Option) */
	// Mackie, d.2 (Firewire option card) and d.2 Pro (the card is built-in).
	SND_BEBOB_DEV_ENTRY(VEN_MACKIE1, 0x00010067, &spec_normal),
	/* Stanton, ScratchAmp */
	SND_BEBOB_DEV_ENTRY(VEN_STANTON, 0x00000001, &spec_normal),
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ alesis_io14_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = {
static const unsigned int
alesis_io26_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = {
	{10, 10, 4},	/* Tx0 = Analog + S/PDIF. */
	{16, 8, 0},	/* Tx1 = ADAT1 + ADAT2. */
	{16, 4, 0},	/* Tx1 = ADAT1 + ADAT2 (available at low rate). */
};

int snd_dice_detect_alesis_formats(struct snd_dice *dice)
Loading