1 | // SPDX-License-Identifier: GPL-2.0+ |
2 | /* |
3 | * USB of helper code |
4 | */ |
5 | |
6 | #include <linux/kernel.h> |
7 | #include <linux/module.h> |
8 | #include <linux/of.h> |
9 | #include <linux/usb/of.h> |
10 | #include <linux/usb/otg.h> |
11 | |
12 | static const char *const usbphy_modes[] = { |
13 | [USBPHY_INTERFACE_MODE_UNKNOWN] = "" , |
14 | [USBPHY_INTERFACE_MODE_UTMI] = "utmi" , |
15 | [USBPHY_INTERFACE_MODE_UTMIW] = "utmi_wide" , |
16 | [USBPHY_INTERFACE_MODE_ULPI] = "ulpi" , |
17 | [USBPHY_INTERFACE_MODE_SERIAL] = "serial" , |
18 | [USBPHY_INTERFACE_MODE_HSIC] = "hsic" , |
19 | }; |
20 | |
21 | /** |
22 | * of_usb_get_phy_mode - Get phy mode for given device_node |
23 | * @np: Pointer to the given device_node |
24 | * |
25 | * The function gets phy interface string from property 'phy_type', |
26 | * and returns the corresponding enum usb_phy_interface |
27 | */ |
28 | enum usb_phy_interface of_usb_get_phy_mode(struct device_node *np) |
29 | { |
30 | const char *phy_type; |
31 | int err, i; |
32 | |
33 | err = of_property_read_string(np, propname: "phy_type" , out_string: &phy_type); |
34 | if (err < 0) |
35 | return USBPHY_INTERFACE_MODE_UNKNOWN; |
36 | |
37 | for (i = 0; i < ARRAY_SIZE(usbphy_modes); i++) |
38 | if (!strcmp(phy_type, usbphy_modes[i])) |
39 | return i; |
40 | |
41 | return USBPHY_INTERFACE_MODE_UNKNOWN; |
42 | } |
43 | EXPORT_SYMBOL_GPL(of_usb_get_phy_mode); |
44 | |