2

我正在编写一个简单的 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;
}

--------------------------------------------------

4

0 回答 0