SPI_DT_SPEC_GET() not found error with two SPI devices on separate buses

Hi everyone,
I'm working on a project with Zephyr (v2.9.1) and I'm facing a compilation issue related to managing two SPI devices on different buses (spi0 and spi2).

In my .dts file, I’ve defined two SPI devices.

/dts-v1/;
#include <nordic/nrf52840_qiaa.dtsi>
#include "device-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "device";
	compatible = "company,device";

	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
		zephyr,uart-mcumgr = &cdc_acm_uart0;
	};

	leds {
		compatible = "gpio-leds";

		led_red: led_0 {
			gpios = < &gpio1 2 GPIO_ACTIVE_HIGH >;
			label = "Led Red";
		};

		led_green: led_1 {
			gpios = < &gpio1 6 GPIO_ACTIVE_HIGH >;
			label = "Led Green";
		};

		led_blue: led_2 {
			gpios = < &gpio1 4 GPIO_ACTIVE_HIGH >;
			label = "Led Blue";
		};
	};

	pwmleds {
		compatible = "pwm-leds";

		pwm_led_red: pwm_led_red {
			pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
			label = "Pwm Led Red";
		};

		pwm_led_green: pwm_led_green {
			pwms = <&pwm1 1 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
			label = "Pwm Led Green";
		};

		pwm_led_blue: pwm_led_blue {
			pwms = <&pwm2 2 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
			label = "Pwm Led Blue";
		};
	};

	gpiocustom {
		compatible = "gpio-keys";

		pwr_en_mcu: gpiocustom_0 {
			gpios = < &gpio1 8 GPIO_ACTIVE_HIGH >;
			label = "PWR_EN_MCU";
		};

		button_mcu: gpiocustom_1 {
			gpios = < &gpio0 12 GPIO_ACTIVE_HIGH >;
			label = "BUTTON_MCU";
		};

		chg_wrd_mcu: gpiocustom_2 {
			gpios = < &gpio0 8 GPIO_ACTIVE_HIGH >;
			label = "CHG_WRD_MCU";
		};

		pg_wrd_mcu: gpiocustom_3 {
			gpios = < &gpio1 9 GPIO_ACTIVE_HIGH >;
			label = "PG_WRD_MCU";
		};

		imu_int1: gpiocustom_4 {
			gpios = < &gpio0 2 GPIO_ACTIVE_HIGH >;
			label = "IMU_INT1";
		};

		imu_int2: gpiocustom_5 {
			gpios = < &gpio0 6 GPIO_ACTIVE_HIGH >;
			label = "IMU_INT2";
		};

		bio_reset: gpiocustom_6 {
			gpios = < &gpio1 11 GPIO_ACTIVE_HIGH >;
			label = "BIO_RESET";
		};

		bio_start: gpiocustom_7 {
			gpios = < &gpio1 12 GPIO_ACTIVE_HIGH >;
			label = "BIO_START";
		};

		bio_drdy: gpiocustom_8 {
			gpios = < &gpio1 10 GPIO_ACTIVE_HIGH >;
			label = "BIO_DRDY";
		};

		bio_dout0: gpiocustom_9 {
			gpios = < &gpio1 14 GPIO_ACTIVE_HIGH >;
			label = "BIO_DOUT0";
		};

		bio_dout1: gpiocustom_10 {
			gpios = < &gpio0 3 GPIO_ACTIVE_HIGH >;
			label = "BIO_DOUT1";
		};

		bio_dout2: gpiocustom_11 {
			gpios = < &gpio1 13 GPIO_ACTIVE_HIGH >;
			label = "BIO_DOUT2";
		};

		bio_dout3: gpiocustom_12 {
			gpios = < &gpio1 15 GPIO_ACTIVE_HIGH >;
			label = "BIO_DOUT3";
		};

		bio_mode0: gpiocustom_13 {
			gpios = < &gpio1 7 GPIO_ACTIVE_HIGH >;
			label = "BIO_MODE0";
		};

		bio_mode1: gpiocustom_14 {
			gpios = < &gpio0 5 GPIO_ACTIVE_HIGH >;
			label = "BIO_MODE1";
		};

		bio_mode2: gpiocustom_15 {
			gpios = < &gpio1 1 GPIO_ACTIVE_HIGH >;
			label = "BIO_MODE2";
		};

		bio_mode3: gpiocustom_16 {
			gpios = < &gpio1 3 GPIO_ACTIVE_HIGH >;
			label = "BIO_MODE3";
		};

		bio_mclk: gpiocustom_17 {
			gpios = < &gpio0 15 GPIO_ACTIVE_HIGH >;
			label = "BIO_MCLK";
		};

		bio_dclk: gpiocustom_18 {
			gpios = < &gpio0 13 GPIO_ACTIVE_HIGH >;
			label = "BIO_DCLK";
		};

		bio_pwen: gpiocustom_19 {
			gpios = < &gpio0 14 GPIO_ACTIVE_HIGH >;
			label = "BIO_PWEN";
		};
	};

	buttons {
		compatible = "gpio-keys";

		button0: button_0 {
			gpios = <&gpio0 12 ( GPIO_PULL_UP | GPIO_ACTIVE_LOW )>;
			label = "Push button switch 0";
			zephyr,code = <INPUT_KEY_0>;
		};
	};

	msc_disk0 {
		compatible = "zephyr,flash-disk";
		partition = <&flash_storage_partition>;
		disk-name = "NAND";
		cache-size = <4096>;
	};

	aliases {
		mcuboot-button0 = &button0;
		mcuboot-led0 = &led_blue;
	};
};

&gpio1 {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpiote {
	status = "okay";
};

&pwm0 {
	status = "okay";
	pinctrl-0 = <&pwm0_default>;
	pinctrl-1 = <&pwm0_sleep>;
	pinctrl-names = "default", "sleep";
};

&pwm1 {
	status = "okay";
	pinctrl-0 = <&pwm1_default>;
	pinctrl-1 = <&pwm1_sleep>;
	pinctrl-names = "default", "sleep";
};

&pwm2 {
	status = "okay";
	pinctrl-0 = <&pwm2_default>;
	pinctrl-1 = <&pwm2_sleep>;
	pinctrl-names = "default", "sleep";
};

&i2c1 {
	status = "okay";
	clock-frequency = <400000>;
	pinctrl-0 = <&i2c1_default>;
	pinctrl-1 = <&i2c1_sleep>;
	pinctrl-names = "default", "sleep";

	bq27421_g1: bq27421_g1@55 {
		compatible = "i2c-device";
        reg = <0x55>;
	};

	lis2mdl: lis2mdl@1E {
		compatible = "i2c-device";		
        reg = <0x1E>;
    };
};

&spi0 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	pinctrl-0 = <&spi0_default>;
	pinctrl-1 = <&spi0_sleep>;
	pinctrl-names = "default", "sleep";
	cs-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
	
	lsm6dsv16x: lsm6dsv16x@0 {
		compatible = "st,lsm6dsv16x";		
        reg = <0>;
        spi-max-frequency = <8000000>;
    };
};

&spi2 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	pinctrl-0 = <&spi2_default>;
	pinctrl-1 = <&spi2_sleep>;
	pinctrl-names = "default", "sleep";
	cs-gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
	
	ad7779: ad7779@0 {
		compatible = "spi-device";		
        reg = <0>;
        spi-max-frequency = <8000000>;
    };
};

&qspi {
	status = "disabled";
	pinctrl-0 = <&qspi_default>;
	pinctrl-1 = <&qspi_sleep>;
	pinctrl-names = "default", "sleep";

	mt25qu512: mt25qu512@0 {
		compatible = "nordic,qspi-nor";
		reg = <0>;
		writeoc = "pp4io";
		readoc = "read4o";
		sck-frequency = <8000000>;
		jedec-id = [20 bb 20];
		sfdp-bfp = [
			e5 20 fb ff  ff ff ff 1f  29 eb 27 6b  27 3b 27 bb
			ff ff ff ff  ff ff 27 bb  ff ff 29 eb  0c 20 10 d8
			0f 52 00 00  24 4a 99 00  8b 8e 03 e1  ac 01 27 38
			7a 75 7a 75  fb bd d5 5c  4a 0f 82 ff  81 bd 3d 36
		];
		size = <536870912>;
		has-dpd;
		t-enter-dpd = <10000>;
		t-exit-dpd = <35000>;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;
	
			flash_storage_partition: partition@0 {
				label = "flash-storage";
				reg = <0x00000000 0x04000000>;
			};
		};
	};
};

&flash0 {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x0000C000>;
		};
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000C000 0x00067000>;
		};
		slot1_partition: partition@73000 {
			label = "image-1";
			reg = <0x00073000 0x00067000>;
		};
		scratch_partition: partition@da000 {
			label = "image-scratch";
			reg = <0x000da000 0x0001e000>;
		};		
		storage_partition: partition@f8000 {
			label = "storage";
			reg = <0x000f8000 0x00008000>;
		};
	};
};

zephyr_udc0: &usbd {
	compatible = "nordic,nrf-usbd";
	status = "okay";
};

&zephyr_udc0 {
	cdc_acm_uart0: cdc_acm_uart0 {
		compatible = "zephyr,cdc-acm-uart";
	};
};

One of them is an AD7779 ADC connected to spi2. I'm using the macro

static struct spi_dt_spec bioSensorSpiSpec = SPI_DT_SPEC_GET( DT_NODELABEL( ad7779 ), SPI_WORD_SET( 8 ) | SPI_TRANSFER_MSB | SPI_MODE_CPOL | SPI_MODE_CPHA, 0 );

in my C code to initialize the SPI communication, but during compilation I get the following error:

error: 'DT_N_S_soc_S_spi_40023000_S_ad7779_0_P_spi_max_frequency' undeclared here

It seems like the ad7779 node is not being recognized properly. Note that there is also another SPI device on spi0, with a different name and label, which doesn't cause any issues during compilation.
Has anyone experienced something similar? What am I missing?
Thanks in advance for your help!


EDIT:

I noticed that if I use

compatible = "st,lsm6dsv16x";

instead of

compatible = "spi-device";

everything compiles correctly. So the issue is with "spi-device". Of course, I can't leave "st,lsm6dsv16x" there, so what do you suggest I do?

Related