장치 트리에 LCD 추가

장치 트리에 LCD 추가

Beaglebone Black Debian 이미지의 장치 트리에서 SHARP 병렬 24비트 LCD 화면을 정의하려고 합니다 panel-info. display-timings이를 위해 오버레이 .dtbo파일을 사용했습니다. 내 문제는 과 같은 특정 값에 대한 타이밍을 찾을 수 없다는 것입니다 hsync-len.de-active샤프 LS037V7DW05 데이터시트.

LCD 데이터시트를 읽은 경험이 더 많은 사람이 이 문서의 올바른 값을 해독하여 내 오버레이 파일에 추가하는 데 도움을 줄 수 있기를 바랍니다.

오버레이 파일은 다음과 같으며 오류가 있을 가능성이 높습니다.

/*
 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

/dts-v1/;
/plugin/;

#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/am33xx.h>
#include <dt-bindings/board/am335x-bbw-bbb-base.h>

/ {
    compatible = "ti,beaglebone", "ti,beaglebone-black";

    /* identification */
    part-number = "am335x-osd3358-mt";
    version = "01";

    /* state the resources this cape uses */
    exclusive-use =
        /* the pin header uses */
        "P8.45",    /* lcd: lcd_data0 */
        "P8.46",    /* lcd: lcd_data1 */
        "P8.43",    /* lcd: lcd_data2 */
        "P8.44",    /* lcd: lcd_data3 */
        "P8.41",    /* lcd: lcd_data4 */
        "P8.42",    /* lcd: lcd_data5 */
        "P8.39",    /* lcd: lcd_data6 */
        "P8.40",    /* lcd: lcd_data7 */
        "P8.37",    /* lcd: lcd_data8 */
        "P8.38",    /* lcd: lcd_data9 */
        "P8.36",    /* lcd: lcd_data10 */
        "P8.34",    /* lcd: lcd_data11 */
        "P8.35",    /* lcd: lcd_data12 */
        "P8.33",    /* lcd: lcd_data13 */
        "P8.31",    /* lcd: lcd_data14 */
        "P8.32",    /* lcd: lcd_data15 */
        "P8.15",    /* lcd: lcd_data16 */
        "P8.16",    /* lcd: lcd_data17 */
        "P8.11",    /* lcd: lcd_data18 */
        "P8.12",    /* lcd: lcd_data19 */
        "P8.17",    /* lcd: lcd_data20 */
        "P8.14",    /* lcd: lcd_data21 */
        "P8.13",    /* lcd: lcd_data22 */
        "P8.19",    /* lcd: lcd_data23 */
        "P8.27",    /* lcd: lcd_vsync */
        "P8.29",    /* lcd: lcd_hsync */
        "P8.28",    /* lcd: lcd_pclk */
        "P8.30",    /* lcd: lcd_ac_bias_en */
        "P9.27",    /* lcd: gpio3_19 DISPEN */

        "P9.31",    /* touch interrupt on gpio3_14 */
        "P9.24",    /*uart1_txd*/
        "P9.26",    /*uart1_rxd*/
        /* the hardware IP uses */
        "i2c2",
        "gpio2_7",
        "gpio2_8",
        "gpio3_15",
        "uart1",
        "lcdc";

    /*
     * Free up the pins used by the cape from the pinmux helpers.
     */
    fragment@0 {
        target = <&ocp>;
        __overlay__ {
            P8_45_pinmux { status = "disabled"; };  /* lcd: lcd_data0 */
            P8_46_pinmux { status = "disabled"; };  /* lcd: lcd_data1 */
            P8_43_pinmux { status = "disabled"; };  /* lcd: lcd_data2 */
            P8_44_pinmux { status = "disabled"; };  /* lcd: lcd_data3 */
            P8_41_pinmux { status = "disabled"; };  /* lcd: lcd_data4 */
            P8_42_pinmux { status = "disabled"; };  /* lcd: lcd_data5 */
            P8_39_pinmux { status = "disabled"; };  /* lcd: lcd_data6 */
            P8_40_pinmux { status = "disabled"; };  /* lcd: lcd_data7 */
            P8_37_pinmux { status = "disabled"; };  /* lcd: lcd_data8 */
            P8_38_pinmux { status = "disabled"; };  /* lcd: lcd_data9 */
            P8_36_pinmux { status = "disabled"; };  /* lcd: lcd_data10 */
            P8_34_pinmux { status = "disabled"; };  /* lcd: lcd_data11 */
            P8_35_pinmux { status = "disabled"; };  /* lcd: lcd_data12 */
            P8_33_pinmux { status = "disabled"; };  /* lcd: lcd_data13 */
            P8_31_pinmux { status = "disabled"; };  /* lcd: lcd_data14 */
            P8_32_pinmux { status = "disabled"; };  /* lcd: lcd_data15 */

            P8_15_pinmux { status = "disabled"; };  /* gpmc_ad15.lcd_data16 */
            P8_16_pinmux { status = "disabled"; };  /* gpmc_ad14.lcd_data17 */
            P8_11_pinmux { status = "disabled"; };  /* gpmc_ad13.lcd_data18 */
            P8_12_pinmux { status = "disabled"; };  /* gpmc_ad12.lcd_data19 */
            P8_17_pinmux { status = "disabled"; };  /* gpmc_ad11.lcd_data20 */
            P8_14_pinmux { status = "disabled"; };  /* gpmc_ad10.lcd_data21 */
            P8_13_pinmux { status = "disabled"; };  /* gpmc_ad9.lcd_data22 */
            P8_19_pinmux { status = "disabled"; };  /* gpmc_ad8.lcd_data23 */

            P8_27_pinmux { status = "disabled"; };  /* lcd: lcd_vsync */
            P8_29_pinmux { status = "disabled"; };  /* lcd: lcd_hsync */
            P8_28_pinmux { status = "disabled"; };  /* lcd: lcd_pclk */
            P8_30_pinmux { status = "disabled"; };  /* lcd: lcd_ac_bias_en */

            P9_27_pinmux { status = "disabled"; };  /* lcd: gpio3_19 DISPEN */
            P9_31_pinmux { status = "disabled"; };  /* touch interrupt on gpio3_21 */
            
        };
    };

    fragment@1 {
        target = <&am33xx_pinmux>;
        __overlay__ {

            
            bb_lcd_lcd_pins: pinmux_bb_lcd_lcd_pins {
                pinctrl-single,pins = <
                    BONE_P8_45 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data0.lcd_data0 */
                    BONE_P8_46 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data1.lcd_data1 */
                    BONE_P8_43 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data2.lcd_data2 */
                    BONE_P8_44 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data3.lcd_data3 */
                    BONE_P8_41 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data4.lcd_data4 */
                    BONE_P8_42 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data5.lcd_data5 */
                    BONE_P8_39 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data6.lcd_data6 */
                    BONE_P8_40 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data7.lcd_data7 */
                    BONE_P8_37 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data8.lcd_data8 */
                    BONE_P8_38 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data9.lcd_data9 */
                    BONE_P8_36 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data10.lcd_data10 */
                    BONE_P8_34 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data11.lcd_data11 */
                    BONE_P8_35 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data12.lcd_data12 */
                    BONE_P8_33 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data13.lcd_data13 */
                    BONE_P8_31 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data14.lcd_data14 */
                    BONE_P8_32 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data15 */
                    BONE_P8_15 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data16 */
                    BONE_P8_16 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data17 */
                    BONE_P8_11 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data18 */
                    BONE_P8_12 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data19 */
                    BONE_P8_17 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data20 */
                    BONE_P8_14 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data21 */
                    BONE_P8_13 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data22 */
                    BONE_P8_19 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_data15.lcd_data23 */

                    BONE_P8_27 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_vsync.lcd_vsync */
                    BONE_P8_29 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_hsync.lcd_hsync */
                    BONE_P8_28 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_pclk.lcd_pclk */
                    BONE_P8_30 (PIN_OUTPUT | MUX_MODE0) /* lcd: lcd_ac_bias_en.lcd_ac_bias_en */
                    
                    0x1a4 0x17  /* mcasp0_fsr.gpio3_19, OUTPUT | MODE7 LCD DISEN*/

                >;
            };

            bb_uart1_pins: pinmux_bb_uart1_pins {
                pinctrl-single,pins = <
                    0x184 0x20 /* P9.24 uart1_txd.uart1_txd  OUTPUT  */
                    0x180 0x20 /* P9.26 uart1_rxd.uart1_rxd  INPUT  */
                >;
            };          

            bu21023_tp_pins: pinmux_bu21023_tp_pins {
                pinctrl-single,pins = <
                    0x190 0x37  // INPUT_PULLUP | MODE7
                >;
            };
            

            gpio_helper_pins: pinmux_gpio_helper_pins {
                pinctrl-single,pins = <
                    0x044 0x17  /* gpio2_7 gpmc_a1 | MODE7 | OUTPUT */
                    0x048 0x17  /* gpio2_8 gpmc_a2 | MODE7 | OUTPUT */
                    0x194 0x17  /* gpio3_15 mcasp0_fx | MODE7 | OUTPUT*/

                               /* OUTPUT  GPIO(mode7) 0x07 pulldown, 0x17 pullup, 0x?f no pullup/down */
                   /* INPUT   GPIO(mode7) 0x27 pulldown, 0x37 pullup, 0x?f no pullup/down */
                >;
            };
        };
    };


    fragment@2 {
        target = <&i2c2>;
        __overlay__ {
            status = "okay";
            //pinctrl-names = "default";
            //pinctrl-0 = <&bb_i2c2_pins>;

            // configuration start
            clock-frequency = <100000>;

            #address-cells = <1>;
            #size-cells = <0>;

            bu21023:bu21023_ts@5d {
                pinctrl-names = "default";
                pinctrl-0 = <&bu21023_tp_pins>;
                compatible = "rohm,bu21023_ts";
                reg=<0x5d>;
                touch-gpio = <&gpio3 14 IRQ_TYPE_LEVEL_HIGH>;
                rohm,touch-max-x = <480>;
                rohm,touch-max-y = <640>;
                interrupt-parent = <&gpio3>;
                interrupts = <14 IRQ_TYPE_LEVEL_HIGH>;
            };

            

        };
    };

    /*
     * Helper to show loaded overlays under: /proc/device-tree/chosen/overlays/
     */
    fragment@3 {
        target-path="/";
        __overlay__ {

            chosen {
                overlays {
                    am335x-osd3358-mt-01 = __TIMESTAMP__;
                };
            };
        };
    };

    fragment@4 {
        target = <&lcdc>;
        __overlay__ {
            status = "okay";
            blue-and-red-wiring = "crossed";
        };
    };

    fragment@5 {
        target-path="/";
        __overlay__ {

            /* avoid stupid warning */
            #address-cells = <1>;
            #size-cells = <1>;

            lcd0:panel {
                status = "okay";
                compatible = "ti,tilcdc,panel";
                pinctrl-names = "default";
                pinctrl-0 = <&lcd_pins>;
                enable-gpios = <&gpio2 17 1>;
                backlight = <&lcd_backlight>;

                panel-info {
                    ac-bias           = <255>;
                    ac-bias-intrpt    = <0>;
                    dma-burst-sz      = <16>;
                    bpp               = <24>;
                    fdd               = <0x80>;
                    sync-edge         = <0>;
                    sync-ctrl         = <1>;
                    raster-order      = <0>;
                    fifo-th           = <0>;
                };
                
                display-timings {
                    native-mode = <&timing0>;
                    timing0: 480x640 {
                        clock-frequency = <30000000>;
                        hactive = <480>;
                        vactive = <640>;
                        hfront-porch = <4>;
                        hback-porch = <2>;
                        hsync-len = <648>;
                        vback-porch = <0>;
                        vfront-porch = <0>;
                        vsync-len = <2>;
                        hsync-active = <0>;
                        vsync-active = <0>;
                        de-active = <1>;
                        pixelclk-active = <0>;
                    };
                };
            };
        };
    };

    fragment@6 {
        target = <&ocp>;
        __overlay__ {

            gpio_helper: gpios {
                compatible = "bone-pinmux-helper";
                status = "okay";
                pinctrl-names = "default";
                pinctrl-0 = <&gpio_helper_pins>;

                //lcd_pwr_en {
                //  gpio-name = "LCD_PWR_EN";
                //  gpio = <&gpio3 7 0x00>; /* gpio3 is gpio2 */
                //  output;
                //  init-high;
                //};
    
                //lcd_reset {
                //  gpio-name = "LCD_RST";
                //  gpio = <&gpio3 8 0x00>; /* gpio3 is gpio2 */
                //  output;
                //  init-high;
                //};

                //ts_reset {
                //  gpio-name = "TS_RST";
                //  gpio = <&gpio4 15 0x00>;    /* gpio3 is gpio2 */
                //  output;
                //  init-high;
                //};
            };
        };
    };

    fragment@7 {
        target = <&uart2>;  /* really uart1 */
        __overlay__ {
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&bb_uart1_pins>;
        };
    };

    fragment@8 {
        target-path = "/";
        __overlay__ {
            lcd_backlight: backlight {
                status = "okay";
                compatible = "gpio-backlight";
                pinctrl-names = "default";
                pinctrl-0 = <&backlight_pin>;
                gpios = <&gpio2 17 GPIO_ACTIVE_HIGH>;
            };
        };
    }
};

관련 정보