USB: Serial: cypress_M8: Enable FRWD Dongle hidcom device
The patch adds a new HIDCOM device and does not affect other devices driven by the cypress_M8 module. Changes are: - add VendorID ProductID to device tables - skip unstable speed check because FRWD uses 115200bps - skip reset at probe which is an issue workaround for this particular device. Signed-off-by: Robert Butora <robert.butora.fi@gmail.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
077f5f1c23
commit
6529591e3e
2 changed files with 21 additions and 1 deletions
|
@ -65,6 +65,7 @@ static const struct usb_device_id id_table_earthmate[] = {
|
|||
static const struct usb_device_id id_table_cyphidcomrs232[] = {
|
||||
{ USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
|
||||
{ USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
|
||||
{ USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
|
@ -78,6 +79,7 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
|
||||
{ USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
|
||||
{ USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
|
||||
{ USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
|
||||
{ USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
@ -229,6 +231,12 @@ static struct usb_serial_driver * const serial_drivers[] = {
|
|||
* Cypress serial helper functions
|
||||
*****************************************************************************/
|
||||
|
||||
/* FRWD Dongle hidcom needs to skip reset and speed checks */
|
||||
static inline bool is_frwd(struct usb_device *dev)
|
||||
{
|
||||
return ((le16_to_cpu(dev->descriptor.idVendor) == VENDOR_ID_FRWD) &&
|
||||
(le16_to_cpu(dev->descriptor.idProduct) == PRODUCT_ID_CYPHIDCOM_FRWD));
|
||||
}
|
||||
|
||||
static int analyze_baud_rate(struct usb_serial_port *port, speed_t new_rate)
|
||||
{
|
||||
|
@ -238,6 +246,10 @@ static int analyze_baud_rate(struct usb_serial_port *port, speed_t new_rate)
|
|||
if (unstable_bauds)
|
||||
return new_rate;
|
||||
|
||||
/* FRWD Dongle uses 115200 bps */
|
||||
if (is_frwd(port->serial->dev))
|
||||
return new_rate;
|
||||
|
||||
/*
|
||||
* The general purpose firmware for the Cypress M8 allows for
|
||||
* a maximum speed of 57600bps (I have no idea whether DeLorme
|
||||
|
@ -448,7 +460,11 @@ static int cypress_generic_port_probe(struct usb_serial_port *port)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
usb_reset_configuration(serial->dev);
|
||||
/* Skip reset for FRWD device. It is a workaound:
|
||||
device hangs if it receives SET_CONFIGURE in Configured
|
||||
state. */
|
||||
if (!is_frwd(serial->dev))
|
||||
usb_reset_configuration(serial->dev);
|
||||
|
||||
priv->cmd_ctrl = 0;
|
||||
priv->line_control = 0;
|
||||
|
|
|
@ -24,6 +24,10 @@
|
|||
#define VENDOR_ID_CYPRESS 0x04b4
|
||||
#define PRODUCT_ID_CYPHIDCOM 0x5500
|
||||
|
||||
/* FRWD Dongle - a GPS sports watch */
|
||||
#define VENDOR_ID_FRWD 0x6737
|
||||
#define PRODUCT_ID_CYPHIDCOM_FRWD 0x0001
|
||||
|
||||
/* Powercom UPS, chip CY7C63723 */
|
||||
#define VENDOR_ID_POWERCOM 0x0d9f
|
||||
#define PRODUCT_ID_UPS 0x0002
|
||||
|
|
Loading…
Reference in a new issue