diff --git a/boards/nxp/rd_rw612_bga/rd_rw612_bga.dtsi b/boards/nxp/rd_rw612_bga/rd_rw612_bga.dtsi index 4926cfef5cc..7e6689bba92 100644 --- a/boards/nxp/rd_rw612_bga/rd_rw612_bga.dtsi +++ b/boards/nxp/rd_rw612_bga/rd_rw612_bga.dtsi @@ -76,6 +76,22 @@ <20 0 &hsgpio0 16 0>, /* D14 */ <21 0 &hsgpio0 17 0>; /* D15 */ }; + + + /* + * The pins for this interface are chosen arbitrarily- the RD-RW612 + * board does not have the NXP 8080 interface, but can support displays + * using it by connecting signals directly with jumper wires. + */ + nxp_lcd_8080_connector: lcd-8080-connector { + compatible = "nxp,lcd-8080"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <9 0 &hsgpio0 3 0>, /* Pin 9, LCD touch INT */ + <10 0 &hsgpio0 2 0>, /* Pin 10, LCD backlight control */ + <11 0 &hsgpio0 4 0>; /* Pin 11, LCD and touch reset */ + }; }; &wwdt { @@ -231,12 +247,22 @@ zephyr_udc0: &usb_otg { status = "okay"; }; -&lcdic { +zephyr_mipi_dbi_parallel: &lcdic { status = "okay"; pinctrl-0 = <&pinmux_lcdic>; pinctrl-names = "default"; }; +/* + * Similar to the flexio connection, these pins are not + * broken out in the format required to connect directly to + * an NXP 8080 display, but they can be connected with jumper + * wires. + */ +nxp_8080_touch_panel_i2c: &arduino_i2c { + status = "okay"; +}; + &mrt0_channel0 { status = "okay"; }; diff --git a/boards/shields/lcd_par_s035/boards/rd_rw612_bga.overlay b/boards/shields/lcd_par_s035/boards/rd_rw612_bga.overlay new file mode 100644 index 00000000000..be0ba1319ec --- /dev/null +++ b/boards/shields/lcd_par_s035/boards/rd_rw612_bga.overlay @@ -0,0 +1,95 @@ +/* + * Copyright 2024 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/* + * To use this board with this display, perform the following modifications: + * - Depopulate resistors R78, R604, R598, R15, R245, R243, R11, R20, R237, + * R235, R431, R447, R420, R459, R485, and R486 + * - Populate resistors R286, R19, R246, R242, R123, R239, R124, R125, R236, + * R233, and R12 + * - Remove jumper JP30 + * - Set jumper JP40 to postion 1-2, JP38 to 1-2, and JP16 to position 2-3 + */ + +/* + * To connect the display configure SW1 on the display to + * ON-ON-OFF (8 bit 8080 mode), and connect the following pins + * | Board Pin | Display Pin | Function | + * |-----------|-------------|----------| + * | HD2.8 | D0 | D[0] | + * | HD2.16 | D1 | D[1] | + * | J5.2 | TE | TE | + * | J5.4 | D2 | D[2] | + * | J5.1 | D3 | D[3] | + * | J5.6 | RD | RDX | + * | J5.3 | D4 | D[4] | + * | HD2.7 | D5 | D[5] | + * | HD2.6 | D6 | D[6] | + * | HD2.1 | D7 | D[7] | + * | HD2.2 | WR | WR | + * | HD8.1 | CS | CS | + * | HD8.2 | D/C | DC | + * | J13.8 | GND | GND | + * | J13.7 | VDD | 3V3 | + * | J5.10 | SCL | IC2_SCL | + * | J5.9 | SDA | IC2_SDA | + * | HD2.4 | INT | INT | + * | HD2.5 | RST | RESET | + */ + +/* Expand the LCDIC pinmux to cover all 8080 mode pins */ +&pinmux_lcdic { + group0 { + pinmux = , + , + , + , + , + , + , + , + , + , + , + , + , + ; + slew-rate = "ultra"; + }; +}; + +&st7796s { + mipi-mode = ; + /* + * Display supports minimum write cycle time of 66ns. This + * means we can clock the LCDIC module at 30MHz, as + * the minimum write duration will be 2x the module + * clock. Note that this frequency is too fast for reading + * from the display module + */ + mipi-max-frequency = <30000000>; + /* + * Note that this display is *not* buggy- we use rgb-is-inverted + * as a workaround here to get the display to report an inverted + * color format. This is because the "nxp,swap-bytes" setting + * on the LCDIC will apply byte swapping in hardware, so the + * display should report an inverted color format to account + * for this. This results in better performance for applications + * like LVGL, which would otherwise have to swap RGB565 data in + * software + */ + rgb-is-inverted; +}; + +&lcdic { + /* Enable byte swapping */ + nxp,swap-bytes; + /* Set pulse width for write active and write inactive to min value */ + nxp,write-active-cycles = <1>; + nxp,write-inactive-cycles = <1>; +};