--- ftdi_sio_fc.c~	2018-06-16 09:43:46.000000000 +0200
+++ ftdi_sio_fc.c	2019-02-10 13:47:56.867551211 +0100
@@ -1071,7 +192,7 @@
 static struct usb_serial_driver ftdi_sio_device = {
 	.driver = {
 		.owner =	THIS_MODULE,
-		.name =		"ftdi_sio",
+		.name =		"ftdi_sio_fc",
 	},
 	.description =		"FTDI USB Serial Device",
 	.id_table =		id_table_combined,
@@ -1141,7 +262,7 @@
 	static const unsigned char divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 };
 	__u32 divisor;
 	/* divisor shifted 3 bits to the left */
-	int divisor3 = base / 2 / baud;
+	int divisor3 = (base / 2 + baud / 2) / baud;
 	divisor = divisor3 >> 3;
 	divisor |= (__u32)divfrac[divisor3 & 0x7] << 14;
 	/* Deal with special cases for highest baud rates. */
@@ -1249,6 +370,17 @@
 	dev_dbg(dev, "%s - tty_get_baud_rate reports speed %d\n", __func__, baud);
 
 	/*
+	* FreeCalypso hack: translate non-std high
+	* baud rates for GSM like CP2102 does.
+	*/
+	if (baud == 230400)
+		baud = 203125;
+	else if (baud == 460800)
+		baud = 406250;
+	else if (baud == 921600)
+		baud = 812500;
+
+	/*
 	 * Observe deprecated async-compatible custom_divisor hack, update
 	 * baudrate if needed.
 	 */
