Hi Cheo, (please keep the mailing list on this)
On Fri, 13 Jan 2023 at 02:04, Cheo Fusi <fusibrando...@gmail.com> wrote: > > Hi Simon > > I get the same -ENODEV with uclass_first_device_err(). > > Here are the outputs of 'dm tree' and 'dm uclass' > > => dm tree > Class Index Probed Driver Name > ----------------------------------------------------------- > root 0 [ + ] root_driver root_driver > simple_bus 0 [ + ] simple_bus |-- soc@1c00000 > mmc 0 [ + ] sunxi_mmc | |-- mmc@1c0f000 > blk 0 [ + ] mmc_blk | | `-- m...@1c0f000.blk > mmc 1 [ + ] sunxi_mmc | |-- mmc@1c10000 > blk 1 [ ] mmc_blk | | `-- m...@1c10000.blk > mmc 2 [ + ] sunxi_mmc | |-- mmc@1c11000 > blk 2 [ ] mmc_blk | | `-- m...@1c11000.blk > usb 0 [ + ] sunxi-musb | |-- usb@1c19000 > ethernet 0 [ + ] usb_ether | | `-- usb_ether > phy 0 [ + ] sun4i_usb_phy | |-- phy@1c19400 > usb 0 [ + ] ehci_generic | |-- usb@1c1a000 > usb_hub 0 [ + ] usb_hub | | `-- usb_hub > usb 1 [ + ] ohci_generic | |-- usb@1c1a400 > usb_hub 1 [ + ] usb_hub | | `-- usb_hub > clk 0 [ + ] sun8i_a23_ccu | |-- clock@1c20000 > reset 0 [ + ] sunxi_reset | | `-- reset > gpio 0 [ + ] gpio_sunxi | |-- pinctrl@1c20800 > gpio 1 [ + ] gpio_sunxi | | |-- PA > gpio 2 [ + ] gpio_sunxi | | |-- PB > gpio 3 [ + ] gpio_sunxi | | |-- PC > gpio 4 [ + ] gpio_sunxi | | |-- PD > gpio 5 [ + ] gpio_sunxi | | |-- PE > gpio 6 [ + ] gpio_sunxi | | |-- PF > gpio 7 [ + ] gpio_sunxi | | |-- PG > gpio 8 [ + ] gpio_sunxi | | |-- PH > gpio 9 [ + ] gpio_sunxi | | `-- PI > watchdog 0 [ + ] sunxi_wdt | |-- watchdog@1c20ca0 > sysreset 1 [ ] wdt_reboot | | `-- watchdog@1c20ca0 > serial 0 [ + ] ns16550_serial | |-- serial@1c28000 > serial 1 [ ] ns16550_serial | |-- serial@1c28400 > clk 1 [ + ] clk_sun6i_rtc | |-- rtc@1f00000 > gpio 10 [ + ] gpio_sunxi | |-- pinctrl@1f02c00 > gpio 11 [ + ] gpio_sunxi | | `-- PL > i2c 0 [ + ] sun8i_rsb | `-- rsb@1f03400 > pmic 0 [ + ] axp_pmic | `-- pmic@3a3 > sysreset 0 [ ] axp_sysreset | `-- axp_sysreset > backlight 0 [ ] pwm_backlight |-- backlight > clk 2 [ + ] fixed_clock |-- osc24M_clk > clk 3 [ ] fixed_clock `-- ext_osc32k_clk > > ------------------------------------------------------------------------------------------------- > > => dm uclass > uclass 0: root > 0 * root_driver @ 5bf62028, seq 0 > > uclass 22: blk > 0 * m...@1c0f000.blk @ 5bf622f8, seq 0 > 1 m...@1c10000.blk @ 5bf62588, seq 1 > 2 m...@1c11000.blk @ 5bf62818, seq 2 > > uclass 26: clk > 0 * clock@1c20000 @ 5bf62c20, seq 0 > 1 * rtc@1f00000 @ 5bf63338, seq 1 > 2 * osc24M_clk @ 5bf63658, seq 2 > 3 ext_osc32k_clk @ 5bf636e0, seq 3 > > uclass 29: display > uclass 34: efi > uclass 36: ethernet > 0 * usb_ether @ 5bf6ab38, seq 0 > > uclass 40: gpio > 0 * pinctrl@1c20800 @ 5bf62d20, seq 0 > 1 * PA @ 5bf62d98, seq 1 > 2 * PB @ 5bf62e10, seq 2 > 3 * PC @ 5bf62e88, seq 3 > 4 * PD @ 5bf62f00, seq 4 > 5 * PE @ 5bf62f78, seq 5 > 6 * PF @ 5bf62ff0, seq 6 > 7 * PG @ 5bf63068, seq 7 > 8 * PH @ 5bf630e0, seq 8 > 9 * PI @ 5bf63158, seq 9 > 10 * pinctrl@1f02c00 @ 5bf63390, seq 10 > 11 * PL @ 5bf63408, seq 11 > > uclass 43: i2c > 0 * rsb@1f03400 @ 5bf63480, seq 3 > > uclass 45: i2c_generic > uclass 51: keyboard > uclass 55: usb_mass_storage > uclass 59: mmc > 0 * mmc@1c0f000 @ 5bf62128, seq 0 > 1 * mmc@1c10000 @ 5bf623d8, seq 2 > 2 * mmc@1c11000 @ 5bf62668, seq 1 > > uclass 63: nop > uclass 67: panel > uclass 68: backlight > 0 backlight @ 5bf63600, seq 0 > > uclass 73: phy > 0 * phy@1c19400 @ 5bf629a0, seq 0 > > uclass 76: pmic > 0 * pmic@3a3 @ 5bf634f8, seq 0 > > uclass 78: pwm > uclass 83: regulator > uclass 85: reset > 0 * reset @ 5bf62c98, seq 0 > > uclass 90: serial > 0 * serial@1c28000 @ 5bf63248, seq 0 > 1 serial@1c28400 @ 5bf632c0, seq 1 > > uclass 91: simple_bus > 0 * soc@1c00000 @ 5bf620a0, seq 0 > > uclass 101: sysreset > 0 axp_sysreset @ 5bf63588, seq 0 > 1 watchdog@1c20ca0 @ 5bf639d8, seq 1 > > uclass 107: usb > 0 * usb@1c1a000 @ 5bf62b50, seq 0 > 1 * usb@1c1a400 @ 5bf62ba8, seq 1 > > uclass 108: usb_dev_generic > uclass 109: usb_hub > 0 * usb_hub @ 5bf74528, seq 0 > 1 * usb_hub @ 5bf6bc08, seq 1 > > uclass 110: usb > 0 * usb@1c19000 @ 5bf62918, seq 0 > > uclass 111: video > uclass 113: vidconsole0 > uclass 118: watchdog > 0 * watchdog@1c20ca0 @ 5bf631d0, seq 0 > But you don't have a PWM, so how can the PWM work? I imagine it is failing this line of pwm_backlight_of_to_plat(): ret = uclass_get_device_by_ofnode(UCLASS_PWM, args.node, &priv->pwm); Here is an example DT fragment from snow: backlight: backlight { compatible = "pwm-backlight"; pwms = <&pwm 0 1000000 0>; brightness-levels = <0 100 500 1000 1500 2000 2500 2800>; default-brightness-level = <7>; enable-gpios = <&gpx3 0 GPIO_ACTIVE_HIGH>; power-supply = <&fet1>; }; - Simon > Sincerely, > Brandon > > On Fri, Jan 13, 2023 at 12:43 AM Simon Glass <s...@chromium.org> wrote: >> >> Hi Cheo, >> >> On Thu, 12 Jan 2023 at 02:40, Cheo Fusi <fusibrando...@gmail.com> wrote: >> > >> > Hi Simon, >> > >> > Thank you for your response. >> > >> > What I'm trying to do is control a backlight WITHOUT attaching it to a >> > panel in the device tree. >> > >> > My approach is to find the top level backlight node in the device tree at >> > some point late in the >> > init sequence (like board_init_f), grab the first and only backlight >> > device in UCLASS_PANEL_BACKLIGHT, >> > and call backlight_enable on it. Something like >> > >> > struct udevice* backlight; >> > ret = uclass_get_device(UCLASS_PANEL_BACKLIGHT, 0, &backlight); >> >> Can you post the output of 'dm tree' and 'dm uclass'? It is possible >> that it is not device 0. It would be safer to use >> uclass_first_device_err() or similar. >> >> No device itself should return -ENODEV as an error. It always means >> that the device cannot be found. Given that you have established that >> it is bound, that can only mean that you are specifying the wrong >> device sequence number. >> >> [.] >> >> Regards, >> Simon