我正在编写一个简单的 SPI 协议驱动程序来连接到 spi 主机并将数据通过 Intel Galileo Gen 2 上的 IO11 MOSI 发送到非 spi 设备。但我对如何绑定到平台 spi 设备感到困惑。我有以下代码,我理解它会进行绑定,但是当它说它将与任何具有“CHIP”模式的 spi 设备绑定时,描述让我感到困惑。我的问题是我应该使用已经创建为平台设备并且我将绑定到的名称?
如何编写“SPI 协议驱动程序”?
大多数 SPI 驱动程序目前是内核驱动程序,但也支持用户空间驱动程序。这里我们只讨论内核驱动程序。
SPI 协议驱动程序有点类似于平台设备驱动程序:
static struct spi_driver CHIP_driver = {
.driver = {
.name = "CHIP",
.owner = THIS_MODULE,
},
.probe = CHIP_probe,
.remove = CHIP_remove,
.suspend = CHIP_suspend,
.resume = CHIP_resume,
};
驱动核心会自动尝试将此驱动绑定到任何其 board_info 给出模态别名为“CHIP”的 SPI 设备。你的 probe() 代码可能看起来像这样,除非你正在创建一个管理总线的设备(出现在 /sys/class/spi_master 下)。
static int CHIP_probe(struct spi_device *spi)
{
struct CHIP *chip;
struct CHIP_platform_data *pdata;
/* assuming the driver requires board-specific data: */
pdata = &spi->dev.platform_data;
if (!pdata)
return -ENODEV;
/* get memory for driver's per-chip state */
chip = kzalloc(sizeof *chip, GFP_KERNEL);
if (!chip)
return -ENOMEM;
spi_set_drvdata(spi, chip);
... etc
return 0;
}
--------------------------------------------------