I'm working on a custom board based on the sama5d3_ek. I have an LCD (T430T01W01A from Cristal Clear Technology) that is compatible with the Innolux at043tn24 that should work out-of-the-box when using the sama5d34ek_pda4.dts device tree files and the panel_simple driver.
I've got at91bootstrap and uboot from the evaluation kit and they work as expected. I see in the LCD the Atmel logo with some info, this means that electrically the board and the LCD work fine.
Then I built the kernel 4.1 downloaded from the official github repo. I used the Linaro toolchain (gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabi), configured the kernel with sama5_defconfig and built the device tree blob based on the sama5d34ek_pda4 sources.
Initially, I built all the related LCD modules (pwm_atmel_hlcdc, backlight, pwm_bl, panel_simple and atmel_hlcdc_dc) inside the kernel and I had the following errors while booting (with some debug info that I added):
Code: Select all
... [drm] Initialized drm 1.1.0 20060810 of_find_backlight_by_node(): class_find_device() failed -----> brd: module loaded loop: module loaded ssc f0008000.ssc: Atmel SSC device at 0xd0880000 (irq 27) at24 1-0050: 32768 byte 24c256 EEPROM, writable, 64 bytes/write [drm] Supports vblank timestamp caching Rev 2 (21.10.2013). [drm] No driver support for vblank timestamp query. atmel-hlcdc-display-controller atmel-hlcdc-dc: failed to create panel: -517 atmel-hlcdc-display-controller atmel-hlcdc-dc: failed to initialize mode setting ... backlight_device_register: name=backlight [drm] Supports vblank timestamp caching Rev 2 (21.10.2013). [drm] No driver support for vblank timestamp query. atmel-hlcdc-display-controller atmel-hlcdc-dc: DRM device successfully registered at91_rtc fffffeb0.rtc: setting system clock to 2015-06-06 20:07:14 UTC (1433621234) atmel-hlcdc-display-controller atmel-hlcdc-dc: fb0: frame buffer device atmel-hlcdc-display-controller atmel-hlcdc-dc: registered panic notifier ...
After searching around the code it seemed to me that the backlight module didn't find the device that the device tree specified. Infact, the func of_find_backlight_by_node() was failing.
I tried several user space programs (fb-set-rect and Qt5 examples built with buildroot) but the LCD seemed dead. All the entries in sysfs, such as /sys/class/backlight were present, but didn't work. For example, I tried to power on/off the backlight
Code: Select all
echo 1 > /sys/class/backlight/backlight/bl_power echo 0 > /sys/class/backlight/backlight/bl_power
Then, I compiled the modules out of the kernel and modprobe'd manually after booting:
Code: Select all
# modprobe pwm_atmel_hlcdc # modprobe backlight # modprobe pwm_bl backlight_device_register: name=backlight # modprobe panel_simple # modprobe atmel_hlcdc_dc [drm] Supports vblank timestamp caching Rev 2 (21.10.2013). [drm] No driver support for vblank timestamp query. atmel-hlcdc-display-controller atmel-hlcdc-dc: DRM device successfully registered atmel-hlcdc-display-controller atmel-hlcdc-dc: fb0: frame buffer device atmel-hlcdc-display-controller atmel-hlcdc-dc: registered panic notifier #
This LCD is compatible with the Innolux LCD according to the supplier, and the datasheets seem equivalent. But if I'm missing something, which panel, backlight or pwm parameters in the device tree or in the panel_simple sources could cause this behaviour?
Something related to the voltage in the backlight or panel regulators?
Do you have any other idea/hint of what could cause this issue?