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>;
};
};
}
};