网站建设前台和后台设计,东坑东莞微信网站建设,桂林网页制作,网站建设及网页设计教案1、什么是pinctrl子系统
在 Linux 内核中#xff0c;pinctrl子系统是一个专门用于管理和控制 SoC引脚复用和配置的子系统。SoC 通常具有大量的引脚#xff08;pin#xff09;#xff0c;这些引脚可以被配置为不同的功能#xff0c;比如 GPIO#xff08;通用输入输出pinctrl子系统是一个专门用于管理和控制 SoC引脚复用和配置的子系统。SoC 通常具有大量的引脚pin这些引脚可以被配置为不同的功能比如 GPIO通用输入输出、I2C、SPI、UART 等。而 pinctrl 子系统的任务就是为这些引脚提供一个统一的配置接口。
2、pinctrl子系统的3大功能
引脚枚举与命名(Enumerating and naming)引脚复用(Multiplexing)比如用作GPIO、I2C或其他功能引脚配置(Configuration)比如上拉、下拉、open drain、驱动强度等 而在linux内核驱动里面也是使用了面向对象的思想来使用了3个结构体来描述了这三个功能分别是pinctrl_ops,pinmux_ops,pinconf_ops、 这3个结构体又分别对应了上面所说的3个功能 struct pinctrl_ops实现了pinctrl子系统的操作函数包括获取引脚组数量、获取引脚组名称、获取引脚组引脚、调试显示引脚、设备树节点映射到引脚组以及释放映射。 struct pinmux_ops实现了pinmux子系统的操作函数包括获取功能数量、获取功能名称、获取功能对应的引脚组以及设置引脚的复用功能 struct pinconf_ops实现了pinconf子系统的操作函数包括获取引脚配置、设置引脚配置、调试显示引脚配置以及调试显示引脚组配置。 下面是设备树里面描述一个io多路复用控制器的字段
iomuxc {pinctrl-names default;pinctrl-0 BOARD_InitPins;imx6ull-board {i2c1_pins: i2c1_pins { /*! Function assigned for the core: Cortex-A7[ca7] */fsl,pins MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x000018B0MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x000018B0;};};
};i2c1 {clock-frequency 100000;pinctrl-names default;pinctrl-0 i2c1_pins;status okay;
};pinctrl子系统里面是怎么注册他的驱动的他也是依靠设备总线模型来操控的pinctrl_dev直接由设备树来生成pincrl_desc是需要由驱动程序员来完成的而这个pincrl_desc这个结构体里面就包含了上面那个3个结构体。一旦iomux控制器被设备树描述过后我们就可以使用他比如像上面的i2c1把他复用成i2c设备控制器而i2c控制器又可以被i2c client引用描述i2c设备