diff mbox series

[v2,1/5] dt-bindings: platform: Add Huawei Matebook E Go EC

Message ID 20250105174159.227831-2-mitltlatltl@gmail.com (mailing list archive)
State Changes Requested
Headers show
Series platform: arm64: Huawei Matebook E Go embedded controller | expand

Commit Message

Pengyu Luo Jan. 5, 2025, 5:41 p.m. UTC
Add binding for the EC found in the Huawei Matebook E Go and
Huawei Matebook E Go LTE 2-in-1 tablets, the former one is a QS sc8280xp
based tablet, the latter one is QS sc8180x based tablet.

This series has a codename, gaokun. More information about gaokun, please
check https://bugzilla.kernel.org/show_bug.cgi?id=219645

Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
---
 .../bindings/platform/huawei,gaokun-ec.yaml   | 127 ++++++++++++++++++
 1 file changed, 127 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/platform/huawei,gaokun-ec.yaml

Comments

Krzysztof Kozlowski Jan. 6, 2025, 7:11 a.m. UTC | #1
On Mon, Jan 06, 2025 at 01:41:55AM +0800, Pengyu Luo wrote:
> +maintainers:
> +  - Pengyu Luo <mitltlatltl@gmail.com>
> +
> +description:
> +  Different from other Qualcomm Snapdragon sc8180x and sc8280xp-based
> +  machines, the Huawei Matebook E Go tablets use embedded controllers
> +  while others use a system called PMIC GLink which handles battery,
> +  UCSI, USB Type-C DP Alt Mode. In addition, Huawei's implementation
> +  also handles additional features, such as charging thresholds, FN
> +  lock, smart charging, tablet lid status, thermal sensors, and more.
> +
> +properties:
> +  compatible:
> +    items:
> +      - enum:
> +          - huawei,gaokun2
> +          - huawei,gaokun3

Missing "-ec", because gaokun2/3 is the name of the board, apparently. You cannot
duplicate compatibles with different meanings and if you tested this you
would see errors.

I think I might mislead you during last talk, where I questioned what is
"gen2" etc.

> +      - const: huawei,gaokun-ec

There is no support for gaokun2 here, so I assume you checked and you
know these are compatible. What's more, you claim there is a generic
piece of hardware called gaokun-ec and everything in this family will be
compatible with it. Well, that's my standard disclaimer and disapproval
of using generic compatibles.

So in general what you want here is *only one* compatible called
huawei,gaokun3-ec

> +
> +  reg:
> +    const: 0x38
> +
> +  '#address-cells':
> +    const: 1
> +
> +  '#size-cells':
> +    const: 0
> +
> +  interrupts:
> +    maxItems: 1
> +
> +patternProperties:
> +  '^connector@[01]$':
> +    $ref: /schemas/connector/usb-connector.yaml#
> +
> +    properties:
> +      reg:
> +        maxItems: 1
> +
> +required:
> +  - compatible
> +  - reg
> +  - interrupts
> +
> +additionalProperties: false
> +
> +examples:
> +  - |+

Drop +

Best regards,
Krzysztof
Pengyu Luo Jan. 6, 2025, 8:06 a.m. UTC | #2
On Mon, Jan 6, 2025 at 3:11 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> On Mon, Jan 06, 2025 at 01:41:55AM +0800, Pengyu Luo wrote:
> > +maintainers:
> > +  - Pengyu Luo <mitltlatltl@gmail.com>
> > +
> > +description:
> > +  Different from other Qualcomm Snapdragon sc8180x and sc8280xp-based
> > +  machines, the Huawei Matebook E Go tablets use embedded controllers
> > +  while others use a system called PMIC GLink which handles battery,
> > +  UCSI, USB Type-C DP Alt Mode. In addition, Huawei's implementation
> > +  also handles additional features, such as charging thresholds, FN
> > +  lock, smart charging, tablet lid status, thermal sensors, and more.
> > +
> > +properties:
> > +  compatible:
> > +    items:
> > +      - enum:
> > +          - huawei,gaokun2
> > +          - huawei,gaokun3
>
> Missing "-ec", because gaokun2/3 is the name of the board, apparently. You cannot
> duplicate compatibles with different meanings and if you tested this you
> would see errors.
>
> I think I might mislead you during last talk, where I questioned what is
> "gen2" etc.
>

Agree

> > +      - const: huawei,gaokun-ec
>
> There is no support for gaokun2 here, so I assume you checked and you
> know these are compatible. What's more, you claim there is a generic
> piece of hardware called gaokun-ec and everything in this family will be
> compatible with it. Well, that's my standard disclaimer and disapproval
> of using generic compatibles.
>
> So in general what you want here is *only one* compatible called
> huawei,gaokun3-ec
>

I agree with you. If there is a generic rule to follow, I am not familiar
with this. I have seen some bindings, using like this, so I followed it
recently.

properties:
  compatible:
    items:
      - enum:
          - vendor0,device0
          - vendor1,device1
      - const: generic-device


> > +
> > +  reg:
> > +    const: 0x38
> > +
> > +  '#address-cells':
> > +    const: 1
> > +
> > +  '#size-cells':
> > +    const: 0
> > +
> > +  interrupts:
> > +    maxItems: 1
> > +
> > +patternProperties:
> > +  '^connector@[01]$':
> > +    $ref: /schemas/connector/usb-connector.yaml#
> > +
> > +    properties:
> > +      reg:
> > +        maxItems: 1
> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - interrupts
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |+
>
> Drop +
>

Agree


Best Wishes,
Pengyu
Krzysztof Kozlowski Jan. 6, 2025, 12:29 p.m. UTC | #3
On 06/01/2025 09:06, Pengyu Luo wrote:
>>> +      - const: huawei,gaokun-ec
>>
>> There is no support for gaokun2 here, so I assume you checked and you
>> know these are compatible. What's more, you claim there is a generic
>> piece of hardware called gaokun-ec and everything in this family will be
>> compatible with it. Well, that's my standard disclaimer and disapproval
>> of using generic compatibles.
>>
>> So in general what you want here is *only one* compatible called
>> huawei,gaokun3-ec
>>
> 
> I agree with you. If there is a generic rule to follow, I am not familiar
> with this. I have seen some bindings, using like this, so I followed it
> recently.

Generic rule is: wildcards and family names are not allowed. Now what
"generic" means, is different for different devices. If unsure, always
use only device-specific compatibles.



Best regards,
Krzysztof
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/platform/huawei,gaokun-ec.yaml b/Documentation/devicetree/bindings/platform/huawei,gaokun-ec.yaml
new file mode 100644
index 000000000..149c0cbe4
--- /dev/null
+++ b/Documentation/devicetree/bindings/platform/huawei,gaokun-ec.yaml
@@ -0,0 +1,127 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/platform/huawei,gaokun-ec.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Huawei Matebook E Go Embedded Controller
+
+maintainers:
+  - Pengyu Luo <mitltlatltl@gmail.com>
+
+description:
+  Different from other Qualcomm Snapdragon sc8180x and sc8280xp-based
+  machines, the Huawei Matebook E Go tablets use embedded controllers
+  while others use a system called PMIC GLink which handles battery,
+  UCSI, USB Type-C DP Alt Mode. In addition, Huawei's implementation
+  also handles additional features, such as charging thresholds, FN
+  lock, smart charging, tablet lid status, thermal sensors, and more.
+
+properties:
+  compatible:
+    items:
+      - enum:
+          - huawei,gaokun2
+          - huawei,gaokun3
+      - const: huawei,gaokun-ec
+
+  reg:
+    const: 0x38
+
+  '#address-cells':
+    const: 1
+
+  '#size-cells':
+    const: 0
+
+  interrupts:
+    maxItems: 1
+
+patternProperties:
+  '^connector@[01]$':
+    $ref: /schemas/connector/usb-connector.yaml#
+
+    properties:
+      reg:
+        maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - interrupts
+
+additionalProperties: false
+
+examples:
+  - |+
+    #include <dt-bindings/interrupt-controller/irq.h>
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        embedded-controller@38 {
+            compatible = "huawei,gaokun3", "huawei,gaokun-ec";
+            reg = <0x38>;
+
+            interrupts-extended = <&tlmm 107 IRQ_TYPE_LEVEL_LOW>;
+
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            connector@0 {
+                compatible = "usb-c-connector";
+                reg = <0>;
+                power-role = "dual";
+                data-role = "dual";
+
+                ports {
+                    #address-cells = <1>;
+                    #size-cells = <0>;
+
+                    port@0 {
+                        reg = <0>;
+
+                        ucsi0_ss_in: endpoint {
+                            remote-endpoint = <&usb_0_qmpphy_out>;
+                        };
+                    };
+
+                    port@1 {
+                        reg = <1>;
+
+                        ucsi0_sbu: endpoint {
+                            remote-endpoint = <&usb0_sbu_mux>;
+                        };
+                    };
+                };
+            };
+
+            connector@1 {
+                compatible = "usb-c-connector";
+                reg = <1>;
+                power-role = "dual";
+                data-role = "dual";
+
+                ports {
+                    #address-cells = <1>;
+                    #size-cells = <0>;
+
+                    port@0 {
+                        reg = <0>;
+
+                        ucsi1_ss_in: endpoint {
+                            remote-endpoint = <&usb_1_qmpphy_out>;
+                        };
+                    };
+
+                    port@1 {
+                        reg = <1>;
+
+                        ucsi1_sbu: endpoint {
+                            remote-endpoint = <&usb1_sbu_mux>;
+                        };
+                    };
+                };
+            };
+        };
+    };