Как добавить ADV7282-m в ядро ​​Linux - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь добавить поддержку ADV7282-m в сборку ядра linux с помощью Yocto. Однако я не могу заставить его работать. Я получил модуль для загрузки и обнаружения чипа. Драйвер полностью проходит через probe, но устройство v4l не создано.

Плата, на которой я пытаюсь его запустить, - VAR-SOM-DUAL ,с процессором IMX6. Я вручную добавил ADV7282-m (исходя из примеров, найденных с помощью Google) в дерево устройств, но я не уверен, что это правильно, потому что я не очень знаком с деревом устройств:

...

    v4l2_cap_0 {
        compatible = "fsl,imx6q-v4l2-capture";
        ipu_id = <0>;
        csi_id = <0>;
        mclk_source = <0>;
        mipi_camera = <1>;
        status = "okay";
    };

...

    adv7182: adv7182@20 {
        compatible = "adi,adv7282-m";
        pinctrl-names = "default";
        reg = <0x20>;

        clocks = <&clks 200>;
        clock-names = "csi_mclk";

        csi_id = <0>;
        cvbs = <1>;

        mipi_camera = <1>;
        mclk = <24000000>;
        mclk_source = <0>;

        ipu_id = <0>;

        status = "okay";
    };

...

&mipi_csi {
    status = "okay";
    ipu_id = <0>;
    csi_id = <0>;
    v_channel = <1>;
    lanes = <1>;
};

...

Глядя на таблицу данных платы и на то, как физически подключен ADV, кажется, все в порядке.

Тогда у меня возникла пара проблем при попытке включить модуль ядра для ADV7282-m. Когда я включаю Autoselect ancillary driver, модуль не включается в сборку. Глядя на документацию, он выбирается STA2X11_VIP, однако я не могу включить его, поскольку он зависит от VIRT_TO_BUS, который, по-видимому, устарел (или не поддерживается для моей платформы).

Когда я отключаю Autoselect ancillary driver Я могу вручную включить модуль ADV7180 (который поддерживает ADV7282-m). Но после компиляции ядра при загрузке модуля в нем отсутствуют символы V4L, и я не могу найти то, чего не хватает в настройке конфигурации V4L.

В итоге я скопировал скомпилированный модуль в мою локальную систему, перекомпилировал ядрос помощью Autoselect ancillary driver и скопируйте драйвер ADV7180 обратно для загрузки.

При этом модуль загружается правильно и печатает:

adv7180 0-0020: chip found @ 0x20 (21a0000.i2c)

, и все, устройство v4l не создаетсяи больше ошибок не отображается. Чтобы проверить, я добавил несколько дополнительных распечаток к коду модуля, но это делает его к окончательному возвращению без проблем.

В настоящий момент я застрял в поиске решения, может кто-то может указать мне правильное направление? Или, возможно, даже видите ошибку в моей конфигурации?

Если вам нужна дополнительная информация, не стесняйтесь спрашивать!

Заранее спасибо.

1 Ответ

0 голосов
/ 23 октября 2019

У меня работает ADV. Судя по всему, я полностью неправильно понял драйвер ADV7180. Он создает только подустройство V4L, которое затем может использовать драйвер моста для получения устройства / dev / video0. Я использовал драйвер, указанный в этом потоке , и заставил его работать в моей версии ядра Linux. После этого все заработало как положено.

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