Loading Documentation/devicetree/bindings/usb/generic.txt 0 → 100644 +24 −0 Original line number Diff line number Diff line Generic USB Properties Optional properties: - maximum-speed: tells USB controllers we want to work up to a certain speed. Valid arguments are "super-speed", "high-speed", "full-speed" and "low-speed". In case this isn't passed via DT, USB controllers should default to their maximum HW capability. - dr_mode: tells Dual-Role USB controllers that we want to work on a particular mode. Valid arguments are "host", "peripheral" and "otg". In case this attribute isn't passed via DT, USB DRD controllers should default to OTG. This is an attribute to a USB controller such as: dwc3@4a030000 { compatible = "synopsys,dwc3"; reg = <0x4a030000 0xcfff>; interrupts = <0 92 4> usb-phy = <&usb2_phy>, <&usb3,phy>; maximum-speed = "super-speed"; dr_mode = "otg"; }; drivers/usb/usb-common.c +38 −11 Original line number Diff line number Diff line Loading @@ -43,9 +43,7 @@ const char *usb_otg_state_string(enum usb_otg_state state) } EXPORT_SYMBOL_GPL(usb_otg_state_string); const char *usb_speed_string(enum usb_device_speed speed) { static const char *const names[] = { static const char *const speed_names[] = { [USB_SPEED_UNKNOWN] = "UNKNOWN", [USB_SPEED_LOW] = "low-speed", [USB_SPEED_FULL] = "full-speed", Loading @@ -54,9 +52,11 @@ const char *usb_speed_string(enum usb_device_speed speed) [USB_SPEED_SUPER] = "super-speed", }; if (speed < 0 || speed >= ARRAY_SIZE(names)) const char *usb_speed_string(enum usb_device_speed speed) { if (speed < 0 || speed >= ARRAY_SIZE(speed_names)) speed = USB_SPEED_UNKNOWN; return names[speed]; return speed_names[speed]; } EXPORT_SYMBOL_GPL(usb_speed_string); Loading Loading @@ -112,6 +112,33 @@ enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np) return USB_DR_MODE_UNKNOWN; } EXPORT_SYMBOL_GPL(of_usb_get_dr_mode); /** * of_usb_get_maximum_speed - Get maximum requested speed for a given USB * controller. * @np: Pointer to the given device_node * * The function gets the maximum speed string from property "maximum-speed", * and returns the corresponding enum usb_device_speed. */ enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np) { const char *maximum_speed; int err; int i; err = of_property_read_string(np, "maximum-speed", &maximum_speed); if (err < 0) return USB_SPEED_UNKNOWN; for (i = 0; i < ARRAY_SIZE(speed_names); i++) if (strcmp(maximum_speed, speed_names[i]) == 0) return i; return USB_SPEED_UNKNOWN; } EXPORT_SYMBOL_GPL(of_usb_get_maximum_speed); #endif MODULE_LICENSE("GPL"); include/linux/usb/of.h +8 −0 Original line number Diff line number Diff line Loading @@ -7,16 +7,24 @@ #ifndef __LINUX_USB_OF_H #define __LINUX_USB_OF_H #include <linux/usb/ch9.h> #include <linux/usb/otg.h> #include <linux/usb/phy.h> #if IS_ENABLED(CONFIG_OF) enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np); enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np); #else static inline enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np) { return USB_DR_MODE_UNKNOWN; } static inline enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np) { return USB_SPEED_UNKNOWN; } #endif #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_PHY) Loading Loading
Documentation/devicetree/bindings/usb/generic.txt 0 → 100644 +24 −0 Original line number Diff line number Diff line Generic USB Properties Optional properties: - maximum-speed: tells USB controllers we want to work up to a certain speed. Valid arguments are "super-speed", "high-speed", "full-speed" and "low-speed". In case this isn't passed via DT, USB controllers should default to their maximum HW capability. - dr_mode: tells Dual-Role USB controllers that we want to work on a particular mode. Valid arguments are "host", "peripheral" and "otg". In case this attribute isn't passed via DT, USB DRD controllers should default to OTG. This is an attribute to a USB controller such as: dwc3@4a030000 { compatible = "synopsys,dwc3"; reg = <0x4a030000 0xcfff>; interrupts = <0 92 4> usb-phy = <&usb2_phy>, <&usb3,phy>; maximum-speed = "super-speed"; dr_mode = "otg"; };
drivers/usb/usb-common.c +38 −11 Original line number Diff line number Diff line Loading @@ -43,9 +43,7 @@ const char *usb_otg_state_string(enum usb_otg_state state) } EXPORT_SYMBOL_GPL(usb_otg_state_string); const char *usb_speed_string(enum usb_device_speed speed) { static const char *const names[] = { static const char *const speed_names[] = { [USB_SPEED_UNKNOWN] = "UNKNOWN", [USB_SPEED_LOW] = "low-speed", [USB_SPEED_FULL] = "full-speed", Loading @@ -54,9 +52,11 @@ const char *usb_speed_string(enum usb_device_speed speed) [USB_SPEED_SUPER] = "super-speed", }; if (speed < 0 || speed >= ARRAY_SIZE(names)) const char *usb_speed_string(enum usb_device_speed speed) { if (speed < 0 || speed >= ARRAY_SIZE(speed_names)) speed = USB_SPEED_UNKNOWN; return names[speed]; return speed_names[speed]; } EXPORT_SYMBOL_GPL(usb_speed_string); Loading Loading @@ -112,6 +112,33 @@ enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np) return USB_DR_MODE_UNKNOWN; } EXPORT_SYMBOL_GPL(of_usb_get_dr_mode); /** * of_usb_get_maximum_speed - Get maximum requested speed for a given USB * controller. * @np: Pointer to the given device_node * * The function gets the maximum speed string from property "maximum-speed", * and returns the corresponding enum usb_device_speed. */ enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np) { const char *maximum_speed; int err; int i; err = of_property_read_string(np, "maximum-speed", &maximum_speed); if (err < 0) return USB_SPEED_UNKNOWN; for (i = 0; i < ARRAY_SIZE(speed_names); i++) if (strcmp(maximum_speed, speed_names[i]) == 0) return i; return USB_SPEED_UNKNOWN; } EXPORT_SYMBOL_GPL(of_usb_get_maximum_speed); #endif MODULE_LICENSE("GPL");
include/linux/usb/of.h +8 −0 Original line number Diff line number Diff line Loading @@ -7,16 +7,24 @@ #ifndef __LINUX_USB_OF_H #define __LINUX_USB_OF_H #include <linux/usb/ch9.h> #include <linux/usb/otg.h> #include <linux/usb/phy.h> #if IS_ENABLED(CONFIG_OF) enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np); enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np); #else static inline enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np) { return USB_DR_MODE_UNKNOWN; } static inline enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np) { return USB_SPEED_UNKNOWN; } #endif #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_PHY) Loading