This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/PROCESSOR-SDK-AM335X:使用带有器件树的 GPIO 计时器实现的有源延迟值

Guru**** 2034120 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/571952/linux-processor-sdk-am335x-active-delay-value-using-timer-for-gpio-with-device-tree

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

您好!  

我们将一个 LED 连接到我们尝试使用器件树中的计时器触发器进行控制的 GPIO 引脚。 计时器触发正在工作、但是 LED 的闪烁速率与活动/非活动延迟值不匹配。 这是器件树条目。

blink_led{
label ="LED_Blinky";
GPIO =<&GPIO1 19 0>;
linux、default-trigger ="计时器";
主动延迟=<250>;
非活动延迟=<250>;
};

LED 会闪烁、但持续时间为1秒、而不是半秒。 如果我在/sys/class/platform/leds/LED_Blinky 下检查延迟打开和延迟关闭值、则这两个值都设置为500。 500是默认值吗? 还需要做些什么?

此致、

Tim Entinger

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Timothy、

    在4.4.32内核(TI PSDK 3.2附带)中,看起来有源延迟和无源延迟值随后在 mdelay()函数中使用。

    Linux-4.4.3.32/Documentation/devicetree/bindings/GPIO/gpio-restart.txt
    linux-4.4.3.32/drivers/power/reset/gpi-restart.c

    mdelay (GPIO_REST--> ACTIVE_DELAY_ms);

    您能否检查您的侧边是否相同? mdelay()函数产生的实际活动/非活动延迟是什么还是其他的延迟?

    另请参见以下 wiki 页面,其中的 mdelay()函数与 GPIO 一起使用:
    processors.wiki.ti.com/index.php/WL127x_Porting_Guide#Power_Control_.E2.80.93_without_voltage_regulator

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。  我不能立即理解您的回答是什么、但我现在知道了。

    是的、ACTIVE_DELAY_ms 似乎仅用于 GPIO-RESTART。

    我查看了 ledtrig-timer.c 中的代码、发现它将 delay_on 和 delay_off 值传递到了 LED-core.c 中的 LED_blink_setup 在 LED_BLINK 设置中、如果未传入任何值、则将 DELAY_ON 和 DELAY_OFF 值设置为500。

    //
    if (!*delay_on &&!*delay_off )
    *delay_on =*delay_off =500;
    
    led_set_software_BLINK (led_cdev,*delay_on,*delay_off ); 

    由于我只关心启动时的闪烁速率、我创建了一个补丁、将值设置为250而不是500。 我必须进行一些测试、以查看是否可以在器件树中设置 DELAY_ON 和 DELAY_OFF。 我希望这不起作用,但我会看到。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试了两种格式来设置器件树中的延迟值。 两者均不起作用、仅选择默认值。 这将使我得出结论、您只能从器件树中设置"计时器"触发值。 这似乎是疏忽、因为如果您也设置触发器、设置延迟值的理想位置将位于器件树中。 无论在哪种情况下、我尝试的都不起作用

    blink1_led{
    标签="LED_Blinky1";
    GPIO =<&GPIO1 20 0>;
    linux、default-trigger ="定时器";
    ON_DELAY =<100>;
    OFF_DELAY =<100>;
    };
    
    blink2_led{
    标签="LED_Blinky2";
    GPIO =<&GPIO1 19 0>;
    linux、default-trigger ="定时器";
    linux、ON_DELAY ="100";
    Linux、OFF_DELAY ="100";
    }; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Timothy Entinger"] linux、default-trigger ="计时器";ON_DELAY =<100>;OFF_DELAY =<100>;

    [引用 user="Timothy Entinger"] linux、default-trigger ="计时器";linux、ON_DELAY ="100";linux、OFF_DELAY ="100";

    默认情况下、GPIO-LED DTS 支持:

    -GPIO

    -标签

    - linux、default-trigger

    -默认状态

    -保留-状态-已暂停

    默认情况下不支持 on/off_delay、Linux、on/off_delay。 请参阅 Linux-kernel/Documentation/devicetree/bindings/LEDs/leds-gpio.txt

    您可以自行添加这些内容。 可以使用_property_read_u32()函数。 请参阅如何使用此函active-delay"数在 Linux-4.4.4.3.32/drivers/power/reset/gpi-restart 中将"从 dts 设置为"u32 active_delay_ms"。c 您还可以查看如何使用此函数将 dts (即 OMAP4-sdp.dts)中的"最大亮度"设置为 linux-4.4.4.3.32/drivers/LEDs/twms.c 中的最大亮度值

    另请检查是否可以从用户空间设置 DELAY_ON/OFF 值、有关详细信息、请参阅以下 e2e 线程:

    此致、
    帕维尔