Установка на BBB ядра версии 4.1 с поддержкой CapeManager описана здесь, версии 4.4 - здесь. Убедиться, что ядро собрано с поддержкой CapeManager'а, можно проверив конфиги сборки:
zcat /proc/config.gz | grep CONFIG_BONE_CAPEMGR
Вывод, в случае поддержки CapeManager'а, должен быть следующий:
cat /sys/devices/platform/bone_capemgr/slots
Наш оверлей (dts-файл) надо положить в папку /opt/scripts/tools/bb.org-overlays/src/arm.
Чтобы получить из имеющихся файлов dts в вышеназванной папке файлы dto, а затем скопировать их в папку /lib/firmware, вызываем:
cd /opt/scripts/tools/bb.org-overlays
make clean
./install.sh
Для вывода изображения мы используем пины p8.31-p8.45 (lcd_data0-lcd_data15), p8.27 (lcd_vsync), p8.28 (lcd_pclk), p8.29 (lcd_hsync), p8.30 (lcd_ac_bias_en). В дефолтном девайстри am335x-boneblack.dtb (am335x-boneblack.dts) эти пины используются hdmi-подсистемой (nxp_hdmi_bonelt_pins). Вместо стандартного мы будем использовать am335x-boneblack-emmc-overlay.dtb (am335x-boneblack-emmc-overlay.dts), в котором lcd-пины не связаны с hdmi-подсистемой. Для этого добавим следующую строчку в файл /boot/uEnv.txt:
Для монитора Lilliput, работающего у нас на разрешении 640x480, оверлей будет выглядеть следующим образом (файл BB-STER-VGA-01-00A0.dts):
/*
* 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/board/am335x-bbw-bbb-base.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/am33xx.h>
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black", "ti,beaglebone-green";
/* identification */
part-number = "BB-STER-VGA-01";
version = "00A0";
/* 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.27", /* lcd: lcd_vsync */
"P8.29", /* lcd: lcd_hsync */
"P8.28", /* lcd: lcd_pclk */
"P8.30", /* lcd: lcd_ac_bias_en */
"lcdc",
"tscadc";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
bb_lcd_lcd_pins: pinmux_bb_lcd_lcd_pins {
pinctrl-single,pins = <
0xa0 0x08 /* lcd_data0.lcd_data0, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xa4 0x08 /* lcd_data1.lcd_data1, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xa8 0x08 /* lcd_data2.lcd_data2, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xac 0x08 /* lcd_data3.lcd_data3, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xb0 0x08 /* lcd_data4.lcd_data4, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xb4 0x08 /* lcd_data5.lcd_data5, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xb8 0x08 /* lcd_data6.lcd_data6, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xbc 0x08 /* lcd_data7.lcd_data7, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xc0 0x08 /* lcd_data8.lcd_data8, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xc4 0x08 /* lcd_data9.lcd_data9, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xc8 0x08 /* lcd_data10.lcd_data10, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xcc 0x08 /* lcd_data11.lcd_data11, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xd0 0x08 /* lcd_data12.lcd_data12, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xd4 0x08 /* lcd_data13.lcd_data13, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xd8 0x08 /* lcd_data14.lcd_data14, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xdc 0x08 /* lcd_data15.lcd_data15, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xe0 0x00 /* lcd_vsync.lcd_vsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
0xe4 0x00 /* lcd_hsync.lcd_hsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
0xe8 0x00 /* lcd_pclk.lcd_pclk, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
0xec 0x00 /* lcd_ac_bias_en.lcd_ac_bias_en, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
>;
};
};
};
fragment@1 {
target = <&lcdc>;
__overlay__ {
status = "okay";
};
};
fragment@2 {
target = <&tscadc>;
__overlay__ {
compatible = "ti,am3359-tscadc";
reg = <0x44e0d000 0x1000>;
interrupt-parent = <&intc>;
interrupts = <16>;
ti,hwmods = "adc_tsc";
status = "okay";
tsc {
compatible = "ti,am3359-tsc";
};
adc {
compatible = "ti,am3359-adc";
ti,adc-channels = <0 1 2 3 4 5 6 7>;
};
};
};
fragment@3 {
target-path="/";
__overlay__ {
/* avoid stupid warning */
#address-cells = <1>;
#size-cells = <1>;
panel {
compatible = "tilcdc,panel";
pinctrl-names = "default";
pinctrl-0 = <&bb_lcd_lcd_pins>;
panel-info {
ac-bias = <255>;
ac-bias-intrpt = <0>;
dma-burst-sz = <16>;
bpp = <16>;
fdd = <0x80>;
tft-alt-mode = <0>;
stn-565-mode = <0>;
mono-8bit-mode = <0>;
sync-edge = <0>;
sync-ctrl = <1>;
raster-order = <0>;
fifo-th = <0>;
};
display-timings {
native-mode = <&timing0>;
timing0: 640x480 {
hactive = <640>;
vactive = <480>;
hback-porch = <48>;
hfront-porch = <16>;
hsync-len = <96>;
vback-porch = <33>;
vfront-porch = <10>;
vsync-len = <2>;
clock-frequency = <30000000>;
hsync-active = <0>;
vsync-active = <0>;
};
};
};
};
};
};
zcat /proc/config.gz | grep CONFIG_BONE_CAPEMGR
Вывод, в случае поддержки CapeManager'а, должен быть следующий:
CONFIG_BONE_CAPEMGR=y
Установим пакет для сборки оверлеев на BBB:
sudo apt update ; sudo apt install bb-cape-overlays
Обновим скрипты:
sudo apt update ; sudo apt install bb-cape-overlays
Обновим скрипты:
cd /opt/scripts/tools
git pull
Посмотреть подключенные оверлеи можно либо через dmesg | grep bone_capemgr, либо выполнив:
cat /sys/devices/platform/bone_capemgr/slots
Устанавливаем на BBB исходники оверлеев (проект bb.org-overlays):
cd /opt/scripts/tools
git clone https://github.com/beagleboard/bb.org-overlays
cd /opt/scripts/tools
git clone https://github.com/beagleboard/bb.org-overlays
Чтобы получить из имеющихся файлов dts в вышеназванной папке файлы dto, а затем скопировать их в папку /lib/firmware, вызываем:
cd /opt/scripts/tools/bb.org-overlays
make clean
./install.sh
Для вывода изображения мы используем пины p8.31-p8.45 (lcd_data0-lcd_data15), p8.27 (lcd_vsync), p8.28 (lcd_pclk), p8.29 (lcd_hsync), p8.30 (lcd_ac_bias_en). В дефолтном девайстри am335x-boneblack.dtb (am335x-boneblack.dts) эти пины используются hdmi-подсистемой (nxp_hdmi_bonelt_pins). Вместо стандартного мы будем использовать am335x-boneblack-emmc-overlay.dtb (am335x-boneblack-emmc-overlay.dts), в котором lcd-пины не связаны с hdmi-подсистемой. Для этого добавим следующую строчку в файл /boot/uEnv.txt:
dtb=am335x-boneblack-emmc-overlay.dtb
Для загрузки оверлея (например, BB-BONE-LCD7-01-00A1.dts из проекта bb.org-overlays) в режиме runtime надо набрать следующую команду в bash'е:
sudo sh -c "echo 'BB-BONE-LCD7-01:00A1' > /sys/devices/platform/bone_capemgr/slots"
Для загрузки оверлея (например, BB-BONE-LCD7-01-00A1.dts из проекта bb.org-overlays) в режиме runtime надо набрать следующую команду в bash'е:
sudo sh -c "echo 'BB-BONE-LCD7-01:00A1' > /sys/devices/platform/bone_capemgr/slots"
У нас есть разные аппаратные конфигурации, которые ведут к появлению разных параллельных ветвлений оверлеев, выбором которых будет заниматься пользователь в расширенных настройках. Загрузку конкретного оверлея я буду производить в bash-скрипте, который запускается при старте системы (например, mystart.sh).
Настройка используемых интерфейсов uart1, uart4, i2c2, spi0, gpio1_16 (файл BB-STER-TEST-00A0.dts):
/*
* 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/board/am335x-bbw-bbb-base.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/am33xx.h>
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black", "ti,beaglebone-green";
/* identification */
part-number = "BB-STER-01";
version = "00A0";
/* state the resources this cape uses */
exclusive-use =
"P9.24", // uart1_txd
"P9.26", // uart1_rxd
"uart1", // hardware ip used
"P9.13", // uart4_txd
"P9.11", // uart4_rxd
"uart4", // hardware ip used
/* the pin header uses */
"P9.19", /* i2c2_sda */
"P9.20", /* i2c2_scl */
/* the hardware ip uses */
"i2c2",
/* the pin header uses */
"P9.17", /* spi0_cs0 */
"P9.18", /* spi0_d1 */
"P9.21", /* spi0_d0 */
"P9.22", /* spi0_sclk */
/* the hardware ip uses */
"spi0",
"P9.15", // сигнал от платы поддержки питания на выключение
"gpio1_16";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
bb_uart1_pins: pinmux_bb_uart1_pins {
pinctrl-single,pins = <
BONE_P9_24 (PIN_OUTPUT | MUX_MODE0) // uart1_txd.uart1_txd
BONE_P9_26 (PIN_INPUT | MUX_MODE0) // uart1_rxd.uart1_rxd
>;
};
};
};
fragment@1 {
target = <&uart1>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&bb_uart1_pins>;
};
};
fragment@2 {
target = <&am33xx_pinmux>;
__overlay__ {
bb_uart4_pins: pinmux_bb_uart4_pins {
pinctrl-single,pins = <
BONE_P9_13 (PIN_OUTPUT | MUX_MODE6) // gpmc_wpn.uart4_txd_mux2
BONE_P9_11 (PIN_INPUT | MUX_MODE6) // gpmc_wait0.uart4_rxd_mux2
>;
};
};
};
fragment@3 {
target = <&uart4>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&bb_uart4_pins>;
};
};
fragment@4 {
target = <&am33xx_pinmux>;
__overlay__ {
bb_i2c2_pins: pinmux_bb_i2c2_pins {
pinctrl-single,pins = <
0x178 0x73 /* i2c2_sda, SLEWCTRL_SLOW | INPUT_PULLUP | MODE3 */
0x17c 0x73 /* i2c2_scl, SLEWCTRL_SLOW | INPUT_PULLUP | MODE3 */
>;
};
};
};
fragment@5 {
target = <&i2c2>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&bb_i2c2_pins>;
/* this is the configuration part */
clock-frequency = <100000>;
#address-cells = <1>;
#size-cells = <0>;
};
};
fragment@6 {
target = <&am33xx_pinmux>;
__overlay__ {
/* default state has all gpios released and mode set to uart1 */
bb_spi0_pins: pinmux_bb_spi0_pins {
pinctrl-single,pins = <
0x150 0x30 /* spi0_sclk.spi0_sclk, INPUT_PULLUP | MODE0 */
0x154 0x30 /* spi0_d0.spi0_d0, INPUT_PULLUP | MODE0 */
0x158 0x10 /* spi0_d1.spi0_d1, OUTPUT_PULLUP | MODE0 */
0x15c 0x10 /* spi0_cs0.spi0_cs0, OUTPUT_PULLUP | MODE0 */
>;
};
};
};
fragment@7 {
target = <&spi0>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&bb_spi0_pins>;
spidev0: spi@0 {
compatible = "spidev";
reg = <0>;
spi-max-frequency = <500000>;
};
};
};
fragment@8 {
target = <&am33xx_pinmux>;
__overlay__ {
pinmode_p9_15: pinmux_gpio_1_16 {
pinctrl-single,pins = < BONE_P9_15 0x3F >;
};
};
};
fragment@9 {
target = <&ocp>;
__overlay__ {
pinmux_gpio_1_16 {
pinctrl-0 = <&pinmode_p9_15>;
compatible = "bone-pinmux-helper";
status = "okay";
pinctrl-names = "default";
};
};
};
};
/*
* 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/board/am335x-bbw-bbb-base.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/am33xx.h>
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black", "ti,beaglebone-green";
/* identification */
part-number = "BB-STER-VGA-01";
version = "00A0";
/* 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.27", /* lcd: lcd_vsync */
"P8.29", /* lcd: lcd_hsync */
"P8.28", /* lcd: lcd_pclk */
"P8.30", /* lcd: lcd_ac_bias_en */
"lcdc",
"tscadc";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
bb_lcd_lcd_pins: pinmux_bb_lcd_lcd_pins {
pinctrl-single,pins = <
0xa0 0x08 /* lcd_data0.lcd_data0, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xa4 0x08 /* lcd_data1.lcd_data1, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xa8 0x08 /* lcd_data2.lcd_data2, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xac 0x08 /* lcd_data3.lcd_data3, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xb0 0x08 /* lcd_data4.lcd_data4, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xb4 0x08 /* lcd_data5.lcd_data5, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xb8 0x08 /* lcd_data6.lcd_data6, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xbc 0x08 /* lcd_data7.lcd_data7, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xc0 0x08 /* lcd_data8.lcd_data8, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xc4 0x08 /* lcd_data9.lcd_data9, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xc8 0x08 /* lcd_data10.lcd_data10, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xcc 0x08 /* lcd_data11.lcd_data11, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xd0 0x08 /* lcd_data12.lcd_data12, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xd4 0x08 /* lcd_data13.lcd_data13, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xd8 0x08 /* lcd_data14.lcd_data14, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xdc 0x08 /* lcd_data15.lcd_data15, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
0xe0 0x00 /* lcd_vsync.lcd_vsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
0xe4 0x00 /* lcd_hsync.lcd_hsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
0xe8 0x00 /* lcd_pclk.lcd_pclk, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
0xec 0x00 /* lcd_ac_bias_en.lcd_ac_bias_en, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
>;
};
};
};
fragment@1 {
target = <&lcdc>;
__overlay__ {
status = "okay";
};
};
fragment@2 {
target = <&tscadc>;
__overlay__ {
compatible = "ti,am3359-tscadc";
reg = <0x44e0d000 0x1000>;
interrupt-parent = <&intc>;
interrupts = <16>;
ti,hwmods = "adc_tsc";
status = "okay";
tsc {
compatible = "ti,am3359-tsc";
};
adc {
compatible = "ti,am3359-adc";
ti,adc-channels = <0 1 2 3 4 5 6 7>;
};
};
};
fragment@3 {
target-path="/";
__overlay__ {
/* avoid stupid warning */
#address-cells = <1>;
#size-cells = <1>;
panel {
compatible = "tilcdc,panel";
pinctrl-names = "default";
pinctrl-0 = <&bb_lcd_lcd_pins>;
panel-info {
ac-bias = <255>;
ac-bias-intrpt = <0>;
dma-burst-sz = <16>;
bpp = <16>;
fdd = <0x80>;
tft-alt-mode = <0>;
stn-565-mode = <0>;
mono-8bit-mode = <0>;
sync-edge = <0>;
sync-ctrl = <1>;
raster-order = <0>;
fifo-th = <0>;
};
display-timings {
native-mode = <&timing0>;
timing0: 640x480 {
hactive = <640>;
vactive = <480>;
hback-porch = <48>;
hfront-porch = <16>;
hsync-len = <96>;
vback-porch = <33>;
vfront-porch = <10>;
vsync-len = <2>;
clock-frequency = <30000000>;
hsync-active = <0>;
vsync-active = <0>;
};
};
};
};
};
};
Для монитора HDMI (файл BB-STER-HDMI-01-00A0.dts):
/*
* 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/board/am335x-bbw-bbb-base.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/am33xx.h>
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black", "ti,beaglebone-green";
/* identification */
part-number = "BB-STER-HDMI-01";
version = "00A0";
/* 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.27", /* lcd: lcd_vsync */
"P8.29", /* lcd: lcd_hsync */
"P8.28", /* lcd: lcd_pclk */
"P8.30", /* lcd: lcd_ac_bias_en */
"lcdc",
"tscadc";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
nxp_hdmi_bonelt_pins: nxp_hdmi_bonelt_pins {
pinctrl-single,pins = <
AM33XX_IOPAD(0x9b0, PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr0 */
AM33XX_IOPAD(0x8a0, PIN_OUTPUT | MUX_MODE0) /* lcd_data0.lcd_data0 */
AM33XX_IOPAD(0x8a4, PIN_OUTPUT | MUX_MODE0) /* lcd_data1.lcd_data1 */
AM33XX_IOPAD(0x8a8, PIN_OUTPUT | MUX_MODE0) /* lcd_data2.lcd_data2 */
AM33XX_IOPAD(0x8ac, PIN_OUTPUT | MUX_MODE0) /* lcd_data3.lcd_data3 */
AM33XX_IOPAD(0x8b0, PIN_OUTPUT | MUX_MODE0) /* lcd_data4.lcd_data4 */
AM33XX_IOPAD(0x8b4, PIN_OUTPUT | MUX_MODE0) /* lcd_data5.lcd_data5 */
AM33XX_IOPAD(0x8b8, PIN_OUTPUT | MUX_MODE0) /* lcd_data6.lcd_data6 */
AM33XX_IOPAD(0x8bc, PIN_OUTPUT | MUX_MODE0) /* lcd_data7.lcd_data7 */
AM33XX_IOPAD(0x8c0, PIN_OUTPUT | MUX_MODE0) /* lcd_data8.lcd_data8 */
AM33XX_IOPAD(0x8c4, PIN_OUTPUT | MUX_MODE0) /* lcd_data9.lcd_data9 */
AM33XX_IOPAD(0x8c8, PIN_OUTPUT | MUX_MODE0) /* lcd_data10.lcd_data10 */
AM33XX_IOPAD(0x8cc, PIN_OUTPUT | MUX_MODE0) /* lcd_data11.lcd_data11 */
AM33XX_IOPAD(0x8d0, PIN_OUTPUT | MUX_MODE0) /* lcd_data12.lcd_data12 */
AM33XX_IOPAD(0x8d4, PIN_OUTPUT | MUX_MODE0) /* lcd_data13.lcd_data13 */
AM33XX_IOPAD(0x8d8, PIN_OUTPUT | MUX_MODE0) /* lcd_data14.lcd_data14 */
AM33XX_IOPAD(0x8dc, PIN_OUTPUT | MUX_MODE0) /* lcd_data15.lcd_data15 */
AM33XX_IOPAD(0x8e0, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_vsync.lcd_vsync */
AM33XX_IOPAD(0x8e4, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_hsync.lcd_hsync */
AM33XX_IOPAD(0x8e8, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_pclk.lcd_pclk */
AM33XX_IOPAD(0x8ec, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_ac_bias_en.lcd_ac_bias_en */
>;
};
nxp_hdmi_bonelt_off_pins: nxp_hdmi_bonelt_off_pins {
pinctrl-single,pins = <
AM33XX_IOPAD(0x9b0, PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr0 */
>;
};
};
};
fragment@1 {
target = <&lcdc>;
__overlay__ {
status = "okay";
port {
lcdc_0: endpoint@0 {
remote-endpoint = <&hdmi_0>;
};
};
};
};
fragment@2 {
target = <&i2c0>;
__overlay__ {
tda19988 {
compatible = "nxp,tda998x";
reg = <0x70>;
pinctrl-names = "default", "off";
pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
port {
hdmi_0: endpoint@0 {
remote-endpoint = <&lcdc_0>;
};
};
};
};
};
fragment@3 {
target = <&tscadc>;
__overlay__ {
compatible = "ti,am3359-tscadc";
reg = <0x44e0d000 0x1000>;
interrupt-parent = <&intc>;
interrupts = <16>;
ti,hwmods = "adc_tsc";
status = "okay";
tsc {
compatible = "ti,am3359-tsc";
};
adc {
compatible = "ti,am3359-adc";
ti,adc-channels = <0 1 2 3 4 5 6 7>;
};
};
};
};
Использованный материал:
1) https://github.com/beagleboard/beaglebone-black/wiki/System-Reference-Manual
2) https://github.com/beagleboard/bb.org-overlays/blob/master/readme.md
3) https://learn.adafruit.com/introduction-to-the-beaglebone-black-device-tree/overview
4) http://www.jumpnowtek.com/beaglebone/BeagleBone-Black-pinmuxing-and-other-device-tree-notes.html
5) http://kilobaser.com/blog/2014-07-28-beaglebone-black-devicetreeoverlay-generator
6) http://elinux.org/EBC_Exercise_11a_Device_Trees
7) http://www.devicetree.org/specifications
8) http://elinux.org/Device_Tree_Reference
9) http://elinux.org/Device_Tree_Usage
10) http://elinux.org/Capemgr
11) https://mazdermind.wordpress.com/2016/07/31/bbblack-lcd-cape-with-the-latest-debian-jessie-kernel-4-4/
12) http://www.weigu.lu/sb-computer/bbb_device_tree/index.html
1) https://github.com/beagleboard/beaglebone-black/wiki/System-Reference-Manual
2) https://github.com/beagleboard/bb.org-overlays/blob/master/readme.md
3) https://learn.adafruit.com/introduction-to-the-beaglebone-black-device-tree/overview
4) http://www.jumpnowtek.com/beaglebone/BeagleBone-Black-pinmuxing-and-other-device-tree-notes.html
5) http://kilobaser.com/blog/2014-07-28-beaglebone-black-devicetreeoverlay-generator
6) http://elinux.org/EBC_Exercise_11a_Device_Trees
7) http://www.devicetree.org/specifications
8) http://elinux.org/Device_Tree_Reference
9) http://elinux.org/Device_Tree_Usage
10) http://elinux.org/Capemgr
11) https://mazdermind.wordpress.com/2016/07/31/bbblack-lcd-cape-with-the-latest-debian-jessie-kernel-4-4/
12) http://www.weigu.lu/sb-computer/bbb_device_tree/index.html