]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mach-snapdragon: implement ft_board_setup() for USB role selection
authorCaleb Connolly <caleb.connolly@linaro.org>
Thu, 18 Apr 2024 17:25:49 +0000 (18:25 +0100)
committerCaleb Connolly <caleb.connolly@linaro.org>
Tue, 23 Apr 2024 11:29:30 +0000 (13:29 +0200)
Some Qualcomm boards have only one USB controller which is muxed between
the type-c port and an internal USB hub for type-A and ethernet. We
modify the DT for these to force them to host mode in U-Boot. However in
Linux DRD role switching is supported (required, even). Use
ft_board_setup() to adjust the dr_mode property for these boards.

While we're here, define pr_fmt for this file so we can more easily
identify log messages.

Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
arch/arm/mach-snapdragon/of_fixup.c

index 3f7ac227bd090e208ffdd2d763e1cd7c008b6d11..55368dd43b661d4c14e6cb3ff302b55633e99b71 100644 (file)
@@ -17,6 +17,8 @@
  *   Author: Caleb Connolly <caleb.connolly@linaro.org>
  */
 
+#define pr_fmt(fmt) "of_fixup: " fmt
+
 #include <dt-bindings/input/linux-event-codes.h>
 #include <dm/of_access.h>
 #include <dm/of.h>
@@ -153,3 +155,21 @@ void qcom_of_fixup_nodes(void)
        time_call(fixup_usb_nodes);
        time_call(fixup_power_domains);
 }
+
+int ft_board_setup(void *blob, struct bd_info __maybe_unused *bd)
+{
+       struct fdt_header *fdt = blob;
+       int node;
+
+       /* We only want to do this fix-up for the RB1 board, quick return for all others */
+       if (!fdt_node_check_compatible(fdt, 0, "qcom,qrb4210-rb2"))
+               return 0;
+
+       fdt_for_each_node_by_compatible(node, blob, 0, "snps,dwc3") {
+               log_debug("%s: Setting 'dr_mode' to OTG\n", fdt_get_name(blob, node, NULL));
+               fdt_setprop_string(fdt, node, "dr_mode", "otg");
+               break;
+       }
+
+       return 0;
+}