我实现了一个通用驱动程序,在该驱动程序中,我只想遍历每个已注册的设备并执行某些操作。
我的驱动程序是通用的,所以我不想事先知道任何有关设备的信息。

我有一些设备树节点:

uart0: uart@1000000 {
    compatible = "generic-driver";
    reg = <0x1000000 0x1000>,<0x1001000 0x1000>,<0x1002000 0x1000>;
};

uart1: uart@2000000 {
    compatible = "generic-driver";
    reg = <0x2000000 0x1000>,<0x2001000 0x1000>,<0x2002000 0x1000>;
};


在驱动程序中,我知道如何使用platform_get_resource获取第一个偏移量和大小,但是如果我有多个范围怎么办?
我看到了通过添加注册表名称来获取它的选项:

reg = <0x2000000 0x1000>,<0x2001000 0x1000>,<0x2002000 0x1000>;
reg-names = "uart0_0","urat0_1","uart0_2";


因此,在驱动程序中,我可以使用platform_get_resource_byname,但是我需要提前在驱动程序中知道regs的名称-但不再通用了-不需要!

所以我的问题是,有没有办法在没有驱动程序早期信息的情况下遍历这些reg?

提前致谢!!

最佳答案

如果遍历platform_get_resource的定义,您会发现最后一个参数是资源编号。因此,对于本示例,您给出的资源编号范围为0到2。

如果您不知道资源数量,则可以运行循环,直到得到NULL作为对platform_get_resource的响应。

10-04 17:15