USB serial updates for 6.19-rc1
Here are the USB serial updates for 6.19-rc1:
- fix belkin_sa and kobil_sct TIOCMBIS and TIOCMBIC ioctls
- match on interface number for dual-port ftdi devices with reserved
jtag port
- do not log reserved ftdi jtag ports on probe
- apply ftdi_sio NDI quirk remapping 19200 bps consistently
- drop ftdi_sio NDI quirk module parameter
- clean up ftdi_sio quirk implementations
- add more modem device ids
Included are also various clean ups.
All have been in linux-next with no reported issues.
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQQHbPq+cpGvN/peuzMLxc3C7H1lCAUCaSgIYwAKCRALxc3C7H1l
CJNkAP4nUci9snQxOwALfxIb5d4qBgeyHtqA2JO1BNENztExtgEA1vrCIWZJ7uFS
H60jvRQXtNaNJmn5Zgu0gQMbPk1SWwM=
=VLLU
-----END PGP SIGNATURE-----
Merge tag 'usb-serial-6.19-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-next
Johan writes:
USB serial updates for 6.19-rc1
Here are the USB serial updates for 6.19-rc1:
- fix belkin_sa and kobil_sct TIOCMBIS and TIOCMBIC ioctls
- match on interface number for dual-port ftdi devices with reserved
jtag port
- do not log reserved ftdi jtag ports on probe
- apply ftdi_sio NDI quirk remapping 19200 bps consistently
- drop ftdi_sio NDI quirk module parameter
- clean up ftdi_sio quirk implementations
- add more modem device ids
Included are also various clean ups.
All have been in linux-next with no reported issues.
* tag 'usb-serial-6.19-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial:
USB: serial: option: move Telit 0x10c7 composition in the right place
USB: serial: option: add Telit Cinterion FE910C04 new compositions
USB: serial: option: add Foxconn T99W760
USB: serial: ftdi_sio: drop NDI quirk module parameter
USB: serial: ftdi_sio: clean up NDI speed hack
USB: serial: ftdi_sio: enable NDI speed hack consistently
USB: serial: ftdi_sio: rename quirk symbols
USB: serial: ftdi_sio: clean up quirk comments
USB: serial: ftdi_sio: rewrite 8u2232c quirk
USB: serial: ftdi_sio: silence jtag probe
USB: serial: ftdi_sio: match on interface number for jtag
USB: serial: kobil_sct: drop unnecessary initialisations
USB: serial: kobil_sct: clean up set_termios()
USB: serial: kobil_sct: add control request helpers
USB: serial: kobil_sct: clean up device type checks
USB: serial: kobil_sct: clean up tiocmset()
USB: serial: belkin_sa: clean up tiocmset()
USB: serial: kobil_sct: fix TIOCMBIS and TIOCMBIC
USB: serial: belkin_sa: fix TIOCMBIS and TIOCMBIC
pull/1354/merge
commit
c7bbc43a17
|
|
@ -435,43 +435,39 @@ static int belkin_sa_tiocmset(struct tty_struct *tty,
|
|||
struct belkin_sa_private *priv = usb_get_serial_port_data(port);
|
||||
unsigned long control_state;
|
||||
unsigned long flags;
|
||||
int retval;
|
||||
int rts = 0;
|
||||
int dtr = 0;
|
||||
int retval = 0;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
control_state = priv->control_state;
|
||||
|
||||
if (set & TIOCM_RTS) {
|
||||
if (set & TIOCM_RTS)
|
||||
control_state |= TIOCM_RTS;
|
||||
rts = 1;
|
||||
}
|
||||
if (set & TIOCM_DTR) {
|
||||
if (set & TIOCM_DTR)
|
||||
control_state |= TIOCM_DTR;
|
||||
dtr = 1;
|
||||
}
|
||||
if (clear & TIOCM_RTS) {
|
||||
if (clear & TIOCM_RTS)
|
||||
control_state &= ~TIOCM_RTS;
|
||||
rts = 0;
|
||||
}
|
||||
if (clear & TIOCM_DTR) {
|
||||
if (clear & TIOCM_DTR)
|
||||
control_state &= ~TIOCM_DTR;
|
||||
dtr = 0;
|
||||
}
|
||||
|
||||
priv->control_state = control_state;
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
retval = BSA_USB_CMD(BELKIN_SA_SET_RTS_REQUEST, rts);
|
||||
if (retval < 0) {
|
||||
dev_err(&port->dev, "Set RTS error %d\n", retval);
|
||||
goto exit;
|
||||
if ((set | clear) & TIOCM_RTS) {
|
||||
retval = BSA_USB_CMD(BELKIN_SA_SET_RTS_REQUEST,
|
||||
!!(control_state & TIOCM_RTS));
|
||||
if (retval < 0) {
|
||||
dev_err(&port->dev, "Set RTS error %d\n", retval);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
retval = BSA_USB_CMD(BELKIN_SA_SET_DTR_REQUEST, dtr);
|
||||
if (retval < 0) {
|
||||
dev_err(&port->dev, "Set DTR error %d\n", retval);
|
||||
goto exit;
|
||||
if ((set | clear) & TIOCM_DTR) {
|
||||
retval = BSA_USB_CMD(BELKIN_SA_SET_DTR_REQUEST,
|
||||
!!(control_state & TIOCM_DTR));
|
||||
if (retval < 0) {
|
||||
dev_err(&port->dev, "Set DTR error %d\n", retval);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
exit:
|
||||
return retval;
|
||||
|
|
|
|||
|
|
@ -107,26 +107,24 @@ struct ftdi_quirk {
|
|||
};
|
||||
|
||||
static int ftdi_jtag_probe(struct usb_serial *serial);
|
||||
static int ftdi_NDI_device_setup(struct usb_serial *serial);
|
||||
static int ftdi_stmclite_probe(struct usb_serial *serial);
|
||||
static int ftdi_8u2232c_probe(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 void ftdi_usb_uirt_setup(struct ftdi_private *priv);
|
||||
static void ftdi_he_tira1_setup(struct ftdi_private *priv);
|
||||
|
||||
static const struct ftdi_quirk ftdi_jtag_quirk = {
|
||||
.probe = ftdi_jtag_probe,
|
||||
};
|
||||
|
||||
static const struct ftdi_quirk ftdi_NDI_device_quirk = {
|
||||
.probe = ftdi_NDI_device_setup,
|
||||
static const struct ftdi_quirk ftdi_ndi_quirk = {
|
||||
};
|
||||
|
||||
static const struct ftdi_quirk ftdi_USB_UIRT_quirk = {
|
||||
.port_probe = ftdi_USB_UIRT_setup,
|
||||
static const struct ftdi_quirk ftdi_usb_uirt_quirk = {
|
||||
.port_probe = ftdi_usb_uirt_setup,
|
||||
};
|
||||
|
||||
static const struct ftdi_quirk ftdi_HE_TIRA1_quirk = {
|
||||
.port_probe = ftdi_HE_TIRA1_setup,
|
||||
static const struct ftdi_quirk ftdi_he_tira1_quirk = {
|
||||
.port_probe = ftdi_he_tira1_setup,
|
||||
};
|
||||
|
||||
static const struct ftdi_quirk ftdi_stmclite_quirk = {
|
||||
|
|
@ -590,9 +588,9 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(OCT_VID, OCT_US101_PID) },
|
||||
{ USB_DEVICE(OCT_VID, OCT_DK201_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_HE_TIRA1_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_HE_TIRA1_quirk },
|
||||
.driver_info = (kernel_ulong_t)&ftdi_he_tira1_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_USB_UIRT_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_USB_UIRT_quirk },
|
||||
.driver_info = (kernel_ulong_t)&ftdi_usb_uirt_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_1) },
|
||||
{ USB_DEVICE(FTDI_VID, PROTEGO_R2X0) },
|
||||
{ USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_3) },
|
||||
|
|
@ -628,10 +626,8 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_TAVIR_STK500_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_TIAO_UMPA_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, FTDI_TIAO_UMPA_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, FTDI_NT_ORIONLXM_PID, 1) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLX_PLUS_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NT_ORION_IO_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NT_ORIONMX_PID) },
|
||||
|
|
@ -794,17 +790,17 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13U_PID) },
|
||||
{ USB_DEVICE(ELEKTOR_VID, ELEKTOR_FT323R_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NDI_HUC_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
|
||||
.driver_info = (kernel_ulong_t)&ftdi_ndi_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NDI_SPECTRA_SCU_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
|
||||
.driver_info = (kernel_ulong_t)&ftdi_ndi_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NDI_FUTURE_2_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
|
||||
.driver_info = (kernel_ulong_t)&ftdi_ndi_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NDI_FUTURE_3_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
|
||||
.driver_info = (kernel_ulong_t)&ftdi_ndi_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
|
||||
.driver_info = (kernel_ulong_t)&ftdi_ndi_quirk },
|
||||
{ USB_DEVICE(FTDI_NDI_VID, FTDI_NDI_EMGUIDE_GEMINI_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
|
||||
.driver_info = (kernel_ulong_t)&ftdi_ndi_quirk },
|
||||
{ USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
|
||||
{ USB_DEVICE(NOVITUS_VID, NOVITUS_BONO_E_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, RTSYSTEMS_USB_VX8_PID) },
|
||||
|
|
@ -842,24 +838,17 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(FTDI_VID, FTDI_ELSTER_UNICOM_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_PROPOX_JTAGCABLEII_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_PROPOX_ISPCABLEIII_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, CYBER_CORTEX_AV_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, CYBER_CORTEX_AV_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(OLIMEX_VID, OLIMEX_ARM_USB_OCD_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(OLIMEX_VID, OLIMEX_ARM_USB_OCD_H_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(OLIMEX_VID, OLIMEX_ARM_USB_TINY_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(OLIMEX_VID, OLIMEX_ARM_USB_TINY_H_PID, 1) },
|
||||
{ USB_DEVICE(FIC_VID, FIC_NEO1973_DEBUG_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_OOCDLINK_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, LMI_LM3S_DEVEL_BOARD_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, LMI_LM3S_EVAL_BOARD_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, LMI_LM3S_ICDI_BOARD_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_TURTELIZER_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FIC_VID, FIC_NEO1973_DEBUG_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, FTDI_OOCDLINK_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, LMI_LM3S_DEVEL_BOARD_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, LMI_LM3S_EVAL_BOARD_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, LMI_LM3S_ICDI_BOARD_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, FTDI_TURTELIZER_PID, 1) },
|
||||
{ USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },
|
||||
{ USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_SCU18) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) },
|
||||
|
|
@ -901,17 +890,14 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(ATMEL_VID, STK541_PID) },
|
||||
{ USB_DEVICE(DE_VID, STB_PID) },
|
||||
{ USB_DEVICE(DE_VID, WHT_PID) },
|
||||
{ USB_DEVICE(ADI_VID, ADI_GNICE_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(ADI_VID, ADI_GNICEPLUS_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(ADI_VID, ADI_GNICE_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(ADI_VID, ADI_GNICEPLUS_PID, 1) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(MICROCHIP_VID, MICROCHIP_USB_BOARD_PID,
|
||||
USB_CLASS_VENDOR_SPEC,
|
||||
USB_SUBCLASS_VENDOR_SPEC, 0x00) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(ACTEL_VID, MICROSEMI_ARROW_SF2PLUS_BOARD_PID, 2) },
|
||||
{ USB_DEVICE(JETI_VID, JETI_SPC1201_PID) },
|
||||
{ USB_DEVICE(MARVELL_VID, MARVELL_SHEEVAPLUG_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(MARVELL_VID, MARVELL_SHEEVAPLUG_PID, 1) },
|
||||
{ USB_DEVICE(LARSENBRUSGAARD_VID, LB_ALTITRACK_PID) },
|
||||
{ USB_DEVICE(GN_OTOMETRICS_VID, AURICAL_USB_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, PI_C865_PID) },
|
||||
|
|
@ -934,10 +920,8 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(PI_VID, PI_1016_PID) },
|
||||
{ USB_DEVICE(KONDO_VID, KONDO_USB_SERIAL_PID) },
|
||||
{ USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, TI_XDS100V2_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, MARVELL_OPENRD_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, TI_XDS100V2_PID, 1) },
|
||||
{ USB_DEVICE(FTDI_VID, HAMEG_HO820_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, HAMEG_HO720_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, HAMEG_HO730_PID) },
|
||||
|
|
@ -946,18 +930,14 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(FTDI_VID, MJSG_SR_RADIO_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, MJSG_HD_RADIO_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, MJSG_XM_RADIO_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_ST_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SLITE_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH2_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, XVERVE_SIGNALYZER_ST_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, XVERVE_SIGNALYZER_SLITE_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, XVERVE_SIGNALYZER_SH2_PID, 1) },
|
||||
{ USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH4_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, SEGWAY_RMP200_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, ACCESIO_COM4SM_PID) },
|
||||
{ USB_DEVICE(IONICS_VID, IONICS_PLUGCOMPUTER_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(IONICS_VID, IONICS_PLUGCOMPUTER_PID, 1) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_24_MASTER_WING_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_PC_WING_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_USB_DMX_PID) },
|
||||
|
|
@ -972,15 +952,12 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_FHE_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) },
|
||||
{ USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(ST_VID, ST_STMCLT_2232_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(ST_VID, ST_STMCLT_2232_PID, 1) },
|
||||
{ USB_DEVICE(ST_VID, ST_STMCLT_4232_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_stmclite_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_RF_R106) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_DISTORTEC_JTAG_LOCK_PICK_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, FTDI_DISTORTEC_JTAG_LOCK_PICK_PID, 1) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_LUMEL_PD12_PID) },
|
||||
/* Crucible Devices */
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CT_COMET_PID) },
|
||||
|
|
@ -1055,8 +1032,7 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(ICPDAS_VID, ICPDAS_I7561U_PID) },
|
||||
{ USB_DEVICE(ICPDAS_VID, ICPDAS_I7563U_PID) },
|
||||
{ USB_DEVICE(WICED_VID, WICED_USB20706V2_PID) },
|
||||
{ USB_DEVICE(TI_VID, TI_CC3200_LAUNCHPAD_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(TI_VID, TI_CC3200_LAUNCHPAD_PID, 1) },
|
||||
{ USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_BT_USB_PID) },
|
||||
{ USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_WL_USB_PID) },
|
||||
{ USB_DEVICE(AIRBUS_DS_VID, AIRBUS_DS_P8GR) },
|
||||
|
|
@ -1075,10 +1051,8 @@ static const struct usb_device_id id_table_combined[] = {
|
|||
{ USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ZED_PID) },
|
||||
{ USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ODIN_PID) },
|
||||
/* FreeCalypso USB adapters */
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_FALCONIA_JTAG_BUF_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_FALCONIA_JTAG_UNBUF_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, FTDI_FALCONIA_JTAG_BUF_PID, 1) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(FTDI_VID, FTDI_FALCONIA_JTAG_UNBUF_PID, 1) },
|
||||
/* GMC devices */
|
||||
{ USB_DEVICE(GMC_VID, GMC_Z216C_PID) },
|
||||
/* Altera USB Blaster 3 */
|
||||
|
|
@ -1270,6 +1244,7 @@ static int update_mctrl(struct usb_serial_port *port, unsigned int set,
|
|||
static u32 get_ftdi_divisor(struct tty_struct *tty,
|
||||
struct usb_serial_port *port)
|
||||
{
|
||||
const struct ftdi_quirk *quirk = usb_get_serial_data(port->serial);
|
||||
struct ftdi_private *priv = usb_get_serial_port_data(port);
|
||||
struct device *dev = &port->dev;
|
||||
u32 div_value = 0;
|
||||
|
|
@ -1329,16 +1304,8 @@ static u32 get_ftdi_divisor(struct tty_struct *tty,
|
|||
case FT232R:
|
||||
case FTX:
|
||||
if (baud <= 3000000) {
|
||||
u16 product_id = le16_to_cpu(
|
||||
port->serial->dev->descriptor.idProduct);
|
||||
if (((product_id == FTDI_NDI_HUC_PID) ||
|
||||
(product_id == FTDI_NDI_SPECTRA_SCU_PID) ||
|
||||
(product_id == FTDI_NDI_FUTURE_2_PID) ||
|
||||
(product_id == FTDI_NDI_FUTURE_3_PID) ||
|
||||
(product_id == FTDI_NDI_AURORA_SCU_PID)) &&
|
||||
(baud == 19200)) {
|
||||
if (quirk == &ftdi_ndi_quirk && baud == 19200)
|
||||
baud = 1200000;
|
||||
}
|
||||
div_value = ftdi_232bm_baud_to_divisor(baud);
|
||||
} else {
|
||||
dev_dbg(dev, "%s - Baud rate too high!\n", __func__);
|
||||
|
|
@ -2235,7 +2202,9 @@ static int ftdi_port_probe(struct usb_serial_port *port)
|
|||
goto err_free;
|
||||
|
||||
ftdi_set_max_packet_size(port);
|
||||
if (read_latency_timer(port) < 0)
|
||||
if (quirk == &ftdi_ndi_quirk)
|
||||
priv->latency = 1;
|
||||
else if (read_latency_timer(port) < 0)
|
||||
priv->latency = 16;
|
||||
write_latency_timer(port);
|
||||
|
||||
|
|
@ -2254,20 +2223,22 @@ err_free:
|
|||
return result;
|
||||
}
|
||||
|
||||
/* 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 ftdi_private *priv)
|
||||
/*
|
||||
* Setup for the USB-UIRT device, which requires hardwired baudrate
|
||||
* (38400 gets mapped to 312500).
|
||||
*/
|
||||
static void ftdi_usb_uirt_setup(struct ftdi_private *priv)
|
||||
{
|
||||
priv->flags |= ASYNC_SPD_CUST;
|
||||
priv->custom_divisor = 77;
|
||||
priv->force_baud = 38400;
|
||||
}
|
||||
|
||||
/* 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 ftdi_private *priv)
|
||||
/*
|
||||
* 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 ftdi_private *priv)
|
||||
{
|
||||
priv->flags |= ASYNC_SPD_CUST;
|
||||
priv->custom_divisor = 240;
|
||||
|
|
@ -2275,39 +2246,6 @@ static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv)
|
|||
priv->force_rtscts = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Module parameter to control latency timer for NDI FTDI-based USB devices.
|
||||
* If this value is not set in /etc/modprobe.d/ its value will be set
|
||||
* to 1ms.
|
||||
*/
|
||||
static int ndi_latency_timer = 1;
|
||||
|
||||
/* Setup for the NDI FTDI-based USB devices, which requires hardwired
|
||||
* baudrate (19200 gets mapped to 1200000).
|
||||
*
|
||||
* Called from usbserial:serial_probe.
|
||||
*/
|
||||
static int ftdi_NDI_device_setup(struct usb_serial *serial)
|
||||
{
|
||||
struct usb_device *udev = serial->dev;
|
||||
int latency = ndi_latency_timer;
|
||||
|
||||
if (latency == 0)
|
||||
latency = 1;
|
||||
if (latency > 99)
|
||||
latency = 99;
|
||||
|
||||
dev_dbg(&udev->dev, "%s setting NDI device latency to %d\n", __func__, latency);
|
||||
dev_info(&udev->dev, "NDI device with a latency value of %d\n", latency);
|
||||
|
||||
/* FIXME: errors are not returned */
|
||||
usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
|
||||
FTDI_SIO_SET_LATENCY_TIMER_REQUEST,
|
||||
FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE,
|
||||
latency, 0, NULL, 0, WDR_TIMEOUT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* First port on JTAG adaptors such as Olimex arm-usb-ocd or the FIC/OpenMoko
|
||||
* Neo1973 Debug Board is reserved for JTAG interface and can be accessed from
|
||||
|
|
@ -2318,26 +2256,29 @@ static int ftdi_jtag_probe(struct usb_serial *serial)
|
|||
struct usb_interface *intf = serial->interface;
|
||||
int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
|
||||
|
||||
if (ifnum == 0) {
|
||||
dev_info(&intf->dev, "Ignoring interface reserved for JTAG\n");
|
||||
if (ifnum == 0)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ftdi_8u2232c_probe(struct usb_serial *serial)
|
||||
{
|
||||
struct usb_interface *intf = serial->interface;
|
||||
struct usb_device *udev = serial->dev;
|
||||
int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
|
||||
|
||||
if (udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems"))
|
||||
return ftdi_jtag_probe(serial);
|
||||
if (ifnum == 0) {
|
||||
if (udev->manufacturer &&
|
||||
!strcmp(udev->manufacturer, "CALAO Systems"))
|
||||
return -ENODEV;
|
||||
|
||||
if (udev->product &&
|
||||
(!strcmp(udev->product, "Arrow USB Blaster") ||
|
||||
!strcmp(udev->product, "BeagleBone/XDS100V2") ||
|
||||
!strcmp(udev->product, "SNAP Connect E10")))
|
||||
return ftdi_jtag_probe(serial);
|
||||
if (udev->product &&
|
||||
(!strcmp(udev->product, "Arrow USB Blaster") ||
|
||||
!strcmp(udev->product, "BeagleBone/XDS100V2") ||
|
||||
!strcmp(udev->product, "SNAP Connect E10")))
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -2354,10 +2295,8 @@ static int ftdi_stmclite_probe(struct usb_serial *serial)
|
|||
struct usb_interface *intf = serial->interface;
|
||||
int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
|
||||
|
||||
if (ifnum < 2) {
|
||||
dev_info(&intf->dev, "Ignoring interface reserved for JTAG\n");
|
||||
if (ifnum < 2)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -2934,6 +2873,3 @@ module_usb_serial_driver(serial_drivers, id_table_combined);
|
|||
MODULE_AUTHOR(DRIVER_AUTHOR);
|
||||
MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
module_param(ndi_latency_timer, int, 0644);
|
||||
MODULE_PARM_DESC(ndi_latency_timer, "NDI device latency timer override");
|
||||
|
|
|
|||
|
|
@ -109,6 +109,21 @@ struct kobil_private {
|
|||
__u16 device_type;
|
||||
};
|
||||
|
||||
static int kobil_ctrl_send(struct usb_serial_port *port, u8 req, u16 val)
|
||||
{
|
||||
return usb_control_msg(port->serial->dev,
|
||||
usb_sndctrlpipe(port->serial->dev, 0),
|
||||
req, USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
|
||||
val, 0, NULL, 0, KOBIL_TIMEOUT);
|
||||
}
|
||||
|
||||
static int kobil_ctrl_recv(struct usb_serial_port *port, u8 req, u16 val, void *buf, u16 size)
|
||||
{
|
||||
return usb_control_msg(port->serial->dev,
|
||||
usb_rcvctrlpipe(port->serial->dev, 0),
|
||||
req, USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_IN,
|
||||
val, 0, buf, size, KOBIL_TIMEOUT);
|
||||
}
|
||||
|
||||
static int kobil_port_probe(struct usb_serial_port *port)
|
||||
{
|
||||
|
|
@ -163,10 +178,10 @@ static void kobil_init_termios(struct tty_struct *tty)
|
|||
static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
{
|
||||
struct device *dev = &port->dev;
|
||||
int result = 0;
|
||||
struct kobil_private *priv;
|
||||
unsigned char *transfer_buffer;
|
||||
int transfer_buffer_length = 8;
|
||||
int result;
|
||||
|
||||
priv = usb_get_serial_port_data(port);
|
||||
|
||||
|
|
@ -176,16 +191,8 @@ static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
|
|||
return -ENOMEM;
|
||||
|
||||
/* get hardware version */
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_rcvctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_GetMisc,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_IN,
|
||||
SUSBCR_MSC_GetHWVersion,
|
||||
0,
|
||||
transfer_buffer,
|
||||
transfer_buffer_length,
|
||||
KOBIL_TIMEOUT
|
||||
);
|
||||
result = kobil_ctrl_recv(port, SUSBCRequest_GetMisc, SUSBCR_MSC_GetHWVersion,
|
||||
transfer_buffer, transfer_buffer_length);
|
||||
dev_dbg(dev, "%s - Send get_HW_version URB returns: %i\n", __func__, result);
|
||||
if (result >= 3) {
|
||||
dev_dbg(dev, "Hardware version: %i.%i.%i\n", transfer_buffer[0],
|
||||
|
|
@ -193,16 +200,8 @@ static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
|
|||
}
|
||||
|
||||
/* get firmware version */
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_rcvctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_GetMisc,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_IN,
|
||||
SUSBCR_MSC_GetFWVersion,
|
||||
0,
|
||||
transfer_buffer,
|
||||
transfer_buffer_length,
|
||||
KOBIL_TIMEOUT
|
||||
);
|
||||
result = kobil_ctrl_recv(port, SUSBCRequest_GetMisc, SUSBCR_MSC_GetFWVersion,
|
||||
transfer_buffer, transfer_buffer_length);
|
||||
dev_dbg(dev, "%s - Send get_FW_version URB returns: %i\n", __func__, result);
|
||||
if (result >= 3) {
|
||||
dev_dbg(dev, "Firmware version: %i.%i.%i\n", transfer_buffer[0],
|
||||
|
|
@ -212,35 +211,17 @@ static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
|
|||
if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID) {
|
||||
/* Setting Baudrate, Parity and Stopbits */
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_sndctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_SetBaudRateParityAndStopBits,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
|
||||
SUSBCR_SBR_9600 | SUSBCR_SPASB_EvenParity |
|
||||
SUSBCR_SPASB_1StopBit,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
KOBIL_TIMEOUT
|
||||
);
|
||||
result = kobil_ctrl_send(port, SUSBCRequest_SetBaudRateParityAndStopBits,
|
||||
SUSBCR_SBR_9600 | SUSBCR_SPASB_EvenParity | SUSBCR_SPASB_1StopBit);
|
||||
dev_dbg(dev, "%s - Send set_baudrate URB returns: %i\n", __func__, result);
|
||||
|
||||
/* reset all queues */
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_sndctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_Misc,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
|
||||
SUSBCR_MSC_ResetAllQueues,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
KOBIL_TIMEOUT
|
||||
);
|
||||
result = kobil_ctrl_send(port, SUSBCRequest_Misc, SUSBCR_MSC_ResetAllQueues);
|
||||
dev_dbg(dev, "%s - Send reset_all_queues URB returns: %i\n", __func__, result);
|
||||
}
|
||||
if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) {
|
||||
priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) {
|
||||
/* start reading (Adapter B 'cause PNP string) */
|
||||
result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
|
||||
dev_dbg(dev, "%s - Send read URB returns: %i\n", __func__, result);
|
||||
|
|
@ -291,10 +272,8 @@ static void kobil_write_int_callback(struct urb *urb)
|
|||
static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count)
|
||||
{
|
||||
int length = 0;
|
||||
int result = 0;
|
||||
int todo = 0;
|
||||
struct kobil_private *priv;
|
||||
int length, todo, result;
|
||||
|
||||
if (count == 0) {
|
||||
dev_dbg(&port->dev, "%s - write request of 0 bytes\n", __func__);
|
||||
|
|
@ -318,9 +297,10 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
if (((priv->device_type != KOBIL_ADAPTER_B_PRODUCT_ID) && (priv->filled > 2) && (priv->filled >= (priv->buf[1] + 3))) ||
|
||||
((priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID) && (priv->filled > 3) && (priv->filled >= (priv->buf[2] + 4)))) {
|
||||
/* stop reading (except TWIN and KAAN SIM) */
|
||||
if ((priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID)
|
||||
|| (priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID))
|
||||
if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID) {
|
||||
usb_kill_urb(port->interrupt_in_urb);
|
||||
}
|
||||
|
||||
todo = priv->filled - priv->cur_pos;
|
||||
|
||||
|
|
@ -347,7 +327,7 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
|
||||
/* start reading (except TWIN and KAAN SIM) */
|
||||
if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID) {
|
||||
priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID) {
|
||||
result = usb_submit_urb(port->interrupt_in_urb,
|
||||
GFP_ATOMIC);
|
||||
dev_dbg(&port->dev, "%s - Send read URB returns: %i\n", __func__, result);
|
||||
|
|
@ -373,8 +353,8 @@ static int kobil_tiocmget(struct tty_struct *tty)
|
|||
int transfer_buffer_length = 8;
|
||||
|
||||
priv = usb_get_serial_port_data(port);
|
||||
if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID
|
||||
|| priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) {
|
||||
if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) {
|
||||
/* This device doesn't support ioctl calls */
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
@ -384,16 +364,8 @@ static int kobil_tiocmget(struct tty_struct *tty)
|
|||
if (!transfer_buffer)
|
||||
return -ENOMEM;
|
||||
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_rcvctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_GetStatusLineState,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_IN,
|
||||
0,
|
||||
0,
|
||||
transfer_buffer,
|
||||
transfer_buffer_length,
|
||||
KOBIL_TIMEOUT);
|
||||
|
||||
result = kobil_ctrl_recv(port, SUSBCRequest_GetStatusLineState, 0,
|
||||
transfer_buffer, transfer_buffer_length);
|
||||
dev_dbg(&port->dev, "Send get_status_line_state URB returns: %i\n",
|
||||
result);
|
||||
if (result < 1) {
|
||||
|
|
@ -418,58 +390,41 @@ static int kobil_tiocmset(struct tty_struct *tty,
|
|||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct device *dev = &port->dev;
|
||||
struct kobil_private *priv;
|
||||
int dtr, rts;
|
||||
int result;
|
||||
int dtr = 0;
|
||||
int rts = 0;
|
||||
u16 val = 0;
|
||||
|
||||
/* FIXME: locking ? */
|
||||
priv = usb_get_serial_port_data(port);
|
||||
if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID
|
||||
|| priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) {
|
||||
if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) {
|
||||
/* This device doesn't support ioctl calls */
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (set & TIOCM_RTS)
|
||||
rts = 1;
|
||||
if (set & TIOCM_DTR)
|
||||
dtr = 1;
|
||||
if (clear & TIOCM_RTS)
|
||||
rts = 0;
|
||||
if (clear & TIOCM_DTR)
|
||||
dtr = 0;
|
||||
dtr = (set | clear) & TIOCM_DTR;
|
||||
rts = (set | clear) & TIOCM_RTS;
|
||||
|
||||
if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID) {
|
||||
if (dtr != 0)
|
||||
dev_dbg(dev, "%s - Setting DTR\n", __func__);
|
||||
if (dtr && priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID) {
|
||||
if (set & TIOCM_DTR)
|
||||
val = SUSBCR_SSL_SETDTR;
|
||||
else
|
||||
dev_dbg(dev, "%s - Clearing DTR\n", __func__);
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_sndctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_SetStatusLinesOrQueues,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
|
||||
((dtr != 0) ? SUSBCR_SSL_SETDTR : SUSBCR_SSL_CLRDTR),
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
KOBIL_TIMEOUT);
|
||||
} else {
|
||||
if (rts != 0)
|
||||
dev_dbg(dev, "%s - Setting RTS\n", __func__);
|
||||
val = SUSBCR_SSL_CLRDTR;
|
||||
} else if (rts) {
|
||||
if (set & TIOCM_RTS)
|
||||
val = SUSBCR_SSL_SETRTS;
|
||||
else
|
||||
dev_dbg(dev, "%s - Clearing RTS\n", __func__);
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_sndctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_SetStatusLinesOrQueues,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
|
||||
((rts != 0) ? SUSBCR_SSL_SETRTS : SUSBCR_SSL_CLRRTS),
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
KOBIL_TIMEOUT);
|
||||
val = SUSBCR_SSL_CLRRTS;
|
||||
}
|
||||
dev_dbg(dev, "%s - Send set_status_line URB returns: %i\n", __func__, result);
|
||||
return (result < 0) ? result : 0;
|
||||
|
||||
if (val) {
|
||||
result = kobil_ctrl_send(port, SUSBCRequest_SetStatusLinesOrQueues, val);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "failed to set status lines: %d\n", result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void kobil_set_termios(struct tty_struct *tty,
|
||||
|
|
@ -478,9 +433,9 @@ static void kobil_set_termios(struct tty_struct *tty,
|
|||
{
|
||||
struct kobil_private *priv;
|
||||
int result;
|
||||
unsigned short urb_val = 0;
|
||||
int c_cflag = tty->termios.c_cflag;
|
||||
speed_t speed;
|
||||
u16 val;
|
||||
|
||||
priv = usb_get_serial_port_data(port);
|
||||
if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID ||
|
||||
|
|
@ -493,37 +448,34 @@ static void kobil_set_termios(struct tty_struct *tty,
|
|||
speed = tty_get_baud_rate(tty);
|
||||
switch (speed) {
|
||||
case 1200:
|
||||
urb_val = SUSBCR_SBR_1200;
|
||||
val = SUSBCR_SBR_1200;
|
||||
break;
|
||||
default:
|
||||
speed = 9600;
|
||||
fallthrough;
|
||||
case 9600:
|
||||
urb_val = SUSBCR_SBR_9600;
|
||||
val = SUSBCR_SBR_9600;
|
||||
break;
|
||||
}
|
||||
urb_val |= (c_cflag & CSTOPB) ? SUSBCR_SPASB_2StopBits :
|
||||
SUSBCR_SPASB_1StopBit;
|
||||
|
||||
if (c_cflag & CSTOPB)
|
||||
val |= SUSBCR_SPASB_2StopBits;
|
||||
else
|
||||
val |= SUSBCR_SPASB_1StopBit;
|
||||
|
||||
if (c_cflag & PARENB) {
|
||||
if (c_cflag & PARODD)
|
||||
urb_val |= SUSBCR_SPASB_OddParity;
|
||||
val |= SUSBCR_SPASB_OddParity;
|
||||
else
|
||||
urb_val |= SUSBCR_SPASB_EvenParity;
|
||||
} else
|
||||
urb_val |= SUSBCR_SPASB_NoParity;
|
||||
val |= SUSBCR_SPASB_EvenParity;
|
||||
} else {
|
||||
val |= SUSBCR_SPASB_NoParity;
|
||||
}
|
||||
|
||||
tty->termios.c_cflag &= ~CMSPAR;
|
||||
tty_encode_baud_rate(tty, speed, speed);
|
||||
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_sndctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_SetBaudRateParityAndStopBits,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
|
||||
urb_val,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
KOBIL_TIMEOUT
|
||||
);
|
||||
result = kobil_ctrl_send(port, SUSBCRequest_SetBaudRateParityAndStopBits, val);
|
||||
if (result) {
|
||||
dev_err(&port->dev, "failed to update line settings: %d\n",
|
||||
result);
|
||||
|
|
@ -544,17 +496,7 @@ static int kobil_ioctl(struct tty_struct *tty,
|
|||
|
||||
switch (cmd) {
|
||||
case TCFLSH:
|
||||
result = usb_control_msg(port->serial->dev,
|
||||
usb_sndctrlpipe(port->serial->dev, 0),
|
||||
SUSBCRequest_Misc,
|
||||
USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT,
|
||||
SUSBCR_MSC_ResetAllQueues,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
KOBIL_TIMEOUT
|
||||
);
|
||||
|
||||
result = kobil_ctrl_send(port, SUSBCRequest_Misc, SUSBCR_MSC_ResetAllQueues);
|
||||
dev_dbg(&port->dev,
|
||||
"%s - Send reset_all_queues (FLUSH) URB returns: %i\n",
|
||||
__func__, result);
|
||||
|
|
|
|||
|
|
@ -1433,17 +1433,31 @@ static const struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b3, 0xff, 0xff, 0x60) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c0, 0xff), /* Telit FE910C04 (rmnet) */
|
||||
.driver_info = RSVD(0) | NCTRL(3) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c1, 0xff), /* Telit FE910C04 (RNDIS) */
|
||||
.driver_info = NCTRL(4) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c2, 0xff), /* Telit FE910C04 (MBIM) */
|
||||
.driver_info = NCTRL(4) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c3, 0xff), /* Telit FE910C04 (ECM) */
|
||||
.driver_info = NCTRL(4) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c4, 0xff), /* Telit FE910C04 (rmnet) */
|
||||
.driver_info = RSVD(0) | NCTRL(3) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c5, 0xff), /* Telit FE910C04 (RNDIS) */
|
||||
.driver_info = NCTRL(4) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c6, 0xff), /* Telit FE910C04 (MBIM) */
|
||||
.driver_info = NCTRL(4) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10c7, 0xff, 0xff, 0x30), /* Telit FE910C04 (ECM) */
|
||||
.driver_info = NCTRL(4) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10c7, 0xff, 0xff, 0x40) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c8, 0xff), /* Telit FE910C04 (rmnet) */
|
||||
.driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c9, 0xff), /* Telit FE910C04 (MBIM) */
|
||||
.driver_info = NCTRL(3) | RSVD(4) | RSVD(5) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10cb, 0xff), /* Telit FE910C04 (RNDIS) */
|
||||
.driver_info = NCTRL(3) | RSVD(4) | RSVD(5) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d0, 0xff, 0xff, 0x30), /* Telit FN990B (rmnet) */
|
||||
.driver_info = NCTRL(5) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d0, 0xff, 0xff, 0x40) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d0, 0xff, 0xff, 0x60) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10c7, 0xff, 0xff, 0x30), /* Telit FE910C04 (ECM) */
|
||||
.driver_info = NCTRL(4) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10c7, 0xff, 0xff, 0x40) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d1, 0xff, 0xff, 0x30), /* Telit FN990B (MBIM) */
|
||||
.driver_info = NCTRL(6) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d1, 0xff, 0xff, 0x40) },
|
||||
|
|
@ -2376,6 +2390,8 @@ static const struct usb_device_id option_ids[] = {
|
|||
.driver_info = RSVD(3) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0f0, 0xff), /* Foxconn T99W373 MBIM */
|
||||
.driver_info = RSVD(3) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe123, 0xff), /* Foxconn T99W760 MBIM */
|
||||
.driver_info = RSVD(3) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe145, 0xff), /* Foxconn T99W651 RNDIS */
|
||||
.driver_info = RSVD(5) | RSVD(6) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe15f, 0xff), /* Foxconn T99W709 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue