2025-10-11 6:58 AM
This is the current implementation of the `panel_lvds_backlight`, i'm trying to implement the pwn brightness control for this.
{
/* https://github.com/STMicroelectronics/linux/blob/f01241fb/arch/arm64/boot/dts/st/stm32mp257f-ev1.dts */
....
panel_lvds_backlight: panel-lvds-backlight {
compatible = "gpio-backlight";
gpios = <&gpioi 5 GPIO_ACTIVE_HIGH>;
default-on;
default-brightness-level = <1>;
status = "okay";
};
....
}
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/pinctrl/stm32-pinfunc.h> /* This is required by fragment@3 for pinctrl */
/ {
compatible = "st,stm32mp257f-ev1";
/* Modify panel timing clock frequency */
fragment@0 {
target = <&panel_lvds>;
__overlay__ {
panel-timing {
clock-frequency = <54000000>;
};
};
};
/* Replace GPIO backlight with PWM backlight */
fragment@1 {
target = <&panel_lvds_backlight>;
__overlay__ {
/* Delete old GPIO backlight properties */
/delete-property/ gpios;
/delete-property/ default-on;
/* Change compatible and add PWM properties */
compatible = "pwm-backlight";
pwms = <&pwm5 1 1000000 0>;
brightness-levels = <0 16 22 30 40 55 75 102 138 188 255>;
default-brightness-level = <10>;
status = "okay";
};
};
/* Configure PWM5 CH2 pins (active state) */
fragment@2 {
target = <&pinctrl>;
__overlay__ {
pwm5_ch2_pins_a: pwm5-ch2-0 {
pins {
pinmux = <STM32_PINMUX('I', 5, AF9)>; /* TIM5_CH2 - AF9 - pinctrl-stm32mp257.c */
bias-pull-down;
drive-push-pull;
slew-rate = <0>;
};
};
pwm5_ch2_sleep_pins_a: pwm5-ch2-sleep-0 {
pins {
pinmux = <STM32_PINMUX('I', 5, ANALOG)>; /* TIM5_CH2 */
};
};
};
};
/* Enable timers5 and PWM5 */
fragment@3 {
target = <&timers5>;
__overlay__ {
status = "okay";
pwm5: pwm {
compatible = "st,stm32mp25-pwm";
pinctrl-0 = <&pwm5_ch2_pins_a>;
pinctrl-1 = <&pwm5_ch2_sleep_pins_a>;
pinctrl-names = "default", "sleep";
status = "okay";
};
};
};
};
I implemented this dt overlay and i'm sure that this overlay is successfully applied during the boot but im getting deffered probing error in this dt overlay example.
root@stm32mp25-eval-e3-e4-2e:~# [ 27.055167] weston[1619]: memfd_create() called without MFD_EXEC or MFD_NOEXEC_SEAL set
[ 27.625314] platform 48060000.lvds: deferred probe pending
[ 27.625369] platform panel-lvds-backlight: deferred probe pending
[ 27.631789] platform panel-lvds: deferred probe pending
[ 27.636838] platform 48010000.display-controller: deferred probe pending
[ 27.643680] stm32mp_pm_domain power-domain-d1: sync_state() pending due to 48010000.display-controller
[ 27.652958] stm32mp_pm_domain power-domain-d1: sync_state() pending due to 48060000.lvds
[ 31.974569] vddio3: disabling
[ 31.974653] vddio4: disabling
[ 31.974910] vdda18adc: disabling
[ 31.978162] vddcore: disabling
[ 31.994557] v1v8: disabling
Can anyone help me debug and solve this issue. i'm pretty sure about what i'm doing here, i referred the pwm-back-light implemented in stm32mp257f-dk.dts. apart from using DT overlay i even tried applying patch with same implementation as above shared overlay, end up having same kernel log again.
Hoping for a quick reply, thanks in advance.