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_gadget_config_buf - builts a complete configuration descriptor
63 * @desc: Null-terminated vector of pointers to the descriptors (interface,
88 return -EINVAL; in usb_gadget_config_buf()
93 length - USB_DT_CONFIG_SIZE, desc); in usb_gadget_config_buf()
98 return -EINVAL; in usb_gadget_config_buf()
101 cp->bLength = USB_DT_CONFIG_SIZE; in usb_gadget_config_buf()
102 cp->bDescriptorType = USB_DT_CONFIG; in usb_gadget_config_buf()
103 cp->wTotalLength = cpu_to_le16(len); in usb_gadget_config_buf()
104 cp->bmAttributes |= USB_CONFIG_ATT_ONE; in usb_gadget_config_buf()
110 * usb_copy_descriptors - copy a vector of USB descriptors
111 * @src: null-terminated vector to copy
114 * This makes a copy of a vector of USB descriptors. Its primary use
132 bytes += (*tmp)->bLength; in usb_copy_descriptors()
147 memcpy(mem, *src, (*src)->bLength); in usb_copy_descriptors()
150 mem += (*src)->bLength; in usb_copy_descriptors()
162 struct usb_descriptor_header **ss, in usb_assign_descriptors() argument
165 /* super-speed-plus descriptor falls back to super-speed one, in usb_assign_descriptors()
171 ssp = ss; in usb_assign_descriptors()
174 f->fs_descriptors = usb_copy_descriptors(fs); in usb_assign_descriptors()
175 if (!f->fs_descriptors) in usb_assign_descriptors()
179 f->hs_descriptors = usb_copy_descriptors(hs); in usb_assign_descriptors()
180 if (!f->hs_descriptors) in usb_assign_descriptors()
183 if (ss) { in usb_assign_descriptors()
184 f->ss_descriptors = usb_copy_descriptors(ss); in usb_assign_descriptors()
185 if (!f->ss_descriptors) in usb_assign_descriptors()
189 f->ssp_descriptors = usb_copy_descriptors(ssp); in usb_assign_descriptors()
190 if (!f->ssp_descriptors) in usb_assign_descriptors()
196 return -ENOMEM; in usb_assign_descriptors()
202 usb_free_descriptors(f->fs_descriptors); in usb_free_all_descriptors()
203 f->fs_descriptors = NULL; in usb_free_all_descriptors()
204 usb_free_descriptors(f->hs_descriptors); in usb_free_all_descriptors()
205 f->hs_descriptors = NULL; in usb_free_all_descriptors()
206 usb_free_descriptors(f->ss_descriptors); in usb_free_all_descriptors()
207 f->ss_descriptors = NULL; in usb_free_all_descriptors()
208 usb_free_descriptors(f->ssp_descriptors); in usb_free_all_descriptors()
209 f->ssp_descriptors = NULL; in usb_free_all_descriptors()
219 if (gadget->otg_caps && (gadget->otg_caps->otg_rev >= 0x0200)) in usb_otg_descriptor_alloc()
234 struct usb_otg_caps *otg_caps = gadget->otg_caps; in usb_otg_descriptor_init()
238 return -EINVAL; in usb_otg_descriptor_init()
240 if (otg_caps && otg_caps->otg_rev) { in usb_otg_descriptor_init()
241 if (otg_caps->hnp_support) in usb_otg_descriptor_init()
243 if (otg_caps->srp_support) in usb_otg_descriptor_init()
245 if (otg_caps->adp_support && (otg_caps->otg_rev >= 0x0200)) in usb_otg_descriptor_init()
251 if (otg_caps && (otg_caps->otg_rev >= 0x0200)) { in usb_otg_descriptor_init()
253 otg20_desc->bLength = sizeof(struct usb_otg20_descriptor); in usb_otg_descriptor_init()
254 otg20_desc->bDescriptorType = USB_DT_OTG; in usb_otg_descriptor_init()
255 otg20_desc->bmAttributes = otg_attributes; in usb_otg_descriptor_init()
256 otg20_desc->bcdOTG = cpu_to_le16(otg_caps->otg_rev); in usb_otg_descriptor_init()
259 otg1x_desc->bLength = sizeof(struct usb_otg_descriptor); in usb_otg_descriptor_init()
260 otg1x_desc->bDescriptorType = USB_DT_OTG; in usb_otg_descriptor_init()
261 otg1x_desc->bmAttributes = otg_attributes; in usb_otg_descriptor_init()