欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > Linux设备驱动开发-Pinctrl子系统使用详解

Linux设备驱动开发-Pinctrl子系统使用详解

2025/2/28 8:10:20 来源:https://blog.csdn.net/hollow2420655128/article/details/145807217  浏览:    关键词: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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词