diff options
Diffstat (limited to 'drivers/usb/gadget/dummy_hcd.c')
-rw-r--r-- | drivers/usb/gadget/dummy_hcd.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c index f9540adf2a4f..c78c64ae87af 100644 --- a/drivers/usb/gadget/dummy_hcd.c +++ b/drivers/usb/gadget/dummy_hcd.c | |||
@@ -734,7 +734,7 @@ show_function (struct device *dev, struct device_attribute *attr, char *buf) | |||
734 | return 0; | 734 | return 0; |
735 | return scnprintf (buf, PAGE_SIZE, "%s\n", dum->driver->function); | 735 | return scnprintf (buf, PAGE_SIZE, "%s\n", dum->driver->function); |
736 | } | 736 | } |
737 | DEVICE_ATTR (function, S_IRUGO, show_function, NULL); | 737 | static DEVICE_ATTR (function, S_IRUGO, show_function, NULL); |
738 | 738 | ||
739 | /*-------------------------------------------------------------------------*/ | 739 | /*-------------------------------------------------------------------------*/ |
740 | 740 | ||
@@ -857,6 +857,9 @@ EXPORT_SYMBOL (usb_gadget_unregister_driver); | |||
857 | 857 | ||
858 | #undef is_enabled | 858 | #undef is_enabled |
859 | 859 | ||
860 | /* just declare this in any driver that really need it */ | ||
861 | extern int net2280_set_fifo_mode (struct usb_gadget *gadget, int mode); | ||
862 | |||
860 | int net2280_set_fifo_mode (struct usb_gadget *gadget, int mode) | 863 | int net2280_set_fifo_mode (struct usb_gadget *gadget, int mode) |
861 | { | 864 | { |
862 | return -ENOSYS; | 865 | return -ENOSYS; |
@@ -1122,7 +1125,6 @@ static int periodic_bytes (struct dummy *dum, struct dummy_ep *ep) | |||
1122 | 1125 | ||
1123 | /* high bandwidth mode */ | 1126 | /* high bandwidth mode */ |
1124 | tmp = le16_to_cpu(ep->desc->wMaxPacketSize); | 1127 | tmp = le16_to_cpu(ep->desc->wMaxPacketSize); |
1125 | tmp = le16_to_cpu (tmp); | ||
1126 | tmp = (tmp >> 11) & 0x03; | 1128 | tmp = (tmp >> 11) & 0x03; |
1127 | tmp *= 8 /* applies to entire frame */; | 1129 | tmp *= 8 /* applies to entire frame */; |
1128 | limit += limit * tmp; | 1130 | limit += limit * tmp; |
@@ -1265,9 +1267,14 @@ restart: | |||
1265 | struct usb_ctrlrequest setup; | 1267 | struct usb_ctrlrequest setup; |
1266 | int value = 1; | 1268 | int value = 1; |
1267 | struct dummy_ep *ep2; | 1269 | struct dummy_ep *ep2; |
1270 | unsigned w_index; | ||
1271 | unsigned w_value; | ||
1268 | 1272 | ||
1269 | setup = *(struct usb_ctrlrequest*) urb->setup_packet; | 1273 | setup = *(struct usb_ctrlrequest*) urb->setup_packet; |
1270 | if (setup.wLength != urb->transfer_buffer_length) { | 1274 | w_index = le16_to_cpu(setup.wIndex); |
1275 | w_value = le16_to_cpu(setup.wValue); | ||
1276 | if (le16_to_cpu(setup.wLength) != | ||
1277 | urb->transfer_buffer_length) { | ||
1271 | maybe_set_status (urb, -EOVERFLOW); | 1278 | maybe_set_status (urb, -EOVERFLOW); |
1272 | goto return_urb; | 1279 | goto return_urb; |
1273 | } | 1280 | } |
@@ -1297,16 +1304,16 @@ restart: | |||
1297 | case USB_REQ_SET_ADDRESS: | 1304 | case USB_REQ_SET_ADDRESS: |
1298 | if (setup.bRequestType != Dev_Request) | 1305 | if (setup.bRequestType != Dev_Request) |
1299 | break; | 1306 | break; |
1300 | dum->address = setup.wValue; | 1307 | dum->address = w_value; |
1301 | maybe_set_status (urb, 0); | 1308 | maybe_set_status (urb, 0); |
1302 | dev_dbg (udc_dev(dum), "set_address = %d\n", | 1309 | dev_dbg (udc_dev(dum), "set_address = %d\n", |
1303 | setup.wValue); | 1310 | w_value); |
1304 | value = 0; | 1311 | value = 0; |
1305 | break; | 1312 | break; |
1306 | case USB_REQ_SET_FEATURE: | 1313 | case USB_REQ_SET_FEATURE: |
1307 | if (setup.bRequestType == Dev_Request) { | 1314 | if (setup.bRequestType == Dev_Request) { |
1308 | value = 0; | 1315 | value = 0; |
1309 | switch (setup.wValue) { | 1316 | switch (w_value) { |
1310 | case USB_DEVICE_REMOTE_WAKEUP: | 1317 | case USB_DEVICE_REMOTE_WAKEUP: |
1311 | break; | 1318 | break; |
1312 | case USB_DEVICE_B_HNP_ENABLE: | 1319 | case USB_DEVICE_B_HNP_ENABLE: |
@@ -1324,14 +1331,13 @@ restart: | |||
1324 | } | 1331 | } |
1325 | if (value == 0) { | 1332 | if (value == 0) { |
1326 | dum->devstatus |= | 1333 | dum->devstatus |= |
1327 | (1 << setup.wValue); | 1334 | (1 << w_value); |
1328 | maybe_set_status (urb, 0); | 1335 | maybe_set_status (urb, 0); |
1329 | } | 1336 | } |
1330 | 1337 | ||
1331 | } else if (setup.bRequestType == Ep_Request) { | 1338 | } else if (setup.bRequestType == Ep_Request) { |
1332 | // endpoint halt | 1339 | // endpoint halt |
1333 | ep2 = find_endpoint (dum, | 1340 | ep2 = find_endpoint (dum, w_index); |
1334 | setup.wIndex); | ||
1335 | if (!ep2) { | 1341 | if (!ep2) { |
1336 | value = -EOPNOTSUPP; | 1342 | value = -EOPNOTSUPP; |
1337 | break; | 1343 | break; |
@@ -1343,7 +1349,7 @@ restart: | |||
1343 | break; | 1349 | break; |
1344 | case USB_REQ_CLEAR_FEATURE: | 1350 | case USB_REQ_CLEAR_FEATURE: |
1345 | if (setup.bRequestType == Dev_Request) { | 1351 | if (setup.bRequestType == Dev_Request) { |
1346 | switch (setup.wValue) { | 1352 | switch (w_value) { |
1347 | case USB_DEVICE_REMOTE_WAKEUP: | 1353 | case USB_DEVICE_REMOTE_WAKEUP: |
1348 | dum->devstatus &= ~(1 << | 1354 | dum->devstatus &= ~(1 << |
1349 | USB_DEVICE_REMOTE_WAKEUP); | 1355 | USB_DEVICE_REMOTE_WAKEUP); |
@@ -1356,8 +1362,7 @@ restart: | |||
1356 | } | 1362 | } |
1357 | } else if (setup.bRequestType == Ep_Request) { | 1363 | } else if (setup.bRequestType == Ep_Request) { |
1358 | // endpoint halt | 1364 | // endpoint halt |
1359 | ep2 = find_endpoint (dum, | 1365 | ep2 = find_endpoint (dum, w_index); |
1360 | setup.wIndex); | ||
1361 | if (!ep2) { | 1366 | if (!ep2) { |
1362 | value = -EOPNOTSUPP; | 1367 | value = -EOPNOTSUPP; |
1363 | break; | 1368 | break; |
@@ -1383,7 +1388,7 @@ restart: | |||
1383 | if (urb->transfer_buffer_length > 0) { | 1388 | if (urb->transfer_buffer_length > 0) { |
1384 | if (setup.bRequestType == | 1389 | if (setup.bRequestType == |
1385 | Ep_InRequest) { | 1390 | Ep_InRequest) { |
1386 | ep2 = find_endpoint (dum, setup.wIndex); | 1391 | ep2 = find_endpoint (dum, w_index); |
1387 | if (!ep2) { | 1392 | if (!ep2) { |
1388 | value = -EOPNOTSUPP; | 1393 | value = -EOPNOTSUPP; |
1389 | break; | 1394 | break; |
@@ -1535,7 +1540,8 @@ hub_descriptor (struct usb_hub_descriptor *desc) | |||
1535 | memset (desc, 0, sizeof *desc); | 1540 | memset (desc, 0, sizeof *desc); |
1536 | desc->bDescriptorType = 0x29; | 1541 | desc->bDescriptorType = 0x29; |
1537 | desc->bDescLength = 9; | 1542 | desc->bDescLength = 9; |
1538 | desc->wHubCharacteristics = __constant_cpu_to_le16 (0x0001); | 1543 | desc->wHubCharacteristics = (__force __u16) |
1544 | (__constant_cpu_to_le16 (0x0001)); | ||
1539 | desc->bNbrPorts = 1; | 1545 | desc->bNbrPorts = 1; |
1540 | desc->bitmap [0] = 0xff; | 1546 | desc->bitmap [0] = 0xff; |
1541 | desc->bitmap [1] = 0xff; | 1547 | desc->bitmap [1] = 0xff; |
@@ -1581,7 +1587,7 @@ static int dummy_hub_control ( | |||
1581 | hub_descriptor ((struct usb_hub_descriptor *) buf); | 1587 | hub_descriptor ((struct usb_hub_descriptor *) buf); |
1582 | break; | 1588 | break; |
1583 | case GetHubStatus: | 1589 | case GetHubStatus: |
1584 | *(u32 *) buf = __constant_cpu_to_le32 (0); | 1590 | *(__le32 *) buf = __constant_cpu_to_le32 (0); |
1585 | break; | 1591 | break; |
1586 | case GetPortStatus: | 1592 | case GetPortStatus: |
1587 | if (wIndex != 1) | 1593 | if (wIndex != 1) |
@@ -1621,8 +1627,8 @@ static int dummy_hub_control ( | |||
1621 | } | 1627 | } |
1622 | } | 1628 | } |
1623 | set_link_state (dum); | 1629 | set_link_state (dum); |
1624 | ((u16 *) buf)[0] = cpu_to_le16 (dum->port_status); | 1630 | ((__le16 *) buf)[0] = cpu_to_le16 (dum->port_status); |
1625 | ((u16 *) buf)[1] = cpu_to_le16 (dum->port_status >> 16); | 1631 | ((__le16 *) buf)[1] = cpu_to_le16 (dum->port_status >> 16); |
1626 | break; | 1632 | break; |
1627 | case SetHubFeature: | 1633 | case SetHubFeature: |
1628 | retval = -EPIPE; | 1634 | retval = -EPIPE; |