lkml.org 
[lkml]   [2018]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.9 078/219] ALSA: firewire-lib: add a quirk of packet without valid EOH in CIP format
    Date
    From: Takashi Sakamoto <o-takashi@sakamocchi.jp>

    [ Upstream commit 2128f78f75a36a34dfef0e127273c2f820c5c904 ]

    In IEC 61883-1, when two quadlets CIP header is used, the most significant
    bit in second CIP header stands. However, packets from units with MOTU
    protocol version 3 have a quirk without this flag. Current packet streaming
    layer handles this as protocol error.

    This commit adds a new enumeration constant for this quirk, to handle MOTU
    protocol version 3.

    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    sound/firewire/amdtp-stream.c | 5 +++--
    sound/firewire/amdtp-stream.h | 3 +++
    2 files changed, 6 insertions(+), 2 deletions(-)

    diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
    index 9741757436be..d0ad61f563e2 100644
    --- a/sound/firewire/amdtp-stream.c
    +++ b/sound/firewire/amdtp-stream.c
    @@ -471,8 +471,9 @@ static int handle_in_packet(struct amdtp_stream *s,
    * This module supports 'Two-quadlet CIP header with SYT field'.
    * For convenience, also check FMT field is AM824 or not.
    */
    - if (((cip_header[0] & CIP_EOH_MASK) == CIP_EOH) ||
    - ((cip_header[1] & CIP_EOH_MASK) != CIP_EOH)) {
    + if ((((cip_header[0] & CIP_EOH_MASK) == CIP_EOH) ||
    + ((cip_header[1] & CIP_EOH_MASK) != CIP_EOH)) &&
    + (!(s->flags & CIP_HEADER_WITHOUT_EOH))) {
    dev_info_ratelimited(&s->unit->device,
    "Invalid CIP header for AMDTP: %08X:%08X\n",
    cip_header[0], cip_header[1]);
    diff --git a/sound/firewire/amdtp-stream.h b/sound/firewire/amdtp-stream.h
    index f7c054bc9d92..8136bd20c8b1 100644
    --- a/sound/firewire/amdtp-stream.h
    +++ b/sound/firewire/amdtp-stream.h
    @@ -29,6 +29,8 @@
    * @CIP_JUMBO_PAYLOAD: Only for in-stream. The number of data blocks in an
    * packet is larger than IEC 61883-6 defines. Current implementation
    * allows 5 times as large as IEC 61883-6 defines.
    + * @CIP_HEADER_WITHOUT_EOH: Only for in-stream. CIP Header doesn't include
    + * valid EOH.
    */
    enum cip_flags {
    CIP_NONBLOCKING = 0x00,
    @@ -39,6 +41,7 @@ enum cip_flags {
    CIP_SKIP_DBC_ZERO_CHECK = 0x10,
    CIP_EMPTY_HAS_WRONG_DBC = 0x20,
    CIP_JUMBO_PAYLOAD = 0x40,
    + CIP_HEADER_WITHOUT_EOH = 0x80,
    };

    /**
    --
    2.14.1
    \
     
     \ /
      Last update: 2018-03-04 00:52    [W:2.422 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site