|
@@ -13,7 +13,9 @@
|
|
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/module.h>
|
|
#include <linux/module.h>
|
|
|
|
+#include <linux/of.h>
|
|
#include <linux/usb/ch9.h>
|
|
#include <linux/usb/ch9.h>
|
|
|
|
+#include <linux/usb/of.h>
|
|
#include <linux/usb/otg.h>
|
|
#include <linux/usb/otg.h>
|
|
|
|
|
|
const char *usb_otg_state_string(enum usb_otg_state state)
|
|
const char *usb_otg_state_string(enum usb_otg_state state)
|
|
@@ -79,4 +81,37 @@ const char *usb_state_string(enum usb_device_state state)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(usb_state_string);
|
|
EXPORT_SYMBOL_GPL(usb_state_string);
|
|
|
|
|
|
|
|
+#ifdef CONFIG_OF
|
|
|
|
+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",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * of_usb_get_dr_mode - Get dual role mode for given device_node
|
|
|
|
+ * @np: Pointer to the given device_node
|
|
|
|
+ *
|
|
|
|
+ * The function gets phy interface string from property 'dr_mode',
|
|
|
|
+ * and returns the correspondig enum usb_dr_mode
|
|
|
|
+ */
|
|
|
|
+enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
|
|
|
|
+{
|
|
|
|
+ const char *dr_mode;
|
|
|
|
+ int err, i;
|
|
|
|
+
|
|
|
|
+ err = of_property_read_string(np, "dr_mode", &dr_mode);
|
|
|
|
+ if (err < 0)
|
|
|
|
+ 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;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL_GPL(of_usb_get_dr_mode);
|
|
|
|
+#endif
|
|
|
|
+
|
|
MODULE_LICENSE("GPL");
|
|
MODULE_LICENSE("GPL");
|