4.3 SPI
The ATWILC device driver identifies the SPI port that is to be used for communication by
      passing the Linux SPI registration API, spi_register_driver( ), after
        calling module_spi_driver( ).
The variable of_match_table of the structure spi_driver is
      used to specify an appropriate .compatible parameter.
The ATWILC device’s spi_driver is defined below in the spi.c file.
static const struct of_device_id wilc_of_match[] = {
	{ .compatible = "microchip,wilc1000", },
	{ .compatible = "microchip,wilc3000", },
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, wilc_of_match);
static const struct dev_pm_ops wilc_spi_pm_ops = {
     .suspend = wilc_spi_suspend,
     .resume    = wilc_spi_resume,
    	};
static struct spi_driver wilc_spi_driver = {
	.driver = {
		.name = MODALIAS,
		.of_match_table = wilc_of_match,
		.pm = &wilc_spi_pm_ops,
	},
	.probe =  wilc_bus_probe,
	.remove = wilc_bus_remove,
};
    The user must make sure that the .compatible parameter defined in
        of_device_id wilc_of_match[] is defined in the board’s device tree file
      that describes the board.
For example, the SAMA5D4's device tree at91-sama5d4_xplained.dts file in the
        kernel_tree/arch/arm/boot/dts path is modified to match the driver, as
      shown below. In addition, the SPI clock was changed to improve communication with the host
      processor. Therefore, the spi-max-frequency property must be changed appropriately under the
      corresponding SPI device node.
spi1: spi@fc018000 {
	cs-gpios = <&pioB 21 0>;
	status = "okay";
				
	wilc_spi@0 {
		 compatible = "microchip,wilc1000", "microchip,wilc3000";
                spi-max-frequency = <48000000>;
                reg = <0>;
                interrupt-parent = <&pioB>;
                interrupts = <26 0>;
                reset-gpios = <&pioE 21 0>;
                chip_en-gpios = <&pioB 27 0>;
                status = "okay";
	};
};
    