Linux SPI协议驱动程序

时间:2017-11-07 05:26:01

标签: linux driver device galileo

我正在编写一个简单的SPI协议驱动程序来连接spi主机,并通过Intel Galileo Gen 2上的IO11 MOSI将数据发送到非spi decive。但我对如何绑定到平台spi设备感到困惑。我有以下代码,我理解将进行绑定,但描述混淆了我说它将与任何spi设备绑定模式为“CHIP”。我的问题是我应该使用哪个名称已经作为平台设备创建并且我将绑定到哪个名称?

如何编写“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,
};

驱动程序核心将自动尝试将此驱动程序绑定到任何SPI board_info给出模式为“CHIP”的设备。你的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;
}

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

0 个答案:

没有答案