Telit FN990 Linux support in kernel and ModemManager

Telit FN990 Linux support is now available in Linux kernel and ModemManager, both for PCIe and USB based integrations.

Telit FN990 Linux

Telit FN990 family data cards

The Telit FN990 family consists of FN990A40 and FN990A28 5G data cards. They feature sub-6-only technology with LTE, WCDMA and GNSS support. The industrial-grade M.2 form factor is suitable for many high-performance and bandwidth-intensive enterprise and industrial applications. Use cases include: fixed wireless access, enterprise routers and gateways, indoor and outdoor CPE, professional broadcasting and surveillance. Designed for global usage, the FN990A40 and FN990A28 incorporate support for all scenarios prescribed by 3GPP Release (Rel) 16 5G deployments.

More details on Telit website dedicated page.

Telit FN990 Linux kernel commits

When using the USB bus, the FN990 exposes four compositions differing in the type of mobile broadband/network device interface:

0x1070: tty, adb, rmnet, tty, tty, tty, tty
0x1071: tty, adb, mbim, tty, tty, tty, tty
0x1072: rndis, tty, adb, tty, tty, tty, tty
0x1073: tty, adb, ecm, tty, tty, tty, tty

Support for serial ports in driver option has been added with commit “USB: serial: option: add Telit FN990 compositions“, available since v5.16-rc6.

Support for the rmnet device exposed by composition 0x1070 has been added in driver qmi_wwan with commit “net: usb: qmi_wwan: add Telit 0x1070 composition“, available since v5.16-rc6.

The MBIM device exposed by composition 0x1071 requires the following patch for dealing with a modem quirk “net: usb: cdc_mbim: avoid altsetting toggling for Telit FN990“, available since v5.17-rc5.

When connected through the PCIe bus, the FN990 uses the MHI stack: support for the modem has been added with commit “bus: mhi: host: pci_generic: add Telit FN990“, available since v5.19-rc1.

MBIM is the type of mobile broadband device exposed. Note that, for specific features, you may need also Telit out-of-tree patches available at Telit Github page.

ModemManager changes

Most of the work done on Telit FN990 Linux ModemManager side was related to enable modem usage on the PCIe bus: the main merge request is “!792 Add Telit FN990 PCIe support” that, besides adding the modem support, puts in a new plugin filter for PCI SVID:SSID, so that a modem customizing just those ids instead of VID:DID can be bound to a specific plugin.

Under the advice of ModemManager maintainer Aleksander (whose help is always eye opening, thanks a lot!), another merge request derived “!804 Avoid QCDM port probing if not for specific plugins“, aimed at allowing plugins to decide wether grabbing or not the QCDM port exposed by the modem.

ModemManager port hints for the USB compositions need yet to be submitted, will happen very soon.