I2C Linux драйверы - PullRequest
2 голосов
/ 23 июля 2011

Мне нужно будет написать свои собственные драйверы для нескольких контроллеров в моем чипсете. Я работаю на SoC с SDK, который не предоставляет "linux i2c-совместимый" драйвер.Он имеет простой драйвер для i2c.Я хотел бы использовать некоторые стандартные драйверы i2c RTC.

  • Я предполагаю, что мне потребуется добавить файл в папку / busses и реализовать стандартные интерфейсы.И это все.Этот файл должен взаимодействовать с i2c-core и i2c-dev?

  • Какой драйвер будет лучшим в качестве основы?У меня ~ 9 32-битных регистров для работы.На первый взгляд, i2c-ibm_iic.c кажется мне довольно дружелюбным.

I2C - это прогрев драйверов SPI и USB-гаджетов для этой SoC.Знаете ли вы, может быть, грубые оценки мужчин / часов для таких задач?

Буду признателен за любые подсказки.

BR Bartlomiej Grzeskowiak

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

Первым делом стоит выяснить, возможно ли, что ваш драйвер IC уже реализован в ядре Linux или третьей стороной. Вы можете обнаружить, что нужный драйвер уже реализован. Попробуйте спросить своего поставщика SoC, могут ли они сказать, какая компания сделала макроячейку I2C, потому что вы ищете альтернативные драйверы. Опять же, вы можете обнаружить, что нужный вам драйвер уже существует.

Ты ищешь в правильном месте. Файл должен идти в шинах и должен реализовывать и регистрировать интерфейс драйвера. Вам также необходимо зарегистрировать устройство платформы, чтобы ядро, как обычно, подключало пару драйвер-устройство. У других SoC есть много примеров этого, если у вас их нет. Я не думаю, что вы обнаружите, что вам нужно взаимодействовать с i2c-core и i2c-dev.

Я бы искал файл небольшого размера и недавно измененный драйвер, если бы мне пришлось выбирать его в качестве базового.

SPI потребует примерно столько же усилий, сколько I2C. USB-гаджет будет значительно больше - в несколько раз больше усилий, необходимых для двух других задач, в зависимости от того, сколько потребуется работы по реализации. Я не хочу ставить номер для любой задачи. Если вам повезло, не все функциональные возможности необходимы (например, вас интересует режим ожидания с низким энергопотреблением?) И вы можете срезать углы.

0 голосов
/ 10 декабря 2018

Вы говорите о драйвере шины (адаптера) I2C. Вот очень упрощенный взгляд:

Вы должны определить свою собственную структуру I2C platform_driver и зарегистрировать ее как platform_driver. Драйвер связан с устройством I2C в функции probe().

Вы должны определить структуру устройства I2C, содержащую i2c_adapter, инициализировать его элементы и i2c_algorithm структуру, в которой вы определяете свои ловушки (callbcaks)

static const struct i2c_algorithm xxx_i2c_algo = { .master_xfer = xxxxx()

, а затем добавьте i2c_adapter к слою Kernel I2C, чтобы i2c-core и i2c-dev могли использовать драйвер вашего автобуса.

Регистрация устройства шины SPI следует аналогичной философии.

...