上图显示了gpio子系统和pinctrl子系统之间的关系,即pinctrl子系统实际上也把gpio一起管理起来,所有的gpio操作也需要透过pinctrl子系统来完成,这样,如果一个pin已经被申请为gpio,再通过pinctrl子系统申请为某个function时就会返回错误。 5.与统一设备驱动模型的关系 从"pinctrl子系统关系图"中得知,linux kernel中的统一设...
同样地,对于pinctrl_free_gpio()、pinctrl_gpio_direction_input()和pinctrl_gpio_direction_output()也有类似说明。 因此在clientdevice驱动中,申请和释放gpio仍然要调gpio_request()、gpio_free();设置gpio为input/output仍然要调gpio_direction_input()和gpio_direction_output()。 Pinctrl注册 全文以msm8916平台为例...
在例子中,我们可以定义这个特定的机器应该使用设备spi0(pinmux功能fspi0组gspi0)和i2c0(fi2c0和gi2c0),在主要的管脚控制器上,我们有下面的映射: { {"map-spi0", spi0, pinctrl0, fspi0, gspi0}, {"map-i2c0", i2c0, pinctrl0, fi2c0, gi2c0} } 每个映射必须被分一个正式名字、管脚控制器、...
一个pin设计假定它支持8种功能,那么实际同一时刻只有一个功能能够被配置并使用。所有的pin我们通过一个统一的控制器去控制他们的mux功能,用人话说就是选择某个功能使用。比如pin脚编号1,支持iic sda, gpio0_0, spi cs, uart rx等功能,那我们可以通过mux控制器来选择具体使用哪个功能。 &#...
将其与示例代码45.1.2.1结合起来就可以得到完成的iomuxc节点,如下所示:示例代码45.1.2.3 完整的iomuxc节点 1 iomuxc:iomuxc@020e0000 { 2 compatible ="fsl,imx6ul-iomuxc";3 reg =<0x020e00000x4000>;4 pinctrl-names ="default";5 pinctrl-0=<&pinctrl_hog_1>;6 imx6ul-evk { 7 pinctrl_...
*bit [12]: 1 pull/keeper使能 *bit [11]: 0 关闭开路输出 *bit [7:6]: 10 速度100Mhz *bit [5:3]: 110 R0/6驱动能力 *bit [0]: 0 低转换率 */ 在根节点下创建名为gpioled的LED节点,内容如下: /*pinctrl led*/gpioled{compatible="myboard,gpioled";pinctrl-names="default";pinctrl-0=...
pinctrl 子系统和 gpio 子系统虽然难度不大,但在内核里的使用率非常高,本文争取一次性把相关内容介绍一遍。pinctrl数据结构使用 struct pinctrl_desc 抽象一个 pin
本篇为驱动申请GPIO和操作GPIO接口篇,分别介绍驱动通过GPIO子系统和PINCTRL 子系统提供的接口对GPIO的操作 GPIO 子系统操作GPIO GPIO子系统接口简介 相关实现在driver/gpio/gpiolib.c下 1、gpio_request申请GPIO intgpio_request(unsignedgpio,constchar*label) ...
同样地,对于pinctrl_free_gpio()、pinctrl_gpio_direction_input()和pinctrl_gpio_direction_output()也有类似说明。 因此在clientdevice驱动中,申请和释放gpio仍然要调gpio_request()、gpio_free();设置gpio为input/output仍然要调gpio_direction_input()和gpio_direction_output()。
对此,pinctrl子系统"求同存异",将pin的管理方式进行了抽象,形成pinctrl-core抽象层,将具体SoC的pin controler隔离出去,形成pinctrl-driver抽象层,pinctrl-core和pinctrl-driver通过抽象接口进行通信。对于pinctrl-core的back-end,即各个需要用到pin的驱动,pinctrl子系统将其抽象为pinctrl-client。