在设备树中
user_spi {
compatible = "hitbot,t507,spi";
label = "hitbot_user_spi";
pinctrl-0 = <&spi1_pins_a &spi1_pins_b>;
pinctrl-1 = <&spi1_pins_c>;
pinctrl-names = "default", "sleep";
};
其中pinctrl-0 pinctrl-1分配了不同的模式,spi1_pins_a的定义在其它位置,pinctrl-names依次定义了pinctrl-0 pinctrl-1的分配名称
在驱动中加载时,首先会自动用default进行配置,在init中手动获取pinctrl指针供后面使用
spi_device->pctrl = devm_pinctrl_get(&pdev->dev);
然后使用对应函数来控制模式切换,name为指向字符串的指针”sleep”等
struct pinctrl_state *pctrl_state = NULL;
pctrl_state = pinctrl_lookup_state(spi_device->pctrl, name);
ret = pinctrl_select_state(spi_device->pctrl, pctrl_state);
最后在卸载模块时销毁指针
devm_pinctrl_put(spi_device->pctrl);