我实现了一个通用驱动程序,在该驱动程序中,我只想遍历每个已注册的设备并执行某些操作。
我的驱动程序是通用的,所以我不想事先知道任何有关设备的信息。
我有一些设备树节点:
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
的响应。