diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2016-10-10 23:02:51 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-10-10 23:02:51 -0400 |
| commit | 3873691e5ab34fa26948643d038a2b98c4437298 (patch) | |
| tree | 5327469194c2167830bce38b56a618b754cdbeea /drivers/usb/core | |
| parent | c2050a454c7f123d7a57fa1d76ff61bd43643abb (diff) | |
| parent | aadfa8019e8114539cfa0b1eb2e5a9c83094a590 (diff) | |
Merge remote-tracking branch 'ovl/rename2' into for-linus
Diffstat (limited to 'drivers/usb/core')
| -rw-r--r-- | drivers/usb/core/config.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c index 15ce4ab11688..a2d90aca779f 100644 --- a/drivers/usb/core/config.c +++ b/drivers/usb/core/config.c | |||
| @@ -240,8 +240,10 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum, | |||
| 240 | memcpy(&endpoint->desc, d, n); | 240 | memcpy(&endpoint->desc, d, n); |
| 241 | INIT_LIST_HEAD(&endpoint->urb_list); | 241 | INIT_LIST_HEAD(&endpoint->urb_list); |
| 242 | 242 | ||
| 243 | /* Fix up bInterval values outside the legal range. Use 32 ms if no | 243 | /* |
| 244 | * proper value can be guessed. */ | 244 | * Fix up bInterval values outside the legal range. |
| 245 | * Use 10 or 8 ms if no proper value can be guessed. | ||
| 246 | */ | ||
| 245 | i = 0; /* i = min, j = max, n = default */ | 247 | i = 0; /* i = min, j = max, n = default */ |
| 246 | j = 255; | 248 | j = 255; |
| 247 | if (usb_endpoint_xfer_int(d)) { | 249 | if (usb_endpoint_xfer_int(d)) { |
| @@ -250,13 +252,15 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum, | |||
| 250 | case USB_SPEED_SUPER_PLUS: | 252 | case USB_SPEED_SUPER_PLUS: |
| 251 | case USB_SPEED_SUPER: | 253 | case USB_SPEED_SUPER: |
| 252 | case USB_SPEED_HIGH: | 254 | case USB_SPEED_HIGH: |
| 253 | /* Many device manufacturers are using full-speed | 255 | /* |
| 256 | * Many device manufacturers are using full-speed | ||
| 254 | * bInterval values in high-speed interrupt endpoint | 257 | * bInterval values in high-speed interrupt endpoint |
| 255 | * descriptors. Try to fix those and fall back to a | 258 | * descriptors. Try to fix those and fall back to an |
| 256 | * 32 ms default value otherwise. */ | 259 | * 8-ms default value otherwise. |
| 260 | */ | ||
| 257 | n = fls(d->bInterval*8); | 261 | n = fls(d->bInterval*8); |
| 258 | if (n == 0) | 262 | if (n == 0) |
| 259 | n = 9; /* 32 ms = 2^(9-1) uframes */ | 263 | n = 7; /* 8 ms = 2^(7-1) uframes */ |
| 260 | j = 16; | 264 | j = 16; |
| 261 | 265 | ||
| 262 | /* | 266 | /* |
| @@ -271,10 +275,12 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum, | |||
| 271 | } | 275 | } |
| 272 | break; | 276 | break; |
| 273 | default: /* USB_SPEED_FULL or _LOW */ | 277 | default: /* USB_SPEED_FULL or _LOW */ |
| 274 | /* For low-speed, 10 ms is the official minimum. | 278 | /* |
| 279 | * For low-speed, 10 ms is the official minimum. | ||
| 275 | * But some "overclocked" devices might want faster | 280 | * But some "overclocked" devices might want faster |
| 276 | * polling so we'll allow it. */ | 281 | * polling so we'll allow it. |
| 277 | n = 32; | 282 | */ |
| 283 | n = 10; | ||
| 278 | break; | 284 | break; |
| 279 | } | 285 | } |
| 280 | } else if (usb_endpoint_xfer_isoc(d)) { | 286 | } else if (usb_endpoint_xfer_isoc(d)) { |
| @@ -282,10 +288,10 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum, | |||
| 282 | j = 16; | 288 | j = 16; |
| 283 | switch (to_usb_device(ddev)->speed) { | 289 | switch (to_usb_device(ddev)->speed) { |
| 284 | case USB_SPEED_HIGH: | 290 | case USB_SPEED_HIGH: |
| 285 | n = 9; /* 32 ms = 2^(9-1) uframes */ | 291 | n = 7; /* 8 ms = 2^(7-1) uframes */ |
| 286 | break; | 292 | break; |
| 287 | default: /* USB_SPEED_FULL */ | 293 | default: /* USB_SPEED_FULL */ |
| 288 | n = 6; /* 32 ms = 2^(6-1) frames */ | 294 | n = 4; /* 8 ms = 2^(4-1) frames */ |
| 289 | break; | 295 | break; |
| 290 | } | 296 | } |
| 291 | } | 297 | } |
