【linux】【驱动】<specifier>-map-pass-thru讲解

驱动,设备树系列文档



< specifier>-map-pass-thru讲解

提示:仅供学习


一、DTS示列代码

soc {
	soc_gpio1: gpio-controller1 {
		#gpio-cells = <2>;
	};
	soc_gpio2: gpio-controller2 {
		#gpio-cells = <2>;
	};
};
connector: connector {
	#gpio-cells = <2>;
	gpio-map =  <0 0 &soc_gpio1 1 0>,
				<1 0 &soc_gpio2 4 0>,
				<2 0 &soc_gpio1 3 0>,
				<3 0 &soc_gpio2 2 0>;
	gpio-map-mask = <0xf 0x0>;
	gpio-map-pass-thru = <0x0 0x1>;
};
expansion_device {
	reset-gpios = <&connector 2 GPIO_ACTIVE_LOW>;
};

二、gpio-map-pass-thru 讲解

讲述了如何使用掩码在父单元标识符和子单元标识符之间进行映射。

设备树映射掩码的作用
在设备树的 gpio-map 属性中,掩码用于定义如何将子单元标识符映射到父单元标识符。掩码的具体作用如下:

掩码定义:

gpio-map-mask:定义了一个掩码,表示哪些位会影响映射操作。这个掩码用于从父单元标识符中清除特定的位,并将子单元标识符中的相关位复制到父单元标识符。
掩码应用:

清除父单元标识符中的位:掩码中的每一位为 1 的位置会从父单元标识符中清除。这意味着,掩码决定了父单元标识符中需要被忽略的位。
从子单元标识符复制位:掩码中的每一位为 1 的位置会将子单元标识符中相应位置的位复制到父单元标识符中。
示例
假设有以下掩码和单元标识符:

掩码:gpio-map-mask = <0x0 0x3>
子单元标识符:0x0 0xA
父单元标识符:0x0 0x5
掩码 0x3 表示我们关注的是父单元标识符的低两位(即 0b11)。

步骤如下:

清除父单元标识符中的位:

原始父单元标识符:0x5(即 0b0101)
掩码为 0x3,即 0b0011
清除父单元标识符中与掩码相应的位:
plaintext
0b0101 & ~(0b0011) = 0b0101 & 0b1100 = 0b0100
清除后的父单元标识符是 0x4(即 0b0100)
从子单元标识符复制位:

子单元标识符:0xA(即 0b1010)
掩码为 0x3,即 0b0011
复制子单元标识符中掩码相应的位:
plaintext
(0b1010 & 0b0011) = 0b0000
复制的位是 0x0(即 0b0000)
结合结果:

将清除后的父单元标识符与复制的位结合:
plaintext
0b0100 | 0b0000 = 0b0100
最终得到的父单元标识符是 0x4(即 0b0100)
总结
掩码用于在将子单元标识符映射到父单元标识符时进行位操作。掩码中的每一位为 1 的位置会从父单元标识符中清除相应位,并从子单元标识符中复制相应位。这确保了父单元标识符被正确地更新以反映子单元标识符中的值。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq2108462953

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

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

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

打赏作者

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

抵扣说明:

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

余额充值