On Monday 02 July 2007, Oliver Neukum wrote: >Hi, > >this one fixes an oops with quirky ftdi_sio devices. As it fixes a >regression, I propose that it be included in 2.6.22 > > Regards > Oliver >Signed-off-by: Oliver Neukum <[EMAIL PROTECTED]>
Is this exactly the same patch you just sent me? >From dmesg after applying that one: [EMAIL PROTECTED] ~]# dmesg |grep ftdi ftdi_sio 3-3.2:1.0: usb_probe_interface ftdi_sio 3-3.2:1.0: usb_probe_interface - got id ftdi_sio 3-3.2:1.0: FTDI USB Serial Device converter detected drivers/usb/serial/ftdi_sio.c: Detected FT232RL usbcore: registered new interface driver ftdi_sio drivers/usb/serial/ftdi_sio.c: v1.4.3:USB FTDI Serial Converters Driver And so far its looking good, more later. >------- > >--- 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 -- Cheers, Gene "There are four boxes to be used in defense of liberty: soap, ballot, jury, and ammo. Please use in that order." -Ed Howdershelt (Author) intoxicated, adj.: When you feel sophisticated without being able to pronounce it. ------------------------------------------------------------------------- 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