From: Ricardo Pardini <ricardo@pardini.net>
The Radxa Zero2 has an FUSB302 controller on i2c3 at address 0x22 and
INT# wired to GPIOA-13.
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
---
.../boot/dts/amlogic/meson-g12b-radxa-zero2.dts | 32 ++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dts
index a37776d22b09e..125b064a15c1e 100644
--- a/arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dts
@@ -364,12 +364,44 @@ hdmi_tx_tmds_out: endpoint {
};
};
+/* Also exposed on the 40-pin header: SDA pin 3, SCL pin 5 */
+&i2c3 {
+ pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+
+ fusb302@22 {
+ compatible = "fcs,fusb302";
+ reg = <0x22>;
+
+ pinctrl-0 = <&fusb302_irq_pins>;
+ pinctrl-names = "default";
+ interrupt-parent = <&gpio_intc>;
+ interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
+
+ vbus-supply = <&ao_5v>;
+
+ status = "okay";
+ };
+};
+
&ir {
status = "disabled";
pinctrl-0 = <&remote_input_ao_pins>;
pinctrl-names = "default";
};
+&periphs_pinctrl {
+ fusb302_irq_pins: fusb302-irq {
+ mux {
+ groups = "GPIOA_13";
+ function = "gpio_periphs";
+ bias-pull-up;
+ output-disable;
+ };
+ };
+};
+
&pwm_ab {
pinctrl-0 = <&pwm_a_e_pins>;
pinctrl-names = "default";
--
2.52.0
On 14/01/2026 23:48, Ricardo Pardini via B4 Relay wrote:
> };
>
> +/* Also exposed on the 40-pin header: SDA pin 3, SCL pin 5 */
> +&i2c3 {
> + pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
> + pinctrl-names = "default";
> + status = "okay";
> +
> + fusb302@22 {
Node names should be generic. See also an explanation and list of
examples (not exhaustive) in DT specification:
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
If you cannot find a name matching your device, please check in kernel
sources for similar cases or you can grow the spec (via pull request to
DT spec repo).
> + compatible = "fcs,fusb302";
> + reg = <0x22>;
> +
> + pinctrl-0 = <&fusb302_irq_pins>;
> + pinctrl-names = "default";
> + interrupt-parent = <&gpio_intc>;
> + interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
> +
> + vbus-supply = <&ao_5v>;
> +
> + status = "okay";
Not needed or was it disabled anywhere?
Best regards,
Krzysztof
Hi,
On 1/14/26 23:48, Ricardo Pardini via B4 Relay wrote:
> From: Ricardo Pardini <ricardo@pardini.net>
>
> The Radxa Zero2 has an FUSB302 controller on i2c3 at address 0x22 and
> INT# wired to GPIOA-13.
>
> Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
> ---
> .../boot/dts/amlogic/meson-g12b-radxa-zero2.dts | 32 ++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dts
> index a37776d22b09e..125b064a15c1e 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dts
> +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dts
> @@ -364,12 +364,44 @@ hdmi_tx_tmds_out: endpoint {
> };
> };
>
> +/* Also exposed on the 40-pin header: SDA pin 3, SCL pin 5 */
> +&i2c3 {
> + pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
> + pinctrl-names = "default";
> + status = "okay";
> +
> + fusb302@22 {
> + compatible = "fcs,fusb302";
> + reg = <0x22>;
> +
> + pinctrl-0 = <&fusb302_irq_pins>;
> + pinctrl-names = "default";
> + interrupt-parent = <&gpio_intc>;
> + interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
OK it seems I did read too fast, this should be 74 !
S922X Datasheet (same as A311D for this)
Table 6-32 GPIO Interrupt Sources
---------------------------------------------
| Input Mux Location | Description |
---------------------------------------------
| [76:61] | gpioA[15:0] |
---------------------------------------------
So gpioA13 ==> 74
> +
> + vbus-supply = <&ao_5v>;
> +
> + status = "okay";
And I get:
DTC [C] arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dtb
arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dtb: fusb302@22 (fcs,fusb302): 'connector' is a required property
from schema $id: http://devicetree.org/schemas/usb/fcs,fusb302.yaml#
Please add a minimal connector, like:
+ connector {
+ compatible = "usb-c-connector";
+ label = "USB-C";
+ data-role = "host";
+ power-role = "source";
+ source-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)>;
+ };
I'll drop this change from my tree.
And you may also add support for the superspeed mux to switch the USB3 polarity.
I have a prototype at https://gitlab.com/superna9999/linux/-/tree/topic/amlogic/radxa-zero2/fusb302?ref_type=heads
Neil
> + };
> +};
> +
> &ir {
> status = "disabled";
> pinctrl-0 = <&remote_input_ao_pins>;
> pinctrl-names = "default";
> };
>
> +&periphs_pinctrl {
> + fusb302_irq_pins: fusb302-irq {
> + mux {
> + groups = "GPIOA_13";
> + function = "gpio_periphs";
> + bias-pull-up;
> + output-disable;
> + };
> + };
> +};
> +
> &pwm_ab {
> pinctrl-0 = <&pwm_a_e_pins>;
> pinctrl-names = "default";
>
Hi Neil,
On 15/01/2026 14:00, Neil Armstrong wrote:
>> The Radxa Zero2 has an FUSB302 controller on i2c3 at address 0x22 and
>> INT# wired to GPIOA-13.
>>
>> + interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
>
> OK it seems I did read too fast, this should be 74 !
>
> S922X Datasheet (same as A311D for this)
>
> Table 6-32 GPIO Interrupt Sources
>
> ---------------------------------------------
> | Input Mux Location | Description |
> ---------------------------------------------
> | [76:61] | gpioA[15:0] |
> ---------------------------------------------
>
> So gpioA13 ==> 74
Indeed. Sorry for this.
>> +
>> + vbus-supply = <&ao_5v>;
>> +
>> + status = "okay";
>
> And I get:
>
> DTC [C] arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dtb
> arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dtb: fusb302@22
> (fcs,fusb302): 'connector' is a required property
> from schema $id: http://devicetree.org/schemas/usb/
> fcs,fusb302.yaml#
>
> Please add a minimal connector, like:
>
> + connector {
> + compatible = "usb-c-connector";
> + label = "USB-C";
> + data-role = "host";
> + power-role = "source";
> + source-pdos = <PDO_FIXED(5000, 2000,
> PDO_FIXED_USB_COMM)>;
> + };
>
> I'll drop this change from my tree.
Again, my bad. My intention here was a "minimal" description, mostly to
reserve 0x22 so end-users can run `i2cdetect` or such on the 40-pin
exposed i2c3 and not be surprised. Guess I didn't run dtbs_check hard
enough and missed the required connector.
>
> And you may also add support for the superspeed mux to switch the USB3
> polarity.
>
> I have a prototype at https://gitlab.com/superna9999/linux/-/tree/topic/
> amlogic/radxa-zero2/fusb302?ref_type=heads
I'll try your prototype. I had no idea it actually had those capabilities.
Do you think it is worth to resend this with just the fixed 74 pin & the
minimal connector as you suggested? Now that I've seen your work, a "add
FUSB302" that does nothing (while being capable) feels frivolous and
confusing.
Thanks,
Ricardo
On 1/15/26 14:59, Ricardo Pardini wrote:
> Hi Neil,
>
> On 15/01/2026 14:00, Neil Armstrong wrote:
>
>>> The Radxa Zero2 has an FUSB302 controller on i2c3 at address 0x22 and
>>> INT# wired to GPIOA-13.
>>>
>>> + interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
>>
>> OK it seems I did read too fast, this should be 74 !
>>
>> S922X Datasheet (same as A311D for this)
>>
>> Table 6-32 GPIO Interrupt Sources
>>
>> ---------------------------------------------
>> | Input Mux Location | Description |
>> ---------------------------------------------
>> | [76:61] | gpioA[15:0] |
>> ---------------------------------------------
>>
>> So gpioA13 ==> 74
>
> Indeed. Sorry for this.
>
>>> +
>>> + vbus-supply = <&ao_5v>;
>>> +
>>> + status = "okay";
>>
>> And I get:
>>
>> DTC [C] arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dtb
>> arch/arm64/boot/dts/amlogic/meson-g12b-radxa-zero2.dtb: fusb302@22 (fcs,fusb302): 'connector' is a required property
>> from schema $id: http://devicetree.org/schemas/usb/ fcs,fusb302.yaml#
>>
>> Please add a minimal connector, like:
>>
>> + connector {
>> + compatible = "usb-c-connector";
>> + label = "USB-C";
>> + data-role = "host";
>> + power-role = "source";
>> + source-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)>;
>> + };
>>
>> I'll drop this change from my tree.
>
> Again, my bad. My intention here was a "minimal" description, mostly to reserve 0x22 so end-users can run `i2cdetect` or such on the 40-pin exposed i2c3 and not be surprised. Guess I didn't run dtbs_check hard enough and missed the required connector.
>
>>
>> And you may also add support for the superspeed mux to switch the USB3 polarity.
>>
>> I have a prototype at https://gitlab.com/superna9999/linux/-/tree/topic/ amlogic/radxa-zero2/fusb302?ref_type=heads
>
> I'll try your prototype. I had no idea it actually had those capabilities.
>
> Do you think it is worth to resend this with just the fixed 74 pin & the minimal connector as you suggested? Now that I've seen your work, a "add FUSB302" that does nothing (while being capable) feels frivolous and confusing.
Yes please resent with the interrupt fix and minimal connector, I'll rebase my work on top. It still needs some testing, but I'll be happy if you test it on your side aswell.
Neil
>
> Thanks,
> Ricardo
>
>
>
© 2016 - 2026 Red Hat, Inc.