Hi,
Here's a patch against 2.4.10-ac2 that sets the DTR line high on
initialization, and fixes a problem with getting the module reference
out of whack when removing a device when a program still had the port
open.
Yes, RTS/DTR line control is not implemented yet, but by raising DTR all
the time, it fixes the majority of problems people have reported so far :)
thanks,
greg k-h
diff --minimal -Nru a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
--- a/drivers/usb/serial/pl2303.c Mon Oct 1 13:31:58 2001
+++ b/drivers/usb/serial/pl2303.c Mon Oct 1 13:31:58 2001
@@ -103,6 +103,7 @@
static int pl2303_write (struct usb_serial_port *port, int from_user,
const unsigned char *buf, int count);
static void pl2303_break_ctl(struct usb_serial_port *port,int break_state);
+static void pl2303_shutdown (struct usb_serial *serial);
/* All of the device info needed for the PL2303 SIO serial converter */
@@ -125,6 +126,7 @@
read_bulk_callback: pl2303_read_bulk_callback,
read_int_callback: pl2303_read_int_callback,
write_bulk_callback: pl2303_write_bulk_callback,
+ shutdown: pl2303_shutdown,
};
@@ -289,7 +291,7 @@
i = usb_control_msg (serial->dev, usb_sndctrlpipe (serial->dev, 0),
SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
- 0, 0, NULL, 0, 100);
+ 1, 0, NULL, 0, 100);
dbg ("0x21:0x22:1:0 %d", i);
#if 0
i = usb_control_msg (serial->dev, usb_sndctrlpipe (serial->dev, 0),
@@ -439,16 +441,8 @@
}
-static int
-pl2303_ioctl (struct usb_serial_port *port, struct file *file,
- unsigned int cmd, unsigned long arg)
+static int pl2303_ioctl (struct usb_serial_port *port, struct file *file, unsigned
+int cmd, unsigned long arg)
{
-// struct usb_serial *serial = port->serial;
-// __u16 urb_value=0; /* Will hold the new flags */
-// char buf[1];
-// int ret, mask;
-
-
dbg ("pl2303_sio ioctl 0x%04x", cmd);
/* Based on code from acm.c and others */
@@ -473,7 +467,6 @@
return(-ENOIOCTLCMD);
break;
}
- dbg ("pl2303_ioctl returning 0");
return 0;
}
@@ -498,6 +491,19 @@
0, NULL, 0, 100);
if (result)
dbg (__FUNCTION__" - error sending break = %d", result);
+}
+
+
+static void pl2303_shutdown (struct usb_serial *serial)
+{
+ int i;
+
+ dbg (__FUNCTION__);
+
+ /* stop everything on all ports */
+ for (i = 0; i < serial->num_ports; ++i)
+ while (serial->port[i].open_count > 0)
+ pl2303_close (&serial->port[i], NULL);
}
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel