drivers: usb: common: add common code for usb drivers to use
authorMugunthan V N <mugunthanvnm@ti.com>
Tue, 12 Apr 2016 10:31:19 +0000 (16:01 +0530)
committerSimon Glass <sjg@chromium.org>
Tue, 17 May 2016 15:54:43 +0000 (09:54 -0600)
Add common usb code which usb drivers makes use of it.

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/usb/common/Makefile
drivers/usb/common/common.c [new file with mode: 0644]
include/linux/usb/otg.h

index 2f3d43d9395c3f2b2c546eadb6cab4c91f659163..2f46d38d2b31ec9c82ca371954f45155923d7264 100644 (file)
@@ -3,5 +3,6 @@
 # SPDX-License-Identifier:      GPL-2.0+
 #
 
+obj-$(CONFIG_DM_USB) += common.o
 obj-$(CONFIG_USB_EHCI_FSL) += fsl-dt-fixup.o
 obj-$(CONFIG_USB_XHCI_FSL) += fsl-dt-fixup.o
diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
new file mode 100644 (file)
index 0000000..35c2dc1
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Provides code common for host and device side USB.
+ *
+ * (C) Copyright 2016
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <common.h>
+#include <libfdt.h>
+#include <linux/usb/otg.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static const char *const usb_dr_modes[] = {
+       [USB_DR_MODE_UNKNOWN]           = "",
+       [USB_DR_MODE_HOST]              = "host",
+       [USB_DR_MODE_PERIPHERAL]        = "peripheral",
+       [USB_DR_MODE_OTG]               = "otg",
+};
+
+enum usb_dr_mode usb_get_dr_mode(int node)
+{
+       const void *fdt = gd->fdt_blob;
+       const char *dr_mode;
+       int i;
+
+       dr_mode = fdt_getprop(fdt, node, "dr_mode", NULL);
+       if (!dr_mode) {
+               error("usb dr_mode not found\n");
+               return USB_DR_MODE_UNKNOWN;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(usb_dr_modes); i++)
+               if (!strcmp(dr_mode, usb_dr_modes[i]))
+                       return i;
+
+       return USB_DR_MODE_UNKNOWN;
+}
index 7ec5550f4bfaed064b175f90ddbb5c8aea430b69..8f8ac6aeefe3ea72c9ce191ee800aeb1426cabbb 100644 (file)
@@ -17,4 +17,13 @@ enum usb_dr_mode {
        USB_DR_MODE_OTG,
 };
 
+/**
+ * usb_get_dr_mode() - Get dual role mode for given device
+ * @node: Node offset to the given device
+ *
+ * The function gets phy interface string from property 'dr_mode',
+ * and returns the correspondig enum usb_dr_mode
+ */
+enum usb_dr_mode usb_get_dr_mode(int node);
+
 #endif /* __LINUX_USB_OTG_H */