如何使用单SPI平台驱动程序处理linux内核中的两个SPI设备?

时间:2014-09-26 05:12:13

标签: linux-kernel linux-device-driver spi

我为单个SPI设备开发了一个SPI平台驱动程序。我们使用的是哪种SPI设备,可以在Device Tree.probe()函数中给出配置。当名称匹配发生时,调用SPI平台驱动程序的函数驱动程序和DT中的相同内容。

在SPI平台驱动程序module_init()方法中,我们使用函数调用注册SPI设备结构(struct spi_driver spidev_spi_driver):spi_register_driver()。

请参考下面链接中的(static struct spi_driver spidev_spi_driver)。 链接:http://lxr.free-electrons.com/source/drivers/spi/spidev.c#L664

这里Probe()是此调用中注册的一个重要方法。 当调用probe函数时,内核在probe()函数中传递SPI设备的指针(例如struct spi_device * spi),这进一步用于SPI设备的读写操作。 对于单个SPI器件,所有上述过程仅发生一次。

现在我在这里询问如果我想在我的微控制器中使用多个SPI设备,例如imx6然后我将如何处理这种情况? 在这种情况下,我将如何接收SPI设备指针? 探针函数是否会被调用两次(bcoz这里只有我从内核获得SPI设备指针)? 我是否需要创建诸如在spidev_dt_ids中完成的条目: http://lxr.free-electrons.com/source/drivers/spi/spidev.c#L657

1 个答案:

答案 0 :(得分:0)

我没有专门研究spi设备,但我想我可能会给你一些基本的想法。逻辑是只要device-> name和device_driver-> name之间存在匹配,就会调用probe。因此,2个设备可以使用相同的驱动程序,但不应该有2个驱动程序用于相同的设备。

要将2个设备配置为相同的驱动程序,2设备将以相同的名称注册,因此将调用相同的探测器。但是在探测中你可以区分。您可以访问spi的设备结构,您可以使用它来设置一个参数来区分和设置相关参数。

另一种方法就是使用i2c使用的核心框架,其中一般功能函数由客户端驱动程序制作并在需要时使用。

我希望这会有所帮助。