Как использовать контакты gpio на raspberry pi с деревом устройств в драйвере устройства? - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь разработать драйвер для управления пользовательским оборудованием через контакты gpio на Raspberry Pi.

Я бы хотел использовать новый gpio_des c в сочетании с деревом устройств. Но я не могу заставить это работать.

Если я пытаюсь получить пин через red = gpio_to_desc( 17 );, все работает идеально, но

green = gpiod_get(dev, "carr", GPIOD_OUT_LOW);

, кажется, пропускает дерево устройств .

В dmesg:

[ 4326.023976] carrera_driver carrera.0: GPIO lookup for consumer carr
[ 4326.023986] carrera_driver carrera.0: using lookup tables for GPIO lookup
[ 4326.023999] carrera_driver carrera.0: No GPIO consumer carr found
[ 4326.024010] carrera_driver carrera.0: Failed to get carr GPIO: -2
[ 4326.024034] carrera_driver: probe of carrera.0 failed with error -2

дерево устройств:

/dts-v1/;
/plugin/;

/{

    compatible = "brcm,bcm2835";

    fragment@0 {
    target = <&gpio>;
        __overlay__ {                   
            carrera_pins: carrera_pins {
                compatible = "kru,carrera";
                brcm,pins = <18>;
                brcm,function = <1>; // out
                brcm,pull = <0>;

            };
        };
    };

    fragment@1 {
        target = <&gpio>;
        __overlay__ {
            carrera: carrera {
                compatible = "kru,carrera";
                #gpio-cells = <2>;
                pinctrl-names = "default";
                pinctrl-0 = <&carrera_pins>;
                carr-gpios   = <&gpio 18 0>;
            };
        };
    };

};

Я думаю, что это та часть, где происходит сопоставление дерева устройств с драйвером

struct platform_device linuxmag = {
        .name = "carrera", /* driver identification */
        .id = 0,
        .dev = {
                .release = linuxmag_release,
        }
};

static struct of_device_id linmag_match[] = {
        {.compatible = "kru,carrera"},
        {}
};

static struct platform_driver mydriver = {
        .probe = linuxmag_probe_device,
        .remove = linuxmag_remove_device,
        .driver = {
                .name = "carrera_driver",
                .of_match_table = linmag_match,
        }
};

Не путайте с именами. Я использовал шаблон из этой статьи. https://www.linux-magazin.de/ausgaben/2017/08/kern-technik/3/

Я думаю, что мне не хватает чего-то очень значительного.

У кого-то есть пример того, как включить хотя бы светодиод в подмодуле gpiod с деревом устройств ? Все, что я нашел в Inte rnet, имеет неполное дерево устройств или код отсутствует.

1 Ответ

0 голосов
/ 28 января 2020

Вот короткий ответ, который сработал для меня.

/dts-v1/;
/plugin/;

/ {
    fragment@0 {
        target = <&gpio>;
        __overlay__ {
            hsnrcarr {
                compatible = "kru,carrera";
                carr-gpios = <&gpio 17 0 >;
            };
        };
    };

};

Я перешел на GPIO 17.

Я надеюсь, что найду время опубликовать более подробный ответ.

...