Драйвер протокола 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;
}
-------------------------------------