Sorry, I can't really try it. I have fedora's 2.6.21 kernel and I
have to leave the machine working for 2 months, so I can't
experiment:)
However, I did try 2.6.21.3 and it had same problem.
On 6/4/07, Oliver Neukum <[EMAIL PROTECTED]> wrote:
> Am Sonntag, 3. Juni 2007 00:53 schrieb John H.:
> > Oliver, can you tell me what I might do to get it working again for
> > now? I can't use usb-uirt without it.
>
> Does this patch fix the issue?
>
> Regards
> Oliver
> ----
>
> --- linux-2.6.22-rc3/drivers/usb/serial/ftdi_sio.c.alt 2007-06-04
> 10:38:45.000000000 +0200
> +++ linux-2.6.22-rc3/drivers/usb/serial/ftdi_sio.c 2007-06-04
> 11:06:27.000000000 +0200
> @@ -271,26 +271,58 @@ static int debug;
> static __u16 vendor = FTDI_VID;
> static __u16 product;
>
> +struct ftdi_private {
> + ftdi_chip_type_t chip_type;
> + /* type of the device, either SIO or
> FT8U232AM */
> + int baud_base; /* baud base clock for divisor setting */
> + int custom_divisor; /* custom_divisor kludge, this is for
> baud_base (different from what goes to the chip!) */
> + __u16 last_set_data_urb_value ;
> + /* the last data state set - needed for doing
> a break */
> + int write_offset; /* This is the offset in the usb data block
> to write the serial data -
> + * it is different between devices
> + */
> + int flags; /* some ASYNC_xxxx flags are supported */
> + unsigned long last_dtr_rts; /* saved modem control outputs */
> + wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */
> + char prev_status, diff_status; /* Used for TIOCMIWAIT */
> + __u8 rx_flags; /* receive state flags (throttling) */
> + spinlock_t rx_lock; /* spinlock for receive state */
> + struct delayed_work rx_work;
> + struct usb_serial_port *port;
> + int rx_processed;
> + unsigned long rx_bytes;
> +
> + __u16 interface; /* FT2232C port interface (0 for FT232/245) */
> +
> + int force_baud; /* if non-zero, force the baud rate to this
> value */
> + int force_rtscts; /* if non-zero, force RTS-CTS to always be
> enabled */
> +
> + spinlock_t tx_lock; /* spinlock for transmit state */
> + unsigned long tx_bytes;
> + unsigned long tx_outstanding_bytes;
> + unsigned long tx_outstanding_urbs;
> +};
> +
> /* struct ftdi_sio_quirk is used by devices requiring special attention. */
> struct ftdi_sio_quirk {
> int (*probe)(struct usb_serial *);
> - void (*setup)(struct usb_serial *); /* Special settings during
> startup. */
> + void (*port_probe)(struct ftdi_private *); /* Special settings for
> probed ports. */
> };
>
> static int ftdi_olimex_probe (struct usb_serial *serial);
> -static void ftdi_USB_UIRT_setup (struct usb_serial *serial);
> -static void ftdi_HE_TIRA1_setup (struct usb_serial *serial);
> +static void ftdi_USB_UIRT_setup (struct ftdi_private *priv);
> +static void ftdi_HE_TIRA1_setup (struct ftdi_private *priv);
>
> static struct ftdi_sio_quirk ftdi_olimex_quirk = {
> .probe = ftdi_olimex_probe,
> };
>
> static struct ftdi_sio_quirk ftdi_USB_UIRT_quirk = {
> - .setup = ftdi_USB_UIRT_setup,
> + .port_probe = ftdi_USB_UIRT_setup,
> };
>
> static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = {
> - .setup = ftdi_HE_TIRA1_setup,
> + .port_probe = ftdi_HE_TIRA1_setup,
> };
>
> /*
> @@ -566,38 +598,6 @@ static const char *ftdi_chip_name[] = {
> #define THROTTLED 0x01
> #define ACTUALLY_THROTTLED 0x02
>
> -struct ftdi_private {
> - ftdi_chip_type_t chip_type;
> - /* type of the device, either SIO or
> FT8U232AM */
> - int baud_base; /* baud base clock for divisor setting */
> - int custom_divisor; /* custom_divisor kludge, this is for
> baud_base (different from what goes to the chip!) */
> - __u16 last_set_data_urb_value ;
> - /* the last data state set - needed for doing
> a break */
> - int write_offset; /* This is the offset in the usb data block
> to write the serial data -
> - * it is different between devices
> - */
> - int flags; /* some ASYNC_xxxx flags are supported */
> - unsigned long last_dtr_rts; /* saved modem control outputs */
> - wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */
> - char prev_status, diff_status; /* Used for TIOCMIWAIT */
> - __u8 rx_flags; /* receive state flags (throttling) */
> - spinlock_t rx_lock; /* spinlock for receive state */
> - struct delayed_work rx_work;
> - struct usb_serial_port *port;
> - int rx_processed;
> - unsigned long rx_bytes;
> -
> - __u16 interface; /* FT2232C port interface (0 for FT232/245) */
> -
> - int force_baud; /* if non-zero, force the baud rate to this
> value */
> - int force_rtscts; /* if non-zero, force RTS-CTS to always be
> enabled */
> -
> - spinlock_t tx_lock; /* spinlock for transmit state */
> - unsigned long tx_bytes;
> - unsigned long tx_outstanding_bytes;
> - unsigned long tx_outstanding_urbs;
> -};
> -
> /* Used for TIOCMIWAIT */
> #define FTDI_STATUS_B0_MASK (FTDI_RS0_CTS | FTDI_RS0_DSR | FTDI_RS0_RI |
> FTDI_RS0_RLSD)
> #define FTDI_STATUS_B1_MASK (FTDI_RS_BI)
> @@ -608,7 +608,6 @@ struct ftdi_private {
>
> /* function prototypes for a FTDI serial converter */
> static int ftdi_sio_probe (struct usb_serial *serial, const struct
> usb_device_id *id);
> -static int ftdi_sio_attach (struct usb_serial *serial);
> static void ftdi_shutdown (struct usb_serial *serial);
> static int ftdi_sio_port_probe (struct usb_serial_port *port);
> static int ftdi_sio_port_remove (struct usb_serial_port *port);
> @@ -662,7 +661,6 @@ static struct usb_serial_driver ftdi_sio
> .ioctl = ftdi_ioctl,
> .set_termios = ftdi_set_termios,
> .break_ctl = ftdi_break_ctl,
> - .attach = ftdi_sio_attach,
> .shutdown = ftdi_shutdown,
> };
>
> @@ -1197,6 +1195,8 @@ static int ftdi_sio_probe (struct usb_se
> static int ftdi_sio_port_probe(struct usb_serial_port *port)
> {
> struct ftdi_private *priv;
> + struct ftdi_sio_quirk *quirk = usb_get_serial_data(port->serial);
> +
>
> dbg("%s",__FUNCTION__);
>
> @@ -1213,6 +1213,9 @@ static int ftdi_sio_port_probe(struct us
> than queue a task to deliver them */
> priv->flags = ASYNC_LOW_LATENCY;
>
> + if (quirk && quirk->port_probe)
> + quirk->port_probe(priv);
> +
> /* Increase the size of read buffers */
> kfree(port->bulk_in_buffer);
> port->bulk_in_buffer = kmalloc (BUFSZ, GFP_KERNEL);
> @@ -1243,29 +1246,13 @@ static int ftdi_sio_port_probe(struct us
> return 0;
> }
>
> -/* attach subroutine */
> -static int ftdi_sio_attach (struct usb_serial *serial)
> -{
> - /* Check for device requiring special set up. */
> - struct ftdi_sio_quirk *quirk = usb_get_serial_data(serial);
> -
> - if (quirk && quirk->setup)
> - quirk->setup(serial);
> -
> - return 0;
> -} /* ftdi_sio_attach */
> -
> -
> /* Setup for the USB-UIRT device, which requires hardwired
> * baudrate (38400 gets mapped to 312500) */
> /* Called from usbserial:serial_probe */
> -static void ftdi_USB_UIRT_setup (struct usb_serial *serial)
> +static void ftdi_USB_UIRT_setup (struct ftdi_private *priv)
> {
> - struct ftdi_private *priv;
> -
> dbg("%s",__FUNCTION__);
>
> - priv = usb_get_serial_port_data(serial->port[0]);
> priv->flags |= ASYNC_SPD_CUST;
> priv->custom_divisor = 77;
> priv->force_baud = B38400;
> @@ -1273,13 +1260,10 @@ static void ftdi_USB_UIRT_setup (struct
>
> /* Setup for the HE-TIRA1 device, which requires hardwired
> * baudrate (38400 gets mapped to 100000) and RTS-CTS enabled. */
> -static void ftdi_HE_TIRA1_setup (struct usb_serial *serial)
> +static void ftdi_HE_TIRA1_setup (struct ftdi_private *priv)
> {
> - struct ftdi_private *priv;
> -
> dbg("%s",__FUNCTION__);
>
> - priv = usb_get_serial_port_data(serial->port[0]);
> priv->flags |= ASYNC_SPD_CUST;
> priv->custom_divisor = 240;
> priv->force_baud = B38400;
>
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel