Поиск детей от devicetree в драйвере Linux

У меня проблема с нахождением ребенка в моем девичнике. Я пишу драйвер Linux, и я использую функции of_match_device и of_find_matching_node. Когда я проверяю, каких детей я нашел, я вижу, что это мой родитель. Что я делаю не так? Совместимость родительских и дочерних элементов должна быть определена в одной структуре of_device_id? Мои ярлыки детей верны?

Это мое заявление в devicetree:

soc: h2f_lw_bridge@0xff200000 {
    compatible = "altr,socfpga-mysoftip";
    reg = <0xff200000 0x00200000>;
    //interrupts = <GIC_SPI 40 IRQ_TYPE_EDGE_RISING>;
    #address-cells = < 2 >;
    #size-cells = < 1 >;
    ranges = <0 0x100 0xff200100 0x4
          0 0x200 0xff200200 0x100>;

    hw_tester_gpio: tester_gpio@0x000000100 {
        compatible = "altr,socfpga-gpio";
        reg = <0 0x100 0x4>;
        //reg = <0xff200100 0x4>;
        interrupt = <GIC_SPI 40 IRQ_TYPE_EDGE_RISING>;
    };

    reconig_data_clk: reconfig_pll@0x000000200 {
        compatible = "altr,socfpga-pll";
        reg = <0 0x200 0x100>;
        //reg = <0xFF200200 0x100>;
    };
};

Как я получаю получить узлы (фрагменты моего драйвера Linux):

struct h2f_lw_bridge *h2f_lw;

struct h2f_lw_bridge {
    struct device *dev;
    void __iomem *base;
    void __iomem *base_of;
    void __iomem *base_node;
    const struct of_device_id *match;
    struct device_node *node;
};

...

static const struct of_device_id _driver_id[] = {
    {.compatible = "altr,socfpga-mysoftip"}, //parent
    {.compatible = "altr,socfpga-gpio"}, //child
    {.compatible = "altr,socfpga-pll"}, //child
    {}  
};

...

h2f_lw->match = of_match_device(_driver_id, &pdev->dev);
h2f_lw->node = of_find_matching_node(NULL,h2f_lw->match);
if (!h2f_lw->match)
    return -EINVAL;

printk("h2f_lw->node: '%s' - pdev->dev.of_node: '%s' - h2f_lw->node: '%s'\n",h2f_lw->node->name,pdev->dev.of_node->name,h2f_lw->node->name);

Информация из моего Linux:

0 ответов

Другие вопросы по тегам