drivers: display: ili9xxx: convert to MIPI DBI API
Convert ili9xxx display drivers to use MIPI DBI API. Due to the fact this change requires a new devicetree structure for the display driver to build, required devicetree changes are also included in this commit for all boards and shields defining an instance of an ili9xxx display. Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
This commit is contained in:
parent
571de47e16
commit
3dbbb73319
|
@ -107,6 +107,25 @@
|
|||
bbram0 = &extrtc0;
|
||||
spi-flash0 = &mx25r64;
|
||||
};
|
||||
|
||||
mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
reset-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
|
||||
dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
|
||||
spi-dev = <&spi2>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ili9340: ili9340@0 {
|
||||
compatible = "ilitek,ili9340";
|
||||
reg = <0>;
|
||||
mipi-max-frequency = <32000000>;
|
||||
rotation = <270>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&adc {
|
||||
|
@ -224,16 +243,6 @@
|
|||
pinctrl-0 = <&spi4_default>;
|
||||
pinctrl-1 = <&spi4_sleep>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
ili9340: ili9340@0 {
|
||||
compatible = "ilitek,ili9340";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <32000000>;
|
||||
reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
|
||||
cmd-data-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
|
||||
rotation = <270>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
|
|
|
@ -62,6 +62,43 @@
|
|||
invert-x;
|
||||
invert-y;
|
||||
};
|
||||
|
||||
mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
dc-gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
spi-dev = <&spi5>;
|
||||
|
||||
ili9341: ili9341@0 {
|
||||
compatible = "ilitek,ili9341";
|
||||
mipi-max-frequency = <5625000>;
|
||||
reg = <0>;
|
||||
width = <240>;
|
||||
height = <320>;
|
||||
rotation = <180>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB565>;
|
||||
pwctrla = [39 2c 00 34 02];
|
||||
pwctrlb = [00 c1 30];
|
||||
timctrla = [85 00 78];
|
||||
timctrlb = [00 00];
|
||||
pwseqctrl = [64 03 12 81];
|
||||
pumpratioctrl = [20];
|
||||
disctrl = [08 82 27 04];
|
||||
vmctrl1 = [45 15];
|
||||
vmctrl2 = [90];
|
||||
enable3g = [00];
|
||||
ifctl = [01 00 06];
|
||||
ifmode = [c2];
|
||||
gamset = [01];
|
||||
frmctr1 = [00 1b];
|
||||
pwctrl1 = [10];
|
||||
pwctrl2 = [10];
|
||||
pgamctrl = [0F 29 24 0c 0e 09 4e 78 3c 09 13 05 17 11 00];
|
||||
ngamctrl = [00 16 1b 04 11 07 31 33 42 05 0c 0a 28 2f 0f];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&clk_lsi {
|
||||
|
@ -147,34 +184,6 @@
|
|||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
cs-gpios = <&gpioc 2 GPIO_ACTIVE_LOW>;
|
||||
ili9341: ili9341@0 {
|
||||
compatible = "ilitek,ili9341";
|
||||
spi-max-frequency = <5625000>;
|
||||
reg = <0>;
|
||||
cmd-data-gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;
|
||||
width = <240>;
|
||||
height = <320>;
|
||||
rotation = <180>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB565>;
|
||||
pwctrla = [39 2c 00 34 02];
|
||||
pwctrlb = [00 c1 30];
|
||||
timctrla = [85 00 78];
|
||||
timctrlb = [00 00];
|
||||
pwseqctrl = [64 03 12 81];
|
||||
pumpratioctrl = [20];
|
||||
disctrl = [08 82 27 04];
|
||||
vmctrl1 = [45 15];
|
||||
vmctrl2 = [90];
|
||||
enable3g = [00];
|
||||
ifctl = [01 00 06];
|
||||
ifmode = [c2];
|
||||
gamset = [01];
|
||||
frmctr1 = [00 1b];
|
||||
pwctrl1 = [10];
|
||||
pwctrl2 = [10];
|
||||
pgamctrl = [0F 29 24 0c 0e 09 4e 78 3c 09 13 05 17 11 00];
|
||||
ngamctrl = [00 16 1b 04 11 07 31 33 42 05 0c 0a 28 2f 0f];
|
||||
};
|
||||
};
|
||||
|
||||
&fmc {
|
||||
|
|
|
@ -123,6 +123,27 @@
|
|||
regulator-name = "usb_power_5v_en";
|
||||
enable-gpios = <&porta 27 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
/* LCD */
|
||||
mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
dc-gpios = <&portc 6 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&portc 7 GPIO_ACTIVE_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
spi-dev = <&sercom7>;
|
||||
write-only;
|
||||
|
||||
ili9341: ili9341@0 {
|
||||
compatible = "ilitek,ili9341";
|
||||
mipi-max-frequency = <24000000>;
|
||||
reg = <0>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB565>;
|
||||
rotation = <270>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0 {
|
||||
|
@ -271,19 +292,6 @@
|
|||
pinctrl-0 = <&sercom7_spi_default>;
|
||||
pinctrl-names = "default";
|
||||
cs-gpios = <&portb 21 GPIO_ACTIVE_LOW>;
|
||||
|
||||
/* LCD */
|
||||
ili9341: ili9341@0 {
|
||||
compatible = "ilitek,ili9341";
|
||||
spi-max-frequency = <24000000>;
|
||||
reg = <0>;
|
||||
cmd-data-gpios = <&portc 6 GPIO_ACTIVE_LOW>;
|
||||
reset-gpios = <&portc 7 GPIO_ACTIVE_LOW>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB565>;
|
||||
rotation = <270>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
};
|
||||
};
|
||||
|
||||
/* USB */
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
/ {
|
||||
chosen {
|
||||
zephyr,display = &ili9340;
|
||||
zephyr,display = &adafruit_2_8_tft_touch_v2_ili9340;
|
||||
};
|
||||
|
||||
lvgl_pointer {
|
||||
|
@ -18,6 +18,31 @@
|
|||
invert-x;
|
||||
invert-y;
|
||||
};
|
||||
|
||||
adafruit_2_8_tft_touch_v2_mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
spi-dev = <&arduino_spi>;
|
||||
dc-gpios = <&arduino_header 15 GPIO_ACTIVE_HIGH>; /* D9 */
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
adafruit_2_8_tft_touch_v2_ili9340: ili9340@0 {
|
||||
compatible = "ilitek,ili9340";
|
||||
mipi-max-frequency = <15151515>;
|
||||
reg = <0>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB888>;
|
||||
rotation = <90>;
|
||||
frmctr1 = [00 18];
|
||||
pwctrl1 = [23 00];
|
||||
vmctrl1 = [3e 28];
|
||||
vmctrl2 = [86];
|
||||
pgamctrl = [0f 31 2b 0c 0e 08 4e f1 37 07 10 03 0e 09 00];
|
||||
ngamctrl = [00 0e 14 03 11 07 31 c1 48 08 0f 0c 31 36 0f];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&arduino_spi {
|
||||
|
@ -25,24 +50,6 @@
|
|||
cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>, /* D10 */
|
||||
<&arduino_header 10 GPIO_ACTIVE_LOW>; /* D04 */
|
||||
|
||||
|
||||
ili9340: ili9340@0 {
|
||||
compatible = "ilitek,ili9340";
|
||||
spi-max-frequency = <15151515>;
|
||||
reg = <0>;
|
||||
cmd-data-gpios = <&arduino_header 15 GPIO_ACTIVE_LOW>; /* D9 */
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB888>;
|
||||
rotation = <90>;
|
||||
frmctr1 = [00 18];
|
||||
pwctrl1 = [23 00];
|
||||
vmctrl1 = [3e 28];
|
||||
vmctrl2 = [86];
|
||||
pgamctrl = [0f 31 2b 0c 0e 08 4e f1 37 07 10 03 0e 09 00];
|
||||
ngamctrl = [00 0e 14 03 11 07 31 c1 48 08 0f 0c 31 36 0f];
|
||||
};
|
||||
|
||||
adafruit_2_8_tft_touch_v2_sdhc: sdhc@1 {
|
||||
compatible = "zephyr,sdhc-spi-slot";
|
||||
reg = <1>;
|
||||
|
|
|
@ -18,29 +18,37 @@
|
|||
invert-x;
|
||||
invert-y;
|
||||
};
|
||||
|
||||
buydisplay_2_8_tft_touch_arduino_mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
dc-gpios = <&arduino_header 13 GPIO_ACTIVE_HIGH>; /* D7 */
|
||||
reset-gpios = <&arduino_header 16 GPIO_ACTIVE_HIGH>; /* D10 */
|
||||
spi-dev = <&arduino_spi>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ili9340_buydisplay_2_8_tft_touch_arduino: ili9340@0 {
|
||||
compatible = "ilitek,ili9340";
|
||||
mipi-max-frequency = <25000000>;
|
||||
reg = <0>;
|
||||
width = <240>;
|
||||
height = <320>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB565>;
|
||||
rotation = <0>;
|
||||
frmctr1 = [00 18];
|
||||
pwctrl1 = [23 00];
|
||||
vmctrl1 = [3e 28];
|
||||
vmctrl2 = [86];
|
||||
pgamctrl = [0f 31 2b 0c 0e 08 4e f1 37 07 10 03 0e 09 00];
|
||||
ngamctrl = [00 0e 14 03 11 07 31 c1 48 08 0f 0c 31 36 0f];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&arduino_spi {
|
||||
status = "okay";
|
||||
cs-gpios = <&arduino_header 15 GPIO_ACTIVE_LOW>; /* D9 */
|
||||
|
||||
ili9340_buydisplay_2_8_tft_touch_arduino: ili9340@0 {
|
||||
compatible = "ilitek,ili9340";
|
||||
spi-max-frequency = <25000000>;
|
||||
reg = <0>;
|
||||
cmd-data-gpios = <&arduino_header 13 GPIO_ACTIVE_LOW>; /* D7 */
|
||||
reset-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
|
||||
width = <240>;
|
||||
height = <320>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB565>;
|
||||
rotation = <0>;
|
||||
frmctr1 = [00 18];
|
||||
pwctrl1 = [23 00];
|
||||
vmctrl1 = [3e 28];
|
||||
vmctrl2 = [86];
|
||||
pgamctrl = [0f 31 2b 0c 0e 08 4e f1 37 07 10 03 0e 09 00];
|
||||
ngamctrl = [00 0e 14 03 11 07 31 c1 48 08 0f 0c 31 36 0f];
|
||||
};
|
||||
};
|
||||
|
||||
&arduino_i2c {
|
||||
|
|
|
@ -18,28 +18,36 @@
|
|||
invert-x;
|
||||
invert-y;
|
||||
};
|
||||
|
||||
buydisplay_3_5_tft_touch_arduino_mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
dc-gpios = <&arduino_header 13 GPIO_ACTIVE_HIGH>; /* D7 */
|
||||
reset-gpios = <&arduino_header 16 GPIO_ACTIVE_HIGH>; /* D10 */
|
||||
spi-dev = <&arduino_spi>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ili9488_buydisplay_3_5_tft_touch_arduino: ili9488@0 {
|
||||
compatible = "ilitek,ili9488";
|
||||
mipi-max-frequency = <25000000>;
|
||||
reg = <0>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB888>;
|
||||
width = <320>;
|
||||
height = <480>;
|
||||
rotation = <0>;
|
||||
frmctr1 = [a0 11];
|
||||
pwctrl1 = [17 15];
|
||||
pwctrl2 = [41];
|
||||
pgamctrl = [00 03 09 08 16 0a 3f 78 4c 09 0a 08 16 1a 0f];
|
||||
ngamctrl = [00 16 19 03 0f 05 32 45 46 04 0e 0d 35 37 0f];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&arduino_spi {
|
||||
status = "okay";
|
||||
cs-gpios = <&arduino_header 15 GPIO_ACTIVE_LOW>; /* D9 */
|
||||
|
||||
ili9488_buydisplay_3_5_tft_touch_arduino: ili9488@0 {
|
||||
compatible = "ilitek,ili9488";
|
||||
spi-max-frequency = <25000000>;
|
||||
reg = <0>;
|
||||
cmd-data-gpios = <&arduino_header 13 GPIO_ACTIVE_LOW>; /* D7 */
|
||||
reset-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB888>;
|
||||
width = <320>;
|
||||
height = <480>;
|
||||
rotation = <0>;
|
||||
frmctr1 = [a0 11];
|
||||
pwctrl1 = [17 15];
|
||||
pwctrl2 = [41];
|
||||
pgamctrl = [00 03 09 08 16 0a 3f 78 4c 09 0a 08 16 1a 0f];
|
||||
ngamctrl = [00 16 19 03 0f 05 32 45 46 04 0e 0d 35 37 0f];
|
||||
};
|
||||
};
|
||||
|
||||
&arduino_i2c {
|
||||
|
|
|
@ -70,6 +70,26 @@
|
|||
pwms = <&ledc0 2 PWM_HZ(100) PWM_POLARITY_NORMAL>;
|
||||
};
|
||||
};
|
||||
|
||||
mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
dc-gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>;
|
||||
spi-dev = <&spi3>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ili9341: ili9341@0 {
|
||||
compatible = "ilitek,ili9341";
|
||||
mipi-max-frequency = <25000000>;
|
||||
reg = <0>;
|
||||
pixel-format = <0>;
|
||||
rotation = <0>;
|
||||
width = <240>;
|
||||
height = <320>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0 {
|
||||
|
@ -125,18 +145,6 @@
|
|||
status = "okay";
|
||||
pinctrl-0 = <&spim3_default>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
ili9341: ili9341@0 {
|
||||
compatible = "ilitek,ili9341";
|
||||
spi-max-frequency = <25000000>;
|
||||
reg = <0>;
|
||||
cmd-data-gpios = <&gpio0 21 GPIO_ACTIVE_LOW>;
|
||||
reset-gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
|
||||
pixel-format = <0>;
|
||||
rotation = <0>;
|
||||
width = <240>;
|
||||
height = <320>;
|
||||
};
|
||||
};
|
||||
|
||||
&ledc0 {
|
||||
|
|
|
@ -41,4 +41,13 @@ config INPUT
|
|||
config LV_COLOR_16_SWAP
|
||||
default y if LVGL
|
||||
|
||||
# Increase initialization priority of MIPI DBI device, so that it initializes
|
||||
# after the GPIO controller
|
||||
if MIPI_DBI
|
||||
|
||||
config MIPI_DBI_INIT_PRIORITY
|
||||
default 82
|
||||
|
||||
endif # MIPI_DBI
|
||||
|
||||
endif # BOARD_M5STACK_CORE2
|
||||
|
|
|
@ -48,6 +48,28 @@
|
|||
input = <&ft5336_touch>;
|
||||
swap-xy;
|
||||
};
|
||||
|
||||
mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
dc-gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&axp192_gpio 4 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_HIGH)>;
|
||||
spi-dev = <&spi3>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ili9342c: ili9342c@0 {
|
||||
compatible = "ilitek,ili9342c";
|
||||
mipi-max-frequency = <30000000>;
|
||||
reg = <0>;
|
||||
vin-supply = <&lcd_bg>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB565>;
|
||||
display-inversion;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
rotation = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0 {
|
||||
|
@ -186,21 +208,6 @@
|
|||
cs-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>,
|
||||
<&gpio0 4 GPIO_ACTIVE_LOW>;
|
||||
|
||||
ili9342c: ili9342c@0 {
|
||||
compatible = "ilitek,ili9342c";
|
||||
status = "okay";
|
||||
spi-max-frequency = <30000000>;
|
||||
reg = <0>;
|
||||
cmd-data-gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
|
||||
vin-supply = <&lcd_bg>;
|
||||
reset-gpios = <&axp192_gpio 4 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW)>;
|
||||
pixel-format = <ILI9XXX_PIXEL_FORMAT_RGB565>;
|
||||
display-inversion;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
rotation = <0>;
|
||||
};
|
||||
|
||||
sdhc0: sdhc@1 {
|
||||
compatible = "zephyr,sdhc-spi-slot";
|
||||
reg = <1>;
|
||||
|
|
|
@ -77,6 +77,25 @@
|
|||
sw0 = &menu_button;
|
||||
watchdog0 = &wdt0;
|
||||
};
|
||||
|
||||
mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
dc-gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>;
|
||||
spi-dev = <&spi3>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ili9341: ili9341@0 {
|
||||
compatible = "ilitek,ili9341";
|
||||
mipi-max-frequency = <25000000>;
|
||||
pixel-format = <0>;
|
||||
reg = <0>;
|
||||
rotation = <270>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0 {
|
||||
|
@ -124,17 +143,6 @@
|
|||
pinctrl-0 = <&spim3_default>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
ili9341: ili9341@0 {
|
||||
compatible = "ilitek,ili9341";
|
||||
spi-max-frequency = <25000000>;
|
||||
reg = <0>;
|
||||
cmd-data-gpios = <&gpio0 21 GPIO_ACTIVE_LOW>;
|
||||
pixel-format = <0>;
|
||||
rotation = <270>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
};
|
||||
|
||||
sdhc0: sdhc@1 {
|
||||
compatible = "zephyr,sdhc-spi-slot";
|
||||
reg = <1>;
|
||||
|
|
|
@ -14,7 +14,7 @@ config ILI9340
|
|||
bool "ILI9340 display driver"
|
||||
default y
|
||||
depends on DT_HAS_ILITEK_ILI9340_ENABLED
|
||||
select SPI
|
||||
select MIPI_DBI
|
||||
select ILI9XXX
|
||||
help
|
||||
Enable driver for ILI9340 display driver.
|
||||
|
@ -23,7 +23,7 @@ config ILI9341
|
|||
bool "ILI9341 display driver"
|
||||
default y
|
||||
depends on DT_HAS_ILITEK_ILI9341_ENABLED
|
||||
select SPI
|
||||
select MIPI_DBI
|
||||
select ILI9XXX
|
||||
help
|
||||
Enable driver for ILI9341 display driver.
|
||||
|
@ -32,7 +32,7 @@ config ILI9342C
|
|||
bool "ILI9342C display driver"
|
||||
default y
|
||||
depends on DT_HAS_ILITEK_ILI9342C_ENABLED
|
||||
select SPI
|
||||
select MIPI_DBI
|
||||
select ILI9XXX
|
||||
help
|
||||
Enable driver for ILI9342C display driver.
|
||||
|
@ -41,7 +41,7 @@ config ILI9488
|
|||
bool "ILI9488 display driver"
|
||||
default y
|
||||
depends on DT_HAS_ILITEK_ILI9488_ENABLED
|
||||
select SPI
|
||||
select MIPI_DBI
|
||||
select ILI9XXX
|
||||
help
|
||||
Enable driver for ILI9488 display driver.
|
||||
|
|
|
@ -26,33 +26,8 @@ int ili9xxx_transmit(const struct device *dev, uint8_t cmd, const void *tx_data,
|
|||
{
|
||||
const struct ili9xxx_config *config = dev->config;
|
||||
|
||||
int r;
|
||||
struct spi_buf tx_buf;
|
||||
struct spi_buf_set tx_bufs = { .buffers = &tx_buf, .count = 1U };
|
||||
|
||||
/* send command */
|
||||
tx_buf.buf = &cmd;
|
||||
tx_buf.len = 1U;
|
||||
|
||||
gpio_pin_set_dt(&config->cmd_data, ILI9XXX_CMD);
|
||||
r = spi_write_dt(&config->spi, &tx_bufs);
|
||||
if (r < 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
/* send data (if any) */
|
||||
if (tx_data != NULL) {
|
||||
tx_buf.buf = (void *)tx_data;
|
||||
tx_buf.len = tx_len;
|
||||
|
||||
gpio_pin_set_dt(&config->cmd_data, ILI9XXX_DATA);
|
||||
r = spi_write_dt(&config->spi, &tx_bufs);
|
||||
if (r < 0) {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return mipi_dbi_command_write(config->mipi_dev, &config->dbi_config,
|
||||
cmd, tx_data, tx_len);
|
||||
}
|
||||
|
||||
static int ili9xxx_exit_sleep(const struct device *dev)
|
||||
|
@ -73,14 +48,7 @@ static void ili9xxx_hw_reset(const struct device *dev)
|
|||
{
|
||||
const struct ili9xxx_config *config = dev->config;
|
||||
|
||||
if (config->reset.port == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_pin_set_dt(&config->reset, 1);
|
||||
k_sleep(K_MSEC(ILI9XXX_RESET_PULSE_TIME));
|
||||
gpio_pin_set_dt(&config->reset, 0);
|
||||
|
||||
mipi_dbi_reset(config->mipi_dev, ILI9XXX_RESET_PULSE_TIME);
|
||||
k_sleep(K_MSEC(ILI9XXX_RESET_WAIT_TIME));
|
||||
}
|
||||
|
||||
|
@ -115,11 +83,10 @@ static int ili9xxx_write(const struct device *dev, const uint16_t x,
|
|||
{
|
||||
const struct ili9xxx_config *config = dev->config;
|
||||
struct ili9xxx_data *data = dev->data;
|
||||
struct display_buffer_descriptor mipi_desc;
|
||||
|
||||
int r;
|
||||
const uint8_t *write_data_start = (const uint8_t *)buf;
|
||||
struct spi_buf tx_buf;
|
||||
struct spi_buf_set tx_bufs;
|
||||
uint16_t write_cnt;
|
||||
uint16_t nbr_of_writes;
|
||||
uint16_t write_h;
|
||||
|
@ -139,26 +106,31 @@ static int ili9xxx_write(const struct device *dev, const uint16_t x,
|
|||
if (desc->pitch > desc->width) {
|
||||
write_h = 1U;
|
||||
nbr_of_writes = desc->height;
|
||||
mipi_desc.height = 1;
|
||||
mipi_desc.buf_size = desc->pitch * data->bytes_per_pixel;
|
||||
} else {
|
||||
write_h = desc->height;
|
||||
mipi_desc.height = desc->height;
|
||||
mipi_desc.buf_size = desc->buf_size;
|
||||
nbr_of_writes = 1U;
|
||||
}
|
||||
|
||||
r = ili9xxx_transmit(dev, ILI9XXX_RAMWR, write_data_start,
|
||||
desc->width * data->bytes_per_pixel * write_h);
|
||||
mipi_desc.width = desc->width;
|
||||
mipi_desc.height = desc->height;
|
||||
/* Per MIPI API, pitch must always match width */
|
||||
mipi_desc.pitch = desc->width;
|
||||
|
||||
r = ili9xxx_transmit(dev, ILI9XXX_RAMWR, NULL, 0);
|
||||
if (r < 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
tx_bufs.buffers = &tx_buf;
|
||||
tx_bufs.count = 1;
|
||||
|
||||
write_data_start += desc->pitch * data->bytes_per_pixel;
|
||||
for (write_cnt = 1U; write_cnt < nbr_of_writes; ++write_cnt) {
|
||||
tx_buf.buf = (void *)write_data_start;
|
||||
tx_buf.len = desc->width * data->bytes_per_pixel * write_h;
|
||||
|
||||
r = spi_write_dt(&config->spi, &tx_bufs);
|
||||
for (write_cnt = 0U; write_cnt < nbr_of_writes; ++write_cnt) {
|
||||
r = mipi_dbi_write_display(config->mipi_dev,
|
||||
&config->dbi_config,
|
||||
write_data_start,
|
||||
&mipi_desc,
|
||||
data->pixel_format);
|
||||
if (r < 0) {
|
||||
return r;
|
||||
}
|
||||
|
@ -363,35 +335,11 @@ static int ili9xxx_init(const struct device *dev)
|
|||
|
||||
int r;
|
||||
|
||||
if (!spi_is_ready_dt(&config->spi)) {
|
||||
LOG_ERR("SPI device is not ready");
|
||||
if (!device_is_ready(config->mipi_dev)) {
|
||||
LOG_ERR("MIPI DBI device is not ready");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!gpio_is_ready_dt(&config->cmd_data)) {
|
||||
LOG_ERR("Command/Data GPIO device not ready");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
r = gpio_pin_configure_dt(&config->cmd_data, GPIO_OUTPUT);
|
||||
if (r < 0) {
|
||||
LOG_ERR("Could not configure command/data GPIO (%d)", r);
|
||||
return r;
|
||||
}
|
||||
|
||||
if (config->reset.port != NULL) {
|
||||
if (!gpio_is_ready_dt(&config->reset)) {
|
||||
LOG_ERR("Reset GPIO device not ready");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
r = gpio_pin_configure_dt(&config->reset, GPIO_OUTPUT_INACTIVE);
|
||||
if (r < 0) {
|
||||
LOG_ERR("Could not configure reset GPIO (%d)", r);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
ili9xxx_hw_reset(dev);
|
||||
|
||||
r = ili9xxx_transmit(dev, ILI9XXX_SWRESET, NULL, 0);
|
||||
|
@ -463,13 +411,15 @@ static const struct ili9xxx_quirks ili9488_quirks = {
|
|||
\
|
||||
static const struct ili9xxx_config ili9xxx_config_##n = { \
|
||||
.quirks = &ili##t##_quirks, \
|
||||
.spi = SPI_DT_SPEC_GET(INST_DT_ILI9XXX(n, t), \
|
||||
SPI_OP_MODE_MASTER | SPI_WORD_SET(8), \
|
||||
0), \
|
||||
.cmd_data = GPIO_DT_SPEC_GET(INST_DT_ILI9XXX(n, t), \
|
||||
cmd_data_gpios), \
|
||||
.reset = GPIO_DT_SPEC_GET_OR(INST_DT_ILI9XXX(n, t), \
|
||||
reset_gpios, {0}), \
|
||||
.mipi_dev = DEVICE_DT_GET(DT_PARENT(INST_DT_ILI9XXX(n, t))), \
|
||||
.dbi_config = { \
|
||||
.mode = MIPI_DBI_MODE_SPI_4WIRE, \
|
||||
.config = MIPI_DBI_SPI_CONFIG_DT( \
|
||||
INST_DT_ILI9XXX(n, t), \
|
||||
SPI_OP_MODE_MASTER | \
|
||||
SPI_WORD_SET(8), \
|
||||
0), \
|
||||
}, \
|
||||
.pixel_format = DT_PROP(INST_DT_ILI9XXX(n, t), pixel_format), \
|
||||
.rotation = DT_PROP(INST_DT_ILI9XXX(n, t), rotation), \
|
||||
.x_resolution = ILI##t##_X_RES, \
|
||||
|
|
|
@ -9,8 +9,7 @@
|
|||
#ifndef ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9XXX_H_
|
||||
#define ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9XXX_H_
|
||||
|
||||
#include <zephyr/drivers/gpio.h>
|
||||
#include <zephyr/drivers/spi.h>
|
||||
#include <zephyr/drivers/mipi_dbi.h>
|
||||
#include <zephyr/sys/util.h>
|
||||
|
||||
/* Commands/registers. */
|
||||
|
@ -65,10 +64,8 @@ struct ili9xxx_quirks {
|
|||
|
||||
struct ili9xxx_config {
|
||||
const struct ili9xxx_quirks *quirks;
|
||||
|
||||
struct spi_dt_spec spi;
|
||||
struct gpio_dt_spec cmd_data;
|
||||
struct gpio_dt_spec reset;
|
||||
const struct device *mipi_dev;
|
||||
struct mipi_dbi_config dbi_config;
|
||||
uint8_t pixel_format;
|
||||
uint16_t rotation;
|
||||
uint16_t x_resolution;
|
||||
|
|
|
@ -4,26 +4,9 @@
|
|||
|
||||
description: ILI9XXX display controllers common properties.
|
||||
|
||||
include: [spi-device.yaml, display-controller.yaml]
|
||||
include: [mipi-dbi-spi-device.yaml, display-controller.yaml]
|
||||
|
||||
properties:
|
||||
reset-gpios:
|
||||
type: phandle-array
|
||||
description: RESET pin.
|
||||
|
||||
The RESET pin of ILI9340 is active low.
|
||||
If connected directly the MCU pin should be configured
|
||||
as active low.
|
||||
|
||||
cmd-data-gpios:
|
||||
type: phandle-array
|
||||
required: true
|
||||
description: D/CX pin.
|
||||
|
||||
The D/CX pin of ILI9340 is active low (transmission command byte).
|
||||
If connected directly the MCU pin should be configured
|
||||
as active low.
|
||||
|
||||
pixel-format:
|
||||
type: int
|
||||
default: 0
|
||||
|
|
|
@ -23,6 +23,26 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
test_mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
status = "okay";
|
||||
dc-gpios = <&test_gpio 0 0>;
|
||||
spi-dev = <&test_spi>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
test_mipi_dbi_ili9342c: ili9342c@0 {
|
||||
compatible = "ilitek,ili9342c";
|
||||
reg = <0>;
|
||||
mipi-max-frequency = <25000000>;
|
||||
pixel-format = <0>;
|
||||
rotation = <270>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
test_spi: spi@33334444 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -34,17 +54,6 @@
|
|||
/* one entry for every devices at spi.dtsi */
|
||||
cs-gpios = <&test_gpio 0 0>;
|
||||
|
||||
test_spi_ili9342c: ili9342c@0 {
|
||||
compatible = "ilitek,ili9342c";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <25000000>;
|
||||
cmd-data-gpios = <&test_gpio 0 0>;
|
||||
pixel-format = <0>;
|
||||
rotation = <270>;
|
||||
width = <320>;
|
||||
height = <240>;
|
||||
};
|
||||
|
||||
test_spi_gc9x01x: gc9x01x@1 {
|
||||
compatible = "galaxycore,gc9x01x";
|
||||
reg = <1>;
|
||||
|
|
Loading…
Reference in a new issue