linux驱动笔记-pinctrl子系统

pinctrl_dev

pinctrl_dev用于抽象一个pinctrl controller,其中包含pinctrl_desc用于描述具体的pinctrl controller。

pinctrl_desc

struct pinctrl_desc {
        const char *name;
        const struct pinctrl_pin_desc *pins;
        unsigned int npins;
        const struct pinctrl_ops *pctlops;
        const struct pinmux_ops *pmxops;
        const struct pinconf_ops *confops;
        struct module *owner;
#ifdef CONFIG_GENERIC_PINCONF
        unsigned int num_custom_params;
        const struct pinconf_generic_params *custom_params;
        const struct pin_config_item *custom_conf_items;
#endif
};

pinctrl_desc用于描述具体的pinctrl controller,包含四个重要结构体:pinctrl_pin_desc、pinctrl_ops、pinmux_ops、pinconf_ops。

pinctrl_pin_desc

描述系统中所有的pin,并建立索引。

pinctrl_ops

获取pin group的信息

pinconf_ops

提供操作集配置管脚属性。

pinmux_ops

提供复用操作

以上属于pinctrl control内容

dev_pin_info

设备节点一般会被转换为platform_device,或者其它结构体(比如i2c_client、spi_device),它们内部都会有一个struct device成员。
device结构体中包含dev_pin_info结构体,该结构体用于存储设备树中指定的pinctrl状态信息(default、sleep、init、idle),即设备树中的pinctrl-name。

struct pinctrl

struct pinctrl来描述一个client device的所有状态。其中又抽象了:

struct pinctrl_state描述client device的某一种状态;在设备节点中由pinctrl-names属性指定的列表中某一个元素;
struct pinctrl_setting描述client device处于某一种状态下其中一个"引脚配置";即pinctrl节点下子节点的配置信息

其中pinctrl_state中包含一个setting链表。

pinctrl_map

struct pinctrl_map它用于描述client device的映射配置,使用pin controller device的pinctrl_desc->ops->dt_node_to_map来处理设备树中的"引脚配置节点"。 pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>,uart0_xfer 、uart0_cts 、uart0_rts节点均会被dt_node_to_map函数解析为一系列的pinctrl_map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值