Как и где реализован протокол i2c для главной отправки / получения в дереве ядра Linux? - PullRequest
0 голосов
/ 14 января 2019

Извиняюсь за такое общее название, но не могу придумать ничего лучшего.

Я пытаюсь понять, где в drivers/i2c/ реализована последовательность протокола отправки битовых последовательностей START, ADDR, DATA, STOP согласно протоколу. Я хочу проверить протокол для отправки / получения в коде драйвера, вот и вся цель здесь.

Я использую Hikey 620 в качестве эталона с контроллером I2C DesignWare. Ниже приведен регистрационный код, который я вижу ( эликсир ):

static const struct i2c_algorithm i2c_dw_algo = {
     .master_xfer = i2c_dw_xfer,
     .functionality = i2c_dw_func,
};

Если я отслеживаю функцию i2c_dw_xfer рекурсивно, последний вызов, который я смог увидеть, это readl_relaxed, writel_relaxed in i2c_dw_xfer_init() ( elixir ).

Помимо этого, все сборки. Являются ли эти readl / writel фактической последовательностью последовательностей байтов начала / данных / остановки? Или я понимаю это совершенно неправильно?

В этом случае, пожалуйста, помогите и укажите мне правильный поток. Если то, что я получил, правильно, есть ли какой-то более простой код контроллера, который имеет более чистую реализацию и может использоваться в качестве справочного.

1 Ответ

0 голосов
/ 16 января 2019

Сам протокол не является частью кода драйвера. Функции dw_ {readl / writel}, вызывающие readl / writel, выполняют запись в регистры периферийного устройства I2C соответствующего SoC. Задача контроллера I2C на SoC - генерировать правильную сигнализацию I2C. Из таблицы данных видно, что что-то вроде DW_IC_CON является смещением регистра в карте периферийной памяти I2C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...