How do I configure a 320x240 LCD in the Device Tree for i.MX6 Solo?

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

How do I configure a 320x240 LCD in the Device Tree for i.MX6 Solo?

ソリューションへジャンプ
12,180件の閲覧回数
natesigrist
Contributor III

So I'm lazy, or I'm hoping to benefit from kernel changes and maintenance.  It's confusing as to what the correct way to define an LCD in the device tree for Linux.  I've read the binding documentation and managed to run `fbset' to change the resolution to 320x240 along with guessing the timings.  However, this is NOT clean and gives bad LCD flicker on startup.  Also, I am still not getting the right timing settings.

I feel like I am missing something simple.  I am using Hantronic HDA350-2S LCD panel.

Is there a way to do something like the following but ALSO with SPI?

&lcdif {

    compatible = "fsl,imx6dl-lcdif";

    pinctrl-names = "default";

    pinctrl-0 = <&pinctrl_lcdif_dat_0

                 &pinctrl_lcdif_ctrl_0>;

    lcd-supply = <&reg_lcd_3v3>;

    display = <&display_conf>;

    status = "okay";

    display_conf: display-0 {

        bits-per-pixel = <24>;

        bus-width = <24>;

        display-timings {

            native-mode = <&timing0>;

            timing0: timing0 {

            clock-frequency = <6500000>;

            hactive = <320>;

            vactive = <240>;

            hback-porch = <68>;

            hfront-porch = <20>;

            vback-porch = <18>;

            vfront-porch = <4>;

            hsync-len = <10>;

            vsync-len = <10>;

            hsync-active = <0>;

            vsync-active = <0>;

            de-active = <1>;

            pixelclk-active = <0>;

        };

    };

};

ラベル(4)
0 件の賞賛
返信
1 解決策
6,031件の閲覧回数
natesigrist
Contributor III

Turns out I didn't need half that much.  But it would have been easier to enter the LCD properties in a device tree rather than editing the driver.  The following is what I did for a Hantronic HDA350-2S LCD panel,

Device Tree:

mxcfb2: fb@1 {

     compatible = "fsl,mxc_sdc_fb";

     disp_dev = "lcd";

     interface_pix_fmt = "RGB24";

     mode_str ="CLAA-QVGA";

     default_bpp = <24>;

     int_clk = <0>;

     late_init = <0>;

     status = "okay";

};

lcd@0 {

     compatible = "fsl,lcd";

     pinctrl-names = "default";

     pinctrl-0 = <&pinctrl_ipu1_1>;

     ipu_id = <0>;

     disp_id = <0>;

     default_ifmt = "BGR24";

     status = "okay";

};

And I modified the Kernel driver (from ArchARM sources):

static struct fb_videomode lcdif_modedb[] = {

  {

  /* 320x240 @ 56 Hz , pixel clk @ 6.5MHz */

  "CLAA-QVGA", 60, 320, 240, 153846, 68, 20, 18, 4, 1, 1,

  0,

  FB_VMODE_NONINTERLACED,

  0

},} }

元の投稿で解決策を見る

0 件の賞賛
返信
7 返答(返信)
6,031件の閲覧回数
pedroruizdiaz
Contributor II

Hi Nate,

Did you find a resolution? I'm fighting with the same problem, I have a generic 800x480 Chinese display but modifying my device tree doesn't modify my blank LCD screen. Changing fbset doesn't change anything but its values. Is there a generic driver with its corresponding device tree node?

0 件の賞賛
返信
6,032件の閲覧回数
natesigrist
Contributor III

Turns out I didn't need half that much.  But it would have been easier to enter the LCD properties in a device tree rather than editing the driver.  The following is what I did for a Hantronic HDA350-2S LCD panel,

Device Tree:

mxcfb2: fb@1 {

     compatible = "fsl,mxc_sdc_fb";

     disp_dev = "lcd";

     interface_pix_fmt = "RGB24";

     mode_str ="CLAA-QVGA";

     default_bpp = <24>;

     int_clk = <0>;

     late_init = <0>;

     status = "okay";

};

lcd@0 {

     compatible = "fsl,lcd";

     pinctrl-names = "default";

     pinctrl-0 = <&pinctrl_ipu1_1>;

     ipu_id = <0>;

     disp_id = <0>;

     default_ifmt = "BGR24";

     status = "okay";

};

And I modified the Kernel driver (from ArchARM sources):

static struct fb_videomode lcdif_modedb[] = {

  {

  /* 320x240 @ 56 Hz , pixel clk @ 6.5MHz */

  "CLAA-QVGA", 60, 320, 240, 153846, 68, 20, 18, 4, 1, 1,

  0,

  FB_VMODE_NONINTERLACED,

  0

},} }

0 件の賞賛
返信
6,031件の閲覧回数
LPs
Contributor III

Hi Nate,

  I'm fighting with a similar issue on imx6sx.

I'm trying to set up a display 320x240 with the same parameters as your lcd.

I followed your instruction and now I see a completely white scree at the end of kernel init, and /dev/fb0 is mounted.

What can I do now to test fb?

Thanks

0 件の賞賛
返信
6,031件の閲覧回数
jimmychan
NXP TechSupport
NXP TechSupport

For your reference, I have a qr_test.c.

Show the QR code on the display and save in a BMP file

The program can display the QR code to display via fb0. You may modify the code to ignore the QR code and simply write your own pattern.

0 件の賞賛
返信
6,031件の閲覧回数
natesigrist
Contributor III

I am also using the following,

     lcd@0 {
           compatible = "fsl,lcd";
            ipu_id = ;
           disp_id = ;
           default_ifmt = "BGR24";
           pinctrl-names = "default";
           pinctrl-0 = <&pinctrl_ipu1_1>;/*pinctrl_lcdif_dat_0
                           &pinctrl_lcdif_ctrl_0>;*/
           status = "okay";
           spics-gpios = <&gpio3 19 0>;
      };
     mxcfb1: fb@0 {
           compatible = "fsl,mxc_sdc_fb";
           disp_dev = "lcd";
           interface_pix_fmt = "BGR24";
           mode_str ="HDA350-QVGA";
           default_bpp = <24>;
           int_clk = <0>;
           late_init = <0>;
           status = "okay";
      };

lcdif doesn't seem to be working for iMX6-Solo even though it describes the connected LCD.  There are registers that can be configured for LCD as well but they are not well documented.  Anyone have any suggestions on what to do next?

Again, I get the tty login prompt but only the first 4 lines followed by a line, then blank screen, then another white line at the bottom of the screen.  Even when the display is 'stable' I still do not get a full console screen.  (I tried adjusting it using stty but this did not change anything)

0 件の賞賛
返信
6,031件の閲覧回数
jimmychan
NXP TechSupport
NXP TechSupport

According to the BSP Linux reference manual, the elcdif driver only DOTCLK mode of the ELCDIF API is tested. Is your LCD is running in DOTCLK mode? please try the DOTCLK mode first.

0 件の賞賛
返信
6,031件の閲覧回数
natesigrist
Contributor III

Where can I find more information about "DOTCLK mode" and ELCDIF API?

0 件の賞賛
返信