禁用引脚偏置是否不使用内部电阻或完全断开引脚?

时间:2015-11-10 07:48:20

标签: linux-kernel i2c

我正在研究I2C线路的设备树配置。之前bias-disable用于无效的I2C,我的自然倾向是用bias-pull-up进行测试(但有外部4k上拉电阻)。我的问题是,bias-disable到底意味着什么?

禁用引脚偏置是否不会使用内部电阻或完全断开引脚?

https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt

1 个答案:

答案 0 :(得分:2)

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

查看herebcm281xx_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