mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
[PATCH] USB: cypress_m8: add support for the Nokia ca42-version 2 cable
This patch adds support for the Nokia ca42 version 2 cable to the cypress_m8 driver. The device was tested by others with this patch and found to be compatible with the cypress_m8 driver. A special note should be taken that this cable seems to vary in the type of chipset used. This patch supports the cable with product id 0x4101. Signed-off-by: Lonnie Mendez <lmendez19@austin.rr.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
a847423905
commit
a5c44e29e5
@ -98,10 +98,16 @@ static struct usb_device_id id_table_cyphidcomrs232 [] = {
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
static struct usb_device_id id_table_nokiaca42v2 [] = {
|
||||
{ USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
static struct usb_device_id id_table_combined [] = {
|
||||
{ USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB) },
|
||||
{ USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
|
||||
{ USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
|
||||
{ USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
@ -149,6 +155,7 @@ struct cypress_buf {
|
||||
/* function prototypes for the Cypress USB to serial device */
|
||||
static int cypress_earthmate_startup (struct usb_serial *serial);
|
||||
static int cypress_hidcom_startup (struct usb_serial *serial);
|
||||
static int cypress_ca42v2_startup (struct usb_serial *serial);
|
||||
static void cypress_shutdown (struct usb_serial *serial);
|
||||
static int cypress_open (struct usb_serial_port *port, struct file *filp);
|
||||
static void cypress_close (struct usb_serial_port *port, struct file *filp);
|
||||
@ -235,6 +242,34 @@ static struct usb_serial_driver cypress_hidcom_device = {
|
||||
.write_int_callback = cypress_write_int_callback,
|
||||
};
|
||||
|
||||
static struct usb_serial_driver cypress_ca42v2_device = {
|
||||
.driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "nokiaca42v2",
|
||||
},
|
||||
.description = "Nokia CA-42 V2 Adapter",
|
||||
.id_table = id_table_nokiaca42v2,
|
||||
.num_interrupt_in = 1,
|
||||
.num_interrupt_out = 1,
|
||||
.num_bulk_in = NUM_DONT_CARE,
|
||||
.num_bulk_out = NUM_DONT_CARE,
|
||||
.num_ports = 1,
|
||||
.attach = cypress_ca42v2_startup,
|
||||
.shutdown = cypress_shutdown,
|
||||
.open = cypress_open,
|
||||
.close = cypress_close,
|
||||
.write = cypress_write,
|
||||
.write_room = cypress_write_room,
|
||||
.ioctl = cypress_ioctl,
|
||||
.set_termios = cypress_set_termios,
|
||||
.tiocmget = cypress_tiocmget,
|
||||
.tiocmset = cypress_tiocmset,
|
||||
.chars_in_buffer = cypress_chars_in_buffer,
|
||||
.throttle = cypress_throttle,
|
||||
.unthrottle = cypress_unthrottle,
|
||||
.read_int_callback = cypress_read_int_callback,
|
||||
.write_int_callback = cypress_write_int_callback,
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Cypress serial helper functions
|
||||
@ -286,6 +321,12 @@ static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_m
|
||||
__FUNCTION__);
|
||||
new_baudrate = priv->baud_rate;
|
||||
}
|
||||
} else if (priv->chiptype == CT_CA42V2) {
|
||||
if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
|
||||
err("%s - failed setting baud rate, unsupported speed",
|
||||
__FUNCTION__);
|
||||
new_baudrate = priv->baud_rate;
|
||||
}
|
||||
} else if (priv->chiptype == CT_GENERIC) {
|
||||
if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
|
||||
err("%s - failed setting baud rate, unsupported speed",
|
||||
@ -499,6 +540,25 @@ static int cypress_hidcom_startup (struct usb_serial *serial)
|
||||
} /* cypress_hidcom_startup */
|
||||
|
||||
|
||||
static int cypress_ca42v2_startup (struct usb_serial *serial)
|
||||
{
|
||||
struct cypress_private *priv;
|
||||
|
||||
dbg("%s", __FUNCTION__);
|
||||
|
||||
if (generic_startup(serial)) {
|
||||
dbg("%s - Failed setting up port %d", __FUNCTION__,
|
||||
serial->port[0]->number);
|
||||
return 1;
|
||||
}
|
||||
|
||||
priv = usb_get_serial_port_data(serial->port[0]);
|
||||
priv->chiptype = CT_CA42V2;
|
||||
|
||||
return 0;
|
||||
} /* cypress_ca42v2_startup */
|
||||
|
||||
|
||||
static void cypress_shutdown (struct usb_serial *serial)
|
||||
{
|
||||
struct cypress_private *priv;
|
||||
@ -943,6 +1003,10 @@ static void cypress_set_termios (struct usb_serial_port *port,
|
||||
*(tty->termios) = tty_std_termios;
|
||||
tty->termios->c_cflag = B9600 | CS8 | CREAD | HUPCL |
|
||||
CLOCAL;
|
||||
} else if (priv->chiptype == CT_CA42V2) {
|
||||
*(tty->termios) = tty_std_termios;
|
||||
tty->termios->c_cflag = B9600 | CS8 | CREAD | HUPCL |
|
||||
CLOCAL;
|
||||
}
|
||||
priv->termios_initialized = 1;
|
||||
}
|
||||
@ -1541,6 +1605,9 @@ static int __init cypress_init(void)
|
||||
retval = usb_serial_register(&cypress_hidcom_device);
|
||||
if (retval)
|
||||
goto failed_hidcom_register;
|
||||
retval = usb_serial_register(&cypress_ca42v2_device);
|
||||
if (retval)
|
||||
goto failed_ca42v2_register;
|
||||
retval = usb_register(&cypress_driver);
|
||||
if (retval)
|
||||
goto failed_usb_register;
|
||||
@ -1549,6 +1616,8 @@ static int __init cypress_init(void)
|
||||
return 0;
|
||||
failed_usb_register:
|
||||
usb_deregister(&cypress_driver);
|
||||
failed_ca42v2_register:
|
||||
usb_serial_deregister(&cypress_ca42v2_device);
|
||||
failed_hidcom_register:
|
||||
usb_serial_deregister(&cypress_hidcom_device);
|
||||
failed_em_register:
|
||||
@ -1565,6 +1634,7 @@ static void __exit cypress_exit (void)
|
||||
usb_deregister (&cypress_driver);
|
||||
usb_serial_deregister (&cypress_earthmate_device);
|
||||
usb_serial_deregister (&cypress_hidcom_device);
|
||||
usb_serial_deregister (&cypress_ca42v2_device);
|
||||
}
|
||||
|
||||
|
||||
|
@ -18,6 +18,10 @@
|
||||
/* Cypress HID->COM RS232 Adapter */
|
||||
#define VENDOR_ID_CYPRESS 0x04b4
|
||||
#define PRODUCT_ID_CYPHIDCOM 0x5500
|
||||
|
||||
/* Nokia CA-42 USB to serial cable */
|
||||
#define VENDOR_ID_DAZZLE 0x07d0
|
||||
#define PRODUCT_ID_CA42 0x4101
|
||||
/* End of device listing */
|
||||
|
||||
/* Used for setting / requesting serial line settings */
|
||||
@ -34,6 +38,7 @@
|
||||
|
||||
#define CT_EARTHMATE 0x01
|
||||
#define CT_CYPHIDCOM 0x02
|
||||
#define CT_CA42V2 0x03
|
||||
#define CT_GENERIC 0x0F
|
||||
/* End of chiptype definitions */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user