Драйвер протокола Linux SPI

Я пишу простой драйвер протокола SPI для подключения к мастер-шпиону и отправки данных в не-spi-решение через IO11 MOSI на Intel Galileo Gen 2. Но я не совсем понимаю, как привязать устройство к платформе 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 ответов

Другие вопросы по тегам