Using LVDS in a iMX6Q/D from Barebox
gianluca
gianlucarenzi at eurekelettronica.it
Tue Feb 14 02:32:44 PST 2017
On 02/10/2017 08:35 AM, Sascha Hauer wrote:
> Hi Gianluca,
>
> On Thu, Feb 09, 2017 at 03:37:41PM +0100, gianluca wrote:
>> Hello,
>> I would like to know if there is a clear way on using the lvds pins to drive
>> a LVDS display in a custom made board, based on iMX6Q (in the near future
>> the iMX6Dual).
>
> I think what you are looking for is of_device_enable_and_register() or
> of_device_enable_and_register_by_name(). You can call it on either the
> lvds device node or the hdmi device node, depending on whether you found
> an EEPROM or not.
>
I think this is not necessary as during boot I can see clearly:
> imx-ipuv3 2400000.ipu: IPUv3H probed
> imx-ipuv3 2800000.ipu: IPUv3H probed
> imx-ldb ldb.10: probe failed: Invalid argument
> imx-hdmi 120000.hdmi: Detected HDMI controller 0x13:0xa:0xa0:0xc1
So barebox is trying to bring-up the imx-ldb but fails.
So I suppose something is wrong in my device tree structure.
The LVDS port is connected to LVDS0_... pins of the iMX6Q SoC.
Here is the snippet of .dts file:
> &ldb {
> status = "okay";
>
> lvds0: lvds-channel at 0 {
> fsl,data-mapping = "spwg";
> fsl,data-width = <16>;
> status = "okay";
>
> display-timings {
> native-mode = <&am128080n3tz>;
> /* DISPLAY 1280x800 AMPIRE AM1280800N3TZ */
> am128080n3tz: am1280800n3tz {
> clock-frequency = <71000000>;
> hactive = <1280>;
> vactive = <800>;
> hback-porch = <50>;
> hfront-porch = <50>;
> vback-porch = <5>;
> vfront-porch = <5>;
> hsync-len = <60>;
> vsync-len = <13>;
> hsync-active = <0>;
> vsync-active = <0>;
> de-active = <1>;
> pixelclk-active = <1>;
> };
> /* DISPLAY 1024x600 AMPIRE AM-1024600LTM LVDS */
> am1024600l: am1024600l {
> clock-frequency = <51200000>;
> hactive = <1024>;
> vactive = <600>;
> hback-porch = <0>;
> hfront-porch = <320>;
> vback-porch = <0>;
> vfront-porch = <35>;
> hsync-len = <1>;
> vsync-len = <1>;
> hsync-active = <0>;
> vsync-active = <0>;
> de-active = <1>;
> pixelclk-active = <0>;
> };
> /* DISPLAY 800x480 */
> ph800480t013: ph800480t013 {
> clock-frequency = <33300000>;
> hactive = <800>;
> vactive = <480>;
> hback-porch = <46>;
> hfront-porch = <210>;
> vback-porch = <23>;
> vfront-porch = <22>;
> hsync-len = <1>;
> vsync-len = <1>;
> hsync-active = <0>;
> vsync-active = <0>;
> de-active = <1>;
> pixelclk-active = <0>;
> };
> };
>
> port at 4 {
> reg = <4>;
> lvds0_out: endpoint {
> remote-endpoint = <&panel_in_lvds0>;
> };
> };
>
> };
> };
>
I was thinking of changing the node 'native-mode' in the init scripts
depending on the data read from a special eeprom (like EDID stuff).
Is this correct?
Here is the panel section:
> panel_lvds0 {
> backlight = <&backlight_lvds>;
> port {
> panel_in_lvds0: endpoint {
> remote-endpoint = <&lvds0_out>;
> };
> };
> };
And finally the backlight_lvds section:
> backlight_lvds: backlight-lvds {
> pinctrl-names = "default";
> pinctrl-0 = <&pinctrl_backlight>;
> compatible = "pwm-backlight";
> pwms = <&pwm1 0 5000000>;
> brightness-levels = <0 4 8 16 32 64 128 255>;
> default-brightness-level = <6>;
> power-supply = <®_3p3v>;
> status = "okay";
> };
With the pinctrl_backlight defined as:
> pinctrl_backlight: backlightgrp {
> fsl,pins = <
> MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x80000000
> >;
> };
How to proceed further? I would like to have some useful debug
information (if any) on device driver probing...
Best Regards,
--
Eurek s.r.l. |
Electronic Engineering | http://www.eurek.it
via Celletta 8/B, 40026 Imola, Italy | Phone: +39-(0)542-609120
p.iva 00690621206 - c.f. 04020030377 | Fax: +39-(0)542-609212
More information about the barebox
mailing list