Linux Kernel Driver for Silicon Labs Si446x Transceivers

From: Mukherjee, Sunip K
Date: Sun Jul 04 2021 - 17:49:15 EST


Hi,

I am very new to the kernel community; this is my first message in the LKML so my apologies if I am doing things wrong.

I have been using an Si4463 transceiver for UHF communication with cubesat I developed. I could not find any code to control the transceiver on Linux. The closest thing I could find was an AVR implementation by Zak Kemble (https://blog.zakkemble.net/si4463-radio-library-avr-arduino/).
I followed the API docs and rewrote the whole thing at first for userland only (can be found here: https://github.com/SPACE-HAUC/si446x_linux/releases/tag/v3.1), and then I decided it would be a great learning opportunity for me to port it to the kernel.

The kernel port has gone mostly smoothly. The transceiver communicates with the host MCU over SPI, and requires a pin for RESET, and another pin for IRQ.
I have implemented the driver to provide a char device to the userland for open, read, write, poll and ioctl (/dev/ttyUHF#, even though it is not exactly a tty device).
I had initially set up a pull request for the driver and the device tree overlay to the Raspberry Pi kernel community. They have agreed to accept the device tree overlay for the device, however the driver needs to be included by the Linux Kernel community. I want to use this opportunity to find some people who have access to a Si446x transceiver and a Raspberry Pi, so that the code I have can be tested, and if deemed worthy, included in the kernel tree.

My code is hosted here: https://github.com/sunipkmukherjee/silabs.git

Any suggestions/criticisms are welcome.

Thanks,

Sunip Mukherjee,
PhD Candidate,
University of Massachusetts, Lowell

Email: sunip_mukherjee@xxxxxxxxxxxxxxx | sunipkmukherjee@xxxxxxxxx