//在设备树中定义pinctrl状态
gpio_dbg {
compatible = "gpio_dbg";
status = "okay";
pinctrl-names = "default", "sleep";
pinctrl-0 = <&gpio_12_active>;
pinctrl-1 = <&gpio_12_suspend>;
};
gpio_12_active: gpio_12_active {
mux {
pins ="gpio12";
function = "gpio";
};
config {
pins = "gpio12";
drive-strength = <2>;
bias-disable;
};
};
gpio_12_suspend: gpio_12_suspend {
mux {
pins ="gpio12";
function = "gpio";
};
config {
pins = "gpio12";
drive-strength = <2>;
bias-pull-down;
};
};
在驱动中:
static struct pinctrl *pinctrl;
static struct pinctrl_state *gpio_state_active;
pinctrl = devm_pinctrl_get(&pdev->dev);
gpio_state_active = pinctrl_lookup_state(pinctrl,"default");
//查找到节点为"default"的状态,并保存在gpio_state_active
ret = pinctrl_select_state(pinctrl,gpio_state_active);
if (ret){
pr_err("%s:Error selecting active state",__func__);
}
else{
pr_err("%s:Ok selecting active state",__func__);
}
//将gpio_state_active设置为pinctrl状态