From: Jiada Wang <jiada_wang@xxxxxxxxxx> Currently ssi driver only request dma channel for SSI_0, which is used to transfer data to/from busif0. But in GEN3 busif1 to busif7 also maybe used, dedicated dma channels are requested for data transfer through these busif. Signed-off-by: Jiada Wang <jiada_wang@xxxxxxxxxx> --- sound/soc/sh/rcar/ssi.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c index 3adcc4f778f7..992aeac09e76 100644 --- a/sound/soc/sh/rcar/ssi.c +++ b/sound/soc/sh/rcar/ssi.c @@ -76,6 +76,8 @@ #define SSI_NAME "ssi" +#define SSI_DMA_NAME_SIZE 10 + struct rsnd_ssi { struct rsnd_mod mod; @@ -938,12 +940,28 @@ static struct dma_chan *rsnd_ssi_dma_req(struct rsnd_dai_stream *io, { struct rsnd_priv *priv = rsnd_mod_to_priv(mod); int is_play = rsnd_io_is_play(io); - char *name; + char name[SSI_DMA_NAME_SIZE]; - if (rsnd_ssi_use_busif(io)) - name = is_play ? "rxu" : "txu"; - else - name = is_play ? "rx" : "tx"; + if (rsnd_ssi_use_busif(io)) { + if (is_play) + snprintf(name, SSI_DMA_NAME_SIZE, "rxu"); + else + snprintf(name, SSI_DMA_NAME_SIZE, "txu"); + + if (rsnd_is_gen3(priv)) { + /* + * Gen3 supports to use all available BUSIF + */ + int busif = rsnd_ssi_get_busif(io); + + snprintf(name, SSI_DMA_NAME_SIZE, "%s%d", name, busif); + } + } else { + if (is_play) + snprintf(name, SSI_DMA_NAME_SIZE, "rx"); + else + snprintf(name, SSI_DMA_NAME_SIZE, "tx"); + } return rsnd_dma_request_channel(rsnd_ssi_of_node(priv), mod, name); -- 2.17.0 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel