pinctrl-names
时间: 2023-07-05 18:33:23 浏览: 67
pinctrl-names是设备树(Device Tree)中的一个属性,用于指定针脚控制器(pinctrl)配置的名称。它通常与pinctrl属性一起使用,pinctrl属性指定了设备使用哪些针脚控制器,而pinctrl-names属性则为这些针脚控制器配置名称。
示例:
```
pinctrl_names = "default", "sleep";
pinctrl-0 = <&pinctrl_default>;
pinctrl-1 = <&pinctrl_sleep>;
```
在上面的例子中,pinctrl_names属性指定了两个针脚控制器的名称,一个是"default",另一个是"sleep"。pinctrl-0和pinctrl-1属性指定了设备在不同的状态下使用哪个针脚控制器。当设备处于默认状态时,使用pinctrl_default控制器,当设备处于睡眠状态时,使用pinctrl_sleep控制器。
相关问题
配置设备树pinctrl-names
在设备树中,pinctrl-names属性用于定义pinctrl节点的名称。该属性应定义在pinctrl-0节点之前,并指定一个字符串列表,列表中的每个元素都是pinctrl节点的名称。
例如,假设我们有以下设备树片段:
```
gpio1: gpio@10012000 {
compatible = "acme,gpio";
reg = <0x10012000 0x100>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&default>;
pinctrl-1 = <&sleep>;
};
```
在这个例子中,pinctrl-names属性定义了两个pinctrl节点的名称:“default”和“sleep”。这些名称可以在pinctrl节点中使用,以便在不同的模式下配置GPIO控制器的引脚。
需要注意的是,pinctrl-names属性是可选的,如果没有定义,则默认名称为“default”。
pinctrl-names在驱动代码中怎么使用
在驱动代码中使用pinctrl-names,需要先在设备树中为该设备定义一个pinctrl节点,并在该节点中定义一个或多个pinctrl-0, pinctrl-1, ...等属性来指定使用哪些pinctrl配置。然后在驱动代码中,可以使用以下函数来获取pinctrl节点并切换到指定的pinctrl配置:
1. `devm_pinctrl_get(dev)`:获取设备的pinctrl节点
2. `pinctrl_select_state(pinctrl, state)`:切换到指定的pinctrl配置
其中,第一个函数会返回一个指向pinctrl节点的指针,第二个函数需要传入第一个函数返回的指针和一个pinctrl配置的名称或索引。例如:
```
static int my_driver_probe(struct platform_device *pdev)
{
struct pinctrl *pinctrl;
struct pinctrl_state *state;
// 获取pinctrl节点
pinctrl = devm_pinctrl_get(&pdev->dev);
if (IS_ERR(pinctrl)) {
return PTR_ERR(pinctrl);
}
// 切换到pinctrl-0配置
state = pinctrl_lookup_state(pinctrl, "pinctrl-0");
if (IS_ERR(state)) {
return PTR_ERR(state);
}
pinctrl_select_state(pinctrl, state);
// ...
return 0;
}
```
在上面的例子中,首先使用`devm_pinctrl_get`函数获取设备的pinctrl节点,然后使用`pinctrl_lookup_state`函数获取名为"pinctrl-0"的pinctrl配置的状态,最后使用`pinctrl_select_state`函数切换到该配置。