On Saturday 30 June 2007, Oliver Neukum wrote:
>Am Samstag, 30. Juni 2007 schrieb Gene Heskett:
>> I was gonna give this a shot to see if it would fix the finickyness of the
>> ftdi serial adaptors, but its got a load of leading white space that
>> prevents it from applying. (with patch that is)
>
>Here's the original patch. The bug reporter never responded. Can you test
> it? Does it apply?
>
>       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;

Sorry Oliver, no use trying even, the search strings here are indented, 
usually 2 spaces, those in the kernels since at least 2.6.21.1, the oldest 
src I still have, are not.

-- 
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)
waste water tank overflowed onto computer

-------------------------------------------------------------------------
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