04、多级GPIO节点的操作
一、函数接口
1.1、计算子节点数量
这个函数的作用是统计指定设备节点下有多少子节点。它帮助开发者在设备驱动程序中快速查看某个设备下直接连接的子设备数量,方便了解设备的层级关系。
::: 函数原型
unsigned int device_get_child_node_count(struct device *dev);
头文件
<linux/device.h>。
参数:
struct device 类型的指针 dev, 表示要计算子节点数量的设备节点。
函数功能:
用于计算给定设备节点 dev 的子节点数量。
返回值:
如果成功获取子节点数量, 返回一个大于 0 的无符号整数, 表示设备节点的子节点数量。 如果获取失败, 返回值为 0。 :::
1.2、获取指定节点的 GPIO 结构描述
该函数的作用是根据设备节点地址fwnode,从指定的属性名称propname中获取GPIO的配置信息。可以通过index参数指定要获取属性中的第几个条目。获取到的GPIO信息可用于后续的GPIO操作。
函数支持通过dflags参数设置GPIO的初始配置,例如设置为输入或输出模式,并可指定输出时的默认电平状态。label参数用于给该GPIO添加可读性描述标签。
函数执行成功时会返回GPIO的配置描述信息指针,若获取失败则返回空指针(NULL)。
::: 函数原型:
struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode, const char *propna
me, int index, enum gpiod_flags dflags, const char *label);
头文件:
<linux/gpio/consumer.h>。
参数:
fwnode: 指向 struct fwnode_handle 的指针, 表示要获取 GPIO 的节点对象地址。
propname: 属性名, 指定要获取的 GPIO 的属性名称。
index: 索引值, 用于指定要获取的 GPIO 在属性中的索引, 用于 GPIO 属性值包含多个 GPIO 引脚
描述时。
dflags: 获得到 GPIO 后的初始化配置, 可以使用以下枚举值:
GPIOD_ASIS: 不进行初始化。
GPIOD_IN: 初始化为输入模式。
GPIOD_OUT_LOW: 初始化为输出模式, 输出低电平。
GPIOD_OUT_HIGH: 初始化为输出模式, 输出高电平。
label: 标签, 用于标识 GPIO 的描述。
函数功能:
该函数通过指定节点的对象地址获取子节点中的 GPIO 结构描述。
返回值:
返回一个指向 struct gpio_desc 的指针, 表示获取到的 GPIO 结构描述。 如果获取失败, 返回值为 N
ULL。 :::
该函数通过给定的节点地址fwnode和属性名propname,获取对应的GPIO配置信息。可以通过index参数指定要获取属性中的哪一个值。获取到的GPIO描述可用于后续操作。函数还能根据dflags参数设置GPIO的初始状态,比如设置为输入或输出模式,并指定输出时的默认电平值。label参数用于给GPIO添加描述性标签。若成功获取,返回GPIO描述的指针;若失败则返回NULL。
1.3、获取下一个子节点对象地址
::: 函数原型:
struct fwnode_handle *device_get_next_child_node(struct device *dev, struct fwnode_handle *child);
头文件:
<linux/device.h>。
参数:
dev: 指向 struct device 的指针, 表示父设备节点。
child: 指向 struct fwnode_handle 的指针, 表示当前子设备节点。
函数功能:
用于获取给定父设备节点 dev 的下一个子设备节点。
返回值:
返回一个指向 struct fwnode_handle 的指针, 表示下一个子设备节点。 如果没有下一个子设备节点,
返回值为 NULL。 :::
该函数的作用是:在指定的父设备(dev)下,找到当前子设备(child)的下一个兄弟子设备。调用这个函数可以逐个遍历父设备下的所有子设备节点。函数会返回指向下一个子设备的指针(struct fwnode_handle类型),如果已经没有后续子设备了,就返回空值NULL。在开发设备驱动时,这个函数常被用来逐个访问设备树中某个父节点下的所有子设备节点。