Telit FN980 Linux support flashing device 0x9010 available

Telit FN980 Linux flashing device 0x9010 support has been added to driver option with patch USB: serial: option: add ZLP support for 0x1bc7/0x9010 and is available since Linux kernel version 5.5-rc6.

Telit FN980 Linux

The patch is going to be back-ported also to stable kernel versions 4.4, 4.9, 4.14, 4.19 and 5.4.

Telit FN980 Linux support for composition 0x9010

This composition is made of just a diagnostic port (USB interface #0) that is used when upgrading the firmware of the modem.

The particular feature of this USB composition is that it requires Zero-Length Packet to be sent if out data size is equal to the endpoint max size.

Looking at the usb serial kernel drivers compatible with the device, none of them supported ZLP sending before the patch was merged.

Which driver to patch?

Since 0x9010 is a flashing device, a good fit would have been usb-serial-simple, section flashloader.

However, the patch for adding ZLP support to usb-serial-simple was a bit convoluted.

usb-serial-simple is based on usb-serial and the functions to be patched would have been usb_serial_probe -> setup_port_bulk_out. But the most important part missing was a way to specify quirks according to the PID.

The driver option, usually involved with Qualcomm-based modems, already has all the items in place: it was simply the matter of adding a new quirk (ZLP) and modifying usb_wwan usb_wwan_setup_urb for adding URB_ZERO_PACKET to the transfer flags.

Previous Telit FN980 developments are described in article “Telit FN980 Linux support added in kernel V5.4“.