linux设备树中pinctrl的配置(下)

原创 2015年11月18日 18:01:18

上一篇记录了设备树文件中管脚普通配置的查找与确定,这篇介绍一下特殊的配置。


首先还是先看代码,看看到底特殊到哪里。

<span style="font-size:14px;">		pinctrl_gpio_leds: gpioledsgrp {
			fsl,pins = <
				MX6QDL_PAD_DISP0_DAT21__GPIO5_IO15	0x80000000
			>;
		};

		pinctrl_i2c2: i2c2grp {
			fsl,pins = <
				MX6QDL_PAD_EIM_EB2__I2C2_SCL	0x4001b8b1
				MX6QDL_PAD_KEY_ROW3__I2C2_SDA	0x4001b8b1
			>;
		};</span>

可以看出来特殊的配置就是后面的值也就是上一篇讲的config(pad_ctrl)的值改变了,变为0x80000000和0x4001b8b1了,当我们查找相应的pad值时是这样的:



这明显不和常理,在上图中显示高15位全部置0,取值也没啥用,那么为什么设置为0x80000000和0x4001b8b1呢?在网上搜罗一番没有任何有帮助的文档,只能靠自己了。还是老思路,查找设备树文件的读取源码,linux-3.18.22/drivers/pinctrl/freescale/pinctrl-imx.c中,找到了惊喜!!!代码如下

<span style="font-size:14px;">/* The bits in CONFIG cell defined in binding doc*/
#define IMX_NO_PAD_CTL	0x80000000	/* no pin config need */
#define IMX_PAD_SION 0x40000000		/* set SION */</span>
再将IMX_NO_PAD_CTL使用部分的代码贴上(随便找一处)

<span style="font-size:14px;">	for (i = j = 0; i < grp->npins; i++) {
		if (!(grp->pins[i].config & IMX_NO_PAD_CTL)) {
			new_map[j].type = PIN_MAP_TYPE_CONFIGS_PIN;
			new_map[j].data.configs.group_or_pin =
					pin_get_name(pctldev, grp->pins[i].pin);
			new_map[j].data.configs.configs = &grp->pins[i].config;
			new_map[j].data.configs.num_configs = 1;
			j++;
		}
	}</span>
可以看出来确实如注释(/* no pin config need */)所述,表示该管脚的配置config(pad_ctrl)无效,或者说不需要。

同理0x40000000表示设置了SION。但是0x4001b8b1表示什么意思呢,从上一个注释(/* The bits in CONFIG cell defined in binding doc*/)可以找到方向,即取binding doc中找,所以打开linux-3.18.22/Documentation/devicetree/bindings/pinctrl目录下的fsl,imx6dl-pinctrl.txt文件,里面有关于SION的介绍,如下:


再从芯片的参考手册中查阅可知,SION就相当于一个标志为(第30位),去掉这一位后config=0x1b8b1,这个值就是从pad_ctrl一节找到的,具体可以参见上一篇关于第6个参数的确定方法。










版权声明:本文为博主原创文章,未经博主允许不得转载。

linux设备树中pinctrl的配置(上)

最近在移植linux,用到kernel版本为3.18.22和4.1.3,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。 1、普通设置 在...
  • shengzhadon
  • shengzhadon
  • 2015年11月18日 17:22
  • 8430

imx6设备树pinctrl解析

最近在移植linux,用到kernel版本为3.14.28,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。 1、普通设置 在配置串...
  • michaelcao1980
  • michaelcao1980
  • 2016年02月24日 14:07
  • 7583

imx6设备树pinctrl解析

最近在移植linux,用到kernel版本为3.14.28,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。 1、普通设置 在配置串...
  • mike8825
  • mike8825
  • 2016年05月22日 17:31
  • 2697

PINCTRL介绍

文章来自 http://ienove.blog.163.com/blog/static/4066454120132111213313/ PINCTRL子系统用于处理: - ...
  • wangpeiyao5566
  • wangpeiyao5566
  • 2014年10月28日 11:11
  • 1022

linux PINCTRL

Pinctrl框架是linux系统为统一各SOC厂商pin管理,避免各SOC厂商各自实现相同pin管理子系统而提出的。目的是为了减少SOC厂商系统移植工作量。 许多SoC 内部都包含pin 控制器,...
  • lbaihao
  • lbaihao
  • 2016年08月28日 23:14
  • 2836

设备树详解

在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,...
  • qq_28992301
  • qq_28992301
  • 2016年11月24日 16:53
  • 6141

linux设备树中pinctrl的配置(上)

最近在移植Linux,用到kernel版本为3.18.22和4.1.3,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。 1、普通设置...
  • u013164357
  • u013164357
  • 2017年02月27日 17:09
  • 269

imx6设备树pinctrl解析

最近在移植linux,用到kernel版本为3.14.28,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。 1、普通设置 在配置串...
  • G_linuxer_
  • G_linuxer_
  • 2016年03月25日 14:52
  • 549

device tree 内 default pinctrl 和 probe的先后顺序

注册 driver时,default pinctrl是在 driver probe之前的。 1,xref: /kernel-3.18/include/linux/platform_device.h...
  • daichchch
  • daichchch
  • 2017年01月06日 18:09
  • 456

imx6q平台的gpio配置方法

比如引脚名称为GPIO_16,打开kernel_imx/arch/arm/boot/dts/imx6q-pinfunc.h文件,搜索GPIO_16,可看到如下结果 #define MX6QDL_...
  • mike8825
  • mike8825
  • 2016年05月07日 13:29
  • 9021
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux设备树中pinctrl的配置(下)
举报原因:
原因补充:

(最多只允许输入30个字)