Message ID | 20250105124819.6950-1-zaihan@unrealasia.net (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,v4] wwan dev: Add port for NMEA channel for WWAN devices | expand |
Hi Muhammad, + Slark On Sun, 5 Jan 2025 at 13:53, Muhammad Nuzaihan <zaihan@unrealasia.net> wrote: > > Based on the code: drivers/bus/mhi/host/pci_generic.c > which already has NMEA channel (mhi_quectel_em1xx_channels) > support in recent kernels but it is never exposed > as a port. > > This commit exposes that NMEA channel to a port > to allow tty/gpsd programs to read through > the /dev/wwan0nmea0 port. > > Tested this change on a new kernel and module > built and now NMEA (mhi0_NMEA) statements are > available (attached) through /dev/wwan0nmea0 port on bootup. > > Signed-off-by: Muhammad Nuzaihan Bin Kamal Luddin <zaihan@unrealasia.net> This works for sure but I'm not entirely convinced NMEA should be exposed as a modem control port. In your previous patch version Sergey pointed to a discussion we had regarding exposing that port as WWAN child device through the regular GNSS subsystem, which would require some generic bridge in the WWAN subsystem. Slark, did you have an opportunity to look at the GNSS solution? Regards, Loic
At 2025-01-07 03:44:35, "Loic Poulain" <loic.poulain@linaro.org> wrote: >Hi Muhammad, > >+ Slark > >On Sun, 5 Jan 2025 at 13:53, Muhammad Nuzaihan <zaihan@unrealasia.net> wrote: >> >> Based on the code: drivers/bus/mhi/host/pci_generic.c >> which already has NMEA channel (mhi_quectel_em1xx_channels) >> support in recent kernels but it is never exposed >> as a port. >> >> This commit exposes that NMEA channel to a port >> to allow tty/gpsd programs to read through >> the /dev/wwan0nmea0 port. >> >> Tested this change on a new kernel and module >> built and now NMEA (mhi0_NMEA) statements are >> available (attached) through /dev/wwan0nmea0 port on bootup. >> >> Signed-off-by: Muhammad Nuzaihan Bin Kamal Luddin <zaihan@unrealasia.net> > >This works for sure but I'm not entirely convinced NMEA should be >exposed as a modem control port. In your previous patch version Sergey >pointed to a discussion we had regarding exposing that port as WWAN >child device through the regular GNSS subsystem, which would require >some generic bridge in the WWAN subsystem. > >Slark, did you have an opportunity to look at the GNSS solution? > >Regards, >Loic Hi Loic, This solution same as what I did in last time. We got a wwan0nmea0 device but this device can't support flow control. Also, this is not the solution what Sergey expected, I think. Please refer to the target we talked last time: ///////////////////// >>> Basically, components should interact like this: >>> >>> Modem PCIe driver <-> WWAN core <-> GNSS core <-> /dev/gnss0 >>> >>> We need the GNSS core to export the modem NMEA port as instance of >>> 'gnss' class. >>> >>> We need WWAN core between the modem driver and the GSNN core because we >>> need a common parent for GNSS port and modem control port (e.g. AT, >>> MBIM). Since we are already exporting control ports via the WWAN >>> subsystem, the GNSS port should also be exported through the WWAN >>> subsystem. To keep devices hierarchy like this: >>> >>> .--> AT port >>> PCIe dev -> WWAN dev -| >>> '--> GNSS port >>> >>> Back to the implementation. Probably we should introduce a new port >>> type, e.g. WWAN_PORT_NMEA. And this port type should have a special >>> handling in the WWAN core. >>> >> Similar like what I did in my local. I named it as WWAN_PORT_GNSS and >> put it as same level with AT port. >> >>> wwan_create_port() function should not directly create a char device. >>> Instead, it should call gnss_allocate_device() and >>> gnss_register_device() to register the port with GNSS subsystem. //////////////////// Thanks
diff --git a/drivers/net/wwan/mhi_wwan_ctrl.c b/drivers/net/wwan/mhi_wwan_ctrl.c index e9f979d2d851..e13c0b078175 100644 --- a/drivers/net/wwan/mhi_wwan_ctrl.c +++ b/drivers/net/wwan/mhi_wwan_ctrl.c @@ -263,6 +263,7 @@ static const struct mhi_device_id mhi_wwan_ctrl_match_table[] = { { .chan = "QMI", .driver_data = WWAN_PORT_QMI }, { .chan = "DIAG", .driver_data = WWAN_PORT_QCDM }, { .chan = "FIREHOSE", .driver_data = WWAN_PORT_FIREHOSE }, + { .chan = "NMEA", .driver_data = WWAN_PORT_NMEA }, {}, }; MODULE_DEVICE_TABLE(mhi, mhi_wwan_ctrl_match_table); diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c index a51e2755991a..ebf574f2b126 100644 --- a/drivers/net/wwan/wwan_core.c +++ b/drivers/net/wwan/wwan_core.c @@ -342,6 +342,10 @@ static const struct { .name = "MIPC", .devsuf = "mipc", }, + [WWAN_PORT_NMEA] = { + .name = "NMEA", + .devsuf = "nmea", + }, }; static ssize_t type_show(struct device *dev, struct device_attribute *attr, diff --git a/include/linux/wwan.h b/include/linux/wwan.h index a4d6cc0c9f68..ca38a2fe0987 100644 --- a/include/linux/wwan.h +++ b/include/linux/wwan.h @@ -19,6 +19,7 @@ * @WWAN_PORT_FASTBOOT: Fastboot protocol control * @WWAN_PORT_ADB: ADB protocol control * @WWAN_PORT_MIPC: MTK MIPC diagnostic interface + * @WWAN_PORT_NMEA: NMEA GPS statements interface * * @WWAN_PORT_MAX: Highest supported port types * @WWAN_PORT_UNKNOWN: Special value to indicate an unknown port type @@ -34,6 +35,7 @@ enum wwan_port_type { WWAN_PORT_FASTBOOT, WWAN_PORT_ADB, WWAN_PORT_MIPC, + WWAN_PORT_NMEA, /* Add new port types above this line */
Based on the code: drivers/bus/mhi/host/pci_generic.c which already has NMEA channel (mhi_quectel_em1xx_channels) support in recent kernels but it is never exposed as a port. This commit exposes that NMEA channel to a port to allow tty/gpsd programs to read through the /dev/wwan0nmea0 port. Tested this change on a new kernel and module built and now NMEA (mhi0_NMEA) statements are available (attached) through /dev/wwan0nmea0 port on bootup. Signed-off-by: Muhammad Nuzaihan Bin Kamal Luddin <zaihan@unrealasia.net> --- v4: - use git send-mail because of mangled tabs in sent v3 patch v3: - Removed unnecessary code added to "iosm" and "AT IOCTL" which is not relevant. - https://lore.kernel.org/netdev/PVOKPS.9BTDD92U5KK72@unrealasia.net/ v2: - https://lore.kernel.org/netdev/5LHFPS.G3DNPFBCDKCL2@unrealasia.net/ v1: - https://lore.kernel.org/netdev/R8AFPS.THYVK2DKSEE83@unrealasia.net/ --- drivers/net/wwan/mhi_wwan_ctrl.c | 1 + drivers/net/wwan/wwan_core.c | 4 ++++ include/linux/wwan.h | 2 ++ 3 files changed, 7 insertions(+)