mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Update handling of min and max channel in DisCo
@ 2026-11-10 11:38 Charles Keepax
  2026-11-10 11:38 ` [PATCH v2 1/2] soundwire: Improve channel min/max comments Charles Keepax
  2026-11-10 11:38 ` [PATCH v2 2/2] soundwire: Assume default maximum valid channel if not specified Charles Keepax
  0 siblings, 2 replies; 6+ messages in thread
From: Charles Keepax @ 2026-11-10 11:38 UTC (permalink / raw)
  To: vkoul
  Cc: yung-chuan.liao, pierre-louis.bossart, linux-sound, linux-kernel,
	patches

The DisCo properties "mipi-sdw-min-channel-number" and
"mipi-sdw-max-channel-number" are both channel indexes rather than
counts. Update the kernel code to more accurately reflect this.

There are a few Qualcomm drivers that likely specify these incorrect,
min_ch=1, max_ch=X, rather than min_ch=0, max_ch=X-1, however these
should work fine as the number of supported channels is equivalent.
If people feel strongly I can send another series to fix those up.

Changes since v1:
 - Update wording on min_ch/max_ch comments

Charles Keepax (2):
  soundwire: Improve channel min/max comments
  soundwire: Assume default maximum valid channel if not specified

 drivers/soundwire/mipi_disco.c | 14 ++++++++------
 include/linux/soundwire/sdw.h  |  4 ++--
 2 files changed, 10 insertions(+), 8 deletions(-)

-- 
2.47.3


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 1/2] soundwire: Improve channel min/max comments
  2026-11-10 11:38 [PATCH v2 0/2] Update handling of min and max channel in DisCo Charles Keepax
@ 2026-11-10 11:38 ` Charles Keepax
  2026-11-10 11:38 ` [PATCH v2 2/2] soundwire: Assume default maximum valid channel if not specified Charles Keepax
  1 sibling, 0 replies; 6+ messages in thread
From: Charles Keepax @ 2026-11-10 11:38 UTC (permalink / raw)
  To: vkoul
  Cc: yung-chuan.liao, pierre-louis.bossart, linux-sound, linux-kernel,
	patches

Presently, the comments for the minimum and maximum channels are
misleading. In the SoundWire/Disco specification these are actually
channel indexes not a count of the number of channels. So for example
min_ch=4 and max_ch=5 means that 1 or 2 channels are supported.
Update the comments associated with the structure to make this
more clear.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---

Changes since v1:
 - Update wording on min_ch/max_ch comments

 include/linux/soundwire/sdw.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h
index f710e5932b4b2..b8f5ad39e9b37 100644
--- a/include/linux/soundwire/sdw.h
+++ b/include/linux/soundwire/sdw.h
@@ -289,8 +289,8 @@ struct sdw_dp0_prop {
  * @ch_prep_timeout: Port-specific timeout value, in milliseconds
  * @imp_def_interrupts: If set, each bit corresponds to support for
  * implementation-defined interrupts
- * @max_ch: Maximum channels supported
- * @min_ch: Minimum channels supported
+ * @max_ch: Maximum Channel Number of this Audio Port
+ * @min_ch: Minimum Channel Number of this Audio Port
  * @num_channels: Number of discrete channels supported
  * @num_ch_combinations: Number of channel combinations supported
  * @channels: Discrete channels supported
-- 
2.47.3


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 2/2] soundwire: Assume default maximum valid channel if not specified
  2026-11-10 11:38 [PATCH v2 0/2] Update handling of min and max channel in DisCo Charles Keepax
  2026-11-10 11:38 ` [PATCH v2 1/2] soundwire: Improve channel min/max comments Charles Keepax
@ 2026-11-10 11:38 ` Charles Keepax
  2026-11-10 14:30   ` Pierre-Louis Bossart
  1 sibling, 1 reply; 6+ messages in thread
From: Charles Keepax @ 2026-11-10 11:38 UTC (permalink / raw)
  To: vkoul
  Cc: yung-chuan.liao, pierre-louis.bossart, linux-sound, linux-kernel,
	patches

The SoundWire/DisCo specification defines all the supported channel
properties as optional and states that in the case none are specified
defaults of min_ch=0 and max_ch=7 should be used. If both properties
are not present in the DisCo the current code results in min_ch=0
and max_ch=0. As min_ch and max_ch are both channel indexes, users
can't discern if they should interpret this as the default case
(1-8 channels supported) or the DisCo specified a single valid
channel of 0 (1 channel supported).

In the case there are no valid supported channel properties populate
max_ch with 7 as the specification suggests, to avoid the ambiguity.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---

No changes since v1.

 drivers/soundwire/mipi_disco.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/soundwire/mipi_disco.c b/drivers/soundwire/mipi_disco.c
index 259ad98b5b7a9..eadbda55f377f 100644
--- a/drivers/soundwire/mipi_disco.c
+++ b/drivers/soundwire/mipi_disco.c
@@ -284,12 +284,6 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
 				"mipi-sdw-imp-def-dpn-interrupts-supported",
 				&dpn[i].imp_def_interrupts);
 
-		fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
-					 &dpn[i].min_ch);
-
-		fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
-					 &dpn[i].max_ch);
-
 		nval = fwnode_property_count_u32(node, "mipi-sdw-channel-number-list");
 		if (nval > 0) {
 			dpn[i].num_channels = nval;
@@ -309,6 +303,14 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
 				return ret;
 		}
 
+		fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
+					 &dpn[i].min_ch);
+
+		ret = fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
+					       &dpn[i].max_ch);
+		if (ret && !dpn[i].num_channels)
+			dpn[i].max_ch = 7;
+
 		nval = fwnode_property_count_u32(node, "mipi-sdw-channel-combination-list");
 		if (nval > 0) {
 			dpn[i].num_ch_combinations = nval;
-- 
2.47.3


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 2/2] soundwire: Assume default maximum valid channel if not specified
  2026-11-10 11:38 ` [PATCH v2 2/2] soundwire: Assume default maximum valid channel if not specified Charles Keepax
@ 2026-11-10 14:30   ` Pierre-Louis Bossart
  2026-11-10 15:08     ` Charles Keepax
  0 siblings, 1 reply; 6+ messages in thread
From: Pierre-Louis Bossart @ 2026-11-10 14:30 UTC (permalink / raw)
  To: Charles Keepax, vkoul; +Cc: yung-chuan.liao, linux-sound, linux-kernel, patches

On 11/10/26 12:38, Charles Keepax wrote:
> The SoundWire/DisCo specification defines all the supported channel
> properties as optional and states that in the case none are specified
> defaults of min_ch=0 and max_ch=7 should be used. If both properties
> are not present in the DisCo the current code results in min_ch=0
> and max_ch=0. As min_ch and max_ch are both channel indexes, users
> can't discern if they should interpret this as the default case
> (1-8 channels supported) or the DisCo specified a single valid
> channel of 0 (1 channel supported).
> 
> In the case there are no valid supported channel properties populate
> max_ch with 7 as the specification suggests, to avoid the ambiguity.
> 
> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
> ---
> 
> No changes since v1.
> 
>  drivers/soundwire/mipi_disco.c | 14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/soundwire/mipi_disco.c b/drivers/soundwire/mipi_disco.c
> index 259ad98b5b7a9..eadbda55f377f 100644
> --- a/drivers/soundwire/mipi_disco.c
> +++ b/drivers/soundwire/mipi_disco.c
> @@ -284,12 +284,6 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
>  				"mipi-sdw-imp-def-dpn-interrupts-supported",
>  				&dpn[i].imp_def_interrupts);
>  
> -		fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
> -					 &dpn[i].min_ch);
> -
> -		fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
> -					 &dpn[i].max_ch);
> -
>  		nval = fwnode_property_count_u32(node, "mipi-sdw-channel-number-list");
>  		if (nval > 0) {
>  			dpn[i].num_channels = nval;
> @@ -309,6 +303,14 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
>  				return ret;
>  		}
>  
> +		fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
> +					 &dpn[i].min_ch);
> +
> +		ret = fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
> +					       &dpn[i].max_ch);
> +		if (ret && !dpn[i].num_channels)
> +			dpn[i].max_ch = 7;
> +

this works, maybe with one possible improvement: in theory if
"mipi-sdw-channel-number-list" is defined one can ignore the min/max,
the two approaches with the list or min/max are mutually exclusive.

Something like this:

if (!dpn[i].num_channels) {
	fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
				 &dpn[i].min_ch);
	ret = fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
					       &dpn[i].max_ch);
	if (ret)
		dpn[i].max_ch = 7;
}

>  		nval = fwnode_property_count_u32(node, "mipi-sdw-channel-combination-list");
>  		if (nval > 0) {
>  			dpn[i].num_ch_combinations = nval;


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 2/2] soundwire: Assume default maximum valid channel if not specified
  2026-11-10 14:30   ` Pierre-Louis Bossart
@ 2026-11-10 15:08     ` Charles Keepax
  2026-11-10 17:11       ` Pierre-Louis Bossart
  0 siblings, 1 reply; 6+ messages in thread
From: Charles Keepax @ 2026-11-10 15:08 UTC (permalink / raw)
  To: Pierre-Louis Bossart
  Cc: vkoul, yung-chuan.liao, linux-sound, linux-kernel, patches

On Tue, Nov 10, 2026 at 03:30:43PM +0100, Pierre-Louis Bossart wrote:
> On 11/10/26 12:38, Charles Keepax wrote:
> > +		fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
> > +					 &dpn[i].min_ch);
> > +
> > +		ret = fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
> > +					       &dpn[i].max_ch);
> > +		if (ret && !dpn[i].num_channels)
> > +			dpn[i].max_ch = 7;
> > +
> 
> this works, maybe with one possible improvement: in theory if
> "mipi-sdw-channel-number-list" is defined one can ignore the min/max,
> the two approaches with the list or min/max are mutually exclusive.
> 
> Something like this:
> 
> if (!dpn[i].num_channels) {
> 	fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
> 				 &dpn[i].min_ch);
> 	ret = fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
> 					       &dpn[i].max_ch);
> 	if (ret)
> 		dpn[i].max_ch = 7;
> }

I am happy to do so if you feel strongly. However, the spec
doesn't really appear to rule out both being present, it does
imply that the channel list takes precedence. But given it
doesn't rule out having both, I quite like parsing both and
allowing the driver to make a decision about what to do with
that information.

Thanks,
Charles

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 2/2] soundwire: Assume default maximum valid channel if not specified
  2026-11-10 15:08     ` Charles Keepax
@ 2026-11-10 17:11       ` Pierre-Louis Bossart
  0 siblings, 0 replies; 6+ messages in thread
From: Pierre-Louis Bossart @ 2026-11-10 17:11 UTC (permalink / raw)
  To: Charles Keepax; +Cc: vkoul, yung-chuan.liao, linux-sound, linux-kernel, patches

On 11/10/26 16:08, Charles Keepax wrote:
> On Tue, Nov 10, 2026 at 03:30:43PM +0100, Pierre-Louis Bossart wrote:
>> On 11/10/26 12:38, Charles Keepax wrote:
>>> +		fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
>>> +					 &dpn[i].min_ch);
>>> +
>>> +		ret = fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
>>> +					       &dpn[i].max_ch);
>>> +		if (ret && !dpn[i].num_channels)
>>> +			dpn[i].max_ch = 7;
>>> +
>>
>> this works, maybe with one possible improvement: in theory if
>> "mipi-sdw-channel-number-list" is defined one can ignore the min/max,
>> the two approaches with the list or min/max are mutually exclusive.
>>
>> Something like this:
>>
>> if (!dpn[i].num_channels) {
>> 	fwnode_property_read_u32(node, "mipi-sdw-min-channel-number",
>> 				 &dpn[i].min_ch);
>> 	ret = fwnode_property_read_u32(node, "mipi-sdw-max-channel-number",
>> 					       &dpn[i].max_ch);
>> 	if (ret)
>> 		dpn[i].max_ch = 7;
>> }
> 
> I am happy to do so if you feel strongly. However, the spec
> doesn't really appear to rule out both being present, it does
> imply that the channel list takes precedence. But given it
> doesn't rule out having both, I quite like parsing both and
> allowing the driver to make a decision about what to do with
> that information.
humm, the wording "Conditions: If Property mipi-sdw-channel-number-list
is present, then this [mipi-sdw-max-channel-number ]Property shall not
be present" is pretty strong.

I don't mind keeping your existing code but then we'd need to add a
comment to say that we discarded the 'shall' to cover potentially broken
cases.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-11-10 17:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-10 11:38 [PATCH v2 0/2] Update handling of min and max channel in DisCo Charles Keepax
2026-11-10 11:38 ` [PATCH v2 1/2] soundwire: Improve channel min/max comments Charles Keepax
2026-11-10 11:38 ` [PATCH v2 2/2] soundwire: Assume default maximum valid channel if not specified Charles Keepax
2026-11-10 14:30   ` Pierre-Louis Bossart
2026-11-10 15:08     ` Charles Keepax
2026-11-10 17:11       ` Pierre-Louis Bossart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®