Re: Re: Kernel 2.6 and Linksys WUSB11 2.8 error...
Joerg Albert <[email protected]>
| Newsgroups | gmane.linux.drivers.at76c503a.user |
|---|---|
| Message-ID | <[email protected]> |
Hi Rob, On Thu, 8 Jan 2004, Robert Burns wrote: > Well, I guess the driver is working now (???). wlan0 is now being > registered correctly. I still can't ping my router. Here's what I did: it won't run if your previous errors: > at76c503.c: config descriptor too short (expected >= 32, got 25) > at76c503.c: unexpected opmode 224 are still in the syslog. The driver should really remove wlan0 in this case, but it currently does not. The WUSB11 v2.8 contains a AT76C505A with RFM2958 radio - as the Fiberline WL-240U - and the driver has some problems with both (and I don't own such a device (yet) :-|). The above error means that the device hasn't changed its USB config descriptor after the USB reset. Please try the attached patch (against 0.12beta4) and watch for these msgs in syslog: "update_usb_intf_descr returned xxx, n. try" "giving up to get correct config descr" (bad - error is still there) "update_usb_intf_descr needed %d tries" (good - it worked) The patch simply tries to repeat the failed op 7 times. /Jörg
short_descr.patch
(text/plain, 1.1 KB)
Index: at76c503.c
===================================================================
RCS file: /cvsroot/at76c503a/at76c503a/at76c503.c,v
retrieving revision 1.41
diff -u -r1.41 at76c503.c
--- at76c503.c 4 Jan 2004 22:31:30 -0000 1.41
+++ at76c503.c 9 Jan 2004 20:59:28 -0000
@@ -2476,7 +2476,24 @@
the interface descr. are changed.
This procedure reads the configuration and does a limited parsing of
the interface and endpoint descriptors */
- update_usb_intf_descr(dev->udev);
+ /* jal: try several times, as 505A+RFMD2958 seems to
+ report the old descriptor on first try */
+ {
+ int nr = 0;
+ ret = -EINVAL;
+ do {
+ ret=update_usb_intf_descr(dev->udev);
+ if (ret)
+ err("update_usb_intf_descr returned"
+ " %d, %d. try",ret,nr);
+ nr++;
+ } while (nr < 8 && (ret));
+ if (ret)
+ err("giving up to get correct config descr");
+ else
+ dbg_uc("update_usb_intf_descr needed %d tries",
+ nr);
+ }
op_mode = get_op_mode(dev->udev);
dbg(DBG_DEVSTART, "opmode %d", op_mode);