diff mbox series

[linux-next,v2,8/9] ASoC: rsnd: ssi: Request dedicated dma channels for busif0 to 7

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

Commit Message

Wang, Jiada Oct. 3, 2018, 9:01 a.m. UTC
From: Jiada Wang <jiada_wang@mentor.com>

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>
---
 sound/soc/sh/rcar/ssi.c | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

Comments

Kuninori Morimoto Oct. 4, 2018, 1:12 a.m. UTC | #1
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
		 */
	}
Wang, Jiada Oct. 4, 2018, 3 a.m. UTC | #2
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 mbox series

Patch

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);