我正在研究I2C线路的设备树配置。之前bias-disable
用于无效的I2C,我的自然倾向是用bias-pull-up
进行测试(但有外部4k上拉电阻)。我的问题是,bias-disable
到底意味着什么?
禁用引脚偏置是否不会使用内部电阻或完全断开引脚?
https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt
答案 0 :(得分:2)
似乎正确答案是:
禁用引脚偏置不应用内部电阻
详情如下。
来自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
。
查看here(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()
的第3个参数(即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文档来确定它。
此外,它可能有用:这是添加此驱动程序的第一个提交:54b1aa5a5b16。