gpt4 book ai didi

linux-kernel - gpio : in fixed-regulator device tree entry?的解释

转载 作者:行者123 更新时间:2023-12-04 03:08:37 25 4
gpt4 key购买 nike

我正在尝试控制(开/关)映射到 GPIO 引脚并为外部设备供电的稳压器。
调节器的设备树具有以下条目:

    reg_usb1_vbus: usb1_vbus {
compatible = "regulator-fixed";
regulator-name = "usb1_vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&gpio3 28 0>;
enable-active-high;
};

当我阅读 the documentation我对此感到困惑:

Optional properties:

  • gpio: gpio to use for enable control


但是,我无法导出该 GPIO 的 sysfs 接口(interface)并使用它来控制外部设备的电源(仅开/关)。另外,如果我注释掉 gpio = <&gpio3 28 0>;从设备树中,外部设备没有电源(当它没有被评论时,设备总是被供电)。

调节器有一个导出的 sysfs 接口(interface):
80090000.usb-vbus      power                  suspend_standby_state
device state type
microvolts subsystem uevent
name suspend_disk_state
num_users suspend_mem_state

但是我无法写入任何文件。

解释 gpio: 的正确方法是什么?入口?
  • 用于启用控制的 gpio

    在这种情况下,我缺少一个我想要调节电压的引脚之间的映射。
  • gpio 将获得来自稳压器的电压来为某些外部单元供电

    在这种情况下,我错过了打开和关闭它的方法
  • 最佳答案

    I'm trying to control (on/off) a voltage regulator that is mapped to a GPIO pin and powers an external device.
    ...

    What is the correct way to interpret the gpio: entry?



    好像你在问一个XY问题。
    首先是关于 GPIO 的 Y 部分。
    gpio您所指的 DT 条目将用于监管机构框架的启用/禁用控制。它仅供调节器驱动程序用于控制(外部?)调节器硬件。它不适用于用户在框架外对调节器进行软件控制(正如您尝试做的那样)。

    此 GPIO 定义为 中的输出。驱动程序/调节器/core.c :
     static int regulator_ena_gpio_request(struct regulator_dev *rdev,
    const struct regulator_config *config)
    {
    ...
    ret = gpio_request_one(config->ena_gpio,
    GPIOF_DIR_OUT | config->ena_gpio_flags,
    rdev_get_name(rdev));
    ...
    }

    GPIO 引脚不是为“启用控制”而读取的,但其值设置为
    调节器_ena_gpio_ctrl() 为了主动启用或禁用(外部)调节器。

    当该引脚也在设备树中声明时,无法使用 sysfs 导出相同的 GPIO 引脚很容易解释。一旦驱动程序获取指定的 GPIO 以供其使用(通过 DT),它就不再被使用,并且您不能再通过 sysfs 导出该 GPIO。
    GPIO 是一种托管资源,需要像内存等任何其他资源一样分配和释放(由驱动程序或 sysfs)。如果您能够导出此驱动程序也使用的 GPIO,那么您将能够将 GPIO 置于与驱动程序正在执行的操作不一致的状态。这反过来会导致不稳定或行为不端的代码。

    In which case I'm missing a mapping between a pin on which I want to have the regulator voltage.



    设备树中指定的 GPIO 引脚是逻辑(即数字)输出。它不是调节器输出,而是模拟输出。

    您应该查阅电路板的原理图,以确认此 GPIO 已连接到稳压器的控制输入。

    关于启用/禁用调节器的 X 部分:

    调节器输出的软件控制记录在 Documentation/power/regulator/consumer.txt

    消费者驱动程序可以通过调用以下方式访问其供应调节器:-
    regulator = regulator_get(dev, "Vcc");

    消费者可以通过调用以下方式启用其电源:-
    int regulator_enable(regulator);

    当不再需要时,消费者可以通过调用来禁用其供应:-
    int regulator_disable(regulator);

    “消费者”是由调节器供电的电子设备。

    显然,预期的框架是让“消费者驱动程序”拥有并控制其调节器,并且不允许外部接口(interface)(例如 sysfs)干扰这个“消费者驱动程序”。如果你坚持拥有用户空间控制,那么你可以实现 ioctl() 或 sysfs 到“消费者驱动程序”的接口(interface)(以避免与调节器驱动程序发生冲突/争用)。

    In which case I'm missing a way to turn it on and off



    你真正要找的似乎是(上层) 电源管理 ,并且它有自己的框架,其中监管机构是较低层(通常用户控制无法访问)。你应该学习 Documentation/power/devices.txt .

    关于linux-kernel - gpio : in fixed-regulator device tree entry?的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788394/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com