Re: [alsa-devel] [RESEND PATCH v4 1/4] dt-bindings: soundwire: add slave bindings

From: Pierre-Louis Bossart
Date: Mon Aug 26 2019 - 14:55:22 EST

+title: SoundWire Controller Generic Binding
+Â - Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx>
+description: |
+Â SoundWire busses can be described with a node for the SoundWire controller
+Â device and a set of child nodes for each SoundWire slave on the bus.
+Â $nodename:
+ÂÂÂ pattern: "^soundwire(@.*|-[0-9a-f])*$"

re-reading this, it looks like you are defining the controller bindings, but there are no real controller-level properties except for the fact that they include slave bindings?

Yes, Each vendor specific master can have there specific properties here, this is just to represent how slave nodes represented w.r.t to master nodes.

I am not clear on how a vendor would document those controller properties then?

And the number of links doesn't seem like a vendor-specific definition, if you include the linkID in the register information below it'd help to known how many links can be enabled, which ones are used (if there is any pin-mux) and check if the configurations are correct.

In MIPI the notion of controller is that it can deal with multiple links, each of which having specific properties (clock speed, clock stop properties, etc).

+Â "#address-cells":
+ÂÂÂ const: 2
+Â "#size-cells":
+ÂÂÂ const: 0
+Â "^.*@[0-9a-f]+$":
+ÂÂÂ type: object
+ÂÂÂ properties:
+ÂÂÂÂÂ compatible:
+ÂÂÂÂÂ pattern: "^sdw[0-9][0-9a-f]{4}[0-9a-f]{4}[0-9a-f]{2}$"

So is this a 64-bit value, as in the MIPI spec, or is this part of the _ADR description?

Rob did not like encoding compatible string exactly like _ADR encoding.

Wondering if we are talking about different concepts?

Rob's point was about the InstanceID

"Assuming you could have more than 1 of the same device on the bus,
then you need some way to distinguish them and the way that's done for
DT is unit-address/reg. And compatible strings should be constant for
each instance."

You can use the MIPI encoding *except* for the InstanceID, that'd be fine. It'll just be a bit weird since the Slave device will report the 48 bits that include the Instance ID, so you'll have to special case this field, but if this is a DT requirement then fine.

Rob's point does not apply to the link ID - which is used when you have multiple masters in your controller. The Slave device is attached in one location and will never move, so that is a constant value.

Point is that this compatible is for slave device, it should not matter where and how the slave is connected, compatible should be constant irrespective of Link ID.
Lets say for example if WSA881x slave device is connected to a single-Link Controller and the same device is connected to a MultiLink-controller then we would endup in more than one compatible string for WSA881x driver. >

From Disco Specic it clearly says that LinkID values are relative
to the immediate parent Device. So having LinkID in compatible string is very fragile.

ok, fine then.

I also don't get why the first item in in base10?

As this corresponds to Soundwire Version, and I have no visibility of version number encoding after reaching number 9 in this field.

This can be updated once we have more info on how the Version encoding will look like in future.

Idea of limiting regex to [0-9] for version is to enforce some checking!

the version is a 4 bit value starting at 1 for SoundWire 1.0. There is nothing in the spec that talks about a limit to 9.

It's unlikely we'll ever reach that but you are interpreting a spec here. plus just below you mention all fields as being hexadecimal.

Am happy to change this to

pattern: "^sdw[0-9a-f][0-9a-f]{4}[0-9a-f]{4}[0-9a-f]{2}$"

if you are okay with rest of the stuff.

yes, ok.



+ÂÂÂÂÂ description:
+ÂÂÂÂÂ Is the textual representation of SoundWire Enumeration
+ÂÂÂÂÂ address. compatible string should contain SoundWire Version ID,
+ÂÂÂÂÂ Manufacturer ID, Part ID and Class ID in order and shall be in
+ÂÂÂÂÂ lower-case hexadecimal with leading zeroes.
+ÂÂÂÂÂ Valid sizes of these fields are
+ÂÂÂÂÂ Version ID is 1 nibble, number '0x1' represents SoundWire 1.0
+ÂÂÂÂÂ and '0x2' represents SoundWire 1.1 and so on.
+ÂÂÂÂÂ MFD is 4 nibbles
+ÂÂÂÂÂ PID is 4 nibbles
+ÂÂÂÂÂ CID is 2 nibbles
+ÂÂÂÂÂ More Information on detail of encoding of these fields can be
+ÂÂÂÂÂ found in MIPI Alliance DisCo & SoundWire 1.0 Specifications.
+ÂÂÂÂÂ reg:
+ÂÂÂÂÂÂÂ maxItems: 1
+ÂÂÂÂÂÂÂ description:
+ÂÂÂÂÂÂÂÂÂ Instance ID and Link ID of SoundWire Device Address.

maybe put link first and make it clear that both are required.

+ÂÂÂ required:
+ÂÂÂÂÂ - compatible
+ÂÂÂÂÂ - reg
+Â - |
+ÂÂÂ soundwire@c2d0000 {
+ÂÂÂÂÂÂÂ #address-cells = <2>;
+ÂÂÂÂÂÂÂ #size-cells = <0>;
+ÂÂÂÂÂÂÂ compatible = "qcom,soundwire-v1.5.0";
+ÂÂÂÂÂÂÂ reg = <0x0c2d0000 0x2000>;
+ÂÂÂÂÂÂÂ speaker@1 {
+ÂÂÂÂÂÂÂÂÂÂÂ compatible = "sdw10217201000";
+ÂÂÂÂÂÂÂÂÂÂÂ reg = <1 0>;
+ÂÂÂÂÂÂÂ speaker@2 {
+ÂÂÂÂÂÂÂÂÂÂÂ compatible = "sdw10217201000";
+ÂÂÂÂÂÂÂÂÂÂÂ reg = <2 0>;
+ÂÂÂ };