2014-09-26 5 views
4

Я разработал драйвер платформы SPI для одного устройства SPI. Это устройство SPI, которое мы используем, эта конфигурация может быть задана в функции Device Tree.probe() драйвера платформы SPI вызывается, когда совпадение имен происходит с именем в драйвере и то же самое в DT.Как обрабатывать два устройства SPI в ядре linux с одним драйвером платформы SPI?

В модуле mod_init() платформы платформы SPI мы регистрируем структуру устройства SPI (struct spi_driver spidev_spi_driver) с вызовом функции: spi_register_driver().

См., Например, ссылку (статическая структура spi_driver spidev_spi_driver) в приведенной ниже ссылке. Ссылка: http://lxr.free-electrons.com/source/drivers/spi/spidev.c#L664

Здесь Probe() является одним из важных методов, зарегистрированных в этом вызове. Когда функция зонда вызывается, ядро ​​передает указатель на устройство SPI (например, struct spi_device * spi) в функции probe(), которое далее используется в операции чтения и записи с устройством SPI. Все описанные выше процедуры выполняются только один раз для одного устройства SPI.

Теперь у меня есть запрос, что если я хочу использовать более одного устройства SPI, присутствующих в моем микроконтроллере, например. imx6, то как я буду справляться с этой ситуацией? Как я могу получить указатели устройств SPI в этом случае? Будет ли функция зонда вызываться дважды (bcoz здесь только я получаю указатели устройств SPI от ядра)? ли мне нужно создать записи таких, как это сделано в spidev_dt_ids: http://lxr.free-electrons.com/source/drivers/spi/spidev.c#L657

ответ

0

Я не работал на специально СПИ устройство, но я думаю, что я мог бы дать вам некоторые основные идеи. Логика заключается в том, что зонд вызывается всякий раз, когда имеется совпадение между именем device-> name и device_driver->. Таким образом, 2 устройства могут использовать один и тот же драйвер, но 2 драйвера не должны присутствовать на одном устройстве.

Для настройки 2 устройств на один и тот же драйвер устройство 2 будет зарегистрировано с тем же именем и, следовательно, будет вызываться тот же самый зонд. Но тогда в зонд вы можете различать. У вас будет доступ к структуре устройства spi, которую вы можете использовать, чтобы установить один параметр для различения и установки соответствующих параметров.

Еще один подход подобен использованию базовой структуры, используемой i2c, в которой общие функциональные функции создаются и используются драйвером клиента, когда это необходимо.

Надеюсь, это поможет.

Смежные вопросы