2024-07-11 08:16 AM - edited 2024-07-11 08:17 AM
Hello,
I am trying to configure a PWM in the boot process. I followed the steps in the documentation https://wiki.st.com/stm32mpu/wiki/TIM_device_tree_configuration .
I configured the pwmleds node
pwmleds { compatible = "pwm-leds"; example { label = "stm32-pwm-leds-example"; /* Use pwm1 channel 0 (e.g. TIM1_CH1) */ /* period in nanoseconds (500000), normal polarity (0) */ pwms = <&pwm1 0 30518 0>; max-brightness = <255>; }; };
/* PWM DT provider on TIM1: "pwm1" */ &timers1 { status = "okay"; /* spare all DMA channels since they are not needed for PWM output */ /delete-property/dmas; /delete-property/dma-names; /* define pwm1 label */ pwm1: pwm { /* configure PWM pins on TIM1_CH1 */ pinctrl-0 = <&pwm1_pins_a>; pinctrl-1 = <&pwm1_sleep_pins_a>; pinctrl-names = "default", "sleep"; /* enable PWM on TIM1 */ status = "okay"; }; };
I run the command cat /sys/kernel/debug/pwm
I see the next line
pwm-0 (example :( requested enabled period: 30518 ns duty: 0 ns polarity: normal
The period is OK, but the duty cycle is 0, so basically the signal is always low.
How can I configure the duty cycle in the devicetree if I want to have the pwm working well in the boot process?
I am in the 6.1 kernel version in the mickledore branch.
Regards, @obedPH
2024-07-12 12:34 AM
Hi @obedPH
I fear PWM cannot put in 'run' only by Device Tree settings, which is mostly HW configuration.
You need to use it thru the framework.
https://wiki.st.com/stm32mpu/wiki/PWM_overview
Regards.
2024-07-15 03:40 PM - edited 2024-07-15 03:41 PM
Hi, @PatrickF , thank you for your response.
I see. I'm trying something different. I'll give you more context. I am using a MuRata module for the wifi in a custom PCB with a STM32MP15, for several reasons I have to use a timer for the LPO pin, since I don't have more lsco available sources. I need to use a pwm timer before the brcmfmac starts in order to make the wifi module work properly. I modified the leds-pwm.c file and the PWM was working, bit it didn't work as I wanted, because, apparently, it needs to start way before if I want my wifi module to bring on correctly. Now I am trying to modify the u-boot, I added this lines in the stm32mp157f-dk2.dts.
pwmleds {
compatible = "pwm-leds";
example {
//label = "stm32-pwm-leds-example";
/* Use pwm1 channel 0 (e.g. TIM1_CH1) */
/* period in nanoseconds (500000), normal polarity (0) */
pwms = <&pwm1 2 30518>;
max-brightness = <255>;
u-boot,default-brightness = <127>;
};
};
I saw the /drivers/led/led_pwm.c and this file reads the u-boot,default-brightness attribute. The problem is, in the u-boot process, the pwm is not active.
Searching in the configuration files, I noticed that the configs/stm32mp15_defconfig does not have the LED_PWM = y line
CONFIG_SYS_I2C_STM32F7=y
CONFIG_LED=y
CONFIG_LED_GPIO=y
CONFIG_STM32_FMC2_EBI=y
It just has the LED_GPIO configured, so I suspect that this is the reason why the driver is not working, since I added some logs in the driver and I don't see those log messages during the boot process.
How should I configure the devicetree if I want to load that driver in the u-boot? I suspect that I have to edit the config node in the stm32mp157f-dk2-u-boot.dtsi file, because I can see some leds configurations there, but I don't know how:
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause)
/*
* Copyright (C) 2024, STMicroelectronics - All Rights Reserved
* Author: STM32CubeMX code generation for STMicroelectronics.
*/
/* For more information on Device Tree configuration, please refer to
* https://wiki.st.com/stm32mpu/wiki/Category:Device_tree_configuration
*/
/* USER CODE BEGIN includes */
#include "stm32mp15-scmi-u-boot.dtsi"
/* USER CODE END includes */
/ {
/* USER CODE BEGIN root */
aliases{
i2c3 = &i2c4;
usb0 = &usbotg_hs;
};
config{
u-boot,boot-led = "heartbeat";
u-boot,error-led = "error";
u-boot,mmc-env-partition = "u-boot-env";
//st,adc_usb_pd = <&adc1 18>, <&adc1 19>;
st,fastboot-gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
st,stm32prog-gpios = <&gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
};
led{
led-red{
label = "error";
gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
default-state = "off";
status = "okay";
};
};
/* USER CODE END root */
}; /*root*/
/* USER CODE BEGIN addons */
&pmic {
u-boot,dm-pre-reloc;
};
&uart4{
u-boot,dm-pre-reloc;
};
&usbotg_hs{
u-boot,force-b-session-valid;
};
&uart4_pins_mx {
u-boot,dm-pre-reloc;
pins1 { /* UART4_RX */
u-boot,dm-pre-reloc;
/* pull-up on rx to avoid floating level */
bias-pull-up;
};
pins2 {
u-boot,dm-pre-reloc;
};
};
Regards, @obedPH