diff --git a/net/kplex/Makefile b/net/kplex/Makefile
index 1c0aae9935..edccb5cc1b 100644
--- a/net/kplex/Makefile
+++ b/net/kplex/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=kplex
 PKG_VERSION:=1.4
-PKG_RELEASE=2
+PKG_RELEASE=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
 PKG_SOURCE_URL:=http://www.stripydog.com/download
diff --git a/net/kplex/patches/100-add-support-for-Sierra-Wireless-qcserial-NMEA-0183-i.patch b/net/kplex/patches/100-add-support-for-Sierra-Wireless-qcserial-NMEA-0183-i.patch
new file mode 100644
index 0000000000..359f31d77f
--- /dev/null
+++ b/net/kplex/patches/100-add-support-for-Sierra-Wireless-qcserial-NMEA-0183-i.patch
@@ -0,0 +1,65 @@
+From a3dec2cbe5e539b5a270bed86eed78b283c79cdb Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel@makrotopia.org>
+Date: Thu, 27 May 2021 01:18:20 +0200
+Subject: [PATCH] add support for Sierra Wireless qcserial NMEA-0183 interface
+
+Sierra Wireless EM 74xx modems come with a serial port outputting
+NMEA-0183 GPS sentences. In order to make it work, the magic string
+'$GPS_START' needs to be written to the modem, as only then the modem
+firmware starts sending NMEA-0183 output.
+Add option 'sierragpsstart' which if set to anything else than 0 will
+make kplex send the magic string when the device is opened.
+---
+ serial.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+--- a/serial.c
++++ b/serial.c
+@@ -24,6 +24,7 @@
+ #include <pwd.h>
+ 
+ #define DEFSERIALQSIZE 32
++#define SIERRA_GPS_START "$GPS_START\n"
+ 
+ struct if_serial {
+     int fd;
+@@ -290,7 +291,8 @@ struct iface *init_serial (struct iface
+     int ret;
+     struct kopts *opt;
+     int qsize=DEFSERIALQSIZE;
+-    
++    int send_gps_start = 0;
++
+     for(opt=ifa->options;opt;opt=opt->next) {
+         if (!strcasecmp(opt->var,"filename"))
+             devname=opt->val;
+@@ -324,7 +326,9 @@ struct iface *init_serial (struct iface
+                 logerr(0,"Invalid queue size specified: %s",opt->val);
+                 return(NULL);
+             }
+-        } else  {
++        } else if (!strcasecmp(opt->var, "sierragpsstart")) {
++            send_gps_start=atoi(opt->val);
++        } else {
+             logerr(0,"unknown interface option %s",opt->var);
+             return(NULL);
+         }
+@@ -337,7 +341,7 @@ struct iface *init_serial (struct iface
+     }
+ 
+     /* Open interface or die */
+-    if ((ifs->fd=ttyopen(devname,ifa->direction)) < 0) {
++    if ((ifs->fd=ttyopen(devname, send_gps_start?BOTH:ifa->direction)) < 0) {
+         return(NULL);
+     }
+     DEBUG(3,"%s: opened serial device %s for %s",ifa->name,devname,
+@@ -358,6 +362,9 @@ struct iface *init_serial (struct iface
+     ifs->saved=1;
+     ifs->slavename=NULL;
+ 
++    if (send_gps_start)
++        write(ifs->fd, SIERRA_GPS_START, strlen(SIERRA_GPS_START));
++
+     /* Assign pointers to read, write and cleanup routines */
+     ifa->read=do_read;
+     ifa->readbuf=read_serial;