diff mbox series

Set custom baud-rate for SCS P4 Dragon

Message ID 20210506104425.96371fb3f743800896605ae4@woltersonline.net
State New
Headers show
Series Set custom baud-rate for SCS P4 Dragon | expand

Commit Message

Robert Wolters May 6, 2021, 8:44 a.m. UTC
Why: FTDI USB serial speed issue with SCS P4 Dragon short-wave modems,
a custom baud-rate is required

Solution: set special baud-rate by setting a custom divisor on 38400B

Signed-off-by: Robert Wolters <robert@woltersonline.net>

 }

+/* Setup for the SCS P4dragon DR-7X00 devices, which require
+ *hardwired baud-rate of 829440 (38400 gets mapped to 829440) */
+static void ftdi_SCS_DR7X00_setup(struct ftdi_private *priv)
+{
+	priv->flags |= ASYNC_SPD_CUST;
+	priv->custom_divisor = 29;
+	priv->force_baud = 38400;
+}
+
 /*
  * 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

Comments

Johan Hovold May 10, 2021, 8:22 a.m. UTC | #1
On Thu, May 06, 2021 at 10:44:25AM +0200, Robert Wolters wrote:
> Why: FTDI USB serial speed issue with SCS P4 Dragon short-wave modems,

> a custom baud-rate is required

> 

> Solution: set special baud-rate by setting a custom divisor on 38400B


You can set any baudrate you want using the TCSETS2 interface, and you
can still use the legacy TIOCSSERIAL ioctl interface (e.g. setserial)
if you prefer.

No need to be hardcoding anything in the kernel.

Johan
diff mbox series

Patch

--- ftdi_sio.c 2021-04-21 13:01:00.000000000 +0200
+++ ftdi_sio.c 2021-04-26 18:53:00.819175707 +0200
@@ -97,6 +97,7 @@ 
 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_SCS_DR7X00_setup(struct ftdi_private *priv);

 static const struct ftdi_sio_quirk ftdi_jtag_quirk = {
	.probe  = ftdi_jtag_probe,
@@ -122,6 +123,10 @@ 
	.probe  = ftdi_8u2232c_probe,
 };

+static const struct ftdi_sio_quirk ftdi_SCS_DR7X00_quirk = {
+	.port_probe = ftdi_SCS_DR7X00_setup,
+};
+
 /*
  * The 8U232AM has the same API as the sio except for:
  * - it can support MUCH higher baudrates; up to:
@@ -157,8 +162,12 @@ 
	{ USB_DEVICE(FTDI_VID, FTDI_EV3CON_PID) },
	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) },
-	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) },
-	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_3_PID) },
+	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) ,
+		.driver_info = (kernel_ulong_t)&ftdi_SCS_DR7X00_quirk },
+	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_3_PID) ,
+		.driver_info = (kernel_ulong_t)&ftdi_SCS_DR7X00_quirk },
	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_4_PID) },
	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_5_PID) },
	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_6_PID) },
@@ -2296,6 +2305,15 @@ 
	priv->force_rtscts = 1;