[21天学习挑战赛——内核笔记](三)——Pinctrl介绍

活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

一、Pinctrl概述

许多soc内部都包含有pin控制器,通过pin控制器的寄存器,我们可以配置一个或者一组引脚的功能和特性。在软件方面,Linux内核提供了pinctrl子系统,目的是为了统一各soc厂商的pin脚管理。

Linux内核提供了pinctrl子系统,目的是为了统一各soc厂商的pin脚管理。
Linux Pinctrl子系统提供的功能:
➢(1) 管理系统中所有的可以控制的pin, 在系统初始化的时候,枚举所有可以控制的pin, 并标识这些pin。
➢(2) 管理这些pin的复用(Multiplexing) 。对于SOC而言,其引脚除了配置成普通的GPIO之外, 若干个引
脚还可以组成一-个pin group,行程特定的功能。pin control subsystem要管理所有的pin group。
➢(3)配置这些pin的特性。 例如使能或关闭引脚上的pul-up、 pull-down电阻, 配置引脚的driver strength。
在高通、MTK平台,上,pinmux管 脚复用控制器,是TLMM (Top-Level Mode Multiplexer)顶级模式多路复用控
制器。

二、Pinctrl的功能

​关于pinctrl主要可以归结为两类设置,其中-类是功能选择,即一组gpio是用于iic还是uart还是就作为普通gpio来用,另一类是gpio的特性配置,即_ 上拉、下拉、 驱动能力和速率的配置。而pinctrl主要负责这两类配置的管理工作。总结起来pinctrl主要完成以下三种功能: .

  1. 引脚枚举与命名( Enumerating and naming )。
  2. 引脚复用(Multiplexing):比如用作GPIO、 I2C或其他功能。
  3. 引脚配置( Configuration): 比如上拉、下来、 open drain、 驱动强度等。

三、pinctrl的使用

1. 默认名称
Client device会通过pinctrl来将pin设置为相应的功能及配置。
2. 定制名称

在这里插入图片描述
3.默认名称解析
在pinctrl子系统的实现中,借助设备驱动模型中的driver_ probe_ device接口, 当device 与driver match
后,在driver
probe_ device->really_ probe的接口中。在调用bus的probe接口之前, 通过调用
pinctrl bind
pins接 口实现dev与pinctrl子系统的绑定,并完成pin相关的复用与配置操作。

int pinctrl_bind_pins(struct device *dev)
{
	int ret;
 
	dev->pins = devm_kzalloc(dev, sizeof(*(dev->pins)), GFP_KERNEL);
	if (!dev->pins)
		return -ENOMEM;
 
	dev->pins->p = devm_pinctrl_get(dev); //获取pinctrl 
	if (IS_ERR(dev->pins->p)) {
		dev_dbg(dev, "no pinctrl handle\n");
		ret = PTR_ERR(dev->pins->p);
		goto cleanup_alloc;
	}
 
	dev->pins->default_state = pinctrl_lookup_state(dev->pins->p, //查找这个pin的default状态
					PINCTRL_STATE_DEFAULT);
	if (IS_ERR(dev->pins->default_state)) {
		dev_dbg(dev, "no default pinctrl state\n");
		ret = 0;
		goto cleanup_get;
	}
 
	ret = pinctrl_select_state(dev->pins->p, dev->pins->default_state);  //设置pin的default状态
	if (ret) {
		dev_dbg(dev, "failed to activate default pinctrl state\n");
		goto cleanup_get;
	}
 
	return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周末不下雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值