lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 004/800] ALSA: bebob: fix rx packet format for Yamaha GO44/GO46, Terratec Phase 24/x24
    Date
    From: Takashi Sakamoto <o-takashi@sakamocchi.jp>

    commit 6b6c17fe6fa58900fa69dd000d5333b679e5e33e upstream.

    Below devices reports zero as the number of channels for external output
    plug with MIDI type:

    * Yamaha GO44/GO46
    * Terratec Phase 24/X24

    As a result, rx packet format is invalid and they generate silent sound.
    This is a regression added in v5.13.

    This commit fixes the bug, addressed at a commit 1bd1b3be8655 ("ALSA:
    bebob: perform sequence replay for media clock recovery").

    Cc: <stable@vger.kernel.org>
    Fixes: 5c6ea94f2b7c ("ALSA: bebob: detect the number of available MIDI ports")
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20210618040447.113306-1-o-takashi@sakamocchi.jp
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    sound/firewire/bebob/bebob_stream.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    --- a/sound/firewire/bebob/bebob_stream.c
    +++ b/sound/firewire/bebob/bebob_stream.c
    @@ -883,6 +883,11 @@ static int detect_midi_ports(struct snd_
    err = avc_bridgeco_get_plug_ch_count(bebob->unit, addr, &ch_count);
    if (err < 0)
    break;
    + // Yamaha GO44, GO46, Terratec Phase 24, Phase x24 reports 0 for the number of
    + // channels in external output plug 3 (MIDI type) even if it has a pair of physical
    + // MIDI jacks. As a workaround, assume it as one.
    + if (ch_count == 0)
    + ch_count = 1;
    *midi_ports += ch_count;
    }

    @@ -961,12 +966,12 @@ int snd_bebob_stream_discover(struct snd
    if (err < 0)
    goto end;

    - err = detect_midi_ports(bebob, bebob->rx_stream_formations, addr, AVC_BRIDGECO_PLUG_DIR_IN,
    + err = detect_midi_ports(bebob, bebob->tx_stream_formations, addr, AVC_BRIDGECO_PLUG_DIR_IN,
    plugs[2], &bebob->midi_input_ports);
    if (err < 0)
    goto end;

    - err = detect_midi_ports(bebob, bebob->tx_stream_formations, addr, AVC_BRIDGECO_PLUG_DIR_OUT,
    + err = detect_midi_ports(bebob, bebob->rx_stream_formations, addr, AVC_BRIDGECO_PLUG_DIR_OUT,
    plugs[3], &bebob->midi_output_ports);
    if (err < 0)
    goto end;

    \
     
     \ /
      Last update: 2021-07-12 10:10    [W:2.944 / U:0.588 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site