ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Linux装备驱动开发-Pinctrl子系统使用详解
[打印本页]
作者:
篮之新喜
时间:
8 小时前
标题:
Linux装备驱动开发-Pinctrl子系统使用详解
Pinctrl 就是用来控制引脚的
一般引脚前面会有 IOMUX 毗连各种功能,通过IOMUX 来指定引脚具体毗连什么功能
pinctl 通过状态来控制引脚
以这个段装备树代码为例,这里有normal 和idle 两种模式,normal 对应pinctrl-0,idle 对应pinctrl-1
这段装备树片段称为 client
&sdmmc {
max-frequency = <200000000>;
no-sdio;
no-mmc;
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
disable-wp;
pinctrl-names = "normal", "idle";
pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_det &sdmmc0_bus4>;
pinctrl-1 = <&sdmmc0_idle_pins &sdmmc0_det>;
sd-uhs-sdr12;
sd-uhs-sdr25;
sd-uhs-sdr50;
sd-uhs-sdr104;
vmmc-supply = <&vcc3v3_sd>;
vqmmc-supply = <&vccio_sd>;
status = "okay";
};
复制代码
来看一个引脚控制,可以看到这里配置了引脚功能为 gpio,而且进行了下拉
这段装备树片段称为 controller
sdmmc0 {
/omit-if-no-ref/
sdmmc0_idle_pins: sdmmc0-idle-pins {
rockchip,pins =
<3 RK_PA2 RK_FUNC_GPIO &pcfg_pull_down>,
<3 RK_PA3 RK_FUNC_GPIO &pcfg_pull_down>,
<3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>,
<3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_down>,
<3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_down>,
<3 RK_PA7 RK_FUNC_GPIO &pcfg_pull_down>;
};
}
复制代码
当装备切换状态时系统就会根据装备树去切换引脚状态
写代码时可以通过这些函数来控制状态
/ include / linux / pinctrl / consumer.h
这里时选择 default 状态
static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(
struct device *dev)
{
return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
}
复制代码
这个是根据名字来选择状态
static inline struct pinctrl * __must_check pinctrl_get_select(
struct device *dev, const char *name)
{
struct pinctrl *p;
struct pinctrl_state *s;
int ret;
p = pinctrl_get(dev);
if (IS_ERR(p))
return p;
s = pinctrl_lookup_state(p, name);
if (IS_ERR(s)) {
pinctrl_put(p);
return ERR_CAST(s);
}
ret = pinctrl_select_state(p, s);
if (ret < 0) {
pinctrl_put(p);
return ERR_PTR(ret);
}
return p;
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4