diff options
author | Michael Grzeschik <m.grzeschik@pengutronix.de> | 2013-06-13 10:59:55 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-06-17 16:47:09 -0400 |
commit | 1c9af65357a309b60d78a442bd61d27cad458d00 (patch) | |
tree | 5768aa043e4597b4691fcebe8bc7706487379ce8 /drivers/usb/usb-common.c | |
parent | 2e270412968d961ecde347343ffa67dfe39f6c95 (diff) |
usb: add devicetree helpers for determining dr_mode and phy_type
This adds two little devicetree helper functions for determining the
dr_mode (host, peripheral, otg) and phy_type (utmi, ulpi,...) from
the devicetree.
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Acked-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/usb-common.c')
-rw-r--r-- | drivers/usb/usb-common.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/usb/usb-common.c b/drivers/usb/usb-common.c index 0db0a919d72b..675384dabfe9 100644 --- a/drivers/usb/usb-common.c +++ b/drivers/usb/usb-common.c | |||
@@ -13,7 +13,9 @@ | |||
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/of.h> | ||
16 | #include <linux/usb/ch9.h> | 17 | #include <linux/usb/ch9.h> |
18 | #include <linux/usb/of.h> | ||
17 | #include <linux/usb/otg.h> | 19 | #include <linux/usb/otg.h> |
18 | 20 | ||
19 | const char *usb_otg_state_string(enum usb_otg_state state) | 21 | 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) | |||
79 | } | 81 | } |
80 | EXPORT_SYMBOL_GPL(usb_state_string); | 82 | EXPORT_SYMBOL_GPL(usb_state_string); |
81 | 83 | ||
84 | #ifdef CONFIG_OF | ||
85 | static const char *const usb_dr_modes[] = { | ||
86 | [USB_DR_MODE_UNKNOWN] = "", | ||
87 | [USB_DR_MODE_HOST] = "host", | ||
88 | [USB_DR_MODE_PERIPHERAL] = "peripheral", | ||
89 | [USB_DR_MODE_OTG] = "otg", | ||
90 | }; | ||
91 | |||
92 | /** | ||
93 | * of_usb_get_dr_mode - Get dual role mode for given device_node | ||
94 | * @np: Pointer to the given device_node | ||
95 | * | ||
96 | * The function gets phy interface string from property 'dr_mode', | ||
97 | * and returns the correspondig enum usb_dr_mode | ||
98 | */ | ||
99 | enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np) | ||
100 | { | ||
101 | const char *dr_mode; | ||
102 | int err, i; | ||
103 | |||
104 | err = of_property_read_string(np, "dr_mode", &dr_mode); | ||
105 | if (err < 0) | ||
106 | return USB_DR_MODE_UNKNOWN; | ||
107 | |||
108 | for (i = 0; i < ARRAY_SIZE(usb_dr_modes); i++) | ||
109 | if (!strcmp(dr_mode, usb_dr_modes[i])) | ||
110 | return i; | ||
111 | |||
112 | return USB_DR_MODE_UNKNOWN; | ||
113 | } | ||
114 | EXPORT_SYMBOL_GPL(of_usb_get_dr_mode); | ||
115 | #endif | ||
116 | |||
82 | MODULE_LICENSE("GPL"); | 117 | MODULE_LICENSE("GPL"); |