cypress_m8: Don't issue GET_CONFIG for certain devices

From: Mike Isely <[EMAIL PROTECTED]>

Earthmate LT-20 devices (both "old" and "new" versions) can't tolerate
a GET_CONFIG command.  The original Earthmate has no trouble with
this.  Presumably other non-Earthmate devices are still OK as well.
This change disables the use of GET_CONFIG for cases where it is known
not to work.

Signed-off-by: Mike Isely <[EMAIL PROTECTED]>

---
 cypress_m8.c |   21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

---

diff -uprN -X linux-2.6.23.12-vanilla/Documentation/dontdiff 
cypress_patch_02_pkt_fmt/drivers/usb/serial/cypress_m8.c 
cypress_patch_03_get_config/drivers/usb/serial/cypress_m8.c
--- cypress_patch_02_pkt_fmt/drivers/usb/serial/cypress_m8.c    2008-02-10 
19:36:51.000000000 -0600
+++ cypress_patch_03_get_config/drivers/usb/serial/cypress_m8.c 2008-02-10 
19:37:31.000000000 -0600
@@ -143,6 +143,7 @@ struct cypress_private {
        __u8 current_config;               /* stores the current configuration 
byte */
        __u8 rx_flags;                     /* throttling - used from 
whiteheat/ftdi_sio */
        enum packet_format pkt_fmt;        /* format to use for packet send / 
receive */
+       int get_cfg_unsafe;                /* If true, the CYPRESS_GET_CONFIG 
is unsafe */
        int baud_rate;                     /* stores current baud rate in 
integer form */
        int cbr_mask;                      /* stores current baud rate in 
masked form */
        int isthrottled;                   /* if throttled, discard reads */
@@ -395,6 +396,12 @@ static int cypress_serial_control (struc
                        }
                break;
                case CYPRESS_GET_CONFIG:
+                       if (priv->get_cfg_unsafe) {
+                               /* Not implemented for this device,
+                                  and if we try to do it we're likely
+                                  to crash the hardware. */
+                               return -ENOTTY;
+                       }
                        dbg("%s - retreiving serial line settings", 
__FUNCTION__);
                        /* set initial values in feature buffer */
                        memset(feature_buffer, 0, sizeof(feature_buffer));
@@ -560,20 +567,30 @@ static int generic_startup (struct usb_s
 static int cypress_earthmate_startup (struct usb_serial *serial)
 {
        struct cypress_private *priv;
+       struct usb_serial_port *port = serial->port[0];
 
        dbg("%s", __FUNCTION__);
 
        if (generic_startup(serial)) {
                dbg("%s - Failed setting up port %d", __FUNCTION__,
-                               serial->port[0]->number);
+                               port->number);
                return 1;
        }
 
-       priv = usb_get_serial_port_data(serial->port[0]);
+       priv = usb_get_serial_port_data(port);
        priv->chiptype = CT_EARTHMATE;
        /* All Earthmate devices use the separated-count packet
           format!  Idiotic. */
        priv->pkt_fmt = packet_format_1;
+       if (serial->dev->descriptor.idProduct != PRODUCT_ID_EARTHMATEUSB) {
+               /* The old original USB Earthmate seemed able to
+                  handle GET_CONFIG requests; everything they've
+                  produced since that time crashes if this command is
+                  attempted :-( */
+               dbg("%s - Marking this device as unsafe for GET_CONFIG 
commands",
+                   __FUNCTION__);
+               priv->get_cfg_unsafe = !0;
+       }
 
        return 0;
 } /* cypress_earthmate_startup */

-- 
                        |         Mike Isely          |     PGP fingerprint
     Spammers Die!!     |                             | 03 54 43 4D 75 E5 CC 92
                        |   isely @ pobox (dot) com   | 71 16 01 E2 B5 F5 C1 E8
                        |                             |
-
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to