mm6108->FGH100M-H -> wm6108 ->wm1302(pi hat)->RPi5 over SPI

I am trying to get Halow working with these hardware setup over SPI

  • Raspberry Pi 5
  • Seeed WM1302 pi hat
  • Seeed WM6108 mini PCI card (with Quectel FGH100M-H and mm6108)

Software packages used:

  • OS: Raspberry Linux
  • Kernel version: 6.12.47 (stable_20250916)
  • Morse rpi-linux patch 6.12.21
  • Morse driver 1.16.x
  • Morse firmware: mm6108.bin and bcd_fgh100mhaamd.bin

I found useful information from these:

did the followings

  1. patched the kernel source with Morse rpi-linux - manually resolved a few conflicts
  2. configured the kernel with necessary flags for CRYPTO
  3. built Image, modules, dtbs with .config and System.map
  4. built Morse driver (morse.ko and 80211ah.ko) against the patched kernel
  5. download firmware *bin files
  6. wrote the dts, compiled

My DTS: morse-mm610x-spi-overlay.dts

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709", "brcm,bcm2711"; 

    fragment@0 {
        target = <&spi0>;
        __overlay__ {
            pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
            cs-gpios = <&gpio 8 1>;
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";

            mm6108: mm6108@0 {
                compatible = "morse,mm610x-spi";
                reg = <0>; /* CE0 */
                reset-gpios = <&gpio 17 1>;
                power-gpios = <&gpio 23 0>,
                                <&gpio 24 0>;
                spi-irq-gpios = <&gpio 5 0>;
                spi-max-frequency = <10000000>;
                status = "okay";
            };
            spidev@1 { reg = <1>; status = "disabled"; };
            spidev@2 { reg = <2>; status = "disabled"; };
        };
    };
    fragment@1 {
            target = <&gpio>;
            __overlay__ {
                    spi0_pins: spi0_pins {
                            brcm,pins     = <9 10 11>;
                            brcm,function = <4  4  4>;
                            brcm,pull     = <2  2  2>; 
                    };
                    spi0_cs_pins: spi0_cs_pins {
                            brcm,pins     = <8>;
                            brcm,function = <1>;
                            brcm,pull     = <2>;
                    };

                    mm6108_pins: mm6108_pins {
                            brcm,pins       = <17 23 24>;
                            brcm,function   = <1 1 1>;
                            brcm,pull       = <0 0 0>;
                    };
            };
    };
};

Then I deployed them to the SDcard running on RPi 5, created symbolic link to bcf_boardtype_0801.bin.

After reboot. I got these SPI errors “chip select 0 already in use”

[    2.226925] rp1-firmware rp1_firmware: RP1 Firmware version eb39cfd516f8c90628aa9d91f52370aade5d0a55
[    2.229240] spi spi0.0: chipselect 0 already in use
[    2.229249] spi_master spi0: spi_device register error /axi/pcie@1000120000/rp1/spi@50000/spidev@0
[    2.229256] spi_master spi0: Failed to create SPI device for /axi/pcie@1000120000/rp1/spi@50000/spidev@0

and the driver didn’t load

[    9.892319] dot11ah: loading out-of-tree module taints kernel.
[    9.893016] Morse Micro Dot11ah driver registration. Version 0-rel_1_16_4_2025_Sep_18
[   10.185262] morse micro driver registration. Version 0-rel_1_16_4_2025_Sep_18
[   10.185706] morse_spi spi0.0: morse_spi_probe: failed to init SPI with CMD63 (ret:-61)
[   10.185719] morse_spi_probe failed. The driver has not been loaded!
[   10.185721] morse_spi spi0.0: probe with driver morse_spi failed with error -61

My config.txt has these lines, and my DTBO has lines to disable spidev@

dtoverlay=spi0-0cs
dtoverlay=morse-mm610x-spi-overlay

Can someone help me get pass this issue? Thanks

NOTE: I followed Yourself’s repo and blacklisted morse, morse_spi, dot11ah from autostart.

Okay, a quick update. I was able to disable the kernel pre-defined generic spidev device. Now, I no longer see the chip select 0 already in use error.

The next hurdle is morse_spi_probe failed to init SPI with CMD63

[    9.855297] morse micro driver registration. Version 0-rel_1_16_4_2025_Sep_18
[    9.857211] morse_spi spi0.0: morse_spi_probe: failed to init SPI with CMD63 (ret:-61)
[    9.857225] morse_spi_probe failed. The driver has not been loaded!
[    9.857228] morse_spi spi0.0: probe with driver morse_spi failed with error -61

It looks like: Error -61 translates to “No data available” or “Connection refused”. This error is returned by the kernel driver when it sends an initial command (CMD63) to the physical chip over the SPI bus, but the chip does not respond at all.

I am pretty sure the pin layout table I have is correct. Any ideas what I did wrong?