All of lore.kernel.org
 help / color / mirror / Atom feed
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
To: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
	vkoul@kernel.org, yung-chuan.liao@linux.intel.com
Cc: sanyog.r.kale@intel.com, gregkh@linuxfoundation.org,
	alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 1/2] soundwire: add support for static port mapping
Date: Thu, 21 Jan 2021 11:35:20 +0000	[thread overview]
Message-ID: <0a2bbbe5-821a-34dd-e893-fef42baaad2b@linaro.org> (raw)
In-Reply-To: <fcc1b199-644d-8c7f-5e8b-d12b0d9c9a04@linux.intel.com>

Thanks Pierre for your inputs,

On 20/01/2021 22:15, Pierre-Louis Bossart wrote:
> 
> 
> On 1/20/21 12:01 PM, Srinivas Kandagatla wrote:
>> Some of the soundwire controllers can have static functions assigned
>> to each port, like some ports can only do PCM or PDM. This is the 
>> situation
>> with some of the Qualcomm Controllers.
>>
>> In such cases its not correct to assign/map any free port on master
>> during streaming.
>>
>> So, this patch provides a way to pass mapped port number along
>> with the port config, so that master can assign correct ports based
>> on the provided static mapping.
> 
> I am not sure I understand the problem or what's different between Intel 
> and Qualcomm.
> 
> On the Intel side we also have fixed-function ports, some for PDM and 
> some for PCM. They are not interchangeable, and they are also dedicated 
> for each link.
> 
That is good to know!

> We don't dynamically allocate ports on the master side, the mapping is 
> defined by the dai->id and is static. There is a 1:1 relationship 
> between dai->id and port_number. See intel_register_dai() and 
> intel_hw_params() in drivers/soundwire/intel.c
> 
> In the machine driver we make use of specific master DAIs in the dailink 
> definitions, just like regular ASoC solutions, so which DAIs you use in 
> the machine driver defines what ports end-up being used. There is 
> nothing fancy or dynamic here, the dai/port allocation is defined by the 
> dailinks. This is a static/worst-case allocation, we don't reassign 
> ports depending on use-cases, etc.
> 
> The only thing that is dynamic is that the programming of each port is 
> handled based on the bandwidth needs of that port, i.e if you play 16 or 
> 24 bits you'd get fewer or more bitSlots allocated to that dai/port, and 
> the DPn registers are updated if you have concurrent streaming on other 
> ports. If you only have a fixed set of payloads, as in the existing 
> amplifier cases, you can hard-code this allocation as well.
Yes, it will work for the existing WSA881x amplifier case.

Am preparing patches for a new QCOM codec driver WCD938x (TX and RX) 
connected via Soundwire,

Port allocations are something like this:

RX: (Simple)
Port 1 -> HPH L/R
Port 2 -> CLASS H Amp
Port 3 -> COMP
Port 4 -> DSD.

TX: (This get bit more complicated)
Port 1: PCM
Port 2: ADC 1 & 2
Port 3: ADC 3 & 4
Port 4: DMIC-0, DMIC-1, DIMC-2 , DMIC-3 and MBHC
Port 5: DMIC-4, DMIC-5, DMIC-6 and DMIC-7

We handle the port allocation dynamically based on mixer and dapm 
widgets in my code! Also channel allocations are different for each 
function!

> 
> Does this help and can you align on what Intel started with?

Firstly, This is where the issue comes, if we go with the 
suggested(dai->id) solution, we would end up with a long list of 
dai-links with different combinations of both inputs/output connections 
and usecases. Again we have to deal with limited DSP resources too!

Secondly, The check [1] in stream.c will not allow more than one master 
port config to be added to master runtime. Ex: RX Port 1, 2, 3 is used 
for Headset Playback.

But if we have a static mapping table of the ports then this will 
provide more flexibility to codec driver! And we can dynamically select 
ports based on the usecase or active dapm path!

--srini

[1]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/soundwire/stream.c?h=v5.11-rc4#n1294
> 

WARNING: multiple messages have this Message-ID (diff)
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
To: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
	vkoul@kernel.org, yung-chuan.liao@linux.intel.com
Cc: gregkh@linuxfoundation.org, sanyog.r.kale@intel.com,
	alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 1/2] soundwire: add support for static port mapping
Date: Thu, 21 Jan 2021 11:35:20 +0000	[thread overview]
Message-ID: <0a2bbbe5-821a-34dd-e893-fef42baaad2b@linaro.org> (raw)
In-Reply-To: <fcc1b199-644d-8c7f-5e8b-d12b0d9c9a04@linux.intel.com>

Thanks Pierre for your inputs,

On 20/01/2021 22:15, Pierre-Louis Bossart wrote:
> 
> 
> On 1/20/21 12:01 PM, Srinivas Kandagatla wrote:
>> Some of the soundwire controllers can have static functions assigned
>> to each port, like some ports can only do PCM or PDM. This is the 
>> situation
>> with some of the Qualcomm Controllers.
>>
>> In such cases its not correct to assign/map any free port on master
>> during streaming.
>>
>> So, this patch provides a way to pass mapped port number along
>> with the port config, so that master can assign correct ports based
>> on the provided static mapping.
> 
> I am not sure I understand the problem or what's different between Intel 
> and Qualcomm.
> 
> On the Intel side we also have fixed-function ports, some for PDM and 
> some for PCM. They are not interchangeable, and they are also dedicated 
> for each link.
> 
That is good to know!

> We don't dynamically allocate ports on the master side, the mapping is 
> defined by the dai->id and is static. There is a 1:1 relationship 
> between dai->id and port_number. See intel_register_dai() and 
> intel_hw_params() in drivers/soundwire/intel.c
> 
> In the machine driver we make use of specific master DAIs in the dailink 
> definitions, just like regular ASoC solutions, so which DAIs you use in 
> the machine driver defines what ports end-up being used. There is 
> nothing fancy or dynamic here, the dai/port allocation is defined by the 
> dailinks. This is a static/worst-case allocation, we don't reassign 
> ports depending on use-cases, etc.
> 
> The only thing that is dynamic is that the programming of each port is 
> handled based on the bandwidth needs of that port, i.e if you play 16 or 
> 24 bits you'd get fewer or more bitSlots allocated to that dai/port, and 
> the DPn registers are updated if you have concurrent streaming on other 
> ports. If you only have a fixed set of payloads, as in the existing 
> amplifier cases, you can hard-code this allocation as well.
Yes, it will work for the existing WSA881x amplifier case.

Am preparing patches for a new QCOM codec driver WCD938x (TX and RX) 
connected via Soundwire,

Port allocations are something like this:

RX: (Simple)
Port 1 -> HPH L/R
Port 2 -> CLASS H Amp
Port 3 -> COMP
Port 4 -> DSD.

TX: (This get bit more complicated)
Port 1: PCM
Port 2: ADC 1 & 2
Port 3: ADC 3 & 4
Port 4: DMIC-0, DMIC-1, DIMC-2 , DMIC-3 and MBHC
Port 5: DMIC-4, DMIC-5, DMIC-6 and DMIC-7

We handle the port allocation dynamically based on mixer and dapm 
widgets in my code! Also channel allocations are different for each 
function!

> 
> Does this help and can you align on what Intel started with?

Firstly, This is where the issue comes, if we go with the 
suggested(dai->id) solution, we would end up with a long list of 
dai-links with different combinations of both inputs/output connections 
and usecases. Again we have to deal with limited DSP resources too!

Secondly, The check [1] in stream.c will not allow more than one master 
port config to be added to master runtime. Ex: RX Port 1, 2, 3 is used 
for Headset Playback.

But if we have a static mapping table of the ports then this will 
provide more flexibility to codec driver! And we can dynamically select 
ports based on the usecase or active dapm path!

--srini

[1]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/soundwire/stream.c?h=v5.11-rc4#n1294
> 

  reply	other threads:[~2021-01-21 11:37 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-20 18:01 [RFC PATCH 0/2] soundwire: add static port mapping support Srinivas Kandagatla
2021-01-20 18:01 ` Srinivas Kandagatla
2021-01-20 18:01 ` [RFC PATCH 1/2] soundwire: add support for static port mapping Srinivas Kandagatla
2021-01-20 18:01   ` Srinivas Kandagatla
2021-01-20 22:15   ` Pierre-Louis Bossart
2021-01-20 22:15     ` Pierre-Louis Bossart
2021-01-21 11:35     ` Srinivas Kandagatla [this message]
2021-01-21 11:35       ` Srinivas Kandagatla
2021-01-21 14:56       ` Pierre-Louis Bossart
2021-01-21 15:41         ` Srinivas Kandagatla
2021-01-21 18:00           ` Pierre-Louis Bossart
2021-01-21 18:41             ` Srinivas Kandagatla
2021-01-21 21:30               ` Pierre-Louis Bossart
2021-01-22  7:05                 ` Srinivas Kandagatla
2021-01-22 15:32                   ` Pierre-Louis Bossart
2021-01-22 15:46                     ` Srinivas Kandagatla
2021-01-22 16:42                       ` Pierre-Louis Bossart
2021-01-25 16:23                         ` Srinivas Kandagatla
2021-02-01 10:27                           ` Vinod Koul
2021-02-01 10:27                             ` Vinod Koul
2021-02-19 10:35                             ` Srinivas Kandagatla
2021-02-19 10:35                               ` Srinivas Kandagatla
2021-02-19 19:52                               ` Pierre-Louis Bossart
2021-02-19 19:52                                 ` Pierre-Louis Bossart
2021-02-22 13:40                                 ` Srinivas Kandagatla
2021-02-22 13:40                                   ` Srinivas Kandagatla
2021-01-20 18:01 ` [RFC PATCH 2/2] soundwire: qcom: " Srinivas Kandagatla
2021-01-20 18:01   ` Srinivas Kandagatla

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0a2bbbe5-821a-34dd-e893-fef42baaad2b@linaro.org \
    --to=srinivas.kandagatla@linaro.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=sanyog.r.kale@intel.com \
    --cc=vkoul@kernel.org \
    --cc=yung-chuan.liao@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.