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/
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to