* [PATCH v2 1/7] dt-bindings: usb: document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 9:57 [PATCH v2 0/7] arm64: dts: qcom: Add support for the Ayaneo Pocket S2 Neil Armstrong
@ 2026-01-27 9:57 ` Neil Armstrong
2026-01-27 10:20 ` Geert Uytterhoeven
2026-01-27 9:57 ` [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the " Neil Armstrong
` (5 subsequent siblings)
6 siblings, 1 reply; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 9:57 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Neil Armstrong
Document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller,
which connects over PCIe and requires specific power supplies to
start up.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
.../bindings/usb/renesas,upd720201-pci.yaml | 55 ++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml b/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml
new file mode 100644
index 000000000000..df3cdcf44747
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml
@@ -0,0 +1,55 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/renesas,upd720201-pci.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: UPD720201/UPD720202 USB 3.0 xHCI Host Controller (PCIe)
+
+maintainers:
+ - Neil Armstrong <neil.armstrong@linaro.org>
+
+description:
+ UPD720201 USB 3.0 xHCI Host Controller via PCIe x1 Gen2 interface.
+ The UPD720202 up to two downstream ports, while UPD720201 supports up to
+ four downstream USB 3.0 rev1.0 ports.
+
+properties:
+ compatible:
+ const: pci1912,0014
+
+ reg:
+ maxItems: 1
+
+ avdd33-supply:
+ description: +3.3 V power supply for analog circuit
+
+ vdd10-supply:
+ description: +1.05 V power supply
+
+ vdd33-supply:
+ description: +3.3 V power supply
+
+required:
+ - compatible
+ - reg
+
+allOf:
+ - $ref: usb-xhci.yaml
+
+additionalProperties: false
+
+examples:
+ - |
+ pcie@0 {
+ reg = <0x0 0x1000>;
+ ranges = <0x02000000 0x0 0x100000 0x10000000 0x0 0x0>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ device_type = "pci";
+
+ usb@0 {
+ compatible = "pci1912,0014";
+ reg = <0x0 0x0 0x0 0x0 0x0>;
+ };
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH v2 1/7] dt-bindings: usb: document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 9:57 ` [PATCH v2 1/7] dt-bindings: usb: document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller Neil Armstrong
@ 2026-01-27 10:20 ` Geert Uytterhoeven
2026-01-27 13:55 ` Neil Armstrong
0 siblings, 1 reply; 26+ messages in thread
From: Geert Uytterhoeven @ 2026-01-27 10:20 UTC (permalink / raw)
To: Neil Armstrong
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
Hi Neil,
On Tue, 27 Jan 2026 at 10:57, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> Document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller,
> which connects over PCIe and requires specific power supplies to
Here: "requires"...
> start up.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> .../bindings/usb/renesas,upd720201-pci.yaml | 55 ++++++++++++++++++++++
> 1 file changed, 55 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml b/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml
> new file mode 100644
> index 000000000000..df3cdcf44747
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml
> @@ -0,0 +1,55 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/usb/renesas,upd720201-pci.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: UPD720201/UPD720202 USB 3.0 xHCI Host Controller (PCIe)
> +
> +maintainers:
> + - Neil Armstrong <neil.armstrong@linaro.org>
> +
> +description:
> + UPD720201 USB 3.0 xHCI Host Controller via PCIe x1 Gen2 interface.
> + The UPD720202 up to two downstream ports, while UPD720201 supports up to
> + four downstream USB 3.0 rev1.0 ports.
> +
> +properties:
> + compatible:
> + const: pci1912,0014
Just wondering: how does having a new driver
drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c matching against this
compatible play well with normal PCI discovery and probing of
drivers/usb/host/xhci-pci-renesas.c?
> +
> + reg:
> + maxItems: 1
> +
> + avdd33-supply:
> + description: +3.3 V power supply for analog circuit
> +
> + vdd10-supply:
> + description: +1.05 V power supply
> +
> + vdd33-supply:
> + description: +3.3 V power supply
> +
> +required:
> + - compatible
> + - reg
... but no power supplies are listed here? ...
> +
> +allOf:
> + - $ref: usb-xhci.yaml
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + pcie@0 {
> + reg = <0x0 0x1000>;
> + ranges = <0x02000000 0x0 0x100000 0x10000000 0x0 0x0>;
> + #address-cells = <3>;
> + #size-cells = <2>;
> + device_type = "pci";
> +
> + usb@0 {
The actual DTS uses "usb-controller".
> + compatible = "pci1912,0014";
> + reg = <0x0 0x0 0x0 0x0 0x0>;
... also not in the example?
> + };
> + };
>
> --
> 2.34.1
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH v2 1/7] dt-bindings: usb: document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 10:20 ` Geert Uytterhoeven
@ 2026-01-27 13:55 ` Neil Armstrong
2026-01-27 14:02 ` Geert Uytterhoeven
0 siblings, 1 reply; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 13:55 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
Hi,
On 1/27/26 11:20, Geert Uytterhoeven wrote:
> Hi Neil,
>
> On Tue, 27 Jan 2026 at 10:57, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>> Document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller,
>> which connects over PCIe and requires specific power supplies to
>
> Here: "requires"...
Sorry I don't understand
>
>> start up.
>>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>> .../bindings/usb/renesas,upd720201-pci.yaml | 55 ++++++++++++++++++++++
>> 1 file changed, 55 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml b/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml
>> new file mode 100644
>> index 000000000000..df3cdcf44747
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml
>> @@ -0,0 +1,55 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/usb/renesas,upd720201-pci.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: UPD720201/UPD720202 USB 3.0 xHCI Host Controller (PCIe)
>> +
>> +maintainers:
>> + - Neil Armstrong <neil.armstrong@linaro.org>
>> +
>> +description:
>> + UPD720201 USB 3.0 xHCI Host Controller via PCIe x1 Gen2 interface.
>> + The UPD720202 up to two downstream ports, while UPD720201 supports up to
>> + four downstream USB 3.0 rev1.0 ports.
>> +
>> +properties:
>> + compatible:
>> + const: pci1912,0014
>
> Just wondering: how does having a new driver
> drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c matching against this
> compatible play well with normal PCI discovery and probing of
> drivers/usb/host/xhci-pci-renesas.c?
In Linux, power control is implemented as a platform device driver,
so it doesn't collide with the pci driver.
The pci driver won't probe until the device shows up on the bus anyway,
so he power control will attach as platform for this purpose.
>
>> +
>> + reg:
>> + maxItems: 1
>> +
>> + avdd33-supply:
>> + description: +3.3 V power supply for analog circuit
>> +
>> + vdd10-supply:
>> + description: +1.05 V power supply
>> +
>> + vdd33-supply:
>> + description: +3.3 V power supply
>> +
>> +required:
>> + - compatible
>> + - reg
>
> ... but no power supplies are listed here? ...
None are stricly required, they can be supplied directly without
a passive regulator. Not sure they should be required
>
>> +
>> +allOf:
>> + - $ref: usb-xhci.yaml
>> +
>> +additionalProperties: false
>> +
>> +examples:
>> + - |
>> + pcie@0 {
>> + reg = <0x0 0x1000>;
>> + ranges = <0x02000000 0x0 0x100000 0x10000000 0x0 0x0>;
>> + #address-cells = <3>;
>> + #size-cells = <2>;
>> + device_type = "pci";
>> +
>> + usb@0 {
>
> The actual DTS uses "usb-controller".
>
>> + compatible = "pci1912,0014";
>> + reg = <0x0 0x0 0x0 0x0 0x0>;
>
> ... also not in the example?
>
>> + };
>> + };
>>
>> --
>> 2.34.1
>
> Gr{oetje,eeting}s,
>
> Geert
>
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
Thanks,
Neil
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH v2 1/7] dt-bindings: usb: document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 13:55 ` Neil Armstrong
@ 2026-01-27 14:02 ` Geert Uytterhoeven
2026-01-27 14:26 ` Neil Armstrong
0 siblings, 1 reply; 26+ messages in thread
From: Geert Uytterhoeven @ 2026-01-27 14:02 UTC (permalink / raw)
To: Neil Armstrong
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
Hi Neil,
On Tue, 27 Jan 2026 at 14:55, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> On 1/27/26 11:20, Geert Uytterhoeven wrote:
> > On Tue, 27 Jan 2026 at 10:57, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> >> Document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller,
> >> which connects over PCIe and requires specific power supplies to
> >
> > Here: "requires"...
>
> Sorry I don't understand
Please read below the continuations ("...") below...
>
> >
> >> start up.
> >>
> >> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> >> --- /dev/null
> >> +++ b/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml
> >> @@ -0,0 +1,55 @@
> >> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> >> +%YAML 1.2
> >> +---
> >> +$id: http://devicetree.org/schemas/usb/renesas,upd720201-pci.yaml#
> >> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> >> +
> >> +title: UPD720201/UPD720202 USB 3.0 xHCI Host Controller (PCIe)
> >> +
> >> +maintainers:
> >> + - Neil Armstrong <neil.armstrong@linaro.org>
> >> +
> >> +description:
> >> + UPD720201 USB 3.0 xHCI Host Controller via PCIe x1 Gen2 interface.
> >> + The UPD720202 up to two downstream ports, while UPD720201 supports up to
> >> + four downstream USB 3.0 rev1.0 ports.
> >> +
> >> +properties:
> >> + compatible:
> >> + const: pci1912,0014
> >
> > Just wondering: how does having a new driver
> > drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c matching against this
> > compatible play well with normal PCI discovery and probing of
> > drivers/usb/host/xhci-pci-renesas.c?
>
> In Linux, power control is implemented as a platform device driver,
> so it doesn't collide with the pci driver.
>
> The pci driver won't probe until the device shows up on the bus anyway,
> so he power control will attach as platform for this purpose.
OK.
> >> + avdd33-supply:
> >> + description: +3.3 V power supply for analog circuit
> >> +
> >> + vdd10-supply:
> >> + description: +1.05 V power supply
> >> +
> >> + vdd33-supply:
> >> + description: +3.3 V power supply
> >> +
> >> +required:
> >> + - compatible
> >> + - reg
> >
> > ... but no power supplies are listed here? ...
>
> None are stricly required, they can be supplied directly without
> a passive regulator. Not sure they should be required
So the goal of this binding is to document the required power supplies
which are not required? I am confused (but that could just be me ;-)...
> >> +examples:
> >> + - |
> >> + pcie@0 {
> >> + reg = <0x0 0x1000>;
> >> + ranges = <0x02000000 0x0 0x100000 0x10000000 0x0 0x0>;
> >> + #address-cells = <3>;
> >> + #size-cells = <2>;
> >> + device_type = "pci";
> >> +
> >> + usb@0 {
> >
> > The actual DTS uses "usb-controller".
> >
> >> + compatible = "pci1912,0014";
> >> + reg = <0x0 0x0 0x0 0x0 0x0>;
> >
> > ... also not in the example?
> >
> >> + };
> >> + };
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH v2 1/7] dt-bindings: usb: document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 14:02 ` Geert Uytterhoeven
@ 2026-01-27 14:26 ` Neil Armstrong
0 siblings, 0 replies; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 14:26 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
On 1/27/26 15:02, Geert Uytterhoeven wrote:
> Hi Neil,
>
> On Tue, 27 Jan 2026 at 14:55, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>> On 1/27/26 11:20, Geert Uytterhoeven wrote:
>>> On Tue, 27 Jan 2026 at 10:57, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>>>> Document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller,
>>>> which connects over PCIe and requires specific power supplies to
>>>
>>> Here: "requires"...
>>
>> Sorry I don't understand
>
> Please read below the continuations ("...") below...
Well electronically the IC requires those voltages
>
>>
>>>
>>>> start up.
>>>>
>>>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>
>>>> --- /dev/null
>>>> +++ b/Documentation/devicetree/bindings/usb/renesas,upd720201-pci.yaml
>>>> @@ -0,0 +1,55 @@
>>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>>> +%YAML 1.2
>>>> +---
>>>> +$id: http://devicetree.org/schemas/usb/renesas,upd720201-pci.yaml#
>>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>>> +
>>>> +title: UPD720201/UPD720202 USB 3.0 xHCI Host Controller (PCIe)
>>>> +
>>>> +maintainers:
>>>> + - Neil Armstrong <neil.armstrong@linaro.org>
>>>> +
>>>> +description:
>>>> + UPD720201 USB 3.0 xHCI Host Controller via PCIe x1 Gen2 interface.
>>>> + The UPD720202 up to two downstream ports, while UPD720201 supports up to
>>>> + four downstream USB 3.0 rev1.0 ports.
>>>> +
>>>> +properties:
>>>> + compatible:
>>>> + const: pci1912,0014
>>>
>>> Just wondering: how does having a new driver
>>> drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c matching against this
>>> compatible play well with normal PCI discovery and probing of
>>> drivers/usb/host/xhci-pci-renesas.c?
>>
>> In Linux, power control is implemented as a platform device driver,
>> so it doesn't collide with the pci driver.
>>
>> The pci driver won't probe until the device shows up on the bus anyway,
>> so he power control will attach as platform for this purpose.
>
> OK.
>
>>>> + avdd33-supply:
>>>> + description: +3.3 V power supply for analog circuit
>>>> +
>>>> + vdd10-supply:
>>>> + description: +1.05 V power supply
>>>> +
>>>> + vdd33-supply:
>>>> + description: +3.3 V power supply
>>>> +
>>>> +required:
>>>> + - compatible
>>>> + - reg
>>>
>>> ... but no power supplies are listed here? ...
>>
>> None are stricly required, they can be supplied directly without
>> a passive regulator. Not sure they should be required
>
> So the goal of this binding is to document the required power supplies
> which are not required? I am confused (but that could just be me ;-)...
but you're right, I'll mark them required...
>
>>>> +examples:
>>>> + - |
>>>> + pcie@0 {
>>>> + reg = <0x0 0x1000>;
>>>> + ranges = <0x02000000 0x0 0x100000 0x10000000 0x0 0x0>;
>>>> + #address-cells = <3>;
>>>> + #size-cells = <2>;
>>>> + device_type = "pci";
>>>> +
>>>> + usb@0 {
>>>
>>> The actual DTS uses "usb-controller".
>>>
>>>> + compatible = "pci1912,0014";
>>>> + reg = <0x0 0x0 0x0 0x0 0x0>;
>>>
>>> ... also not in the example?
... and add them to example.
>>>
>>>> + };
>>>> + };
>
> Gr{oetje,eeting}s,
>
> Geert
>
Thanks,
Neil
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 9:57 [PATCH v2 0/7] arm64: dts: qcom: Add support for the Ayaneo Pocket S2 Neil Armstrong
2026-01-27 9:57 ` [PATCH v2 1/7] dt-bindings: usb: document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller Neil Armstrong
@ 2026-01-27 9:57 ` Neil Armstrong
2026-01-27 15:53 ` Manivannan Sadhasivam
` (2 more replies)
2026-01-27 9:57 ` [PATCH v2 3/7] arm64: defconfig: enable pci-pwrctrl-upd720201 as module Neil Armstrong
` (4 subsequent siblings)
6 siblings, 3 replies; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 9:57 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Neil Armstrong
Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
power control which connects over PCIe and requires specific power supplies
to start up.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
drivers/pci/pwrctrl/Kconfig | 10 ++++
drivers/pci/pwrctrl/Makefile | 2 +
drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c | 88 +++++++++++++++++++++++++++++
3 files changed, 100 insertions(+)
diff --git a/drivers/pci/pwrctrl/Kconfig b/drivers/pci/pwrctrl/Kconfig
index e0f999f299bb..5a94e60d0d3e 100644
--- a/drivers/pci/pwrctrl/Kconfig
+++ b/drivers/pci/pwrctrl/Kconfig
@@ -11,6 +11,16 @@ config PCI_PWRCTRL_PWRSEQ
select POWER_SEQUENCING
select PCI_PWRCTRL
+config PCI_PWRCTRL_UPD720201
+ tristate "PCI Power Control driver for the UPD720201 USB3 Host Controller"
+ select PCI_PWRCTRL
+ help
+ Say Y here to enable the PCI Power Control driver of the UPD720201
+ USB3 Host Controller.
+
+ The voltage regulators powering the rails of the PCI slots
+ are expected to be defined in the devicetree node of the PCI device.
+
config PCI_PWRCTRL_SLOT
tristate "PCI Power Control driver for PCI slots"
select PCI_PWRCTRL
diff --git a/drivers/pci/pwrctrl/Makefile b/drivers/pci/pwrctrl/Makefile
index 13b02282106c..a99f85de8a3d 100644
--- a/drivers/pci/pwrctrl/Makefile
+++ b/drivers/pci/pwrctrl/Makefile
@@ -5,6 +5,8 @@ pci-pwrctrl-core-y := core.o
obj-$(CONFIG_PCI_PWRCTRL_PWRSEQ) += pci-pwrctrl-pwrseq.o
+obj-$(CONFIG_PCI_PWRCTRL_UPD720201) += pci-pwrctrl-upd720201.o
+
obj-$(CONFIG_PCI_PWRCTRL_SLOT) += pci-pwrctrl-slot.o
pci-pwrctrl-slot-y := slot.o
diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
new file mode 100644
index 000000000000..db96bbb69c21
--- /dev/null
+++ b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
@@ -0,0 +1,88 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Based on upd720201.c:
+ * Copyright (C) 2024 Linaro Ltd.
+ * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+ */
+
+#include <linux/device.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/pci-pwrctrl.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+#include <linux/slab.h>
+
+struct pci_pwrctrl_upd720201_data {
+ struct pci_pwrctrl ctx;
+ struct regulator_bulk_data *supplies;
+ int num_supplies;
+};
+
+static void devm_pci_pwrctrl_upd720201_power_off(void *data)
+{
+ struct pci_pwrctrl_upd720201_data *upd720201 = data;
+
+ regulator_bulk_disable(upd720201->num_supplies, upd720201->supplies);
+ regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
+}
+
+static int pci_pwrctrl_upd720201_probe(struct platform_device *pdev)
+{
+ struct pci_pwrctrl_upd720201_data *upd720201;
+ struct device *dev = &pdev->dev;
+ int ret;
+
+ upd720201 = devm_kzalloc(dev, sizeof(*upd720201), GFP_KERNEL);
+ if (!upd720201)
+ return -ENOMEM;
+
+ ret = of_regulator_bulk_get_all(dev, dev_of_node(dev),
+ &upd720201->supplies);
+ if (ret < 0) {
+ dev_err_probe(dev, ret, "Failed to get upd720201 regulators\n");
+ return ret;
+ }
+
+ upd720201->num_supplies = ret;
+ ret = regulator_bulk_enable(upd720201->num_supplies, upd720201->supplies);
+ if (ret < 0) {
+ dev_err_probe(dev, ret, "Failed to enable upd720201 regulators\n");
+ regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
+ return ret;
+ }
+
+ ret = devm_add_action_or_reset(dev, devm_pci_pwrctrl_upd720201_power_off,
+ upd720201);
+ if (ret)
+ return ret;
+
+ pci_pwrctrl_init(&upd720201->ctx, dev);
+
+ ret = devm_pci_pwrctrl_device_set_ready(dev, &upd720201->ctx);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to register pwrctrl driver\n");
+
+ return 0;
+}
+
+static const struct of_device_id pci_pwrctrl_upd720201_of_match[] = {
+ {
+ .compatible = "pci1912,0014",
+ },
+ { }
+};
+MODULE_DEVICE_TABLE(of, pci_pwrctrl_upd720201_of_match);
+
+static struct platform_driver pci_pwrctrl_upd720201_driver = {
+ .driver = {
+ .name = "pci-pwrctrl-upd720201",
+ .of_match_table = pci_pwrctrl_upd720201_of_match,
+ },
+ .probe = pci_pwrctrl_upd720201_probe,
+};
+module_platform_driver(pci_pwrctrl_upd720201_driver);
+
+MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>");
+MODULE_DESCRIPTION("PCI Power Control driver for UPD720201 USB3 Host Controller");
+MODULE_LICENSE("GPL");
--
2.34.1
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 9:57 ` [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the " Neil Armstrong
@ 2026-01-27 15:53 ` Manivannan Sadhasivam
2026-01-27 21:53 ` Neil Armstrong
2026-01-27 17:04 ` Bjorn Helgaas
2026-01-28 8:47 ` Bartosz Golaszewski
2 siblings, 1 reply; 26+ messages in thread
From: Manivannan Sadhasivam @ 2026-01-27 15:53 UTC (permalink / raw)
To: Neil Armstrong
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Bjorn Helgaas, devicetree,
linux-kernel, linux-arm-msm, dri-devel, freedreno, linux-usb,
linux-renesas-soc, linux-pci
On Tue, Jan 27, 2026 at 10:57:29AM +0100, Neil Armstrong wrote:
> Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
> power control which connects over PCIe and requires specific power supplies
> to start up.
>
This driver only handles the supplies. So why can't you use the existing
pwrctrl-slot driver as a fallback?
- Mani
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> drivers/pci/pwrctrl/Kconfig | 10 ++++
> drivers/pci/pwrctrl/Makefile | 2 +
> drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c | 88 +++++++++++++++++++++++++++++
> 3 files changed, 100 insertions(+)
>
> diff --git a/drivers/pci/pwrctrl/Kconfig b/drivers/pci/pwrctrl/Kconfig
> index e0f999f299bb..5a94e60d0d3e 100644
> --- a/drivers/pci/pwrctrl/Kconfig
> +++ b/drivers/pci/pwrctrl/Kconfig
> @@ -11,6 +11,16 @@ config PCI_PWRCTRL_PWRSEQ
> select POWER_SEQUENCING
> select PCI_PWRCTRL
>
> +config PCI_PWRCTRL_UPD720201
> + tristate "PCI Power Control driver for the UPD720201 USB3 Host Controller"
> + select PCI_PWRCTRL
> + help
> + Say Y here to enable the PCI Power Control driver of the UPD720201
> + USB3 Host Controller.
> +
> + The voltage regulators powering the rails of the PCI slots
> + are expected to be defined in the devicetree node of the PCI device.
> +
> config PCI_PWRCTRL_SLOT
> tristate "PCI Power Control driver for PCI slots"
> select PCI_PWRCTRL
> diff --git a/drivers/pci/pwrctrl/Makefile b/drivers/pci/pwrctrl/Makefile
> index 13b02282106c..a99f85de8a3d 100644
> --- a/drivers/pci/pwrctrl/Makefile
> +++ b/drivers/pci/pwrctrl/Makefile
> @@ -5,6 +5,8 @@ pci-pwrctrl-core-y := core.o
>
> obj-$(CONFIG_PCI_PWRCTRL_PWRSEQ) += pci-pwrctrl-pwrseq.o
>
> +obj-$(CONFIG_PCI_PWRCTRL_UPD720201) += pci-pwrctrl-upd720201.o
> +
> obj-$(CONFIG_PCI_PWRCTRL_SLOT) += pci-pwrctrl-slot.o
> pci-pwrctrl-slot-y := slot.o
>
> diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
> new file mode 100644
> index 000000000000..db96bbb69c21
> --- /dev/null
> +++ b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
> @@ -0,0 +1,88 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Based on upd720201.c:
> + * Copyright (C) 2024 Linaro Ltd.
> + * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
> + */
> +
> +#include <linux/device.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/module.h>
> +#include <linux/pci-pwrctrl.h>
> +#include <linux/platform_device.h>
> +#include <linux/regulator/consumer.h>
> +#include <linux/slab.h>
> +
> +struct pci_pwrctrl_upd720201_data {
> + struct pci_pwrctrl ctx;
> + struct regulator_bulk_data *supplies;
> + int num_supplies;
> +};
> +
> +static void devm_pci_pwrctrl_upd720201_power_off(void *data)
> +{
> + struct pci_pwrctrl_upd720201_data *upd720201 = data;
> +
> + regulator_bulk_disable(upd720201->num_supplies, upd720201->supplies);
> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
> +}
> +
> +static int pci_pwrctrl_upd720201_probe(struct platform_device *pdev)
> +{
> + struct pci_pwrctrl_upd720201_data *upd720201;
> + struct device *dev = &pdev->dev;
> + int ret;
> +
> + upd720201 = devm_kzalloc(dev, sizeof(*upd720201), GFP_KERNEL);
> + if (!upd720201)
> + return -ENOMEM;
> +
> + ret = of_regulator_bulk_get_all(dev, dev_of_node(dev),
> + &upd720201->supplies);
> + if (ret < 0) {
> + dev_err_probe(dev, ret, "Failed to get upd720201 regulators\n");
> + return ret;
> + }
> +
> + upd720201->num_supplies = ret;
> + ret = regulator_bulk_enable(upd720201->num_supplies, upd720201->supplies);
> + if (ret < 0) {
> + dev_err_probe(dev, ret, "Failed to enable upd720201 regulators\n");
> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
> + return ret;
> + }
> +
> + ret = devm_add_action_or_reset(dev, devm_pci_pwrctrl_upd720201_power_off,
> + upd720201);
> + if (ret)
> + return ret;
> +
> + pci_pwrctrl_init(&upd720201->ctx, dev);
> +
> + ret = devm_pci_pwrctrl_device_set_ready(dev, &upd720201->ctx);
> + if (ret)
> + return dev_err_probe(dev, ret, "Failed to register pwrctrl driver\n");
> +
> + return 0;
> +}
> +
> +static const struct of_device_id pci_pwrctrl_upd720201_of_match[] = {
> + {
> + .compatible = "pci1912,0014",
> + },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, pci_pwrctrl_upd720201_of_match);
> +
> +static struct platform_driver pci_pwrctrl_upd720201_driver = {
> + .driver = {
> + .name = "pci-pwrctrl-upd720201",
> + .of_match_table = pci_pwrctrl_upd720201_of_match,
> + },
> + .probe = pci_pwrctrl_upd720201_probe,
> +};
> +module_platform_driver(pci_pwrctrl_upd720201_driver);
> +
> +MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>");
> +MODULE_DESCRIPTION("PCI Power Control driver for UPD720201 USB3 Host Controller");
> +MODULE_LICENSE("GPL");
>
> --
> 2.34.1
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 15:53 ` Manivannan Sadhasivam
@ 2026-01-27 21:53 ` Neil Armstrong
2026-01-27 22:26 ` Bjorn Helgaas
2026-01-28 6:22 ` Shawn Lin
0 siblings, 2 replies; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 21:53 UTC (permalink / raw)
To: Manivannan Sadhasivam
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Bjorn Helgaas, devicetree,
linux-kernel, linux-arm-msm, dri-devel, freedreno, linux-usb,
linux-renesas-soc, linux-pci
On 1/27/26 16:53, Manivannan Sadhasivam wrote:
> On Tue, Jan 27, 2026 at 10:57:29AM +0100, Neil Armstrong wrote:
>> Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
>> power control which connects over PCIe and requires specific power supplies
>> to start up.
>>
>
> This driver only handles the supplies. So why can't you use the existing
> pwrctrl-slot driver as a fallback?
It would fit with no change, but the name "slot" doesn't match the goal here,
it's not a slot at all, it's an actual pcie IC.
Neil
>
> - Mani
>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>> drivers/pci/pwrctrl/Kconfig | 10 ++++
>> drivers/pci/pwrctrl/Makefile | 2 +
>> drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c | 88 +++++++++++++++++++++++++++++
>> 3 files changed, 100 insertions(+)
>>
>> diff --git a/drivers/pci/pwrctrl/Kconfig b/drivers/pci/pwrctrl/Kconfig
>> index e0f999f299bb..5a94e60d0d3e 100644
>> --- a/drivers/pci/pwrctrl/Kconfig
>> +++ b/drivers/pci/pwrctrl/Kconfig
>> @@ -11,6 +11,16 @@ config PCI_PWRCTRL_PWRSEQ
>> select POWER_SEQUENCING
>> select PCI_PWRCTRL
>>
>> +config PCI_PWRCTRL_UPD720201
>> + tristate "PCI Power Control driver for the UPD720201 USB3 Host Controller"
>> + select PCI_PWRCTRL
>> + help
>> + Say Y here to enable the PCI Power Control driver of the UPD720201
>> + USB3 Host Controller.
>> +
>> + The voltage regulators powering the rails of the PCI slots
>> + are expected to be defined in the devicetree node of the PCI device.
>> +
>> config PCI_PWRCTRL_SLOT
>> tristate "PCI Power Control driver for PCI slots"
>> select PCI_PWRCTRL
>> diff --git a/drivers/pci/pwrctrl/Makefile b/drivers/pci/pwrctrl/Makefile
>> index 13b02282106c..a99f85de8a3d 100644
>> --- a/drivers/pci/pwrctrl/Makefile
>> +++ b/drivers/pci/pwrctrl/Makefile
>> @@ -5,6 +5,8 @@ pci-pwrctrl-core-y := core.o
>>
>> obj-$(CONFIG_PCI_PWRCTRL_PWRSEQ) += pci-pwrctrl-pwrseq.o
>>
>> +obj-$(CONFIG_PCI_PWRCTRL_UPD720201) += pci-pwrctrl-upd720201.o
>> +
>> obj-$(CONFIG_PCI_PWRCTRL_SLOT) += pci-pwrctrl-slot.o
>> pci-pwrctrl-slot-y := slot.o
>>
>> diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
>> new file mode 100644
>> index 000000000000..db96bbb69c21
>> --- /dev/null
>> +++ b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
>> @@ -0,0 +1,88 @@
>> +// SPDX-License-Identifier: GPL-2.0-only
>> +/*
>> + * Based on upd720201.c:
>> + * Copyright (C) 2024 Linaro Ltd.
>> + * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
>> + */
>> +
>> +#include <linux/device.h>
>> +#include <linux/mod_devicetable.h>
>> +#include <linux/module.h>
>> +#include <linux/pci-pwrctrl.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/regulator/consumer.h>
>> +#include <linux/slab.h>
>> +
>> +struct pci_pwrctrl_upd720201_data {
>> + struct pci_pwrctrl ctx;
>> + struct regulator_bulk_data *supplies;
>> + int num_supplies;
>> +};
>> +
>> +static void devm_pci_pwrctrl_upd720201_power_off(void *data)
>> +{
>> + struct pci_pwrctrl_upd720201_data *upd720201 = data;
>> +
>> + regulator_bulk_disable(upd720201->num_supplies, upd720201->supplies);
>> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
>> +}
>> +
>> +static int pci_pwrctrl_upd720201_probe(struct platform_device *pdev)
>> +{
>> + struct pci_pwrctrl_upd720201_data *upd720201;
>> + struct device *dev = &pdev->dev;
>> + int ret;
>> +
>> + upd720201 = devm_kzalloc(dev, sizeof(*upd720201), GFP_KERNEL);
>> + if (!upd720201)
>> + return -ENOMEM;
>> +
>> + ret = of_regulator_bulk_get_all(dev, dev_of_node(dev),
>> + &upd720201->supplies);
>> + if (ret < 0) {
>> + dev_err_probe(dev, ret, "Failed to get upd720201 regulators\n");
>> + return ret;
>> + }
>> +
>> + upd720201->num_supplies = ret;
>> + ret = regulator_bulk_enable(upd720201->num_supplies, upd720201->supplies);
>> + if (ret < 0) {
>> + dev_err_probe(dev, ret, "Failed to enable upd720201 regulators\n");
>> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
>> + return ret;
>> + }
>> +
>> + ret = devm_add_action_or_reset(dev, devm_pci_pwrctrl_upd720201_power_off,
>> + upd720201);
>> + if (ret)
>> + return ret;
>> +
>> + pci_pwrctrl_init(&upd720201->ctx, dev);
>> +
>> + ret = devm_pci_pwrctrl_device_set_ready(dev, &upd720201->ctx);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to register pwrctrl driver\n");
>> +
>> + return 0;
>> +}
>> +
>> +static const struct of_device_id pci_pwrctrl_upd720201_of_match[] = {
>> + {
>> + .compatible = "pci1912,0014",
>> + },
>> + { }
>> +};
>> +MODULE_DEVICE_TABLE(of, pci_pwrctrl_upd720201_of_match);
>> +
>> +static struct platform_driver pci_pwrctrl_upd720201_driver = {
>> + .driver = {
>> + .name = "pci-pwrctrl-upd720201",
>> + .of_match_table = pci_pwrctrl_upd720201_of_match,
>> + },
>> + .probe = pci_pwrctrl_upd720201_probe,
>> +};
>> +module_platform_driver(pci_pwrctrl_upd720201_driver);
>> +
>> +MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>");
>> +MODULE_DESCRIPTION("PCI Power Control driver for UPD720201 USB3 Host Controller");
>> +MODULE_LICENSE("GPL");
>>
>> --
>> 2.34.1
>>
>
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 21:53 ` Neil Armstrong
@ 2026-01-27 22:26 ` Bjorn Helgaas
2026-01-28 6:22 ` Shawn Lin
1 sibling, 0 replies; 26+ messages in thread
From: Bjorn Helgaas @ 2026-01-27 22:26 UTC (permalink / raw)
To: Neil Armstrong
Cc: Manivannan Sadhasivam, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, David Airlie, Simona Vetter, Greg Kroah-Hartman,
Geert Uytterhoeven, Magnus Damm, Bartosz Golaszewski,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
On Tue, Jan 27, 2026 at 10:53:50PM +0100, Neil Armstrong wrote:
> On 1/27/26 16:53, Manivannan Sadhasivam wrote:
> > On Tue, Jan 27, 2026 at 10:57:29AM +0100, Neil Armstrong wrote:
> > > Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
> > > power control which connects over PCIe and requires specific power supplies
> > > to start up.
> >
> > This driver only handles the supplies. So why can't you use the existing
> > pwrctrl-slot driver as a fallback?
>
> It would fit with no change, but the name "slot" doesn't match the
> goal here, it's not a slot at all, it's an actual pcie IC.
"slot" is probably an overly specific name. Maybe we can solve it
with a better name.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 21:53 ` Neil Armstrong
2026-01-27 22:26 ` Bjorn Helgaas
@ 2026-01-28 6:22 ` Shawn Lin
2026-01-28 7:57 ` Manivannan Sadhasivam
1 sibling, 1 reply; 26+ messages in thread
From: Shawn Lin @ 2026-01-28 6:22 UTC (permalink / raw)
To: Neil Armstrong, Manivannan Sadhasivam
Cc: shawn.lin, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Greg Kroah-Hartman,
Geert Uytterhoeven, Magnus Damm, Bartosz Golaszewski,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
在 2026/01/28 星期三 5:53, Neil Armstrong 写道:
> On 1/27/26 16:53, Manivannan Sadhasivam wrote:
>> On Tue, Jan 27, 2026 at 10:57:29AM +0100, Neil Armstrong wrote:
>>> Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host
>>> Controller
>>> power control which connects over PCIe and requires specific power
>>> supplies
>>> to start up.
>>>
>>
>> This driver only handles the supplies. So why can't you use the existing
>> pwrctrl-slot driver as a fallback?
>
> It would fit with no change, but the name "slot" doesn't match the goal
> here,
> it's not a slot at all, it's an actual pcie IC.
>
How about renaming slot.cto something like pci-pwrctrl-simple.c,
especially if most power sequences fit into this category? This would
follow the naming example seen in other subsystems, such as
drivers/mmc/core/pwrseq_simple.c.
> Neil
>
>>
>> - Mani
>>
>>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>>> ---
>>> drivers/pci/pwrctrl/Kconfig | 10 ++++
>>> drivers/pci/pwrctrl/Makefile | 2 +
>>> drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c | 88 ++++++++++++++++++
>>> +++++++++++
>>> 3 files changed, 100 insertions(+)
>>>
>>> diff --git a/drivers/pci/pwrctrl/Kconfig b/drivers/pci/pwrctrl/Kconfig
>>> index e0f999f299bb..5a94e60d0d3e 100644
>>> --- a/drivers/pci/pwrctrl/Kconfig
>>> +++ b/drivers/pci/pwrctrl/Kconfig
>>> @@ -11,6 +11,16 @@ config PCI_PWRCTRL_PWRSEQ
>>> select POWER_SEQUENCING
>>> select PCI_PWRCTRL
>>> +config PCI_PWRCTRL_UPD720201
>>> + tristate "PCI Power Control driver for the UPD720201 USB3 Host
>>> Controller"
>>> + select PCI_PWRCTRL
>>> + help
>>> + Say Y here to enable the PCI Power Control driver of the
>>> UPD720201
>>> + USB3 Host Controller.
>>> +
>>> + The voltage regulators powering the rails of the PCI slots
>>> + are expected to be defined in the devicetree node of the PCI
>>> device.
>>> +
>>> config PCI_PWRCTRL_SLOT
>>> tristate "PCI Power Control driver for PCI slots"
>>> select PCI_PWRCTRL
>>> diff --git a/drivers/pci/pwrctrl/Makefile b/drivers/pci/pwrctrl/Makefile
>>> index 13b02282106c..a99f85de8a3d 100644
>>> --- a/drivers/pci/pwrctrl/Makefile
>>> +++ b/drivers/pci/pwrctrl/Makefile
>>> @@ -5,6 +5,8 @@ pci-pwrctrl-core-y := core.o
>>> obj-$(CONFIG_PCI_PWRCTRL_PWRSEQ) += pci-pwrctrl-pwrseq.o
>>> +obj-$(CONFIG_PCI_PWRCTRL_UPD720201) += pci-pwrctrl-upd720201.o
>>> +
>>> obj-$(CONFIG_PCI_PWRCTRL_SLOT) += pci-pwrctrl-slot.o
>>> pci-pwrctrl-slot-y := slot.o
>>> diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c b/drivers/
>>> pci/pwrctrl/pci-pwrctrl-upd720201.c
>>> new file mode 100644
>>> index 000000000000..db96bbb69c21
>>> --- /dev/null
>>> +++ b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
>>> @@ -0,0 +1,88 @@
>>> +// SPDX-License-Identifier: GPL-2.0-only
>>> +/*
>>> + * Based on upd720201.c:
>>> + * Copyright (C) 2024 Linaro Ltd.
>>> + * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
>>> + */
>>> +
>>> +#include <linux/device.h>
>>> +#include <linux/mod_devicetable.h>
>>> +#include <linux/module.h>
>>> +#include <linux/pci-pwrctrl.h>
>>> +#include <linux/platform_device.h>
>>> +#include <linux/regulator/consumer.h>
>>> +#include <linux/slab.h>
>>> +
>>> +struct pci_pwrctrl_upd720201_data {
>>> + struct pci_pwrctrl ctx;
>>> + struct regulator_bulk_data *supplies;
>>> + int num_supplies;
>>> +};
>>> +
>>> +static void devm_pci_pwrctrl_upd720201_power_off(void *data)
>>> +{
>>> + struct pci_pwrctrl_upd720201_data *upd720201 = data;
>>> +
>>> + regulator_bulk_disable(upd720201->num_supplies, upd720201-
>>> >supplies);
>>> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
>>> +}
>>> +
>>> +static int pci_pwrctrl_upd720201_probe(struct platform_device *pdev)
>>> +{
>>> + struct pci_pwrctrl_upd720201_data *upd720201;
>>> + struct device *dev = &pdev->dev;
>>> + int ret;
>>> +
>>> + upd720201 = devm_kzalloc(dev, sizeof(*upd720201), GFP_KERNEL);
>>> + if (!upd720201)
>>> + return -ENOMEM;
>>> +
>>> + ret = of_regulator_bulk_get_all(dev, dev_of_node(dev),
>>> + &upd720201->supplies);
>>> + if (ret < 0) {
>>> + dev_err_probe(dev, ret, "Failed to get upd720201
>>> regulators\n");
>>> + return ret;
>>> + }
>>> +
>>> + upd720201->num_supplies = ret;
>>> + ret = regulator_bulk_enable(upd720201->num_supplies, upd720201-
>>> >supplies);
>>> + if (ret < 0) {
>>> + dev_err_probe(dev, ret, "Failed to enable upd720201
>>> regulators\n");
>>> + regulator_bulk_free(upd720201->num_supplies, upd720201-
>>> >supplies);
>>> + return ret;
>>> + }
>>> +
>>> + ret = devm_add_action_or_reset(dev,
>>> devm_pci_pwrctrl_upd720201_power_off,
>>> + upd720201);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + pci_pwrctrl_init(&upd720201->ctx, dev);
>>> +
>>> + ret = devm_pci_pwrctrl_device_set_ready(dev, &upd720201->ctx);
>>> + if (ret)
>>> + return dev_err_probe(dev, ret, "Failed to register pwrctrl
>>> driver\n");
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +static const struct of_device_id pci_pwrctrl_upd720201_of_match[] = {
>>> + {
>>> + .compatible = "pci1912,0014",
>>> + },
>>> + { }
>>> +};
>>> +MODULE_DEVICE_TABLE(of, pci_pwrctrl_upd720201_of_match);
>>> +
>>> +static struct platform_driver pci_pwrctrl_upd720201_driver = {
>>> + .driver = {
>>> + .name = "pci-pwrctrl-upd720201",
>>> + .of_match_table = pci_pwrctrl_upd720201_of_match,
>>> + },
>>> + .probe = pci_pwrctrl_upd720201_probe,
>>> +};
>>> +module_platform_driver(pci_pwrctrl_upd720201_driver);
>>> +
>>> +MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>");
>>> +MODULE_DESCRIPTION("PCI Power Control driver for UPD720201 USB3 Host
>>> Controller");
>>> +MODULE_LICENSE("GPL");
>>>
>>> --
>>> 2.34.1
>>>
>>
>
>
>
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-28 6:22 ` Shawn Lin
@ 2026-01-28 7:57 ` Manivannan Sadhasivam
2026-01-28 8:51 ` Neil Armstrong
0 siblings, 1 reply; 26+ messages in thread
From: Manivannan Sadhasivam @ 2026-01-28 7:57 UTC (permalink / raw)
To: Shawn Lin
Cc: Neil Armstrong, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Greg Kroah-Hartman,
Geert Uytterhoeven, Magnus Damm, Bartosz Golaszewski,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
On Wed, Jan 28, 2026 at 02:22:50PM +0800, Shawn Lin wrote:
> 在 2026/01/28 星期三 5:53, Neil Armstrong 写道:
> > On 1/27/26 16:53, Manivannan Sadhasivam wrote:
> > > On Tue, Jan 27, 2026 at 10:57:29AM +0100, Neil Armstrong wrote:
> > > > Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host
> > > > Controller
> > > > power control which connects over PCIe and requires specific
> > > > power supplies
> > > > to start up.
> > > >
> > >
> > > This driver only handles the supplies. So why can't you use the existing
> > > pwrctrl-slot driver as a fallback?
> >
> > It would fit with no change, but the name "slot" doesn't match the goal
> > here,
> > it's not a slot at all, it's an actual pcie IC.
> >
>
> How about renaming slot.cto something like pci-pwrctrl-simple.c, especially
> if most power sequences fit into this category? This would follow the naming
> example seen in other subsystems, such as drivers/mmc/core/pwrseq_simple.c.
>
Yes. There is no point in duplicating the drivers just for a different name.
Slot driver is relatively new. So I don't think there would be issues in
renaming the module name.
I'd prefer for 'pci-pwrctrl-generic.ko' for module name and 'generic.c' for
driver name.
- Mani
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-28 7:57 ` Manivannan Sadhasivam
@ 2026-01-28 8:51 ` Neil Armstrong
0 siblings, 0 replies; 26+ messages in thread
From: Neil Armstrong @ 2026-01-28 8:51 UTC (permalink / raw)
To: Manivannan Sadhasivam, Shawn Lin
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Bjorn Helgaas, devicetree,
linux-kernel, linux-arm-msm, dri-devel, freedreno, linux-usb,
linux-renesas-soc, linux-pci
On 1/28/26 08:57, Manivannan Sadhasivam wrote:
> On Wed, Jan 28, 2026 at 02:22:50PM +0800, Shawn Lin wrote:
>> 在 2026/01/28 星期三 5:53, Neil Armstrong 写道:
>>> On 1/27/26 16:53, Manivannan Sadhasivam wrote:
>>>> On Tue, Jan 27, 2026 at 10:57:29AM +0100, Neil Armstrong wrote:
>>>>> Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host
>>>>> Controller
>>>>> power control which connects over PCIe and requires specific
>>>>> power supplies
>>>>> to start up.
>>>>>
>>>>
>>>> This driver only handles the supplies. So why can't you use the existing
>>>> pwrctrl-slot driver as a fallback?
>>>
>>> It would fit with no change, but the name "slot" doesn't match the goal
>>> here,
>>> it's not a slot at all, it's an actual pcie IC.
>>>
>>
>> How about renaming slot.cto something like pci-pwrctrl-simple.c, especially
>> if most power sequences fit into this category? This would follow the naming
>> example seen in other subsystems, such as drivers/mmc/core/pwrseq_simple.c.
>>
>
> Yes. There is no point in duplicating the drivers just for a different name.
> Slot driver is relatively new. So I don't think there would be issues in
> renaming the module name.
>
> I'd prefer for 'pci-pwrctrl-generic.ko' for module name and 'generic.c' for
> driver name.
Will do
Thanks,
Neil
>
> - Mani
>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 9:57 ` [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the " Neil Armstrong
2026-01-27 15:53 ` Manivannan Sadhasivam
@ 2026-01-27 17:04 ` Bjorn Helgaas
2026-01-28 8:47 ` Bartosz Golaszewski
2 siblings, 0 replies; 26+ messages in thread
From: Bjorn Helgaas @ 2026-01-27 17:04 UTC (permalink / raw)
To: Neil Armstrong
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
On Tue, Jan 27, 2026 at 10:57:29AM +0100, Neil Armstrong wrote:
> Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
> power control which connects over PCIe and requires specific power supplies
> to start up.
s/fo /for /
In subject, "PCI/pwrctrl: Add ..." to match history (see
"git log --oneline drivers/pci/pwrctrl/")
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> drivers/pci/pwrctrl/Kconfig | 10 ++++
> drivers/pci/pwrctrl/Makefile | 2 +
> drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c | 88 +++++++++++++++++++++++++++++
> 3 files changed, 100 insertions(+)
>
> diff --git a/drivers/pci/pwrctrl/Kconfig b/drivers/pci/pwrctrl/Kconfig
> index e0f999f299bb..5a94e60d0d3e 100644
> --- a/drivers/pci/pwrctrl/Kconfig
> +++ b/drivers/pci/pwrctrl/Kconfig
> @@ -11,6 +11,16 @@ config PCI_PWRCTRL_PWRSEQ
> select POWER_SEQUENCING
> select PCI_PWRCTRL
>
> +config PCI_PWRCTRL_UPD720201
> + tristate "PCI Power Control driver for the UPD720201 USB3 Host Controller"
> + select PCI_PWRCTRL
> + help
> + Say Y here to enable the PCI Power Control driver of the UPD720201
> + USB3 Host Controller.
> +
> + The voltage regulators powering the rails of the PCI slots
> + are expected to be defined in the devicetree node of the PCI device.
I assume this is a function of the platform design, not an intrinsic
feature of UPD720201? I.e., my guess is that this driver is not
required for every platform that includes a UPD720201 device?
Maybe this is just another way of asking Mani's question about using
pwrctrl-slot. *Every* device requires specific power supplies to
start up (re patch 1/7), and this driver doesn't appear to depend on
anything unique about UPD720201.
> config PCI_PWRCTRL_SLOT
> tristate "PCI Power Control driver for PCI slots"
> select PCI_PWRCTRL
> diff --git a/drivers/pci/pwrctrl/Makefile b/drivers/pci/pwrctrl/Makefile
> index 13b02282106c..a99f85de8a3d 100644
> --- a/drivers/pci/pwrctrl/Makefile
> +++ b/drivers/pci/pwrctrl/Makefile
> @@ -5,6 +5,8 @@ pci-pwrctrl-core-y := core.o
>
> obj-$(CONFIG_PCI_PWRCTRL_PWRSEQ) += pci-pwrctrl-pwrseq.o
>
> +obj-$(CONFIG_PCI_PWRCTRL_UPD720201) += pci-pwrctrl-upd720201.o
> +
> obj-$(CONFIG_PCI_PWRCTRL_SLOT) += pci-pwrctrl-slot.o
> pci-pwrctrl-slot-y := slot.o
>
> diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
> new file mode 100644
> index 000000000000..db96bbb69c21
> --- /dev/null
> +++ b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
> @@ -0,0 +1,88 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Based on upd720201.c:
> + * Copyright (C) 2024 Linaro Ltd.
> + * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
> + */
> +
> +#include <linux/device.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/module.h>
> +#include <linux/pci-pwrctrl.h>
> +#include <linux/platform_device.h>
> +#include <linux/regulator/consumer.h>
> +#include <linux/slab.h>
> +
> +struct pci_pwrctrl_upd720201_data {
> + struct pci_pwrctrl ctx;
> + struct regulator_bulk_data *supplies;
> + int num_supplies;
> +};
To match recent rework of nearby drivers:
s/pci_pwrctrl_upd720201_data/upd720201_pwrctrl/
s/ctx/pwrctrl/
> +static void devm_pci_pwrctrl_upd720201_power_off(void *data)
and:
s/devm_pci_pwrctrl_upd720201_power_off/devm_upd720201_release/
s/pci_pwrctrl_upd720201_probe/upd720201_pwrctrl_probe/
Might be more opportunities to be more similar to slot.c and
pci-pwrctrl-tc9563.c, e.g., adding:
upd720201->pwrctrl.power_on = ...;
upd720201->pwrctrl.power_off = ...;
(would have to be based on pci/pwrctrl branch, which is where this
patch would be applied)
> +{
> + struct pci_pwrctrl_upd720201_data *upd720201 = data;
> +
> + regulator_bulk_disable(upd720201->num_supplies, upd720201->supplies);
> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
> +}
> +
> +static int pci_pwrctrl_upd720201_probe(struct platform_device *pdev)
> +{
> + struct pci_pwrctrl_upd720201_data *upd720201;
> + struct device *dev = &pdev->dev;
> + int ret;
> +
> + upd720201 = devm_kzalloc(dev, sizeof(*upd720201), GFP_KERNEL);
> + if (!upd720201)
> + return -ENOMEM;
> +
> + ret = of_regulator_bulk_get_all(dev, dev_of_node(dev),
> + &upd720201->supplies);
> + if (ret < 0) {
> + dev_err_probe(dev, ret, "Failed to get upd720201 regulators\n");
> + return ret;
> + }
> +
> + upd720201->num_supplies = ret;
> + ret = regulator_bulk_enable(upd720201->num_supplies, upd720201->supplies);
> + if (ret < 0) {
> + dev_err_probe(dev, ret, "Failed to enable upd720201 regulators\n");
> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
> + return ret;
> + }
> +
> + ret = devm_add_action_or_reset(dev, devm_pci_pwrctrl_upd720201_power_off,
> + upd720201);
> + if (ret)
> + return ret;
> +
> + pci_pwrctrl_init(&upd720201->ctx, dev);
> +
> + ret = devm_pci_pwrctrl_device_set_ready(dev, &upd720201->ctx);
> + if (ret)
> + return dev_err_probe(dev, ret, "Failed to register pwrctrl driver\n");
> +
> + return 0;
> +}
> +
> +static const struct of_device_id pci_pwrctrl_upd720201_of_match[] = {
> + {
> + .compatible = "pci1912,0014",
> + },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, pci_pwrctrl_upd720201_of_match);
> +
> +static struct platform_driver pci_pwrctrl_upd720201_driver = {
> + .driver = {
> + .name = "pci-pwrctrl-upd720201",
> + .of_match_table = pci_pwrctrl_upd720201_of_match,
> + },
> + .probe = pci_pwrctrl_upd720201_probe,
> +};
> +module_platform_driver(pci_pwrctrl_upd720201_driver);
> +
> +MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>");
> +MODULE_DESCRIPTION("PCI Power Control driver for UPD720201 USB3 Host Controller");
> +MODULE_LICENSE("GPL");
>
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the UPD720201/UPD720202 USB 3.0 xHCI Host Controller
2026-01-27 9:57 ` [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the " Neil Armstrong
2026-01-27 15:53 ` Manivannan Sadhasivam
2026-01-27 17:04 ` Bjorn Helgaas
@ 2026-01-28 8:47 ` Bartosz Golaszewski
2 siblings, 0 replies; 26+ messages in thread
From: Bartosz Golaszewski @ 2026-01-28 8:47 UTC (permalink / raw)
To: Neil Armstrong
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
On Tue, 27 Jan 2026 10:57:29 +0100, Neil Armstrong
<neil.armstrong@linaro.org> said:
> Add support fo the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller
> power control which connects over PCIe and requires specific power supplies
> to start up.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> drivers/pci/pwrctrl/Kconfig | 10 ++++
> drivers/pci/pwrctrl/Makefile | 2 +
> drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c | 88 +++++++++++++++++++++++++++++
> 3 files changed, 100 insertions(+)
>
> diff --git a/drivers/pci/pwrctrl/Kconfig b/drivers/pci/pwrctrl/Kconfig
> index e0f999f299bb..5a94e60d0d3e 100644
> --- a/drivers/pci/pwrctrl/Kconfig
> +++ b/drivers/pci/pwrctrl/Kconfig
> @@ -11,6 +11,16 @@ config PCI_PWRCTRL_PWRSEQ
> select POWER_SEQUENCING
> select PCI_PWRCTRL
>
> +config PCI_PWRCTRL_UPD720201
> + tristate "PCI Power Control driver for the UPD720201 USB3 Host Controller"
> + select PCI_PWRCTRL
> + help
> + Say Y here to enable the PCI Power Control driver of the UPD720201
> + USB3 Host Controller.
> +
> + The voltage regulators powering the rails of the PCI slots
> + are expected to be defined in the devicetree node of the PCI device.
> +
> config PCI_PWRCTRL_SLOT
> tristate "PCI Power Control driver for PCI slots"
> select PCI_PWRCTRL
> diff --git a/drivers/pci/pwrctrl/Makefile b/drivers/pci/pwrctrl/Makefile
> index 13b02282106c..a99f85de8a3d 100644
> --- a/drivers/pci/pwrctrl/Makefile
> +++ b/drivers/pci/pwrctrl/Makefile
> @@ -5,6 +5,8 @@ pci-pwrctrl-core-y := core.o
>
> obj-$(CONFIG_PCI_PWRCTRL_PWRSEQ) += pci-pwrctrl-pwrseq.o
>
> +obj-$(CONFIG_PCI_PWRCTRL_UPD720201) += pci-pwrctrl-upd720201.o
> +
> obj-$(CONFIG_PCI_PWRCTRL_SLOT) += pci-pwrctrl-slot.o
> pci-pwrctrl-slot-y := slot.o
>
> diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
> new file mode 100644
> index 000000000000..db96bbb69c21
> --- /dev/null
> +++ b/drivers/pci/pwrctrl/pci-pwrctrl-upd720201.c
> @@ -0,0 +1,88 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Based on upd720201.c:
> + * Copyright (C) 2024 Linaro Ltd.
> + * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
> + */
> +
> +#include <linux/device.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/module.h>
> +#include <linux/pci-pwrctrl.h>
> +#include <linux/platform_device.h>
> +#include <linux/regulator/consumer.h>
> +#include <linux/slab.h>
> +
> +struct pci_pwrctrl_upd720201_data {
> + struct pci_pwrctrl ctx;
> + struct regulator_bulk_data *supplies;
> + int num_supplies;
> +};
> +
> +static void devm_pci_pwrctrl_upd720201_power_off(void *data)
> +{
> + struct pci_pwrctrl_upd720201_data *upd720201 = data;
> +
> + regulator_bulk_disable(upd720201->num_supplies, upd720201->supplies);
> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
> +}
> +
> +static int pci_pwrctrl_upd720201_probe(struct platform_device *pdev)
> +{
> + struct pci_pwrctrl_upd720201_data *upd720201;
> + struct device *dev = &pdev->dev;
> + int ret;
> +
> + upd720201 = devm_kzalloc(dev, sizeof(*upd720201), GFP_KERNEL);
> + if (!upd720201)
> + return -ENOMEM;
> +
> + ret = of_regulator_bulk_get_all(dev, dev_of_node(dev),
> + &upd720201->supplies);
> + if (ret < 0) {
> + dev_err_probe(dev, ret, "Failed to get upd720201 regulators\n");
dev_err_probe()?
> + return ret;
> + }
> +
> + upd720201->num_supplies = ret;
> + ret = regulator_bulk_enable(upd720201->num_supplies, upd720201->supplies);
> + if (ret < 0) {
> + dev_err_probe(dev, ret, "Failed to enable upd720201 regulators\n");
> + regulator_bulk_free(upd720201->num_supplies, upd720201->supplies);
> + return ret;
Save a line by returning dev_err_probe() here?
> + }
> +
> + ret = devm_add_action_or_reset(dev, devm_pci_pwrctrl_upd720201_power_off,
> + upd720201);
> + if (ret)
> + return ret;
> +
> + pci_pwrctrl_init(&upd720201->ctx, dev);
> +
> + ret = devm_pci_pwrctrl_device_set_ready(dev, &upd720201->ctx);
> + if (ret)
> + return dev_err_probe(dev, ret, "Failed to register pwrctrl driver\n");
> +
> + return 0;
> +}
> +
> +static const struct of_device_id pci_pwrctrl_upd720201_of_match[] = {
> + {
> + .compatible = "pci1912,0014",
> + },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, pci_pwrctrl_upd720201_of_match);
> +
> +static struct platform_driver pci_pwrctrl_upd720201_driver = {
> + .driver = {
> + .name = "pci-pwrctrl-upd720201",
> + .of_match_table = pci_pwrctrl_upd720201_of_match,
> + },
> + .probe = pci_pwrctrl_upd720201_probe,
> +};
> +module_platform_driver(pci_pwrctrl_upd720201_driver);
> +
> +MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>");
> +MODULE_DESCRIPTION("PCI Power Control driver for UPD720201 USB3 Host Controller");
> +MODULE_LICENSE("GPL");
>
> --
> 2.34.1
>
>
Just nits with dev_err_probe(). With these LGTM.
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Bartosz
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 3/7] arm64: defconfig: enable pci-pwrctrl-upd720201 as module
2026-01-27 9:57 [PATCH v2 0/7] arm64: dts: qcom: Add support for the Ayaneo Pocket S2 Neil Armstrong
2026-01-27 9:57 ` [PATCH v2 1/7] dt-bindings: usb: document the Renesas UPD720201/UPD720202 USB 3.0 xHCI Host Controller Neil Armstrong
2026-01-27 9:57 ` [PATCH v2 2/7] pci: pwrctrl: add PCI pwrctrl driver for the " Neil Armstrong
@ 2026-01-27 9:57 ` Neil Armstrong
2026-01-27 9:57 ` [PATCH v2 4/7] dt-binding: vendor-prefixes: document the Ayaneo brand Neil Armstrong
` (3 subsequent siblings)
6 siblings, 0 replies; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 9:57 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Neil Armstrong
Enable the Renesas UPD720201 power control driver module since
this USB3 controller can be found on the Ayaneo Pocket S2 gaming
console.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
arch/arm64/configs/defconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 45288ec9eaf7..67c642821d35 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -250,6 +250,7 @@ CONFIG_PCIE_LAYERSCAPE_GEN4=y
CONFIG_PCI_ENDPOINT=y
CONFIG_PCI_ENDPOINT_CONFIGFS=y
CONFIG_PCI_EPF_TEST=m
+CONFIG_PCI_PWRCTRL_UPD720201=m
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_FW_LOADER_USER_HELPER=y
--
2.34.1
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH v2 4/7] dt-binding: vendor-prefixes: document the Ayaneo brand
2026-01-27 9:57 [PATCH v2 0/7] arm64: dts: qcom: Add support for the Ayaneo Pocket S2 Neil Armstrong
` (2 preceding siblings ...)
2026-01-27 9:57 ` [PATCH v2 3/7] arm64: defconfig: enable pci-pwrctrl-upd720201 as module Neil Armstrong
@ 2026-01-27 9:57 ` Neil Armstrong
2026-01-27 14:27 ` Rob Herring
2026-01-27 9:57 ` [PATCH v2 5/7] dt-bindings: arm: qcom: document the Ayaneo Pocket S2 Neil Armstrong
` (2 subsequent siblings)
6 siblings, 1 reply; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 9:57 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Neil Armstrong,
Krzysztof Kozlowski
Document the Ayaneo from the Anyun Intelligent Technology
(Hong Kong) Co., Ltd company.
Website: https://www.ayaneo.com/product/ayaneobrand.html
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index c7591b2aec2a..1f83979e0d09 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -216,6 +216,8 @@ patternProperties:
"^axiado,.*":
description: Axiado Corporation
"^axis,.*":
+ description: Anyun Intelligent Technology (Hong Kong) Co., Ltd
+ "^ayaneo,.*":
description: Axis Communications AB
"^azoteq,.*":
description: Azoteq (Pty) Ltd
--
2.34.1
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH v2 4/7] dt-binding: vendor-prefixes: document the Ayaneo brand
2026-01-27 9:57 ` [PATCH v2 4/7] dt-binding: vendor-prefixes: document the Ayaneo brand Neil Armstrong
@ 2026-01-27 14:27 ` Rob Herring
2026-01-27 14:42 ` Neil Armstrong
0 siblings, 1 reply; 26+ messages in thread
From: Rob Herring @ 2026-01-27 14:27 UTC (permalink / raw)
To: Neil Armstrong
Cc: Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Greg Kroah-Hartman, Geert Uytterhoeven, Magnus Damm,
Bartosz Golaszewski, Manivannan Sadhasivam, Bjorn Helgaas,
devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Krzysztof Kozlowski
On Tue, Jan 27, 2026 at 10:57:31AM +0100, Neil Armstrong wrote:
> Document the Ayaneo from the Anyun Intelligent Technology
> (Hong Kong) Co., Ltd company.
> Website: https://www.ayaneo.com/product/ayaneobrand.html
>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
> index c7591b2aec2a..1f83979e0d09 100644
> --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
> +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
> @@ -216,6 +216,8 @@ patternProperties:
> "^axiado,.*":
> description: Axiado Corporation
> "^axis,.*":
> + description: Anyun Intelligent Technology (Hong Kong) Co., Ltd
> + "^ayaneo,.*":
> description: Axis Communications AB
description is in the wrong place. Bad rebase?
> "^azoteq,.*":
> description: Azoteq (Pty) Ltd
>
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 4/7] dt-binding: vendor-prefixes: document the Ayaneo brand
2026-01-27 14:27 ` Rob Herring
@ 2026-01-27 14:42 ` Neil Armstrong
0 siblings, 0 replies; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 14:42 UTC (permalink / raw)
To: Rob Herring
Cc: Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Greg Kroah-Hartman, Geert Uytterhoeven, Magnus Damm,
Bartosz Golaszewski, Manivannan Sadhasivam, Bjorn Helgaas,
devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Krzysztof Kozlowski
On 1/27/26 15:27, Rob Herring wrote:
> On Tue, Jan 27, 2026 at 10:57:31AM +0100, Neil Armstrong wrote:
>> Document the Ayaneo from the Anyun Intelligent Technology
>> (Hong Kong) Co., Ltd company.
>> Website: https://www.ayaneo.com/product/ayaneobrand.html
>>
>> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>> Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
>> index c7591b2aec2a..1f83979e0d09 100644
>> --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
>> +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
>> @@ -216,6 +216,8 @@ patternProperties:
>> "^axiado,.*":
>> description: Axiado Corporation
>> "^axis,.*":
>> + description: Anyun Intelligent Technology (Hong Kong) Co., Ltd
>> + "^ayaneo,.*":
>> description: Axis Communications AB
>
> description is in the wrong place. Bad rebase?
Ok wow thanks I just missed it, somehow it looks good for me...
Neil
>
>> "^azoteq,.*":
>> description: Azoteq (Pty) Ltd
>>
>> --
>> 2.34.1
>>
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 5/7] dt-bindings: arm: qcom: document the Ayaneo Pocket S2
2026-01-27 9:57 [PATCH v2 0/7] arm64: dts: qcom: Add support for the Ayaneo Pocket S2 Neil Armstrong
` (3 preceding siblings ...)
2026-01-27 9:57 ` [PATCH v2 4/7] dt-binding: vendor-prefixes: document the Ayaneo brand Neil Armstrong
@ 2026-01-27 9:57 ` Neil Armstrong
2026-02-06 15:05 ` Rob Herring (Arm)
2026-01-27 9:57 ` [PATCH v2 6/7] arm64: dts: qcom: sm8650: Add sound DAI prefix for DP Neil Armstrong
2026-01-27 9:57 ` [PATCH v2 7/7] arm64: dts: qcom: add basic devicetree for Ayaneo Pocket S2 gaming console Neil Armstrong
6 siblings, 1 reply; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 9:57 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Neil Armstrong
Document the Qualcomm SM8650 based Ayaneo Pocket S2 gaming console.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
Documentation/devicetree/bindings/arm/qcom.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml
index d84bd3bca201..351cc2eff14a 100644
--- a/Documentation/devicetree/bindings/arm/qcom.yaml
+++ b/Documentation/devicetree/bindings/arm/qcom.yaml
@@ -1042,6 +1042,7 @@ properties:
- items:
- enum:
+ - ayaneo,pocket-s2
- qcom,sm8650-hdk
- qcom,sm8650-mtp
- qcom,sm8650-qrd
--
2.34.1
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH v2 5/7] dt-bindings: arm: qcom: document the Ayaneo Pocket S2
2026-01-27 9:57 ` [PATCH v2 5/7] dt-bindings: arm: qcom: document the Ayaneo Pocket S2 Neil Armstrong
@ 2026-02-06 15:05 ` Rob Herring (Arm)
0 siblings, 0 replies; 26+ messages in thread
From: Rob Herring (Arm) @ 2026-02-06 15:05 UTC (permalink / raw)
To: Neil Armstrong
Cc: Dmitry Baryshkov, Marijn Suijten, linux-usb, linux-pci,
Conor Dooley, Abhinav Kumar, Bjorn Andersson, freedreno,
Krzysztof Kozlowski, Greg Kroah-Hartman, Jessica Zhang,
Bjorn Helgaas, David Airlie, Bartosz Golaszewski, dri-devel,
linux-kernel, Rob Clark, devicetree, Geert Uytterhoeven,
linux-arm-msm, Konrad Dybcio, Manivannan Sadhasivam, Sean Paul,
Magnus Damm, linux-renesas-soc, Simona Vetter
On Tue, 27 Jan 2026 10:57:32 +0100, Neil Armstrong wrote:
> Document the Qualcomm SM8650 based Ayaneo Pocket S2 gaming console.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> Documentation/devicetree/bindings/arm/qcom.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 6/7] arm64: dts: qcom: sm8650: Add sound DAI prefix for DP
2026-01-27 9:57 [PATCH v2 0/7] arm64: dts: qcom: Add support for the Ayaneo Pocket S2 Neil Armstrong
` (4 preceding siblings ...)
2026-01-27 9:57 ` [PATCH v2 5/7] dt-bindings: arm: qcom: document the Ayaneo Pocket S2 Neil Armstrong
@ 2026-01-27 9:57 ` Neil Armstrong
2026-01-28 11:20 ` Konrad Dybcio
2026-01-29 0:51 ` Dmitry Baryshkov
2026-01-27 9:57 ` [PATCH v2 7/7] arm64: dts: qcom: add basic devicetree for Ayaneo Pocket S2 gaming console Neil Armstrong
6 siblings, 2 replies; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 9:57 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Neil Armstrong
Sound DAI devices exposing same set of mixers, e.g. each DisplayPort
controller, need to add dedicated prefix for these mixers to avoid
conflicts and to allow ALSA to properly configure given instance.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
arch/arm64/boot/dts/qcom/sm8650.dtsi | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/boot/dts/qcom/sm8650.dtsi b/arch/arm64/boot/dts/qcom/sm8650.dtsi
index ec79ba904f5d..db769baf4d58 100644
--- a/arch/arm64/boot/dts/qcom/sm8650.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8650.dtsi
@@ -5721,6 +5721,7 @@ mdss_dp0: displayport-controller@af54000 {
phy-names = "dp";
#sound-dai-cells = <0>;
+ sound-name-prefix = "DisplayPort0";
status = "disabled";
--
2.34.1
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH v2 6/7] arm64: dts: qcom: sm8650: Add sound DAI prefix for DP
2026-01-27 9:57 ` [PATCH v2 6/7] arm64: dts: qcom: sm8650: Add sound DAI prefix for DP Neil Armstrong
@ 2026-01-28 11:20 ` Konrad Dybcio
2026-01-29 0:51 ` Dmitry Baryshkov
1 sibling, 0 replies; 26+ messages in thread
From: Konrad Dybcio @ 2026-01-28 11:20 UTC (permalink / raw)
To: Neil Armstrong, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Greg Kroah-Hartman,
Geert Uytterhoeven, Magnus Damm, Bartosz Golaszewski,
Manivannan Sadhasivam, Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci
On 1/27/26 10:57 AM, Neil Armstrong wrote:
> Sound DAI devices exposing same set of mixers, e.g. each DisplayPort
> controller, need to add dedicated prefix for these mixers to avoid
> conflicts and to allow ALSA to properly configure given instance.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 6/7] arm64: dts: qcom: sm8650: Add sound DAI prefix for DP
2026-01-27 9:57 ` [PATCH v2 6/7] arm64: dts: qcom: sm8650: Add sound DAI prefix for DP Neil Armstrong
2026-01-28 11:20 ` Konrad Dybcio
@ 2026-01-29 0:51 ` Dmitry Baryshkov
1 sibling, 0 replies; 26+ messages in thread
From: Dmitry Baryshkov @ 2026-01-29 0:51 UTC (permalink / raw)
To: Neil Armstrong
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas, devicetree, linux-kernel, linux-arm-msm, dri-devel,
freedreno, linux-usb, linux-renesas-soc, linux-pci
On Tue, Jan 27, 2026 at 10:57:33AM +0100, Neil Armstrong wrote:
> Sound DAI devices exposing same set of mixers, e.g. each DisplayPort
> controller, need to add dedicated prefix for these mixers to avoid
> conflicts and to allow ALSA to properly configure given instance.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> arch/arm64/boot/dts/qcom/sm8650.dtsi | 1 +
> 1 file changed, 1 insertion(+)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 7/7] arm64: dts: qcom: add basic devicetree for Ayaneo Pocket S2 gaming console
2026-01-27 9:57 [PATCH v2 0/7] arm64: dts: qcom: Add support for the Ayaneo Pocket S2 Neil Armstrong
` (5 preceding siblings ...)
2026-01-27 9:57 ` [PATCH v2 6/7] arm64: dts: qcom: sm8650: Add sound DAI prefix for DP Neil Armstrong
@ 2026-01-27 9:57 ` Neil Armstrong
2026-01-28 11:24 ` Konrad Dybcio
6 siblings, 1 reply; 26+ messages in thread
From: Neil Armstrong @ 2026-01-27 9:57 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Greg Kroah-Hartman, Geert Uytterhoeven,
Magnus Damm, Bartosz Golaszewski, Manivannan Sadhasivam,
Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, Neil Armstrong, KancyJoe
From: KancyJoe <kancy2333@outlook.com>
Add initial Device Tree for the Ayaneo Pocket S2 gaming console based
on the Qualcomm Snapdragon 8 Gen 3 platform.
The design is similar to a phone without the modem, the game control
is handled via a standalone controller connected to a PCIe USB
controller.
Display panel support will be added in a second time.
Signed-off-by: KancyJoe <kancy2333@outlook.com>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/sm8650-ayaneo-pocket-s2.dts | 1559 ++++++++++++++++++++
arch/arm64/boot/dts/qcom/sm8650.dtsi | 46 +-
3 files changed, 1583 insertions(+), 23 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 6f34d5ed331c..1ba29755e5ba 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -313,6 +313,7 @@ dtb-$(CONFIG_ARCH_QCOM) += sm8550-mtp.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm8550-qrd.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm8550-samsung-q5q.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm8550-sony-xperia-yodo-pdx234.dtb
+dtb-$(CONFIG_ARCH_QCOM) += sm8650-ayaneo-pocket-s2.dtb
sm8650-hdk-display-card-dtbs := sm8650-hdk.dtb sm8650-hdk-display-card.dtbo
diff --git a/arch/arm64/boot/dts/qcom/sm8650-ayaneo-pocket-s2.dts b/arch/arm64/boot/dts/qcom/sm8650-ayaneo-pocket-s2.dts
new file mode 100644
index 000000000000..becdd3a66b4f
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sm8650-ayaneo-pocket-s2.dts
@@ -0,0 +1,1559 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2023, Linaro Limited
+ * Copyright (c) 2025, Kancy Joe <kancy2333@outlook.com>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+#include "sm8650.dtsi"
+#include "pm8550.dtsi"
+#include "pm8550b.dtsi"
+#define PMK8550VE_SID 8
+#include "pm8550ve.dtsi"
+#include "pm8550vs.dtsi"
+#include "pmk8550.dtsi"
+
+/delete-node/ &rmtfs_mem;
+/delete-node/ &hwfence_shbuf;
+
+/ {
+ model = "AYANEO Pocket S2 (Pro)";
+ compatible = "ayaneo,pocket-s2", "qcom,sm8650";
+ chassis-type = "handset";
+
+ aliases {
+ serial0 = &uart15;
+ serial1 = &uart14;
+ };
+
+ wcd939x: audio-codec {
+ compatible = "qcom,wcd9395-codec", "qcom,wcd9390-codec";
+
+ pinctrl-0 = <&wcd_default>;
+ pinctrl-names = "default";
+
+ qcom,micbias1-microvolt = <1800000>;
+ qcom,micbias2-microvolt = <1800000>;
+ qcom,micbias3-microvolt = <1800000>;
+ qcom,micbias4-microvolt = <1800000>;
+ qcom,mbhc-buttons-vthreshold-microvolt = <75000 150000 237000 500000 500000 500000 500000 500000>;
+ qcom,mbhc-headset-vthreshold-microvolt = <1700000>;
+ qcom,mbhc-headphone-vthreshold-microvolt = <50000>;
+ qcom,rx-device = <&wcd_rx>;
+ qcom,tx-device = <&wcd_tx>;
+
+ reset-gpios = <&tlmm 107 GPIO_ACTIVE_LOW>;
+
+ vdd-buck-supply = <&vreg_l15b_1p8>;
+ vdd-rxtx-supply = <&vreg_l15b_1p8>;
+ vdd-io-supply = <&vreg_l15b_1p8>;
+ vdd-mic-bias-supply = <&vreg_bob1>;
+
+ #sound-dai-cells = <1>;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ fan: fan {
+ compatible = "pwm-fan";
+
+ interrupts-extended = <&tlmm 14 IRQ_TYPE_EDGE_FALLING>;
+
+ pwms = <&pm8550_pwm 3 50000>;
+
+ fan-supply = <&fan_pwr>;
+
+ #cooling-cells = <2>;
+ cooling-levels = <0 16 32 45 60 80 105 130 155 180 205 230 255>;
+
+ pinctrl-0 = <&fan_int>, <&pwm_fan_ctrl_active>;
+ pinctrl-1 = <&pwm_fan_ctrl_sleep>;
+ pinctrl-names = "default", "sleep";
+ };
+
+ fan_pwr: fan-pwr-regulator {
+ compatible = "regulator-fixed";
+
+ regulator-name = "fan_pwr";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+
+ gpios = <&tlmm 125 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ vin-supply = <&fan_vdd>;
+
+ pinctrl-0 = <&fan_pwr_pins>;
+ pinctrl-names = "default";
+ };
+
+ fan_vdd: fan-vdd-regulator {
+ compatible = "regulator-fixed";
+
+ regulator-name = "fan_vdd";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+
+ gpios = <&tlmm 124 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ vin-supply = <&vph_pwr>;
+
+ pinctrl-0 = <&fan_vdd_pins>;
+ pinctrl-names = "default";
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+
+ pinctrl-0 = <&volume_up_n>;
+ pinctrl-names = "default";
+
+ key-volume-up {
+ label = "Volume Up";
+ linux,code = <KEY_VOLUMEUP>;
+ gpios = <&pm8550_gpios 6 GPIO_ACTIVE_LOW>;
+ debounce-interval = <15>;
+ linux,can-disable;
+ wakeup-source;
+ };
+ };
+
+ pmic-glink {
+ compatible = "qcom,sm8650-pmic-glink",
+ "qcom,sm8550-pmic-glink",
+ "qcom,pmic-glink";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ orientation-gpios = <&tlmm 29 GPIO_ACTIVE_HIGH>;
+
+ 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>;
+
+ pmic_glink_hs_in: endpoint {
+ remote-endpoint = <&usb_1_dwc3_hs>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ pmic_glink_ss_in: endpoint {
+ remote-endpoint = <&redriver_ss_out>;
+ };
+ };
+
+ port@2 {
+ reg = <2>;
+
+ pmic_glink_sbu: endpoint {
+ remote-endpoint = <&wcd_usbss_sbu_mux>;
+ };
+ };
+ };
+ };
+ };
+
+ upd720201_avdd33_reg: upd720201-avdd33-regulator {
+ compatible = "regulator-fixed";
+
+ regulator-name = "upd720201_avdd33";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+
+ gpios = <&tlmm 123 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ vin-supply = <&vph_pwr>;
+
+ pinctrl-0 = <&upd720201_avdd33>;
+ pinctrl-names = "default";
+ };
+
+ upd720201_vdd10_reg: upd720201-vdd10-regulator {
+ compatible = "regulator-fixed";
+
+ regulator-name = "upd720201_vdd10";
+ regulator-min-microvolt = <1050000>;
+ regulator-max-microvolt = <1050000>;
+
+ gpios = <&tlmm 122 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ vin-supply = <&vph_pwr>;
+
+ pinctrl-0 = <&upd720201_vdd10>;
+ pinctrl-names = "default";
+ };
+
+ upd720201_vdd33_reg: upd720201-vdd33-regulator {
+ compatible = "regulator-fixed";
+
+ regulator-name = "upd720201_vdd33";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+
+ gpios = <&tlmm 121 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ vin-supply = <&vph_pwr>;
+
+ pinctrl-0 = <&upd720201_vdd33>;
+ pinctrl-names = "default";
+ };
+
+ sound {
+ compatible = "qcom,sm8650-sndcard", "qcom,sm8450-sndcard";
+ model = "SM8650-APS2";
+ audio-routing = "SpkrLeft IN", "WSA_SPK1 OUT",
+ "SpkrRight IN", "WSA_SPK2 OUT",
+ "IN1_HPHL", "HPHL_OUT",
+ "IN2_HPHR", "HPHR_OUT",
+ "AMIC1", "MIC BIAS1",
+ "AMIC2", "MIC BIAS2",
+ "AMIC3", "MIC BIAS3",
+ "AMIC4", "MIC BIAS3",
+ "AMIC5", "MIC BIAS4",
+ "TX SWR_INPUT0", "ADC1_OUTPUT",
+ "TX SWR_INPUT1", "ADC2_OUTPUT",
+ "TX SWR_INPUT7", "DMIC1_OUTPUT",
+ "TX SWR_INPUT8", "DMIC2_OUTPUT";
+
+ wcd-playback-dai-link {
+ link-name = "WCD Playback";
+
+ codec {
+ sound-dai = <&wcd939x 0>,
+ <&swr1 0>,
+ <&lpass_rxmacro 0>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai RX_CODEC_DMA_RX_0>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ wcd-capture-dai-link {
+ link-name = "WCD Capture";
+ codec {
+ sound-dai = <&wcd939x 1>,
+ <&swr2 0>,
+ <&lpass_txmacro 0>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai TX_CODEC_DMA_TX_3>;
+ };
+
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ wsa-dai-link {
+ link-name = "WSA Playback";
+
+ codec {
+ sound-dai = <&right_spkr>,
+ <&left_spkr>,
+ <&swr3 0>,
+ <&lpass_wsa2macro 0>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai WSA_CODEC_DMA_RX_0>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ va-dai-link {
+ link-name = "VA Capture";
+
+ codec {
+ sound-dai = <&lpass_vamacro 0>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai VA_CODEC_DMA_TX_0>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ dp-dai-link {
+ link-name = "DisplayPort Playback";
+
+ codec {
+ sound-dai = <&mdss_dp0>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai DISPLAY_PORT_RX_0>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+ };
+
+ vph_pwr: vph-pwr-regulator {
+ compatible = "regulator-fixed";
+
+ regulator-name = "vph_pwr";
+ regulator-min-microvolt = <3700000>;
+ regulator-max-microvolt = <3700000>;
+
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ wcn7850-pmu {
+ compatible = "qcom,wcn7850-pmu";
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&wlan_en>, <&bt_default>;
+
+ wlan-enable-gpios = <&tlmm 16 GPIO_ACTIVE_HIGH>;
+ bt-enable-gpios = <&tlmm 17 GPIO_ACTIVE_HIGH>;
+
+ vdd-supply = <&vreg_s4i_0p85>;
+ vddio-supply = <&vreg_l15b_1p8>;
+ vddio1p2-supply = <&vreg_l3c_1p2>;
+ vddaon-supply = <&vreg_s2c_0p8>;
+ vdddig-supply = <&vreg_s3c_0p9>;
+ vddrfa1p2-supply = <&vreg_s1c_1p2>;
+ vddrfa1p8-supply = <&vreg_s6c_1p8>;
+
+ clocks = <&rpmhcc RPMH_RF_CLK1>;
+
+ regulators {
+ vreg_pmu_rfa_cmn: ldo0 {
+ regulator-name = "vreg_pmu_rfa_cmn";
+ };
+
+ vreg_pmu_aon_0p59: ldo1 {
+ regulator-name = "vreg_pmu_aon_0p59";
+ };
+
+ vreg_pmu_wlcx_0p8: ldo2 {
+ regulator-name = "vreg_pmu_wlcx_0p8";
+ };
+
+ vreg_pmu_wlmx_0p85: ldo3 {
+ regulator-name = "vreg_pmu_wlmx_0p85";
+ };
+
+ vreg_pmu_btcmx_0p85: ldo4 {
+ regulator-name = "vreg_pmu_btcmx_0p85";
+ };
+
+ vreg_pmu_rfa_0p8: ldo5 {
+ regulator-name = "vreg_pmu_rfa_0p8";
+ };
+
+ vreg_pmu_rfa_1p2: ldo6 {
+ regulator-name = "vreg_pmu_rfa_1p2";
+ };
+
+ vreg_pmu_rfa_1p8: ldo7 {
+ regulator-name = "vreg_pmu_rfa_1p8";
+ };
+
+ vreg_pmu_pcie_0p9: ldo8 {
+ regulator-name = "vreg_pmu_pcie_0p9";
+ };
+
+ vreg_pmu_pcie_1p8: ldo9 {
+ regulator-name = "vreg_pmu_pcie_1p8";
+ };
+ };
+ };
+};
+
+&apps_rsc {
+ regulators-0 {
+ compatible = "qcom,pm8550-rpmh-regulators";
+
+ vdd-bob1-supply = <&vph_pwr>;
+ vdd-bob2-supply = <&vph_pwr>;
+ vdd-l2-l13-l14-supply = <&vreg_bob1>;
+ vdd-l3-supply = <&vreg_s1c_1p2>;
+ vdd-l5-l16-supply = <&vreg_bob1>;
+ vdd-l6-l7-supply = <&vreg_bob1>;
+ vdd-l8-l9-supply = <&vreg_bob1>;
+ vdd-l11-supply = <&vreg_s1c_1p2>;
+ vdd-l12-supply = <&vreg_s6c_1p8>;
+ vdd-l15-supply = <&vreg_s6c_1p8>;
+ vdd-l17-supply = <&vreg_bob2>;
+
+ qcom,pmic-id = "b";
+
+ vreg_bob1: bob1 {
+ regulator-name = "vreg_bob1";
+ regulator-min-microvolt = <3296000>;
+ regulator-max-microvolt = <3960000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_bob2: bob2 {
+ regulator-name = "vreg_bob2";
+ regulator-min-microvolt = <2720000>;
+ regulator-max-microvolt = <3008000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l2b_3p0: ldo2 {
+ regulator-name = "vreg_l2b_3p0";
+ regulator-min-microvolt = <3008000>;
+ regulator-max-microvolt = <3008000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l5b_3p1: ldo5 {
+ regulator-name = "vreg_l5b_3p1";
+ regulator-min-microvolt = <3104000>;
+ regulator-max-microvolt = <3104000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l6b_1p8: ldo6 {
+ regulator-name = "vreg_l6b_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3008000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l7b_1p8: ldo7 {
+ regulator-name = "vreg_l7b_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3008000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l8b_1p8: ldo8 {
+ regulator-name = "vreg_l8b_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3008000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l9b_2p9: ldo9 {
+ regulator-name = "vreg_l9b_2p9";
+ regulator-min-microvolt = <2960000>;
+ regulator-max-microvolt = <3008000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l11b_1p2: ldo11 {
+ regulator-name = "vreg_l11b_1p2";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1504000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l12b_1p8: ldo12 {
+ regulator-name = "vreg_l12b_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l13b_3p0: ldo13 {
+ regulator-name = "vreg_l13b_3p0";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l14b_3p2: ldo14 {
+ regulator-name = "vreg_l14b_3p2";
+ regulator-min-microvolt = <3200000>;
+ regulator-max-microvolt = <3200000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l15b_1p8: ldo15 {
+ regulator-name = "vreg_l15b_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l16b_2p8: ldo16 {
+ regulator-name = "vreg_l16b_2p8";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ vreg_l17b_2p5: ldo17 {
+ regulator-name = "vreg_l17b_2p5";
+ regulator-min-microvolt = <2504000>;
+ regulator-max-microvolt = <2504000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+
+ regulators-1 {
+ compatible = "qcom,pm8550vs-rpmh-regulators";
+
+ vdd-l1-supply = <&vreg_s1c_1p2>;
+ vdd-l2-supply = <&vreg_s1c_1p2>;
+ vdd-l3-supply = <&vreg_s1c_1p2>;
+ vdd-s1-supply = <&vph_pwr>;
+ vdd-s2-supply = <&vph_pwr>;
+ vdd-s3-supply = <&vph_pwr>;
+ vdd-s4-supply = <&vph_pwr>;
+ vdd-s5-supply = <&vph_pwr>;
+ vdd-s6-supply = <&vph_pwr>;
+
+ qcom,pmic-id = "c";
+
+ vreg_s1c_1p2: smps1 {
+ regulator-name = "vreg_s1c_1p2";
+ regulator-min-microvolt = <1256000>;
+ regulator-max-microvolt = <1348000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s2c_0p8: smps2 {
+ regulator-name = "vreg_s2c_0p8";
+ regulator-min-microvolt = <852000>;
+ regulator-max-microvolt = <1036000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s3c_0p9: smps3 {
+ regulator-name = "vreg_s3c_0p9";
+ regulator-min-microvolt = <976000>;
+ regulator-max-microvolt = <1064000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s4c_1p2: smps4 {
+ regulator-name = "vreg_s4c_1p2";
+ regulator-min-microvolt = <1224000>;
+ regulator-max-microvolt = <1280000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s5c_0p7: smps5 {
+ regulator-name = "vreg_s5c_0p7";
+ regulator-min-microvolt = <752000>;
+ regulator-max-microvolt = <900000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s6c_1p8: smps6 {
+ regulator-name = "vreg_s6c_1p8";
+ regulator-min-microvolt = <1856000>;
+ regulator-max-microvolt = <2000000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l1c_1p2: ldo1 {
+ regulator-name = "vreg_l1c_1p2";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l3c_1p2: ldo3 {
+ regulator-name = "vreg_l3c_1p2";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ regulator-always-on;
+ regulator-boot-on;
+ };
+ };
+
+ regulators-2 {
+ compatible = "qcom,pm8550vs-rpmh-regulators";
+
+ vdd-l1-supply = <&vreg_s3c_0p9>;
+
+ qcom,pmic-id = "d";
+
+ vreg_l1d_0p88: ldo1 {
+ regulator-name = "vreg_l1d_0p88";
+ regulator-min-microvolt = <912000>;
+ regulator-max-microvolt = <920000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+
+ regulators-3 {
+ compatible = "qcom,pm8550vs-rpmh-regulators";
+
+ vdd-l3-supply = <&vreg_s3c_0p9>;
+
+ qcom,pmic-id = "e";
+
+ vreg_l3e_0p9: ldo3 {
+ regulator-name = "vreg_l3e_0p9";
+ regulator-min-microvolt = <880000>;
+ regulator-max-microvolt = <920000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+
+ regulators-4 {
+ compatible = "qcom,pm8550vs-rpmh-regulators";
+
+ vdd-l1-supply = <&vreg_s3c_0p9>;
+ vdd-l3-supply = <&vreg_s3c_0p9>;
+
+ qcom,pmic-id = "g";
+
+ vreg_l1g_0p91: ldo1 {
+ regulator-name = "vreg_l1g_0p91";
+ regulator-min-microvolt = <912000>;
+ regulator-max-microvolt = <920000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l3g_0p91: ldo3 {
+ regulator-name = "vreg_l3g_0p91";
+ regulator-min-microvolt = <880000>;
+ regulator-max-microvolt = <912000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+
+ regulators-5 {
+ compatible = "qcom,pm8550ve-rpmh-regulators";
+
+ vdd-l1-supply = <&vreg_s3c_0p9>;
+ vdd-l2-supply = <&vreg_s3c_0p9>;
+ vdd-l3-supply = <&vreg_s1c_1p2>;
+ vdd-s4-supply = <&vph_pwr>;
+
+ qcom,pmic-id = "i";
+
+ vreg_s4i_0p85: smps4 {
+ regulator-name = "vreg_s4i_0p85";
+ regulator-min-microvolt = <852000>;
+ regulator-max-microvolt = <1004000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l1i_0p88: ldo1 {
+ regulator-name = "vreg_l1i_0p88";
+ regulator-min-microvolt = <880000>;
+ regulator-max-microvolt = <912000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l2i_0p88: ldo2 {
+ regulator-name = "vreg_l2i_0p88";
+ regulator-min-microvolt = <880000>;
+ regulator-max-microvolt = <912000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l3i_1p2: ldo3 {
+ regulator-name = "vreg_l3i_0p91";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+};
+
+&cpu2_top_thermal {
+ trips {
+ cpu2_active: cpu2-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+ };
+
+ cooling-maps {
+ map {
+ trip = <&cpu2_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&cpu3_top_thermal {
+ trips {
+ cpu3_active: cpu3-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+ };
+
+ cooling-maps {
+ map {
+ trip = <&cpu3_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&cpu4_top_thermal {
+ trips {
+ cpu4_active: cpu4-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+ };
+
+ cooling-maps {
+ map {
+ trip = <&cpu4_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&cpu5_top_thermal {
+ trips {
+ cpu5_active: cpu5-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+ };
+
+ cooling-maps {
+ map {
+ trip = <&cpu5_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&cpu6_top_thermal {
+ trips {
+ cpu6_active: cpu6-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+ };
+
+ cooling-maps {
+ map {
+ trip = <&cpu6_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&cpu7_top_thermal {
+ trips {
+ cpu7_active: cpu7-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+ };
+
+ cooling-maps {
+ map {
+ trip = <&cpu7_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpi_dma1 {
+ status = "okay";
+};
+
+&gpi_dma2 {
+ status = "okay";
+};
+
+&gpu0_cooling_maps {
+ map1 {
+ trip = <&gpu0_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+};
+
+&gpu1_cooling_maps {
+ map1 {
+ trip = <&gpu1_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+};
+
+&gpu2_cooling_maps {
+ map1 {
+ trip = <&gpu2_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+};
+
+&gpu3_cooling_maps {
+ map1 {
+ trip = <&gpu3_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+};
+
+&gpu4_cooling_maps {
+ map1 {
+ trip = <&gpu4_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+};
+
+&gpu5_cooling_maps {
+ map1 {
+ trip = <&gpu5_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+};
+
+&gpu6_cooling_maps {
+ map1 {
+ trip = <&gpu6_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+};
+
+&gpu7_cooling_maps {
+ map1 {
+ trip = <&gpu7_active>;
+ cooling-device = <&fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+};
+
+&gpu0_trips {
+ gpu0_active: trip-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+};
+
+&gpu1_trips {
+ gpu1_active: trip-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+};
+
+&gpu2_trips {
+ gpu2_active: trip-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+};
+
+&gpu3_trips {
+ gpu3_active: trip-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+};
+
+&gpu4_trips {
+ gpu4_active: trip-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+};
+
+&gpu5_trips {
+ gpu5_active: trip-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+};
+
+&gpu6_trips {
+ gpu6_active: trip-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+
+};
+
+&gpu7_trips {
+ gpu7_active: trip-active {
+ temperature = <38000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+};
+
+&i2c3 {
+ clock-frequency = <100000>;
+
+ status = "okay";
+
+ wcd_usbss: typec-mux@e {
+ compatible = "qcom,wcd9395-usbss", "qcom,wcd9390-usbss";
+ reg = <0xe>;
+
+ vdd-supply = <&vreg_l15b_1p8>;
+ reset-gpios = <&tlmm 152 GPIO_ACTIVE_HIGH>;
+
+ mode-switch;
+ orientation-switch;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ wcd_usbss_sbu_mux: endpoint {
+ remote-endpoint = <&pmic_glink_sbu>;
+ };
+ };
+ };
+ };
+};
+
+&i2c6 {
+ clock-frequency = <100000>;
+
+ status = "okay";
+
+ typec-mux@1c {
+ compatible = "onnn,nb7vpq904m";
+ reg = <0x1c>;
+
+ vcc-supply = <&vreg_l15b_1p8>;
+
+ retimer-switch;
+ orientation-switch;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ redriver_ss_out: endpoint {
+ remote-endpoint = <&pmic_glink_ss_in>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ redriver_ss_in: endpoint {
+ remote-endpoint = <&usb_dp_qmpphy_out>;
+ };
+ };
+ };
+ };
+};
+
+&iris {
+ status = "okay";
+};
+
+&lpass_wsa2macro {
+ status = "okay";
+};
+
+&mdss {
+ status = "okay";
+};
+
+&mdss_dp0 {
+ status = "okay";
+};
+
+&mdss_dp0_out {
+ status = "okay";
+};
+
+&pcie0 {
+ wake-gpios = <&tlmm 96 GPIO_ACTIVE_HIGH>;
+ perst-gpios = <&tlmm 94 GPIO_ACTIVE_LOW>;
+
+ pinctrl-0 = <&pcie0_default_state>;
+ pinctrl-names = "default";
+
+ status = "okay";
+};
+
+&pcieport0 {
+ wifi@0 {
+ compatible = "pci17cb,1107";
+ reg = <0x10000 0x0 0x0 0x0 0x0>;
+
+ vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
+ vddaon-supply = <&vreg_pmu_aon_0p59>;
+ vddwlcx-supply = <&vreg_pmu_wlcx_0p8>;
+ vddwlmx-supply = <&vreg_pmu_wlmx_0p85>;
+ vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>;
+ vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>;
+ vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>;
+ vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>;
+ vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>;
+ };
+};
+
+&pcie0_phy {
+ vdda-phy-supply = <&vreg_l1i_0p88>;
+ vdda-pll-supply = <&vreg_l3i_1p2>;
+
+ status = "okay";
+};
+
+&pcie1 {
+ wake-gpios = <&tlmm 99 GPIO_ACTIVE_HIGH>;
+ perst-gpios = <&tlmm 97 GPIO_ACTIVE_LOW>;
+
+ pinctrl-0 = <&pcie1_default_state>;
+ pinctrl-names = "default";
+
+ status = "okay";
+};
+
+&pcie1_port0 {
+ /* Renesas μPD720201 PCIe USB3.0 HOST CONTROLLER */
+ usb-controller@0 {
+ compatible = "pci1912,0014";
+ reg = <0x10000 0x0 0x0 0x0 0x0>;
+
+ avdd33-supply = <&upd720201_avdd33_reg>;
+ vdd10-supply = <&upd720201_vdd10_reg>;
+ vdd33-supply = <&upd720201_vdd33_reg>;
+
+ pinctrl-0 = <&gamepad_pwr_en>;
+ pinctrl-names = "default";
+ };
+};
+
+&pcie1_phy {
+ vdda-phy-supply = <&vreg_l3e_0p9>;
+ vdda-pll-supply = <&vreg_l3i_1p2>;
+ vdda-qref-supply = <&vreg_l1i_0p88>;
+
+ status = "okay";
+};
+
+&pon_pwrkey {
+ status = "okay";
+};
+
+&pon_resin {
+ linux,code = <KEY_VOLUMEDOWN>;
+
+ status = "okay";
+};
+
+&pm8550_gpios {
+ volume_up_n: volume-up-n-state {
+ pins = "gpio6";
+ function = "normal";
+ bias-pull-up;
+ input-enable;
+ power-source = <1>;
+ };
+
+ pwm_fan_ctrl_active: pwm-fan-ctrl-active-state {
+ pins = "gpio9";
+ function = "func1";
+ output-low;
+ bias-disable;
+ power-source = <0>;
+ qcom,drive-strength = <3>; /* PMIC_GPIO_STRENGTH_LOW */
+ };
+
+ pwm_fan_ctrl_sleep: pwm-fan-ctrl-sleep-state {
+ pins = "gpio9";
+ function = "normal";
+ output-high;
+ bias-disable;
+ power-source = <0>;
+ qcom,drive-strength = <3>; /* PMIC_GPIO_STRENGTH_LOW */
+ };
+
+ sdc2_card_det_n: sdc2-card-det-state {
+ pins = "gpio12";
+ function = "normal";
+ bias-pull-up;
+ input-enable;
+ output-disable;
+ power-source = <1>; /* 1.8 V */
+ };
+};
+
+&pm8550_pwm {
+ status = "okay";
+
+ multi-led {
+ color = <LED_COLOR_ID_RGB>;
+ function = LED_FUNCTION_STATUS;
+ label = "Power Status";
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ led@1 {
+ reg = <1>;
+ color = <LED_COLOR_ID_RED>;
+ };
+
+ led@2 {
+ reg = <2>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led@3 {
+ reg = <3>;
+ color = <LED_COLOR_ID_BLUE>;
+ };
+ };
+};
+
+&pm8550b_eusb2_repeater {
+ vdd18-supply = <&vreg_l15b_1p8>;
+ vdd3-supply = <&vreg_l5b_3p1>;
+};
+
+&qup_i2c3_data_clk {
+ /* Use internal I2C pull-up */
+ bias-pull-up = <2200>;
+};
+
+&qupv3_id_0 {
+ status = "okay";
+};
+
+&qupv3_id_1 {
+ status = "okay";
+};
+
+&remoteproc_adsp {
+ firmware-name = "qcom/sm8650/ayaneo/ps2/adsp.mbn",
+ "qcom/sm8650/ayaneo/ps2/adsp_dtb.mbn";
+
+ status = "okay";
+};
+
+&remoteproc_cdsp {
+ firmware-name = "qcom/sm8650/ayaneo/ps2/cdsp.mbn",
+ "qcom/sm8650/ayaneo/ps2/cdsp_dtb.mbn";
+
+ status = "okay";
+};
+
+&reserved_memory {
+ lost_reg_mem: lost-reg-mem {
+ reg = <0 0x9b09c000 0 0x4000>;
+ no-map;
+ };
+
+ hwfence_shbuf: hwfence-shbuf@d4e23000 {
+ reg = <0 0xd4e23000 0 0x2dd000>;
+ no-map;
+ };
+
+ splash_region: splash-region {
+ label = "cont_splash_region";
+ reg = <0 0xd5100000 0 0x2b00000>;
+ no-map;
+ };
+};
+
+&sdhc_2 {
+ cd-gpios = <&pm8550_gpios 12 GPIO_ACTIVE_LOW>;
+
+ vmmc-supply = <&vreg_l9b_2p9>;
+ vqmmc-supply = <&vreg_l8b_1p8>;
+ bus-width = <4>;
+ no-sdio;
+ no-mmc;
+
+ pinctrl-0 = <&sdc2_default>, <&sdc2_card_det_n>;
+ pinctrl-1 = <&sdc2_sleep>, <&sdc2_card_det_n>;
+ pinctrl-names = "default", "sleep";
+
+ status = "okay";
+};
+
+&sleep_clk {
+ clock-frequency = <32764>;
+};
+
+&swr1 {
+ status = "okay";
+
+ /* WCD9395 RX */
+ wcd_rx: codec@0,4 {
+ compatible = "sdw20217010e00";
+ reg = <0 4>;
+
+ /*
+ * WCD9395 RX Port 1 (HPH_L/R) <=> SWR1 Port 1 (HPH_L/R)
+ * WCD9395 RX Port 2 (CLSH) <=> SWR1 Port 2 (CLSH)
+ * WCD9395 RX Port 3 (COMP_L/R) <=> SWR1 Port 3 (COMP_L/R)
+ * WCD9395 RX Port 4 (LO) <=> SWR1 Port 4 (LO)
+ * WCD9395 RX Port 5 (DSD_L/R) <=> SWR1 Port 5 (DSD_L/R)
+ * WCD9395 RX Port 6 (HIFI_PCM_L/R) <=> SWR1 Port 9 (HIFI_PCM_L/R)
+ */
+ qcom,rx-port-mapping = <1 2 3 4 5 9>;
+ };
+};
+
+&swr2 {
+ status = "okay";
+
+ /* WCD9395 TX */
+ wcd_tx: codec@0,3 {
+ compatible = "sdw20217010e00";
+ reg = <0 3>;
+
+ /*
+ * WCD9395 TX Port 1 (ADC1,2,3,4) <=> SWR2 Port 2 (TX SWR_INPUT 0,1,2,3)
+ * WCD9395 TX Port 2 (ADC3,4 & DMIC0,1) <=> SWR2 Port 2 (TX SWR_INPUT 0,1,2,3)
+ * WCD9395 TX Port 3 (DMIC0,1,2,3 & MBHC) <=> SWR2 Port 3 (TX SWR_INPUT 4,5,6,7)
+ * WCD9395 TX Port 4 (DMIC4,5,6,7) <=> SWR2 Port 4 (TX SWR_INPUT 8,9,10,11)
+ */
+ qcom,tx-port-mapping = <2 2 3 4>;
+ };
+};
+
+&swr3 {
+ status = "okay";
+
+ pinctrl-0 = <&wsa2_swr_active>, <&spkr_23_sd_n_active>;
+ pinctrl-names = "default";
+
+ /* WSA8845, Speaker Left */
+ left_spkr: speaker@0,0 {
+ compatible = "sdw20217020400";
+ reg = <0 0>;
+ #sound-dai-cells = <0>;
+ reset-gpios = <&tlmm 77 GPIO_ACTIVE_LOW>;
+ sound-name-prefix = "SpkrLeft";
+ vdd-1p8-supply = <&vreg_l15b_1p8>;
+ vdd-io-supply = <&vreg_l3c_1p2>;
+
+ /*
+ * WSA8845 Port 1 (DAC) <=> SWR3 Port 1 (SPKR_L)
+ * WSA8845 Port 2 (COMP) <=> SWR3 Port 2 (SPKR_L_COMP)
+ * WSA8845 Port 3 (BOOST) <=> SWR3 Port 3 (SPKR_L_BOOST)
+ * WSA8845 Port 4 (PBR) <=> SWR3 Port 7 (PBR)
+ * WSA8845 Port 5 (VISENSE) <=> SWR3 Port 10 (SPKR_L_VI)
+ * WSA8845 Port 6 (CPS) <=> SWR3 Port 13 (CPS)
+ */
+ qcom,port-mapping = <1 2 3 7 10 13>;
+ };
+
+ /* WSA8845, Speaker Right */
+ right_spkr: speaker@0,1 {
+ compatible = "sdw20217020400";
+ reg = <0 1>;
+ #sound-dai-cells = <0>;
+ reset-gpios = <&tlmm 77 GPIO_ACTIVE_LOW>;
+ sound-name-prefix = "SpkrRight";
+ vdd-1p8-supply = <&vreg_l15b_1p8>;
+ vdd-io-supply = <&vreg_l3c_1p2>;
+
+ /*
+ * WSA8845 Port 1 (DAC) <=> SWR3 Port 4 (SPKR_R)
+ * WSA8845 Port 2 (COMP) <=> SWR3 Port 5 (SPKR_R_COMP)
+ * WSA8845 Port 3 (BOOST) <=> SWR3 Port 6 (SPKR_R_BOOST)
+ * WSA8845 Port 4 (PBR) <=> SWR3 Port 7 (PBR)
+ * WSA8845 Port 5 (VISENSE) <=> SWR3 Port 11 (SPKR_R_VI)
+ * WSA8845 Port 6 (CPS) <=> SWR3 Port 13 (CPS)
+ */
+ qcom,port-mapping = <4 5 6 7 11 13>;
+ };
+};
+
+&tlmm {
+ /* Reserved I/Os for NFC */
+ gpio-reserved-ranges = <32 4>, <36 1>, <38 6>, <74 1>;
+
+ bt_default: bt-default-state {
+ bt-en-pins {
+ pins = "gpio17";
+ function = "gpio";
+ drive-strength = <16>;
+ bias-disable;
+ };
+
+ sw-ctrl-pins {
+ pins = "gpio18";
+ function = "gpio";
+ bias-pull-down;
+ };
+ };
+
+ fan_pwr_pins: fan-pwr-state {
+ pins = "gpio125";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+
+ fan_vdd_pins: fan-vdd-state {
+ pins = "gpio124";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+
+ fan_int: fan-int-state {
+ pins = "gpio14";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ upd720201_avdd33: upd720201-avdd33-state {
+ pins = "gpio123";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+
+ upd720201_vdd10: pd720201-vdd10-state {
+ pins = "gpio122";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+
+ upd720201_vdd33: upd720201-vdd33-state {
+ pins = "gpio121";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+
+ gamepad_pwr_en: gamepad-pwr-en-active-state {
+ pins = "gpio28";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-high;
+ };
+
+ spkr_23_sd_n_active: spkr-23-sd-n-active-state {
+ pins = "gpio77";
+ function = "gpio";
+ drive-strength = <16>;
+ bias-disable;
+ output-low;
+ };
+
+ spkr_01_sd_n_active: spkr-01-sd-n-active-state {
+ pins = "gpio21";
+ function = "gpio";
+ drive-strength = <16>;
+ bias-disable;
+ output-high;
+ };
+
+ wcd_default: wcd-reset-n-active-state {
+ pins = "gpio107";
+ function = "gpio";
+ drive-strength = <16>;
+ bias-disable;
+ output-low;
+ };
+
+ wlan_en: wlan-en-state {
+ pins = "gpio16";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-pull-down;
+ };
+};
+
+&uart14 {
+ status = "okay";
+
+ bluetooth {
+ compatible = "qcom,wcn7850-bt";
+
+ vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
+ vddaon-supply = <&vreg_pmu_aon_0p59>;
+ vddwlcx-supply = <&vreg_pmu_wlcx_0p8>;
+ vddwlmx-supply = <&vreg_pmu_wlmx_0p85>;
+ vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>;
+ vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>;
+ vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>;
+
+ max-speed = <3200000>;
+ };
+};
+
+&uart15 {
+ status = "okay";
+};
+
+&ufs_mem_hc {
+ reset-gpios = <&tlmm 210 GPIO_ACTIVE_LOW>;
+
+ vcc-supply = <&vreg_l17b_2p5>;
+ vcc-max-microamp = <1300000>;
+ vccq-supply = <&vreg_l1c_1p2>;
+ vccq-max-microamp = <1200000>;
+
+ status = "okay";
+};
+
+&ufs_mem_phy {
+ vdda-phy-supply = <&vreg_l1d_0p88>;
+ vdda-pll-supply = <&vreg_l3i_1p2>;
+
+ status = "okay";
+};
+
+/*
+ * DPAUX -> WCD9395 -> USB_SBU -> USB-C
+ * eUSB2 DP/DM -> PM85550HS -> eUSB2 DP/DM -> WCD9395 -> USB-C
+ * USB SS -> NB7VPQ904MMUTWG -> USB-C
+ */
+
+&usb_1 {
+ dr_mode = "otg";
+ usb-role-switch;
+
+ status = "okay";
+};
+
+&usb_1_dwc3_hs {
+ remote-endpoint = <&pmic_glink_hs_in>;
+};
+
+&usb_1_hsphy {
+ vdd-supply = <&vreg_l1i_0p88>;
+ vdda12-supply = <&vreg_l3i_1p2>;
+
+ phys = <&pm8550b_eusb2_repeater>;
+
+ status = "okay";
+};
+
+&usb_dp_qmpphy {
+ vdda-phy-supply = <&vreg_l3i_1p2>;
+ vdda-pll-supply = <&vreg_l3g_0p91>;
+
+ status = "okay";
+};
+
+&usb_dp_qmpphy_out {
+ remote-endpoint = <&redriver_ss_in>;
+};
+
+&xo_board {
+ clock-frequency = <76800000>;
+};
diff --git a/arch/arm64/boot/dts/qcom/sm8650.dtsi b/arch/arm64/boot/dts/qcom/sm8650.dtsi
index db769baf4d58..b533a02b3bb6 100644
--- a/arch/arm64/boot/dts/qcom/sm8650.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8650.dtsi
@@ -3917,7 +3917,7 @@ opp-32000000-4 {
};
};
- pcie@0 {
+ pcie1_port0: pcie@0 {
device_type = "pci";
reg = <0x0 0x0 0x0 0x0 0x0>;
bus-range = <0x01 0xff>;
@@ -7551,7 +7551,7 @@ cpuss3-critical {
};
};
- cpu2-top-thermal {
+ cpu2_top_thermal: cpu2-top-thermal {
thermal-sensors = <&tsens0 5>;
trips {
@@ -7575,7 +7575,7 @@ cpu2-critical {
};
};
- cpu3-top-thermal {
+ cpu3_top_thermal: cpu3-top-thermal {
thermal-sensors = <&tsens0 7>;
trips {
@@ -7599,7 +7599,7 @@ cpu3-critical {
};
};
- cpu4-top-thermal {
+ cpu4_top_thermal: cpu4-top-thermal {
thermal-sensors = <&tsens0 9>;
trips {
@@ -7623,7 +7623,7 @@ cpu4-critical {
};
};
- cpu5-top-thermal {
+ cpu5_top_thermal: cpu5-top-thermal {
thermal-sensors = <&tsens0 11>;
trips {
@@ -7647,7 +7647,7 @@ cpu5-critical {
};
};
- cpu6-top-thermal {
+ cpu6_top_thermal: cpu6-top-thermal {
thermal-sensors = <&tsens0 13>;
trips {
@@ -7689,7 +7689,7 @@ aoss1-critical {
};
};
- cpu7-top-thermal {
+ cpu7_top_thermal: cpu7-top-thermal {
thermal-sensors = <&tsens1 1>;
trips {
@@ -7952,14 +7952,14 @@ gpuss0-thermal {
thermal-sensors = <&tsens2 1>;
- cooling-maps {
+ gpu0_cooling_maps: cooling-maps {
map0 {
trip = <&gpu0_alert0>;
cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
};
- trips {
+ gpu0_trips: trips {
gpu0_alert0: trip-point0 {
temperature = <95000>;
hysteresis = <1000>;
@@ -7985,14 +7985,14 @@ gpuss1-thermal {
thermal-sensors = <&tsens2 2>;
- cooling-maps {
+ gpu1_cooling_maps: cooling-maps {
map0 {
trip = <&gpu1_alert0>;
cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
};
- trips {
+ gpu1_trips: trips {
gpu1_alert0: trip-point0 {
temperature = <95000>;
hysteresis = <1000>;
@@ -8018,14 +8018,14 @@ gpuss2-thermal {
thermal-sensors = <&tsens2 3>;
- cooling-maps {
+ gpu2_cooling_maps: cooling-maps {
map0 {
trip = <&gpu2_alert0>;
cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
};
- trips {
+ gpu2_trips: trips {
gpu2_alert0: trip-point0 {
temperature = <95000>;
hysteresis = <1000>;
@@ -8051,14 +8051,14 @@ gpuss3-thermal {
thermal-sensors = <&tsens2 4>;
- cooling-maps {
+ gpu3_cooling_maps: cooling-maps {
map0 {
trip = <&gpu3_alert0>;
cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
};
- trips {
+ gpu3_trips: trips {
gpu3_alert0: trip-point0 {
temperature = <95000>;
hysteresis = <1000>;
@@ -8084,14 +8084,14 @@ gpuss4-thermal {
thermal-sensors = <&tsens2 5>;
- cooling-maps {
+ gpu4_cooling_maps: cooling-maps {
map0 {
trip = <&gpu4_alert0>;
cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
};
- trips {
+ gpu4_trips: trips {
gpu4_alert0: trip-point0 {
temperature = <95000>;
hysteresis = <1000>;
@@ -8117,14 +8117,14 @@ gpuss5-thermal {
thermal-sensors = <&tsens2 6>;
- cooling-maps {
+ gpu5_cooling_maps: cooling-maps {
map0 {
trip = <&gpu5_alert0>;
cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
};
- trips {
+ gpu5_trips: trips {
gpu5_alert0: trip-point0 {
temperature = <95000>;
hysteresis = <1000>;
@@ -8150,14 +8150,14 @@ gpuss6-thermal {
thermal-sensors = <&tsens2 7>;
- cooling-maps {
+ gpu6_cooling_maps: cooling-maps {
map0 {
trip = <&gpu6_alert0>;
cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
};
- trips {
+ gpu6_trips: trips {
gpu6_alert0: trip-point0 {
temperature = <95000>;
hysteresis = <1000>;
@@ -8183,14 +8183,14 @@ gpuss7-thermal {
thermal-sensors = <&tsens2 8>;
- cooling-maps {
+ gpu7_cooling_maps: cooling-maps {
map0 {
trip = <&gpu7_alert0>;
cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
};
- trips {
+ gpu7_trips: trips {
gpu7_alert0: trip-point0 {
temperature = <95000>;
hysteresis = <1000>;
--
2.34.1
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH v2 7/7] arm64: dts: qcom: add basic devicetree for Ayaneo Pocket S2 gaming console
2026-01-27 9:57 ` [PATCH v2 7/7] arm64: dts: qcom: add basic devicetree for Ayaneo Pocket S2 gaming console Neil Armstrong
@ 2026-01-28 11:24 ` Konrad Dybcio
0 siblings, 0 replies; 26+ messages in thread
From: Konrad Dybcio @ 2026-01-28 11:24 UTC (permalink / raw)
To: Neil Armstrong, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Greg Kroah-Hartman,
Geert Uytterhoeven, Magnus Damm, Bartosz Golaszewski,
Manivannan Sadhasivam, Bjorn Helgaas
Cc: devicetree, linux-kernel, linux-arm-msm, dri-devel, freedreno,
linux-usb, linux-renesas-soc, linux-pci, KancyJoe
On 1/27/26 10:57 AM, Neil Armstrong wrote:
> From: KancyJoe <kancy2333@outlook.com>
>
> Add initial Device Tree for the Ayaneo Pocket S2 gaming console based
> on the Qualcomm Snapdragon 8 Gen 3 platform.
>
> The design is similar to a phone without the modem, the game control
> is handled via a standalone controller connected to a PCIe USB
> controller.
>
> Display panel support will be added in a second time.
>
> Signed-off-by: KancyJoe <kancy2333@outlook.com>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
[...]
> + va-dai-link {
> + link-name = "VA Capture";
> +
> + codec {
> + sound-dai = <&lpass_vamacro 0>;
> + };
> +
> + cpu {
> + sound-dai = <&q6apmbedai VA_CODEC_DMA_TX_0>;
> + };
> +
> + platform {
> + sound-dai = <&q6apm>;
> + };
> + };
> +
> + dp-dai-link {
'd'p-dai-link < 'v'a-dai-link
[...]
> +&pm8550_gpios {
> + volume_up_n: volume-up-n-state {
> + pins = "gpio6";
> + function = "normal";
> + bias-pull-up;
> + input-enable;
> + power-source = <1>;
> + };
> +
> + pwm_fan_ctrl_active: pwm-fan-ctrl-active-state {
> + pins = "gpio9";
> + function = "func1";
> + output-low;
> + bias-disable;
> + power-source = <0>;
> + qcom,drive-strength = <3>; /* PMIC_GPIO_STRENGTH_LOW */
This is defined in include/dt-bindings/pinctrl/qcom,pmic-gpio.h,
you can just use it
[...]
> + upd720201_avdd33: upd720201-avdd33-state {
> + pins = "gpio123";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + output-low;
You should be able to drop all the output-low/high properties
since the device driver that references these GPIOs already asserts
that
otherwise lgtm
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 26+ messages in thread