我正在查看I2C行的设备树配置。它以前是bias-disable
的I2C没有工作,我的自然倾向是用bias-pull-up
测试(但有外部4k拉电阻)。我的问题是,bias-disable
到底是什么意思?
是否禁用引脚偏置,而不是应用内部电阻器完全断开引脚?
https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt
发布于 2015-11-10 14:24:45
TL;DR
似乎正确的答案是:
禁用引脚偏置,不施加内部电阻器
详情如下。
调查
来自pinctrl绑定(Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
)的文档:
bias-pull-up
、-down
和-pin-default
在支持它的硬件方面采用欧姆的拉力作为可选的论证。bias-disable
将禁用拉力。
如果文档还不够,则是研究代码的时候了。
在drivers/pinctrl/pinconf-generic.c
中
static const struct pinconf_generic_params dt_params[] = {
{ "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 },
在include/linux/pinctrl/pinconf-generic.h
中
/**
* enum pin_config_param - possible pin configuration parameters
* @PIN_CONFIG_BIAS_DISABLE: disable any pin bias on the pin, a
* transition from say pull-up to pull-down implies that you disable
* pull-up in the process, this setting disables all biasing.
接下来,您可以查看如何在驱动程序中处理特定硬件的PIN_CONFIG_BIAS_DISABLE
。在您的情况下,我相信司机住在drivers/pinctrl/bcm/pinctrl-bcm281xx.c
。
查看这里 (bcm281xx_i2c_pin_update()
函数):
case PIN_CONFIG_BIAS_DISABLE:
bcm281xx_pin_update(val, mask, 0,
BCM281XX_PIN_SHIFT(I2C, PULL_UP_STR),
BCM281XX_PIN_MASK(I2C, PULL_UP_STR));
break;
如您所见,bcm281xx_pin_update()
的第三个参数(即value
)为0。因此,下一个值将用于设置相应的寄存器:
#define BCM281XX_I2C_PIN_REG_PULL_UP_STR_MASK 0x0070
#define BCM281XX_I2C_PIN_REG_PULL_UP_STR_SHIFT 4
现在,拥有用于BCM281XX的数据表或TRM,您应该能够计算出使用0设置的确切寄存器,并且从该数据表中您可以知道将其设置为0时到底发生了什么。不幸的是,我无法在互联网上找到这个数据表,所以我只能假设这个"bias-disable"
只是断开了您的SoC中的上拔和拉下内部电阻。但是,仍然应该使用SoC文档来肯定地说出来。
另外,也许它是有用的:这里是第一个提交,添加了这个驱动程序:54b1a5a5b16。
https://stackoverflow.com/questions/33625083
复制相似问题