0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/of.h>
0011 #include <linux/of_platform.h>
0012 #include <linux/usb/of.h>
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 struct device_node *usb_of_get_device_node(struct usb_device *hub, int port1)
0026 {
0027 struct device_node *node;
0028 u32 reg;
0029
0030 for_each_child_of_node(hub->dev.of_node, node) {
0031 if (of_property_read_u32(node, "reg", ®))
0032 continue;
0033
0034 if (reg == port1)
0035 return node;
0036 }
0037
0038 return NULL;
0039 }
0040 EXPORT_SYMBOL_GPL(usb_of_get_device_node);
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057 bool usb_of_has_combined_node(struct usb_device *udev)
0058 {
0059 struct usb_device_descriptor *ddesc = &udev->descriptor;
0060 struct usb_config_descriptor *cdesc;
0061
0062 if (!udev->dev.of_node)
0063 return false;
0064
0065 switch (ddesc->bDeviceClass) {
0066 case USB_CLASS_PER_INTERFACE:
0067 case USB_CLASS_HUB:
0068 if (ddesc->bNumConfigurations == 1) {
0069 cdesc = &udev->config->desc;
0070 if (cdesc->bNumInterfaces == 1)
0071 return true;
0072 }
0073 }
0074
0075 return false;
0076 }
0077 EXPORT_SYMBOL_GPL(usb_of_has_combined_node);
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091 struct device_node *
0092 usb_of_get_interface_node(struct usb_device *udev, u8 config, u8 ifnum)
0093 {
0094 struct device_node *node;
0095 u32 reg[2];
0096
0097 for_each_child_of_node(udev->dev.of_node, node) {
0098 if (of_property_read_u32_array(node, "reg", reg, 2))
0099 continue;
0100
0101 if (reg[0] == ifnum && reg[1] == config)
0102 return node;
0103 }
0104
0105 return NULL;
0106 }
0107 EXPORT_SYMBOL_GPL(usb_of_get_interface_node);