Lines Matching +full:usb +full:- +full:ss
1 // SPDX-License-Identifier: GPL-2.0+
3 * usb/gadget/config.c -- simplify building config descriptors
16 #include <linux/usb/ch9.h>
17 #include <linux/usb/gadget.h>
18 #include <linux/usb/composite.h>
19 #include <linux/usb/otg.h>
22 * usb_descriptor_fillbuf - fill buffer with descriptors
40 return -EINVAL; in usb_descriptor_fillbuf()
44 unsigned len = (*src)->bLength; in usb_descriptor_fillbuf()
47 return -EINVAL; in usb_descriptor_fillbuf()
49 buflen -= len; in usb_descriptor_fillbuf()
52 return dest - (u8 *)buf; in usb_descriptor_fillbuf()
57 * usb_copy_descriptors - copy a vector of USB descriptors
58 * @src: null-terminated vector to copy
61 * This makes a copy of a vector of USB descriptors. Its primary use
79 bytes += (*tmp)->bLength; in usb_copy_descriptors()
94 memcpy(mem, *src, (*src)->bLength); in usb_copy_descriptors()
97 mem += (*src)->bLength; in usb_copy_descriptors()
109 struct usb_descriptor_header **ss, in usb_assign_descriptors() argument
112 /* super-speed-plus descriptor falls back to super-speed one, in usb_assign_descriptors()
118 ssp = ss; in usb_assign_descriptors()
121 f->fs_descriptors = usb_copy_descriptors(fs); in usb_assign_descriptors()
122 if (!f->fs_descriptors) in usb_assign_descriptors()
126 f->hs_descriptors = usb_copy_descriptors(hs); in usb_assign_descriptors()
127 if (!f->hs_descriptors) in usb_assign_descriptors()
130 if (ss) { in usb_assign_descriptors()
131 f->ss_descriptors = usb_copy_descriptors(ss); in usb_assign_descriptors()
132 if (!f->ss_descriptors) in usb_assign_descriptors()
136 f->ssp_descriptors = usb_copy_descriptors(ssp); in usb_assign_descriptors()
137 if (!f->ssp_descriptors) in usb_assign_descriptors()
143 return -ENOMEM; in usb_assign_descriptors()
149 usb_free_descriptors(f->fs_descriptors); in usb_free_all_descriptors()
150 f->fs_descriptors = NULL; in usb_free_all_descriptors()
151 usb_free_descriptors(f->hs_descriptors); in usb_free_all_descriptors()
152 f->hs_descriptors = NULL; in usb_free_all_descriptors()
153 usb_free_descriptors(f->ss_descriptors); in usb_free_all_descriptors()
154 f->ss_descriptors = NULL; in usb_free_all_descriptors()
155 usb_free_descriptors(f->ssp_descriptors); in usb_free_all_descriptors()
156 f->ssp_descriptors = NULL; in usb_free_all_descriptors()
166 if (gadget->otg_caps && (gadget->otg_caps->otg_rev >= 0x0200)) in usb_otg_descriptor_alloc()
181 struct usb_otg_caps *otg_caps = gadget->otg_caps; in usb_otg_descriptor_init()
185 return -EINVAL; in usb_otg_descriptor_init()
187 if (otg_caps && otg_caps->otg_rev) { in usb_otg_descriptor_init()
188 if (otg_caps->hnp_support) in usb_otg_descriptor_init()
190 if (otg_caps->srp_support) in usb_otg_descriptor_init()
192 if (otg_caps->adp_support && (otg_caps->otg_rev >= 0x0200)) in usb_otg_descriptor_init()
198 if (otg_caps && (otg_caps->otg_rev >= 0x0200)) { in usb_otg_descriptor_init()
200 otg20_desc->bLength = sizeof(struct usb_otg20_descriptor); in usb_otg_descriptor_init()
201 otg20_desc->bDescriptorType = USB_DT_OTG; in usb_otg_descriptor_init()
202 otg20_desc->bmAttributes = otg_attributes; in usb_otg_descriptor_init()
203 otg20_desc->bcdOTG = cpu_to_le16(otg_caps->otg_rev); in usb_otg_descriptor_init()
206 otg1x_desc->bLength = sizeof(struct usb_otg_descriptor); in usb_otg_descriptor_init()
207 otg1x_desc->bDescriptorType = USB_DT_OTG; in usb_otg_descriptor_init()
208 otg1x_desc->bmAttributes = otg_attributes; in usb_otg_descriptor_init()