Message ID | 20181003090122.4508-1-jiada_wang@mentor.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ASoC: rsnd: support to use different BUSIF for GEN3 | expand |
Hi Jiada Thank you for your patch > 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@mentor.com> > --- (snip) > + 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); > + } I think unspecified GenX is better idea. For example, we might want to have same setting on Gen2 in the future. (and this is not Gen3 HW specific feature But yes, we have SW side reason) How about like this ? We can keep compatibility, and both Gen2/Gen3 can use it. if (rsnd_ssi_use_busif(io)) { /* * 1) try to find txu%d/rxu%d first * 2) If can't find it, try to find old txu/rxu */ }
Hi Morimoto-san On 2018/10/04 10:12, Kuninori Morimoto wrote: > Hi Jiada > > Thank you for your patch > >> 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@mentor.com> >> --- > (snip) >> + 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); >> + } > I think unspecified GenX is better idea. > For example, we might want to have same setting on Gen2 in the future. > (and this is not Gen3 HW specific feature > But yes, we have SW side reason) > > How about like this ? > We can keep compatibility, and both Gen2/Gen3 can use it. > > if (rsnd_ssi_use_busif(io)) { > /* > * 1) try to find txu%d/rxu%d first > * 2) If can't find it, try to find old txu/rxu > */ > } I think this is a good idea, by doing so, in case GEN2 DT also starts to support different BUSIF, then no driver side change is required. I will update accordingly in next version Thanks, Jiada
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);