diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-16 19:55:39 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-16 19:55:39 -0500 |
| commit | 18688218d171cb653cbe82d03f72e51b02a5a83e (patch) | |
| tree | c146673138876a9491853ca6618f2303895e943d | |
| parent | 1ed10aa8e9e55e7f7b3374e532f453c4d0f5fe8a (diff) | |
| parent | 31e5d4abceaa3d11ff583ddf76ec292e90eacb7d (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
USB: gadget: fix EEM gadget CRC usage
USB: otg Kconfig: let USB_OTG_UTILS select USB_ULPI option
USB: g_multi: fix CONFIG_USB_G_MULTI_RNDIS usage
kfifo: Don't use integer as NULL pointer
USB: FHCI: Fix build after kfifo rework
kfifo: Make kfifo_initialized work after kfifo_free
USB: serial: add usbid for dell wwan card to sierra.c
USB: SIS USB2VGA DRIVER: support KAIREN's USB VGA adaptor USB20SVGA-MB-PLUS
USB: ehci: phy low power mode bug fixing
USB: s3c-hsotg: Export usb_gadget_register_driver()
USB: r8a66597-udc: Prototype IS_ERR() and PTR_ERR()
USB: ftdi_sio: add device IDs (several ELV, one Mindstorms NXT)
USB: storage: Remove unneeded SC/PR from unusual_devs.h
USB: ftdi_sio: new device id for papouch AD4USB
USB: usbfs: properly clean up the as structure on error paths
USB: usbfs: only copy the actual data received
| -rw-r--r-- | drivers/usb/core/devio.c | 48 | ||||
| -rw-r--r-- | drivers/usb/gadget/f_eem.c | 3 | ||||
| -rw-r--r-- | drivers/usb/gadget/multi.c | 2 | ||||
| -rw-r--r-- | drivers/usb/gadget/r8a66597-udc.c | 1 | ||||
| -rw-r--r-- | drivers/usb/gadget/s3c-hsotg.c | 1 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-hub.c | 13 | ||||
| -rw-r--r-- | drivers/usb/host/fhci-tds.c | 6 | ||||
| -rw-r--r-- | drivers/usb/misc/sisusbvga/sisusb.c | 1 | ||||
| -rw-r--r-- | drivers/usb/otg/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 25 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio_ids.h | 18 | ||||
| -rw-r--r-- | drivers/usb/serial/sierra.c | 1 | ||||
| -rw-r--r-- | drivers/usb/storage/unusual_devs.h | 2 | ||||
| -rw-r--r-- | include/linux/kfifo.h | 2 | ||||
| -rw-r--r-- | kernel/kfifo.c | 3 |
15 files changed, 92 insertions, 35 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 6e8bcdfd23b4..a678186f218f 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c | |||
| @@ -1312,9 +1312,9 @@ static int processcompl(struct async *as, void __user * __user *arg) | |||
| 1312 | void __user *addr = as->userurb; | 1312 | void __user *addr = as->userurb; |
| 1313 | unsigned int i; | 1313 | unsigned int i; |
| 1314 | 1314 | ||
| 1315 | if (as->userbuffer) | 1315 | if (as->userbuffer && urb->actual_length) |
| 1316 | if (copy_to_user(as->userbuffer, urb->transfer_buffer, | 1316 | if (copy_to_user(as->userbuffer, urb->transfer_buffer, |
| 1317 | urb->transfer_buffer_length)) | 1317 | urb->actual_length)) |
| 1318 | goto err_out; | 1318 | goto err_out; |
| 1319 | if (put_user(as->status, &userurb->status)) | 1319 | if (put_user(as->status, &userurb->status)) |
| 1320 | goto err_out; | 1320 | goto err_out; |
| @@ -1334,14 +1334,11 @@ static int processcompl(struct async *as, void __user * __user *arg) | |||
| 1334 | } | 1334 | } |
| 1335 | } | 1335 | } |
| 1336 | 1336 | ||
| 1337 | free_async(as); | ||
| 1338 | |||
| 1339 | if (put_user(addr, (void __user * __user *)arg)) | 1337 | if (put_user(addr, (void __user * __user *)arg)) |
| 1340 | return -EFAULT; | 1338 | return -EFAULT; |
| 1341 | return 0; | 1339 | return 0; |
| 1342 | 1340 | ||
| 1343 | err_out: | 1341 | err_out: |
| 1344 | free_async(as); | ||
| 1345 | return -EFAULT; | 1342 | return -EFAULT; |
| 1346 | } | 1343 | } |
| 1347 | 1344 | ||
| @@ -1371,8 +1368,11 @@ static struct async *reap_as(struct dev_state *ps) | |||
| 1371 | static int proc_reapurb(struct dev_state *ps, void __user *arg) | 1368 | static int proc_reapurb(struct dev_state *ps, void __user *arg) |
| 1372 | { | 1369 | { |
| 1373 | struct async *as = reap_as(ps); | 1370 | struct async *as = reap_as(ps); |
| 1374 | if (as) | 1371 | if (as) { |
| 1375 | return processcompl(as, (void __user * __user *)arg); | 1372 | int retval = processcompl(as, (void __user * __user *)arg); |
| 1373 | free_async(as); | ||
| 1374 | return retval; | ||
| 1375 | } | ||
| 1376 | if (signal_pending(current)) | 1376 | if (signal_pending(current)) |
| 1377 | return -EINTR; | 1377 | return -EINTR; |
| 1378 | return -EIO; | 1378 | return -EIO; |
| @@ -1380,11 +1380,16 @@ static int proc_reapurb(struct dev_state *ps, void __user *arg) | |||
| 1380 | 1380 | ||
| 1381 | static int proc_reapurbnonblock(struct dev_state *ps, void __user *arg) | 1381 | static int proc_reapurbnonblock(struct dev_state *ps, void __user *arg) |
| 1382 | { | 1382 | { |
| 1383 | int retval; | ||
| 1383 | struct async *as; | 1384 | struct async *as; |
| 1384 | 1385 | ||
| 1385 | if (!(as = async_getcompleted(ps))) | 1386 | as = async_getcompleted(ps); |
| 1386 | return -EAGAIN; | 1387 | retval = -EAGAIN; |
| 1387 | return processcompl(as, (void __user * __user *)arg); | 1388 | if (as) { |
| 1389 | retval = processcompl(as, (void __user * __user *)arg); | ||
| 1390 | free_async(as); | ||
| 1391 | } | ||
| 1392 | return retval; | ||
| 1388 | } | 1393 | } |
| 1389 | 1394 | ||
| 1390 | #ifdef CONFIG_COMPAT | 1395 | #ifdef CONFIG_COMPAT |
| @@ -1475,9 +1480,9 @@ static int processcompl_compat(struct async *as, void __user * __user *arg) | |||
| 1475 | void __user *addr = as->userurb; | 1480 | void __user *addr = as->userurb; |
| 1476 | unsigned int i; | 1481 | unsigned int i; |
| 1477 | 1482 | ||
| 1478 | if (as->userbuffer) | 1483 | if (as->userbuffer && urb->actual_length) |
| 1479 | if (copy_to_user(as->userbuffer, urb->transfer_buffer, | 1484 | if (copy_to_user(as->userbuffer, urb->transfer_buffer, |
| 1480 | urb->transfer_buffer_length)) | 1485 | urb->actual_length)) |
| 1481 | return -EFAULT; | 1486 | return -EFAULT; |
| 1482 | if (put_user(as->status, &userurb->status)) | 1487 | if (put_user(as->status, &userurb->status)) |
| 1483 | return -EFAULT; | 1488 | return -EFAULT; |
| @@ -1497,7 +1502,6 @@ static int processcompl_compat(struct async *as, void __user * __user *arg) | |||
| 1497 | } | 1502 | } |
| 1498 | } | 1503 | } |
| 1499 | 1504 | ||
| 1500 | free_async(as); | ||
| 1501 | if (put_user(ptr_to_compat(addr), (u32 __user *)arg)) | 1505 | if (put_user(ptr_to_compat(addr), (u32 __user *)arg)) |
| 1502 | return -EFAULT; | 1506 | return -EFAULT; |
| 1503 | return 0; | 1507 | return 0; |
| @@ -1506,8 +1510,11 @@ static int processcompl_compat(struct async *as, void __user * __user *arg) | |||
| 1506 | static int proc_reapurb_compat(struct dev_state *ps, void __user *arg) | 1510 | static int proc_reapurb_compat(struct dev_state *ps, void __user *arg) |
| 1507 | { | 1511 | { |
| 1508 | struct async *as = reap_as(ps); | 1512 | struct async *as = reap_as(ps); |
| 1509 | if (as) | 1513 | if (as) { |
| 1510 | return processcompl_compat(as, (void __user * __user *)arg); | 1514 | int retval = processcompl_compat(as, (void __user * __user *)arg); |
| 1515 | free_async(as); | ||
| 1516 | return retval; | ||
| 1517 | } | ||
| 1511 | if (signal_pending(current)) | 1518 | if (signal_pending(current)) |
| 1512 | return -EINTR; | 1519 | return -EINTR; |
| 1513 | return -EIO; | 1520 | return -EIO; |
| @@ -1515,11 +1522,16 @@ static int proc_reapurb_compat(struct dev_state *ps, void __user *arg) | |||
| 1515 | 1522 | ||
| 1516 | static int proc_reapurbnonblock_compat(struct dev_state *ps, void __user *arg) | 1523 | static int proc_reapurbnonblock_compat(struct dev_state *ps, void __user *arg) |
| 1517 | { | 1524 | { |
| 1525 | int retval; | ||
| 1518 | struct async *as; | 1526 | struct async *as; |
| 1519 | 1527 | ||
| 1520 | if (!(as = async_getcompleted(ps))) | 1528 | retval = -EAGAIN; |
| 1521 | return -EAGAIN; | 1529 | as = async_getcompleted(ps); |
| 1522 | return processcompl_compat(as, (void __user * __user *)arg); | 1530 | if (as) { |
| 1531 | retval = processcompl_compat(as, (void __user * __user *)arg); | ||
| 1532 | free_async(as); | ||
| 1533 | } | ||
| 1534 | return retval; | ||
| 1523 | } | 1535 | } |
| 1524 | 1536 | ||
| 1525 | 1537 | ||
diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c index 0a577d5694fd..d4f0db58a8ad 100644 --- a/drivers/usb/gadget/f_eem.c +++ b/drivers/usb/gadget/f_eem.c | |||
| @@ -358,7 +358,7 @@ done: | |||
| 358 | * b15: bmType (0 == data) | 358 | * b15: bmType (0 == data) |
| 359 | */ | 359 | */ |
| 360 | len = skb->len; | 360 | len = skb->len; |
| 361 | put_unaligned_le16((len & 0x3FFF) | BIT(14), skb_push(skb, 2)); | 361 | put_unaligned_le16(len & 0x3FFF, skb_push(skb, 2)); |
| 362 | 362 | ||
| 363 | /* add a zero-length EEM packet, if needed */ | 363 | /* add a zero-length EEM packet, if needed */ |
| 364 | if (padlen) | 364 | if (padlen) |
| @@ -464,7 +464,6 @@ static int eem_unwrap(struct gether *port, | |||
| 464 | } | 464 | } |
| 465 | 465 | ||
| 466 | /* validate CRC */ | 466 | /* validate CRC */ |
| 467 | crc = get_unaligned_le32(skb->data + len - ETH_FCS_LEN); | ||
| 468 | if (header & BIT(14)) { | 467 | if (header & BIT(14)) { |
| 469 | crc = get_unaligned_le32(skb->data + len | 468 | crc = get_unaligned_le32(skb->data + len |
| 470 | - ETH_FCS_LEN); | 469 | - ETH_FCS_LEN); |
diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c index 429560100b10..76496f5d272c 100644 --- a/drivers/usb/gadget/multi.c +++ b/drivers/usb/gadget/multi.c | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | #if defined USB_ETH_RNDIS | 29 | #if defined USB_ETH_RNDIS |
| 30 | # undef USB_ETH_RNDIS | 30 | # undef USB_ETH_RNDIS |
| 31 | #endif | 31 | #endif |
| 32 | #ifdef CONFIG_USB_ETH_RNDIS | 32 | #ifdef CONFIG_USB_G_MULTI_RNDIS |
| 33 | # define USB_ETH_RNDIS y | 33 | # define USB_ETH_RNDIS y |
| 34 | #endif | 34 | #endif |
| 35 | 35 | ||
diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c index e220fb8091a3..8b45145b9136 100644 --- a/drivers/usb/gadget/r8a66597-udc.c +++ b/drivers/usb/gadget/r8a66597-udc.c | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <linux/io.h> | 26 | #include <linux/io.h> |
| 27 | #include <linux/platform_device.h> | 27 | #include <linux/platform_device.h> |
| 28 | #include <linux/clk.h> | 28 | #include <linux/clk.h> |
| 29 | #include <linux/err.h> | ||
| 29 | 30 | ||
| 30 | #include <linux/usb/ch9.h> | 31 | #include <linux/usb/ch9.h> |
| 31 | #include <linux/usb/gadget.h> | 32 | #include <linux/usb/gadget.h> |
diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c index 4b5dbd0127f5..5fc80a104150 100644 --- a/drivers/usb/gadget/s3c-hsotg.c +++ b/drivers/usb/gadget/s3c-hsotg.c | |||
| @@ -2582,6 +2582,7 @@ err: | |||
| 2582 | hsotg->gadget.dev.driver = NULL; | 2582 | hsotg->gadget.dev.driver = NULL; |
| 2583 | return ret; | 2583 | return ret; |
| 2584 | } | 2584 | } |
| 2585 | EXPORT_SYMBOL(usb_gadget_register_driver); | ||
| 2585 | 2586 | ||
| 2586 | int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) | 2587 | int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) |
| 2587 | { | 2588 | { |
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index c75d9270c752..19372673bf09 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
| @@ -196,7 +196,9 @@ static int ehci_bus_suspend (struct usb_hcd *hcd) | |||
| 196 | if (hostpc_reg) { | 196 | if (hostpc_reg) { |
| 197 | u32 t3; | 197 | u32 t3; |
| 198 | 198 | ||
| 199 | spin_unlock_irq(&ehci->lock); | ||
| 199 | msleep(5);/* 5ms for HCD enter low pwr mode */ | 200 | msleep(5);/* 5ms for HCD enter low pwr mode */ |
| 201 | spin_lock_irq(&ehci->lock); | ||
| 200 | t3 = ehci_readl(ehci, hostpc_reg); | 202 | t3 = ehci_readl(ehci, hostpc_reg); |
| 201 | ehci_writel(ehci, t3 | HOSTPC_PHCD, hostpc_reg); | 203 | ehci_writel(ehci, t3 | HOSTPC_PHCD, hostpc_reg); |
| 202 | t3 = ehci_readl(ehci, hostpc_reg); | 204 | t3 = ehci_readl(ehci, hostpc_reg); |
| @@ -904,17 +906,18 @@ static int ehci_hub_control ( | |||
| 904 | if ((temp & PORT_PE) == 0 | 906 | if ((temp & PORT_PE) == 0 |
| 905 | || (temp & PORT_RESET) != 0) | 907 | || (temp & PORT_RESET) != 0) |
| 906 | goto error; | 908 | goto error; |
| 907 | ehci_writel(ehci, temp | PORT_SUSPEND, status_reg); | 909 | |
| 908 | /* After above check the port must be connected. | 910 | /* After above check the port must be connected. |
| 909 | * Set appropriate bit thus could put phy into low power | 911 | * Set appropriate bit thus could put phy into low power |
| 910 | * mode if we have hostpc feature | 912 | * mode if we have hostpc feature |
| 911 | */ | 913 | */ |
| 914 | temp &= ~PORT_WKCONN_E; | ||
| 915 | temp |= PORT_WKDISC_E | PORT_WKOC_E; | ||
| 916 | ehci_writel(ehci, temp | PORT_SUSPEND, status_reg); | ||
| 912 | if (hostpc_reg) { | 917 | if (hostpc_reg) { |
| 913 | temp &= ~PORT_WKCONN_E; | 918 | spin_unlock_irqrestore(&ehci->lock, flags); |
| 914 | temp |= (PORT_WKDISC_E | PORT_WKOC_E); | ||
| 915 | ehci_writel(ehci, temp | PORT_SUSPEND, | ||
| 916 | status_reg); | ||
| 917 | msleep(5);/* 5ms for HCD enter low pwr mode */ | 919 | msleep(5);/* 5ms for HCD enter low pwr mode */ |
| 920 | spin_lock_irqsave(&ehci->lock, flags); | ||
| 918 | temp1 = ehci_readl(ehci, hostpc_reg); | 921 | temp1 = ehci_readl(ehci, hostpc_reg); |
| 919 | ehci_writel(ehci, temp1 | HOSTPC_PHCD, | 922 | ehci_writel(ehci, temp1 | HOSTPC_PHCD, |
| 920 | hostpc_reg); | 923 | hostpc_reg); |
diff --git a/drivers/usb/host/fhci-tds.c b/drivers/usb/host/fhci-tds.c index d224ab467a40..e1232890c78b 100644 --- a/drivers/usb/host/fhci-tds.c +++ b/drivers/usb/host/fhci-tds.c | |||
| @@ -105,7 +105,7 @@ void fhci_ep0_free(struct fhci_usb *usb) | |||
| 105 | if (ep->td_base) | 105 | if (ep->td_base) |
| 106 | cpm_muram_free(cpm_muram_offset(ep->td_base)); | 106 | cpm_muram_free(cpm_muram_offset(ep->td_base)); |
| 107 | 107 | ||
| 108 | if (ep->conf_frame_Q) { | 108 | if (kfifo_initialized(&ep->conf_frame_Q)) { |
| 109 | size = cq_howmany(&ep->conf_frame_Q); | 109 | size = cq_howmany(&ep->conf_frame_Q); |
| 110 | for (; size; size--) { | 110 | for (; size; size--) { |
| 111 | struct packet *pkt = cq_get(&ep->conf_frame_Q); | 111 | struct packet *pkt = cq_get(&ep->conf_frame_Q); |
| @@ -115,7 +115,7 @@ void fhci_ep0_free(struct fhci_usb *usb) | |||
| 115 | cq_delete(&ep->conf_frame_Q); | 115 | cq_delete(&ep->conf_frame_Q); |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | if (ep->empty_frame_Q) { | 118 | if (kfifo_initialized(&ep->empty_frame_Q)) { |
| 119 | size = cq_howmany(&ep->empty_frame_Q); | 119 | size = cq_howmany(&ep->empty_frame_Q); |
| 120 | for (; size; size--) { | 120 | for (; size; size--) { |
| 121 | struct packet *pkt = cq_get(&ep->empty_frame_Q); | 121 | struct packet *pkt = cq_get(&ep->empty_frame_Q); |
| @@ -125,7 +125,7 @@ void fhci_ep0_free(struct fhci_usb *usb) | |||
| 125 | cq_delete(&ep->empty_frame_Q); | 125 | cq_delete(&ep->empty_frame_Q); |
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | if (ep->dummy_packets_Q) { | 128 | if (kfifo_initialized(&ep->dummy_packets_Q)) { |
| 129 | size = cq_howmany(&ep->dummy_packets_Q); | 129 | size = cq_howmany(&ep->dummy_packets_Q); |
| 130 | for (; size; size--) { | 130 | for (; size; size--) { |
| 131 | u8 *buff = cq_get(&ep->dummy_packets_Q); | 131 | u8 *buff = cq_get(&ep->dummy_packets_Q); |
diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c index 0025847743f3..8b37a4b9839e 100644 --- a/drivers/usb/misc/sisusbvga/sisusb.c +++ b/drivers/usb/misc/sisusbvga/sisusb.c | |||
| @@ -3245,6 +3245,7 @@ static struct usb_device_id sisusb_table [] = { | |||
| 3245 | { USB_DEVICE(0x0711, 0x0902) }, | 3245 | { USB_DEVICE(0x0711, 0x0902) }, |
| 3246 | { USB_DEVICE(0x0711, 0x0903) }, | 3246 | { USB_DEVICE(0x0711, 0x0903) }, |
| 3247 | { USB_DEVICE(0x0711, 0x0918) }, | 3247 | { USB_DEVICE(0x0711, 0x0918) }, |
| 3248 | { USB_DEVICE(0x0711, 0x0920) }, | ||
| 3248 | { USB_DEVICE(0x182d, 0x021c) }, | 3249 | { USB_DEVICE(0x182d, 0x021c) }, |
| 3249 | { USB_DEVICE(0x182d, 0x0269) }, | 3250 | { USB_DEVICE(0x182d, 0x0269) }, |
| 3250 | { } | 3251 | { } |
diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig index de56b3d743d7..3d2d3e549bd1 100644 --- a/drivers/usb/otg/Kconfig +++ b/drivers/usb/otg/Kconfig | |||
| @@ -44,6 +44,7 @@ config ISP1301_OMAP | |||
| 44 | config USB_ULPI | 44 | config USB_ULPI |
| 45 | bool "Generic ULPI Transceiver Driver" | 45 | bool "Generic ULPI Transceiver Driver" |
| 46 | depends on ARM | 46 | depends on ARM |
| 47 | select USB_OTG_UTILS | ||
| 47 | help | 48 | help |
| 48 | Enable this to support ULPI connected USB OTG transceivers which | 49 | Enable this to support ULPI connected USB OTG transceivers which |
| 49 | are likely found on embedded boards. | 50 | are likely found on embedded boards. |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 216f187582ab..7638828e7317 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -50,7 +50,7 @@ | |||
| 50 | * Version Information | 50 | * Version Information |
| 51 | */ | 51 | */ |
| 52 | #define DRIVER_VERSION "v1.5.0" | 52 | #define DRIVER_VERSION "v1.5.0" |
| 53 | #define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Bill Ryder <bryder@sgi.com>, Kuba Ober <kuba@mareimbrium.org>" | 53 | #define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Bill Ryder <bryder@sgi.com>, Kuba Ober <kuba@mareimbrium.org>, Andreas Mohr" |
| 54 | #define DRIVER_DESC "USB FTDI Serial Converters Driver" | 54 | #define DRIVER_DESC "USB FTDI Serial Converters Driver" |
| 55 | 55 | ||
| 56 | static int debug; | 56 | static int debug; |
| @@ -145,10 +145,15 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = { | |||
| 145 | 145 | ||
| 146 | 146 | ||
| 147 | 147 | ||
| 148 | /* | ||
| 149 | * Device ID not listed? Test via module params product/vendor or | ||
| 150 | * /sys/bus/usb/ftdi_sio/new_id, then send patch/report! | ||
| 151 | */ | ||
| 148 | static struct usb_device_id id_table_combined [] = { | 152 | static struct usb_device_id id_table_combined [] = { |
| 149 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, | 153 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, |
| 150 | { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, | 154 | { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, |
| 151 | { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, | 155 | { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, |
| 156 | { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) }, | ||
| 152 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, | 157 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, |
| 153 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, | 158 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, |
| 154 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, | 159 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, |
| @@ -552,9 +557,16 @@ static struct usb_device_id id_table_combined [] = { | |||
| 552 | { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) }, | 557 | { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) }, |
| 553 | { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) }, | 558 | { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) }, |
| 554 | /* | 559 | /* |
| 555 | * Due to many user requests for multiple ELV devices we enable | 560 | * ELV devices: |
| 556 | * them by default. | ||
| 557 | */ | 561 | */ |
| 562 | { USB_DEVICE(FTDI_VID, FTDI_ELV_USR_PID) }, | ||
| 563 | { USB_DEVICE(FTDI_VID, FTDI_ELV_MSM1_PID) }, | ||
| 564 | { USB_DEVICE(FTDI_VID, FTDI_ELV_KL100_PID) }, | ||
| 565 | { USB_DEVICE(FTDI_VID, FTDI_ELV_WS550_PID) }, | ||
| 566 | { USB_DEVICE(FTDI_VID, FTDI_ELV_EC3000_PID) }, | ||
| 567 | { USB_DEVICE(FTDI_VID, FTDI_ELV_WS888_PID) }, | ||
| 568 | { USB_DEVICE(FTDI_VID, FTDI_ELV_TWS550_PID) }, | ||
| 569 | { USB_DEVICE(FTDI_VID, FTDI_ELV_FEM_PID) }, | ||
| 558 | { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) }, | 570 | { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) }, |
| 559 | { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) }, | 571 | { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) }, |
| 560 | { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) }, | 572 | { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) }, |
| @@ -571,11 +583,17 @@ static struct usb_device_id id_table_combined [] = { | |||
| 571 | { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) }, | 583 | { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) }, |
| 572 | { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) }, | 584 | { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) }, |
| 573 | { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) }, | 585 | { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) }, |
| 586 | { USB_DEVICE(FTDI_VID, FTDI_ELV_UTP8_PID) }, | ||
| 574 | { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, | 587 | { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, |
| 588 | { USB_DEVICE(FTDI_VID, FTDI_ELV_WS444PC_PID) }, | ||
| 575 | { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) }, | 589 | { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) }, |
| 576 | { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1010PC_PID) }, | 590 | { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1010PC_PID) }, |
| 577 | { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) }, | 591 | { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) }, |
| 578 | { USB_DEVICE(FTDI_VID, FTDI_ELV_HS485_PID) }, | 592 | { USB_DEVICE(FTDI_VID, FTDI_ELV_HS485_PID) }, |
| 593 | { USB_DEVICE(FTDI_VID, FTDI_ELV_UMS100_PID) }, | ||
| 594 | { USB_DEVICE(FTDI_VID, FTDI_ELV_TFD128_PID) }, | ||
| 595 | { USB_DEVICE(FTDI_VID, FTDI_ELV_FM3RX_PID) }, | ||
| 596 | { USB_DEVICE(FTDI_VID, FTDI_ELV_WS777_PID) }, | ||
| 579 | { USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) }, | 597 | { USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) }, |
| 580 | { USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) }, | 598 | { USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) }, |
| 581 | { USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) }, | 599 | { USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) }, |
| @@ -697,6 +715,7 @@ static struct usb_device_id id_table_combined [] = { | |||
| 697 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, | 715 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, |
| 698 | { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, | 716 | { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, |
| 699 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, | 717 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, |
| 718 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AD4USB_PID) }, | ||
| 700 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, | 719 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, |
| 701 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, | 720 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, |
| 702 | { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) }, | 721 | { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) }, |
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index da92b4952ffb..c8951aeed983 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h | |||
| @@ -38,6 +38,8 @@ | |||
| 38 | /* www.candapter.com Ewert Energy Systems CANdapter device */ | 38 | /* www.candapter.com Ewert Energy Systems CANdapter device */ |
| 39 | #define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */ | 39 | #define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */ |
| 40 | 40 | ||
| 41 | #define FTDI_NXTCAM_PID 0xABB8 /* NXTCam for Mindstorms NXT */ | ||
| 42 | |||
| 41 | /* OOCDlink by Joern Kaipf <joernk@web.de> | 43 | /* OOCDlink by Joern Kaipf <joernk@web.de> |
| 42 | * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */ | 44 | * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */ |
| 43 | #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ | 45 | #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ |
| @@ -161,22 +163,37 @@ | |||
| 161 | /* | 163 | /* |
| 162 | * ELV USB devices submitted by Christian Abt of ELV (www.elv.de). | 164 | * ELV USB devices submitted by Christian Abt of ELV (www.elv.de). |
| 163 | * All of these devices use FTDI's vendor ID (0x0403). | 165 | * All of these devices use FTDI's vendor ID (0x0403). |
| 166 | * Further IDs taken from ELV Windows .inf file. | ||
| 164 | * | 167 | * |
| 165 | * The previously included PID for the UO 100 module was incorrect. | 168 | * The previously included PID for the UO 100 module was incorrect. |
| 166 | * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58). | 169 | * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58). |
| 167 | * | 170 | * |
| 168 | * Armin Laeuger originally sent the PID for the UM 100 module. | 171 | * Armin Laeuger originally sent the PID for the UM 100 module. |
| 169 | */ | 172 | */ |
| 173 | #define FTDI_ELV_USR_PID 0xE000 /* ELV Universal-Sound-Recorder */ | ||
| 174 | #define FTDI_ELV_MSM1_PID 0xE001 /* ELV Mini-Sound-Modul */ | ||
| 175 | #define FTDI_ELV_KL100_PID 0xE002 /* ELV Kfz-Leistungsmesser KL 100 */ | ||
| 176 | #define FTDI_ELV_WS550_PID 0xE004 /* WS 550 */ | ||
| 177 | #define FTDI_ELV_EC3000_PID 0xE006 /* ENERGY CONTROL 3000 USB */ | ||
| 178 | #define FTDI_ELV_WS888_PID 0xE008 /* WS 888 */ | ||
| 179 | #define FTDI_ELV_TWS550_PID 0xE009 /* Technoline WS 550 */ | ||
| 180 | #define FTDI_ELV_FEM_PID 0xE00A /* Funk Energie Monitor */ | ||
| 170 | #define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */ | 181 | #define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */ |
| 171 | #define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */ | 182 | #define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */ |
| 172 | #define FTDI_ELV_HS485_PID 0xE0EA /* USB to RS-485 adapter */ | 183 | #define FTDI_ELV_HS485_PID 0xE0EA /* USB to RS-485 adapter */ |
| 184 | #define FTDI_ELV_UMS100_PID 0xE0EB /* ELV USB Master-Slave Schaltsteckdose UMS 100 */ | ||
| 185 | #define FTDI_ELV_TFD128_PID 0xE0EC /* ELV Temperatur-Feuchte-Datenlogger TFD 128 */ | ||
| 186 | #define FTDI_ELV_FM3RX_PID 0xE0ED /* ELV Messwertuebertragung FM3 RX */ | ||
| 187 | #define FTDI_ELV_WS777_PID 0xE0EE /* Conrad WS 777 */ | ||
| 173 | #define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */ | 188 | #define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */ |
| 174 | #define FTDI_ELV_CSI8_PID 0xE0F0 /* Computer-Schalt-Interface (CSI 8) */ | 189 | #define FTDI_ELV_CSI8_PID 0xE0F0 /* Computer-Schalt-Interface (CSI 8) */ |
| 175 | #define FTDI_ELV_EM1000DL_PID 0xE0F1 /* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */ | 190 | #define FTDI_ELV_EM1000DL_PID 0xE0F1 /* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */ |
| 176 | #define FTDI_ELV_PCK100_PID 0xE0F2 /* PC-Kabeltester (PCK 100) */ | 191 | #define FTDI_ELV_PCK100_PID 0xE0F2 /* PC-Kabeltester (PCK 100) */ |
| 177 | #define FTDI_ELV_RFP500_PID 0xE0F3 /* HF-Leistungsmesser (RFP 500) */ | 192 | #define FTDI_ELV_RFP500_PID 0xE0F3 /* HF-Leistungsmesser (RFP 500) */ |
| 178 | #define FTDI_ELV_FS20SIG_PID 0xE0F4 /* Signalgeber (FS 20 SIG) */ | 193 | #define FTDI_ELV_FS20SIG_PID 0xE0F4 /* Signalgeber (FS 20 SIG) */ |
| 194 | #define FTDI_ELV_UTP8_PID 0xE0F5 /* ELV UTP 8 */ | ||
| 179 | #define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */ | 195 | #define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */ |
| 196 | #define FTDI_ELV_WS444PC_PID 0xE0F7 /* Conrad WS 444 PC */ | ||
| 180 | #define FTDI_PHI_FISCO_PID 0xE40B /* PHI Fisco USB to Serial cable */ | 197 | #define FTDI_PHI_FISCO_PID 0xE40B /* PHI Fisco USB to Serial cable */ |
| 181 | #define FTDI_ELV_UAD8_PID 0xF068 /* USB-AD-Wandler (UAD 8) */ | 198 | #define FTDI_ELV_UAD8_PID 0xF068 /* USB-AD-Wandler (UAD 8) */ |
| 182 | #define FTDI_ELV_UDA7_PID 0xF069 /* USB-DA-Wandler (UDA 7) */ | 199 | #define FTDI_ELV_UDA7_PID 0xF069 /* USB-DA-Wandler (UDA 7) */ |
| @@ -968,6 +985,7 @@ | |||
| 968 | #define PAPOUCH_VID 0x5050 /* Vendor ID */ | 985 | #define PAPOUCH_VID 0x5050 /* Vendor ID */ |
| 969 | #define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ | 986 | #define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ |
| 970 | #define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */ | 987 | #define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */ |
| 988 | #define PAPOUCH_AD4USB_PID 0x8003 /* AD4USB Measurement Module */ | ||
| 971 | 989 | ||
| 972 | /* | 990 | /* |
| 973 | * Marvell SheevaPlug | 991 | * Marvell SheevaPlug |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index ac1b6449fb6a..3eb6143bb646 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
| @@ -298,6 +298,7 @@ static struct usb_device_id id_table [] = { | |||
| 298 | { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */ | 298 | { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */ |
| 299 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist | 299 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist |
| 300 | }, | 300 | }, |
| 301 | { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */ | ||
| 301 | 302 | ||
| 302 | { } | 303 | { } |
| 303 | }; | 304 | }; |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index c932f9053188..49575fba3756 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -941,7 +941,7 @@ UNUSUAL_DEV( 0x07ab, 0xfccd, 0x0000, 0x9999, | |||
| 941 | UNUSUAL_DEV( 0x07af, 0x0004, 0x0100, 0x0133, | 941 | UNUSUAL_DEV( 0x07af, 0x0004, 0x0100, 0x0133, |
| 942 | "Microtech", | 942 | "Microtech", |
| 943 | "USB-SCSI-DB25", | 943 | "USB-SCSI-DB25", |
| 944 | US_SC_SCSI, US_PR_BULK, usb_stor_euscsi_init, | 944 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_euscsi_init, |
| 945 | US_FL_SCM_MULT_TARG ), | 945 | US_FL_SCM_MULT_TARG ), |
| 946 | 946 | ||
| 947 | UNUSUAL_DEV( 0x07af, 0x0005, 0x0100, 0x0100, | 947 | UNUSUAL_DEV( 0x07af, 0x0005, 0x0100, 0x0100, |
diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h index 6f6c5f300af6..bc0fc795bd35 100644 --- a/include/linux/kfifo.h +++ b/include/linux/kfifo.h | |||
| @@ -124,7 +124,7 @@ extern __must_check unsigned int kfifo_out_peek(struct kfifo *fifo, | |||
| 124 | */ | 124 | */ |
| 125 | static inline bool kfifo_initialized(struct kfifo *fifo) | 125 | static inline bool kfifo_initialized(struct kfifo *fifo) |
| 126 | { | 126 | { |
| 127 | return fifo->buffer != 0; | 127 | return fifo->buffer != NULL; |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | /** | 130 | /** |
diff --git a/kernel/kfifo.c b/kernel/kfifo.c index 498cabba225e..35edbe22e9a9 100644 --- a/kernel/kfifo.c +++ b/kernel/kfifo.c | |||
| @@ -80,7 +80,7 @@ int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask) | |||
| 80 | 80 | ||
| 81 | buffer = kmalloc(size, gfp_mask); | 81 | buffer = kmalloc(size, gfp_mask); |
| 82 | if (!buffer) { | 82 | if (!buffer) { |
| 83 | _kfifo_init(fifo, 0, 0); | 83 | _kfifo_init(fifo, NULL, 0); |
| 84 | return -ENOMEM; | 84 | return -ENOMEM; |
| 85 | } | 85 | } |
| 86 | 86 | ||
| @@ -97,6 +97,7 @@ EXPORT_SYMBOL(kfifo_alloc); | |||
| 97 | void kfifo_free(struct kfifo *fifo) | 97 | void kfifo_free(struct kfifo *fifo) |
| 98 | { | 98 | { |
| 99 | kfree(fifo->buffer); | 99 | kfree(fifo->buffer); |
| 100 | _kfifo_init(fifo, NULL, 0); | ||
| 100 | } | 101 | } |
| 101 | EXPORT_SYMBOL(kfifo_free); | 102 | EXPORT_SYMBOL(kfifo_free); |
| 102 | 103 | ||
