linux/drivers/net/wireless/zd1211rw
Jussi Kivilinna 59342f6a6b zd1211rw: fix to work on OHCI
zd1211 devices register 'EP 4 OUT' endpoint as Interrupt type on USB 2.0:

      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1

However on USB 1.1 endpoint becomes Bulk:

      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0

Commit 37939810b9 assumed that endpoint is
always interrupt type and changed usb_bulk_msg() calls to usb_interrupt_msg().

Problem here is that usb_bulk_msg() on interrupt endpoint selfcorrects the
call and changes requested pipe to interrupt type (see usb_bulk_msg).
However with usb_interrupt_msg() on bulk endpoint does not correct the
pipe type to bulk, but instead URB is submitted with interrupt type pipe.

So pre-2.6.39 used usb_bulk_msg() and therefore worked with both endpoint
types, however in 2.6.39 usb_interrupt_msg() with bulk endpoint causes
ohci_hcd to fail submitted URB instantly with -ENOSPC and preventing zd1211rw
from working with OHCI.

Fix this by detecting endpoint type and using correct endpoint/pipe types
for URB. Also fix asynchronous zd_usb_iowrite16v_async() to use right
URB type on 'EP 4 OUT'.

Cc: stable@kernel.org
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2011-05-31 14:47:26 -04:00
..
Kconfig
Makefile net: change to new flag variable 2011-03-17 14:05:35 +01:00
zd_chip.c zd1211rw: rename CR* macros to ZD_CR* 2011-04-07 15:34:13 -04:00
zd_chip.h zd1211rw: rename CR* macros to ZD_CR* 2011-04-07 15:34:13 -04:00
zd_def.h zd1211rw: add unlikely to ZD_ASSERT 2011-02-14 15:51:21 -05:00
zd_mac.c mac80211: make tx() operation return void 2011-02-25 15:32:34 -05:00
zd_mac.h zd1211rw: add TX watchdog and device resetting 2011-02-04 16:29:51 -05:00
zd_rf_al2230.c zd1211rw: rename CR* macros to ZD_CR* 2011-04-07 15:34:13 -04:00
zd_rf_al7230b.c zd1211rw: rename CR* macros to ZD_CR* 2011-04-07 15:34:13 -04:00
zd_rf_rf2959.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem 2011-04-12 16:18:44 -04:00
zd_rf_uw2453.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem 2011-04-12 16:18:44 -04:00
zd_rf.c
zd_rf.h zd1211rw: rename CR* macros to ZD_CR* 2011-04-07 15:34:13 -04:00
zd_usb.c zd1211rw: fix to work on OHCI 2011-05-31 14:47:26 -04:00
zd_usb.h Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 2011-04-07 16:45:40 -04:00