]> git.sur5r.net Git - u-boot/commitdiff
drivers: usb: musb: add ti musb misc driver for wrapper
authorMugunthan V N <mugunthanvnm@ti.com>
Thu, 17 Nov 2016 09:08:08 +0000 (14:38 +0530)
committerSimon Glass <sjg@chromium.org>
Sat, 3 Dec 2016 04:03:56 +0000 (21:03 -0700)
Add a misc driver for MUSB wrapper, so that based on dr_mode the
USB devices can bind to USB host or USB device drivers.

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
drivers/usb/musb-new/Kconfig
drivers/usb/musb-new/Makefile
drivers/usb/musb-new/ti-musb.c [new file with mode: 0644]

index c264859b6c0ce17baa8a75c464ab411d667111df..caba42c26fc1d509b0e95be0996ff40748178ab9 100644 (file)
@@ -14,6 +14,15 @@ config USB_MUSB_GADGET
        help
          Enables the MUSB USB dual-role controller in gadget mode.
 
+config USB_MUSB_TI
+       bool "Enable TI OTG USB controller"
+       depends on DM_USB
+       default n
+       help
+         Say y here to enable support for the dual role high
+         speed USB controller based on the Mentor Graphics
+         silicon IP.
+
 if USB_MUSB_HOST || USB_MUSB_GADGET
 
 config USB_MUSB_PIC32
index df1c3c8a45b1c7088e9315d940f610fcb8274060..296f230fbf376160a0408d4a8201d0a8c10e89e1 100644 (file)
@@ -12,6 +12,7 @@ obj-$(CONFIG_USB_MUSB_AM35X) += am35x.o
 obj-$(CONFIG_USB_MUSB_OMAP2PLUS) += omap2430.o
 obj-$(CONFIG_USB_MUSB_PIC32) += pic32.o
 obj-$(CONFIG_USB_MUSB_SUNXI) += sunxi.o
+obj-$(CONFIG_USB_MUSB_TI) += ti-musb.o
 
 ccflags-y := $(call cc-option,-Wno-unused-variable) \
                $(call cc-option,-Wno-unused-but-set-variable) \
diff --git a/drivers/usb/musb-new/ti-musb.c b/drivers/usb/musb-new/ti-musb.c
new file mode 100644 (file)
index 0000000..cf0e296
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * MISC driver for TI MUSB Glue.
+ *
+ * (C) Copyright 2016
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+#include <common.h>
+#include <command.h>
+#include <console.h>
+#include <dm.h>
+#include <linux/usb/otg.h>
+#include <dm/device-internal.h>
+#include <dm/lists.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_DM_USB
+
+static int ti_musb_wrapper_bind(struct udevice *parent)
+{
+       const void *fdt = gd->fdt_blob;
+       int node;
+       int ret;
+
+       for (node = fdt_first_subnode(fdt, parent->of_offset); node > 0;
+            node = fdt_next_subnode(fdt, node)) {
+               struct udevice *dev;
+               const char *name = fdt_get_name(fdt, node, NULL);
+               enum usb_dr_mode dr_mode;
+               struct driver *drv;
+
+               if (strncmp(name, "usb@", 4))
+                       continue;
+
+               dr_mode = usb_get_dr_mode(node);
+               switch (dr_mode) {
+               case USB_DR_MODE_PERIPHERAL:
+                       /* Bind MUSB device */
+                       break;
+               case USB_DR_MODE_HOST:
+                       /* Bind MUSB host */
+                       break;
+               default:
+                       break;
+               };
+       }
+       return 0;
+}
+
+static const struct udevice_id ti_musb_ids[] = {
+       { .compatible = "ti,am33xx-usb" },
+       { }
+};
+
+U_BOOT_DRIVER(ti_musb_wrapper) = {
+       .name   = "ti-musb-wrapper",
+       .id     = UCLASS_MISC,
+       .of_match = ti_musb_ids,
+       .bind = ti_musb_wrapper_bind,
+};
+
+#endif /* CONFIG_DM_USB */