// SPDX-License-Identifier: LGPL-2.1+ /* * Copyright (C) 2003 David Brownell */ #include <linux/errno.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/list.h> #include <linux/string.h> #include <linux/device.h> #include <linux/nls.h> #include <linux/usb/ch9.h> #include <linux/usb/gadget.h> /** * usb_gadget_get_string - fill out a string descriptor * @table: of c strings encoded using UTF-8 * @id: string id, from low byte of wValue in get string descriptor * @buf: at least 256 bytes, must be 16-bit aligned * * Finds the UTF-8 string matching the ID, and converts it into a * string descriptor in utf16-le. * Returns length of descriptor (always even) or negative errno * * If your driver needs stings in multiple languages, you'll probably * "switch (wIndex) { ... }" in your ep0 string descriptor logic, * using this routine after choosing which set of UTF-8 strings to use. * Note that US-ASCII is a strict subset of UTF-8; any string bytes with * the eighth bit set will be multibyte UTF-8 characters, not ISO-8859/1 * characters (which are also widely used in C strings). */ int usb_gadget_get_string (const struct usb_gadget_strings *table, int id, u8 *buf) { … } EXPORT_SYMBOL_GPL(…); /** * usb_validate_langid - validate usb language identifiers * @langid: usb language identifier * * Returns true for valid language identifier, otherwise false. */ bool usb_validate_langid(u16 langid) { … } EXPORT_SYMBOL_GPL(…);