boards: nxp: rd_rw612_bga: enable with LCD_PAR_S035 shield

Enable the rd_rw612_bga board with the LCD_PAR_S035 shield. This shield
cannot be connected directly to the board, but the connection can be
made with a set of jumper wires.

Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
This commit is contained in:
Daniel DeGrasse 2024-08-26 16:02:13 +00:00 committed by Fabio Baltieri
parent f8f70c2ac7
commit 404041621f
2 changed files with 122 additions and 1 deletions

View file

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

View file

@ -0,0 +1,95 @@
/*
* Copyright 2024 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>
/*
* 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 = <IO_MUX_LCD_8080_IO42>,
<IO_MUX_LCD_8080_IO43>,
<IO_MUX_LCD_8080_IO44>,
<IO_MUX_LCD_8080_IO45>,
<IO_MUX_LCD_8080_IO46>,
<IO_MUX_LCD_8080_IO47>,
<IO_MUX_LCD_8080_IO48>,
<IO_MUX_LCD_8080_IO49>,
<IO_MUX_LCD_8080_IO51>,
<IO_MUX_LCD_8080_IO52>,
<IO_MUX_LCD_8080_IO53>,
<IO_MUX_LCD_8080_IO54>,
<IO_MUX_LCD_8080_IO56>,
<IO_MUX_LCD_8080_IO57>;
slew-rate = "ultra";
};
};
&st7796s {
mipi-mode = <MIPI_DBI_MODE_8080_BUS_8_BIT>;
/*
* 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>;
};