Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: gadget: make sure each gadget is using same index for Product, Serial,…

The index in usb_string array is defined by the gadget. The gadget can
choose which index entry it assigns for the serial number and which the
product name. The gadget has just to ensure that the descriptor contains
the proper string id which is assigned by composite.
If the composite layer knows the index of the "default" information
which will be overwritten by module parameters, it can be used later to
overwrite it.

Acked-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>

authored by

Sebastian Andrzej Siewior and committed by
Felipe Balbi
276e2e4f 7d16e8d3

+95 -118
+5 -7
drivers/usb/gadget/acm_ms.c
··· 90 90 91 91 /* string IDs are assigned dynamically */ 92 92 93 - #define STRING_MANUFACTURER_IDX 0 94 - #define STRING_PRODUCT_IDX 1 95 - 96 93 static char manufacturer[50]; 97 94 98 95 static struct usb_string strings_dev[] = { 99 - [STRING_MANUFACTURER_IDX].s = manufacturer, 100 - [STRING_PRODUCT_IDX].s = DRIVER_DESC, 96 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 97 + [USB_GADGET_PRODUCT_IDX].s = DRIVER_DESC, 98 + [USB_GADGET_SERIAL_IDX].s = "", 101 99 { } /* end of list */ 102 100 }; 103 101 ··· 194 196 status = usb_string_ids_tab(cdev, strings_dev); 195 197 if (status < 0) 196 198 goto fail1; 197 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 198 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 199 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 200 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 199 201 200 202 /* register our configuration */ 201 203 status = usb_add_config(cdev, &acm_ms_config_driver, acm_ms_do_config);
+5 -7
drivers/usb/gadget/audio.c
··· 33 33 34 34 /* string IDs are assigned dynamically */ 35 35 36 - #define STRING_MANUFACTURER_IDX 0 37 - #define STRING_PRODUCT_IDX 1 38 - 39 36 static char manufacturer[50]; 40 37 41 38 static struct usb_string strings_dev[] = { 42 - [STRING_MANUFACTURER_IDX].s = manufacturer, 43 - [STRING_PRODUCT_IDX].s = DRIVER_DESC, 39 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 40 + [USB_GADGET_PRODUCT_IDX].s = DRIVER_DESC, 41 + [USB_GADGET_SERIAL_IDX].s = "", 44 42 { } /* end of list */ 45 43 }; 46 44 ··· 168 170 status = usb_string_ids_tab(cdev, strings_dev); 169 171 if (status < 0) 170 172 goto fail; 171 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 172 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 173 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 174 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 173 175 174 176 status = usb_add_config(cdev, &audio_config_driver, audio_do_config); 175 177 if (status < 0)
+5 -8
drivers/usb/gadget/cdc2.c
··· 90 90 91 91 92 92 /* string IDs are assigned dynamically */ 93 - 94 - #define STRING_MANUFACTURER_IDX 0 95 - #define STRING_PRODUCT_IDX 1 96 - 97 93 static char manufacturer[50]; 98 94 99 95 static struct usb_string strings_dev[] = { 100 - [STRING_MANUFACTURER_IDX].s = manufacturer, 101 - [STRING_PRODUCT_IDX].s = DRIVER_DESC, 96 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 97 + [USB_GADGET_PRODUCT_IDX].s = DRIVER_DESC, 98 + [USB_GADGET_SERIAL_IDX].s = "", 102 99 { } /* end of list */ 103 100 }; 104 101 ··· 194 197 status = usb_string_ids_tab(cdev, strings_dev); 195 198 if (status < 0) 196 199 goto fail1; 197 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 198 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 200 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 201 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 199 202 200 203 /* register our configuration */ 201 204 status = usb_add_config(cdev, &cdc_config_driver, cdc_do_config);
+5 -9
drivers/usb/gadget/ether.c
··· 193 193 NULL, 194 194 }; 195 195 196 - 197 196 /* string IDs are assigned dynamically */ 198 - 199 - #define STRING_MANUFACTURER_IDX 0 200 - #define STRING_PRODUCT_IDX 1 201 - 202 197 static char manufacturer[50]; 203 198 204 199 static struct usb_string strings_dev[] = { 205 - [STRING_MANUFACTURER_IDX].s = manufacturer, 206 - [STRING_PRODUCT_IDX].s = PREFIX DRIVER_DESC, 200 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 201 + [USB_GADGET_PRODUCT_IDX].s = PREFIX DRIVER_DESC, 202 + [USB_GADGET_SERIAL_IDX].s = "", 207 203 { } /* end of list */ 208 204 }; 209 205 ··· 345 349 status = usb_string_ids_tab(cdev, strings_dev); 346 350 if (status < 0) 347 351 goto fail; 348 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 349 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 352 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 353 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 350 354 351 355 /* register our configuration(s); RNDIS first, if it's used */ 352 356 if (has_rndis()) {
+6 -2
drivers/usb/gadget/g_ffs.c
··· 116 116 117 117 /* String IDs are assigned dynamically */ 118 118 static struct usb_string gfs_strings[] = { 119 + [USB_GADGET_MANUFACTURER_IDX].s = "", 120 + [USB_GADGET_PRODUCT_IDX].s = "", 121 + [USB_GADGET_SERIAL_IDX].s = "", 119 122 #ifdef CONFIG_USB_FUNCTIONFS_RNDIS 120 123 { .s = "FunctionFS + RNDIS" }, 121 124 #endif ··· 372 369 373 370 for (i = 0; i < ARRAY_SIZE(gfs_configurations); ++i) { 374 371 struct gfs_configuration *c = gfs_configurations + i; 372 + int sid = USB_GADGET_FIRST_AVAIL_IDX + i; 375 373 376 - c->c.label = gfs_strings[i].s; 377 - c->c.iConfiguration = gfs_strings[i].id; 374 + c->c.label = gfs_strings[sid].s; 375 + c->c.iConfiguration = gfs_strings[sid].id; 378 376 c->c.bConfigurationValue = 1 + i; 379 377 c->c.bmAttributes = USB_CONFIG_ATT_SELFPOWER; 380 378
+6 -7
drivers/usb/gadget/gmidi.c
··· 84 84 85 85 /* string IDs are assigned dynamically */ 86 86 87 - #define STRING_MANUFACTURER_IDX 0 88 - #define STRING_PRODUCT_IDX 1 89 - #define STRING_DESCRIPTION_IDX 2 87 + #define STRING_DESCRIPTION_IDX USB_GADGET_FIRST_AVAIL_IDX 90 88 91 89 static struct usb_device_descriptor device_desc = { 92 90 .bLength = USB_DT_DEVICE_SIZE, ··· 99 101 }; 100 102 101 103 static struct usb_string strings_dev[] = { 102 - [STRING_MANUFACTURER_IDX].s = "Grey Innovation", 103 - [STRING_PRODUCT_IDX].s = "MIDI Gadget", 104 + [USB_GADGET_MANUFACTURER_IDX].s = "Grey Innovation", 105 + [USB_GADGET_PRODUCT_IDX].s = "MIDI Gadget", 106 + [USB_GADGET_SERIAL_IDX].s = "", 104 107 [STRING_DESCRIPTION_IDX].s = "MIDI", 105 108 { } /* end of list */ 106 109 }; ··· 144 145 status = usb_string_ids_tab(cdev, strings_dev); 145 146 if (status < 0) 146 147 return status; 147 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 148 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 148 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 149 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 149 150 midi_config.iConfiguration = strings_dev[STRING_DESCRIPTION_IDX].id; 150 151 151 152 gcnum = usb_gadget_controller_number(gadget);
+5 -8
drivers/usb/gadget/hid.c
··· 91 91 92 92 93 93 /* string IDs are assigned dynamically */ 94 - 95 - #define STRING_MANUFACTURER_IDX 0 96 - #define STRING_PRODUCT_IDX 1 97 - 98 94 static char manufacturer[50]; 99 95 100 96 static struct usb_string strings_dev[] = { 101 - [STRING_MANUFACTURER_IDX].s = manufacturer, 102 - [STRING_PRODUCT_IDX].s = DRIVER_DESC, 97 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 98 + [USB_GADGET_PRODUCT_IDX].s = DRIVER_DESC, 99 + [USB_GADGET_SERIAL_IDX].s = "", 103 100 { } /* end of list */ 104 101 }; 105 102 ··· 178 181 status = usb_string_ids_tab(cdev, strings_dev); 179 182 if (status < 0) 180 183 return status; 181 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 182 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 184 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 185 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 183 186 184 187 /* register our configuration */ 185 188 status = usb_add_config(cdev, &config_driver, do_config);
+4 -9
drivers/usb/gadget/multi.c
··· 109 109 110 110 111 111 enum { 112 - #ifdef CONFIG_USB_G_MULTI_RNDIS 113 - MULTI_STRING_RNDIS_CONFIG_IDX, 114 - #endif 115 - #ifdef CONFIG_USB_G_MULTI_CDC 112 + MULTI_STRING_RNDIS_CONFIG_IDX = USB_GADGET_FIRST_AVAIL_IDX, 116 113 MULTI_STRING_CDC_CONFIG_IDX, 117 - #endif 118 114 }; 119 115 120 116 static struct usb_string strings_dev[] = { 121 - #ifdef CONFIG_USB_G_MULTI_RNDIS 117 + [USB_GADGET_MANUFACTURER_IDX].s = "", 118 + [USB_GADGET_PRODUCT_IDX].s = "", 119 + [USB_GADGET_SERIAL_IDX].s = "", 122 120 [MULTI_STRING_RNDIS_CONFIG_IDX].s = "Multifunction with RNDIS", 123 - #endif 124 - #ifdef CONFIG_USB_G_MULTI_CDC 125 121 [MULTI_STRING_CDC_CONFIG_IDX].s = "Multifunction with CDC ECM", 126 - #endif 127 122 { } /* end of list */ 128 123 }; 129 124
+5 -8
drivers/usb/gadget/ncm.c
··· 97 97 98 98 99 99 /* string IDs are assigned dynamically */ 100 - 101 - #define STRING_MANUFACTURER_IDX 0 102 - #define STRING_PRODUCT_IDX 1 103 - 104 100 static char manufacturer[50]; 105 101 106 102 static struct usb_string strings_dev[] = { 107 - [STRING_MANUFACTURER_IDX].s = manufacturer, 108 - [STRING_PRODUCT_IDX].s = DRIVER_DESC, 103 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 104 + [USB_GADGET_PRODUCT_IDX].s = DRIVER_DESC, 105 + [USB_GADGET_SERIAL_IDX].s = "", 109 106 { } /* end of list */ 110 107 }; 111 108 ··· 181 184 status = usb_string_ids_tab(cdev, strings_dev); 182 185 if (status < 0) 183 186 goto fail; 184 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 185 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 187 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 188 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 186 189 187 190 status = usb_add_config(cdev, &ncm_config_driver, 188 191 ncm_do_config);
+6 -7
drivers/usb/gadget/nokia.c
··· 56 56 57 57 /* string IDs are assigned dynamically */ 58 58 59 - #define STRING_MANUFACTURER_IDX 0 60 - #define STRING_PRODUCT_IDX 1 61 - #define STRING_DESCRIPTION_IDX 2 59 + #define STRING_DESCRIPTION_IDX USB_GADGET_FIRST_AVAIL_IDX 62 60 63 61 static char manufacturer_nokia[] = "Nokia"; 64 62 static const char product_nokia[] = NOKIA_LONG_NAME; 65 63 static const char description_nokia[] = "PC-Suite Configuration"; 66 64 67 65 static struct usb_string strings_dev[] = { 68 - [STRING_MANUFACTURER_IDX].s = manufacturer_nokia, 69 - [STRING_PRODUCT_IDX].s = NOKIA_LONG_NAME, 66 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer_nokia, 67 + [USB_GADGET_PRODUCT_IDX].s = NOKIA_LONG_NAME, 68 + [USB_GADGET_SERIAL_IDX].s = "", 70 69 [STRING_DESCRIPTION_IDX].s = description_nokia, 71 70 { } /* end of list */ 72 71 }; ··· 167 168 status = usb_string_ids_tab(cdev, strings_dev); 168 169 if (status < 0) 169 170 goto err_usb; 170 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 171 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 171 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 172 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 172 173 status = strings_dev[STRING_DESCRIPTION_IDX].id; 173 174 nokia_config_500ma_driver.iConfiguration = status; 174 175 nokia_config_100ma_driver.iConfiguration = status;
+6 -10
drivers/usb/gadget/printer.c
··· 139 139 * descriptors are built on demand. 140 140 */ 141 141 142 - #define STRING_MANUFACTURER 0 143 - #define STRING_PRODUCT 1 144 - #define STRING_SERIALNUM 2 145 - 146 142 /* holds our biggest descriptor */ 147 143 #define USB_DESC_BUFSIZE 256 148 144 #define USB_BUFSIZE 8192 ··· 246 250 247 251 /* static strings, in UTF-8 */ 248 252 static struct usb_string strings [] = { 249 - [STRING_MANUFACTURER].s = manufacturer, 250 - [STRING_PRODUCT].s = product_desc, 251 - [STRING_SERIALNUM].s = serial_num, 253 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 254 + [USB_GADGET_PRODUCT_IDX].s = product_desc, 255 + [USB_GADGET_SERIAL_IDX].s = serial_num, 252 256 { } /* end of list */ 253 257 }; 254 258 ··· 1257 1261 ret = usb_string_ids_tab(cdev, strings); 1258 1262 if (ret < 0) 1259 1263 return ret; 1260 - device_desc.iManufacturer = strings[STRING_MANUFACTURER].id; 1261 - device_desc.iProduct = strings[STRING_PRODUCT].id; 1262 - device_desc.iSerialNumber = strings[STRING_SERIALNUM].id; 1264 + device_desc.iManufacturer = strings[USB_GADGET_MANUFACTURER_IDX].id; 1265 + device_desc.iProduct = strings[USB_GADGET_PRODUCT_IDX].id; 1266 + device_desc.iSerialNumber = strings[USB_GADGET_SERIAL_IDX].id; 1263 1267 1264 1268 ret = usb_add_config(cdev, &printer_cfg_driver, printer_bind_config); 1265 1269 if (ret)
+6 -7
drivers/usb/gadget/serial.c
··· 59 59 60 60 /* string IDs are assigned dynamically */ 61 61 62 - #define STRING_MANUFACTURER_IDX 0 63 - #define STRING_PRODUCT_IDX 1 64 - #define STRING_DESCRIPTION_IDX 2 62 + #define STRING_DESCRIPTION_IDX USB_GADGET_FIRST_AVAIL_IDX 65 63 66 64 static char manufacturer[50]; 67 65 68 66 static struct usb_string strings_dev[] = { 69 - [STRING_MANUFACTURER_IDX].s = manufacturer, 70 - [STRING_PRODUCT_IDX].s = GS_VERSION_NAME, 67 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 68 + [USB_GADGET_PRODUCT_IDX].s = GS_VERSION_NAME, 69 + [USB_GADGET_SERIAL_IDX].s = "", 71 70 [STRING_DESCRIPTION_IDX].s = NULL /* updated; f(use_acm) */, 72 71 { } /* end of list */ 73 72 }; ··· 178 179 status = usb_string_ids_tab(cdev, strings_dev); 179 180 if (status < 0) 180 181 goto fail; 181 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 182 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 182 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 183 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 183 184 status = strings_dev[STRING_DESCRIPTION_IDX].id; 184 185 serial_config_driver.iConfiguration = status; 185 186
+7 -6
drivers/usb/gadget/tcm_usb_gadget.c
··· 2210 2210 }; 2211 2211 2212 2212 static struct usb_string usbg_us_strings[] = { 2213 - [USB_G_STR_MANUFACTOR].s = "Target Manufactor", 2214 - [USB_G_STR_PRODUCT].s = "Target Product", 2215 - [USB_G_STR_SERIAL].s = "000000000001", 2213 + [USB_GADGET_MANUFACTURER_IDX].s = "Target Manufactor", 2214 + [USB_GADGET_PRODUCT_IDX].s = "Target Product", 2215 + [USB_GADGET_SERIAL_IDX].s = "000000000001", 2216 2216 [USB_G_STR_CONFIG].s = "default config", 2217 2217 [USB_G_STR_INT_UAS].s = "USB Attached SCSI", 2218 2218 [USB_G_STR_INT_BBB].s = "Bulk Only Transport", ··· 2431 2431 return ret; 2432 2432 2433 2433 usbg_device_desc.iManufacturer = 2434 - usbg_us_strings[USB_G_STR_MANUFACTOR].id; 2435 - usbg_device_desc.iProduct = usbg_us_strings[USB_G_STR_PRODUCT].id; 2436 - usbg_device_desc.iSerialNumber = usbg_us_strings[USB_G_STR_SERIAL].id; 2434 + usbg_us_strings[USB_GADGET_MANUFACTURER_IDX].id; 2435 + usbg_device_desc.iProduct = usbg_us_strings[USB_GADGET_PRODUCT_IDX].id; 2436 + usbg_device_desc.iSerialNumber = 2437 + usbg_us_strings[USB_GADGET_SERIAL_IDX].id; 2437 2438 usbg_config_driver.iConfiguration = 2438 2439 usbg_us_strings[USB_G_STR_CONFIG].id; 2439 2440
+1 -4
drivers/usb/gadget/tcm_usb_gadget.h
··· 17 17 #define UASP_SS_EP_COMP_NUM_STREAMS (1 << UASP_SS_EP_COMP_LOG_STREAMS) 18 18 19 19 enum { 20 - USB_G_STR_MANUFACTOR, 21 - USB_G_STR_PRODUCT, 22 - USB_G_STR_SERIAL, 23 - USB_G_STR_CONFIG, 20 + USB_G_STR_CONFIG = USB_GADGET_FIRST_AVAIL_IDX, 24 21 USB_G_STR_INT_UAS, 25 22 USB_G_STR_INT_BBB, 26 23 };
+6 -7
drivers/usb/gadget/webcam.c
··· 45 45 46 46 /* string IDs are assigned dynamically */ 47 47 48 - #define STRING_MANUFACTURER_IDX 0 49 - #define STRING_PRODUCT_IDX 1 50 - #define STRING_DESCRIPTION_IDX 2 48 + #define STRING_DESCRIPTION_IDX USB_GADGET_FIRST_AVAIL_IDX 51 49 52 50 static struct usb_string webcam_strings[] = { 53 - [STRING_MANUFACTURER_IDX].s = webcam_vendor_label, 54 - [STRING_PRODUCT_IDX].s = webcam_product_label, 51 + [USB_GADGET_MANUFACTURER_IDX].s = webcam_vendor_label, 52 + [USB_GADGET_PRODUCT_IDX].s = webcam_product_label, 53 + [USB_GADGET_SERIAL_IDX].s = "", 55 54 [STRING_DESCRIPTION_IDX].s = webcam_config_label, 56 55 { } 57 56 }; ··· 359 360 if (ret < 0) 360 361 goto error; 361 362 webcam_device_descriptor.iManufacturer = 362 - webcam_strings[STRING_MANUFACTURER_IDX].id; 363 + webcam_strings[USB_GADGET_MANUFACTURER_IDX].id; 363 364 webcam_device_descriptor.iProduct = 364 - webcam_strings[STRING_PRODUCT_IDX].id; 365 + webcam_strings[USB_GADGET_PRODUCT_IDX].id; 365 366 webcam_config_driver.iConfiguration = 366 367 webcam_strings[STRING_DESCRIPTION_IDX].id; 367 368
+6 -11
drivers/usb/gadget/zero.c
··· 139 139 #endif 140 140 141 141 /* string IDs are assigned dynamically */ 142 - 143 - #define STRING_MANUFACTURER_IDX 0 144 - #define STRING_PRODUCT_IDX 1 145 - #define STRING_SERIAL_IDX 2 146 - 147 142 static char manufacturer[50]; 148 143 149 144 /* default serial number takes at least two packets */ 150 145 static char serial[] = "0123456789.0123456789.0123456789"; 151 146 152 147 static struct usb_string strings_dev[] = { 153 - [STRING_MANUFACTURER_IDX].s = manufacturer, 154 - [STRING_PRODUCT_IDX].s = longname, 155 - [STRING_SERIAL_IDX].s = serial, 148 + [USB_GADGET_MANUFACTURER_IDX].s = manufacturer, 149 + [USB_GADGET_PRODUCT_IDX].s = longname, 150 + [USB_GADGET_SERIAL_IDX].s = serial, 156 151 { } /* end of list */ 157 152 }; 158 153 ··· 269 274 if (status < 0) 270 275 return status; 271 276 272 - device_desc.iManufacturer = strings_dev[STRING_MANUFACTURER_IDX].id; 273 - device_desc.iProduct = strings_dev[STRING_PRODUCT_IDX].id; 274 - device_desc.iSerialNumber = strings_dev[STRING_SERIAL_IDX].id; 277 + device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 278 + device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 279 + device_desc.iSerialNumber = strings_dev[USB_GADGET_SERIAL_IDX].id; 275 280 276 281 setup_timer(&autoresume_timer, zero_autoresume, (unsigned long) cdev); 277 282
+11 -1
include/linux/usb/composite.h
··· 248 248 void usb_remove_config(struct usb_composite_dev *, 249 249 struct usb_configuration *); 250 250 251 + /* predefined index for usb_composite_driver */ 252 + enum { 253 + USB_GADGET_MANUFACTURER_IDX = 0, 254 + USB_GADGET_PRODUCT_IDX, 255 + USB_GADGET_SERIAL_IDX, 256 + USB_GADGET_FIRST_AVAIL_IDX, 257 + }; 258 + 251 259 /** 252 260 * struct usb_composite_driver - groups configurations into a gadget 253 261 * @name: For diagnostics, identifies the driver. ··· 269 261 * @dev: Template descriptor for the device, including default device 270 262 * identifiers. 271 263 * @strings: tables of strings, keyed by identifiers assigned during @bind 272 - * and language IDs provided in control requests 264 + * and language IDs provided in control requests. Note: The first entries 265 + * are predefined. The first entry that may be used is 266 + * USB_GADGET_FIRST_AVAIL_IDX 273 267 * @max_speed: Highest speed the driver supports. 274 268 * @needs_serial: set to 1 if the gadget needs userspace to provide 275 269 * a serial number. If one is not provided, warning will be printed.