Hi,
the following patch reduces the amount of garbage data sent by
the device after open (must be the heat here causing trouble).
Please apply.
J�rgen
Move the vendor-specific device reset from probe to open to
reduce spurious data.
Signed-off-by: Juergen Stuber <[EMAIL PROTECTED]>
diff -uprN -X dontdiff linux-2.6.8-rc3/drivers/usb/misc/legousbtower.c
linux-2.6.8-rc3-legousbtower-0.96/drivers/usb/misc/legousbtower.c
--- linux-2.6.8-rc3/drivers/usb/misc/legousbtower.c 2004-08-03 23:27:37.000000000
+0200
+++ linux-2.6.8-rc3-legousbtower-0.96/drivers/usb/misc/legousbtower.c 2004-08-04
01:38:47.000000000 +0200
@@ -71,6 +71,8 @@
* - make device locking interruptible
* 2004-04-30 - 0.95 Juergen Stuber <[EMAIL PROTECTED]>
* - check for valid udev on resubmitting and unlinking urbs
+ * 2004-08-03 - 0.96 Juergen Stuber <[EMAIL PROTECTED]>
+ * - move reset into open to clean out spurious data
*/
#include <linux/config.h>
@@ -98,7 +100,7 @@
/* Version Information */
-#define DRIVER_VERSION "v0.95"
+#define DRIVER_VERSION "v0.96"
#define DRIVER_AUTHOR "Juergen Stuber <[EMAIL PROTECTED]>"
#define DRIVER_DESC "LEGO USB Tower Driver"
@@ -341,6 +343,8 @@ static int tower_open (struct inode *ino
int subminor;
int retval = 0;
struct usb_interface *interface;
+ struct tower_reset_reply reset_reply;
+ int result;
dbg(2, "%s: enter", __FUNCTION__);
@@ -377,6 +381,22 @@ static int tower_open (struct inode *ino
}
dev->open_count = 1;
+ /* reset the tower */
+ result = usb_control_msg (dev->udev,
+ usb_rcvctrlpipe(dev->udev, 0),
+ LEGO_USB_TOWER_REQUEST_RESET,
+ USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE,
+ 0,
+ 0,
+ &reset_reply,
+ sizeof(reset_reply),
+ HZ);
+ if (result < 0) {
+ err("LEGO USB Tower reset control request failed");
+ retval = result;
+ goto unlock_exit;
+ }
+
/* initialize in direction */
dev->read_buffer_length = 0;
dev->read_packet_length = 0;
@@ -827,7 +847,6 @@ static int tower_probe (struct usb_inter
struct lego_usb_tower *dev = NULL;
struct usb_host_interface *iface_desc;
struct usb_endpoint_descriptor* endpoint;
- struct tower_reset_reply reset_reply;
struct tower_get_version_reply get_version_reply;
int i;
int retval = -ENOMEM;
@@ -950,22 +969,6 @@ static int tower_probe (struct usb_inter
/* let the user know what node this device is now attached to */
info ("LEGO USB Tower #%d now attached to major %d minor %d", (dev->minor -
LEGO_USB_TOWER_MINOR_BASE), USB_MAJOR, dev->minor);
- /* reset the tower */
- result = usb_control_msg (udev,
- usb_rcvctrlpipe(udev, 0),
- LEGO_USB_TOWER_REQUEST_RESET,
- USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE,
- 0,
- 0,
- &reset_reply,
- sizeof(reset_reply),
- HZ);
- if (result < 0) {
- err("LEGO USB Tower reset control request failed");
- retval = result;
- goto error;
- }
-
/* get the firmware version and log it */
result = usb_control_msg (udev,
usb_rcvctrlpipe(udev, 0),
--
J�rgen Stuber <[EMAIL PROTECTED]>
http://www.jstuber.net/
gnupg key fingerprint = 2767 CA3C 5680 58BA 9A91 23D9 BED6 9A7A AF9E 68B4
-------------------------------------------------------
This SF.Net email is sponsored by OSTG. Have you noticed the changes on
Linux.com, ITManagersJournal and NewsForge in the past few weeks? Now,
one more big change to announce. We are now OSTG- Open Source Technology
Group. Come see the changes on the new OSTG site. www.ostg.com
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel