This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 487008433 lvgl: Add support for 16 bit 8080 MIPI DSI
487008433 is described below

commit 487008433d290f29221afed3650d8552c9ccd0e0
Author: Jerzy Kasenberg <[email protected]>
AuthorDate: Thu Jun 15 12:49:15 2023 +0200

    lvgl: Add support for 16 bit 8080 MIPI DSI
    
    This adds support for 16 bit data bus for LCD.
    Default implementation uses hal_gpio to send data.
    
    Signed-off-by: Jerzy Kasenberg <[email protected]>
---
 hw/drivers/display/lcd_itf/itf_8080/src/itf_8080.c | 51 +++++++++++++++++++++-
 hw/drivers/display/lcd_itf/itf_8080/syscfg.yml     | 24 ++++++++++
 hw/drivers/display/lcd_itf/pkg.yml                 |  2 +
 hw/drivers/display/lcd_itf/syscfg.yml              |  1 +
 4 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/hw/drivers/display/lcd_itf/itf_8080/src/itf_8080.c 
b/hw/drivers/display/lcd_itf/itf_8080/src/itf_8080.c
index a1a503b66..2df025c6b 100644
--- a/hw/drivers/display/lcd_itf/itf_8080/src/itf_8080.c
+++ b/hw/drivers/display/lcd_itf/itf_8080/src/itf_8080.c
@@ -44,6 +44,44 @@ lcd_itf_8080_write_byte(uint8_t b)
 }
 #endif
 
+#ifndef LCD_ITF_8080_WRITE_WORD
+
+#if MYNEWT_VAL_CHOICE(LCD_ITF, 8080_II_8_bit)
+
+#define LCD_ITF_8080_WRITE_WORD(w) do {         \
+        LCD_ITF_8080_WRITE_BYTE(w >> 8);        \
+        LCD_ITF_8080_WRITE_BYTE((uint8_t)w);    \
+} while (0)
+
+#else
+
+#define LCD_ITF_8080_WRITE_WORD(n) lcd_itf_8080_write_word(n)
+
+void
+lcd_itf_8080_write_word(uint16_t w)
+{
+    hal_gpio_write(MYNEWT_VAL(LCD_D0_PIN), PIN(w, 0));
+    hal_gpio_write(MYNEWT_VAL(LCD_D1_PIN), PIN(w, 1));
+    hal_gpio_write(MYNEWT_VAL(LCD_D2_PIN), PIN(w, 2));
+    hal_gpio_write(MYNEWT_VAL(LCD_D3_PIN), PIN(w, 3));
+    hal_gpio_write(MYNEWT_VAL(LCD_D4_PIN), PIN(w, 4));
+    hal_gpio_write(MYNEWT_VAL(LCD_D5_PIN), PIN(w, 5));
+    hal_gpio_write(MYNEWT_VAL(LCD_D6_PIN), PIN(w, 6));
+    hal_gpio_write(MYNEWT_VAL(LCD_D7_PIN), PIN(w, 7));
+    hal_gpio_write(MYNEWT_VAL(LCD_D8_PIN), PIN(w, 8));
+    hal_gpio_write(MYNEWT_VAL(LCD_D9_PIN), PIN(w, 9));
+    hal_gpio_write(MYNEWT_VAL(LCD_D10_PIN), PIN(w, 10));
+    hal_gpio_write(MYNEWT_VAL(LCD_D11_PIN), PIN(w, 11));
+    hal_gpio_write(MYNEWT_VAL(LCD_D12_PIN), PIN(w, 12));
+    hal_gpio_write(MYNEWT_VAL(LCD_D13_PIN), PIN(w, 13));
+    hal_gpio_write(MYNEWT_VAL(LCD_D14_PIN), PIN(w, 14));
+    hal_gpio_write(MYNEWT_VAL(LCD_D15_PIN), PIN(w, 15));
+    hal_gpio_write(MYNEWT_VAL(LCD_WR_PIN), 0);
+    hal_gpio_write(MYNEWT_VAL(LCD_WR_PIN), 1);
+}
+#endif
+#endif
+
 void
 lcd_itf_write_bytes(const uint8_t *bytes, size_t size)
 {
@@ -61,8 +99,7 @@ lcd_itf_write_color_data(const void *pixels, size_t size)
     LCD_CS_PIN_ACTIVE();
     if (LV_COLOR_16_SWAP == 0) {
         for (size_t i = 0; i < size; i += 2, data++) {
-            LCD_ITF_8080_WRITE_BYTE(*data >> 8);
-            LCD_ITF_8080_WRITE_BYTE((uint8_t)*data);
+            LCD_ITF_8080_WRITE_WORD(*data);
         }
     } else {
         lcd_itf_write_bytes((const uint8_t *)pixels, size);
@@ -107,4 +144,14 @@ lcd_itf_init(void)
     hal_gpio_init_out(MYNEWT_VAL(LCD_D5_PIN), 0);
     hal_gpio_init_out(MYNEWT_VAL(LCD_D6_PIN), 0);
     hal_gpio_init_out(MYNEWT_VAL(LCD_D7_PIN), 0);
+#if MYNEWT_VAL_CHOICE(LCD_ITF, 8080_II_16_bit)
+    hal_gpio_init_out(MYNEWT_VAL(LCD_D8_PIN), 0);
+    hal_gpio_init_out(MYNEWT_VAL(LCD_D9_PIN), 0);
+    hal_gpio_init_out(MYNEWT_VAL(LCD_D10_PIN), 0);
+    hal_gpio_init_out(MYNEWT_VAL(LCD_D11_PIN), 0);
+    hal_gpio_init_out(MYNEWT_VAL(LCD_D12_PIN), 0);
+    hal_gpio_init_out(MYNEWT_VAL(LCD_D13_PIN), 0);
+    hal_gpio_init_out(MYNEWT_VAL(LCD_D14_PIN), 0);
+    hal_gpio_init_out(MYNEWT_VAL(LCD_D15_PIN), 0);
+#endif
 }
diff --git a/hw/drivers/display/lcd_itf/itf_8080/syscfg.yml 
b/hw/drivers/display/lcd_itf/itf_8080/syscfg.yml
index 51d73807b..115b22ecc 100644
--- a/hw/drivers/display/lcd_itf/itf_8080/syscfg.yml
+++ b/hw/drivers/display/lcd_itf/itf_8080/syscfg.yml
@@ -49,6 +49,30 @@ syscfg.defs:
         description: D7 pin for LCD.
         value:
         restrictions: $notnull
+    LCD_D8_PIN:
+        description: D8 pin for LCD.
+        value:
+    LCD_D9_PIN:
+        description: D9 pin for LCD.
+        value:
+    LCD_D10_PIN:
+        description: D10 pin for LCD.
+        value:
+    LCD_D11_PIN:
+        description: D11 pin for LCD.
+        value:
+    LCD_D12_PIN:
+        description: D12 pin for LCD.
+        value:
+    LCD_D13_PIN:
+        description: D13 pin for LCD.
+        value:
+    LCD_D14_PIN:
+        description: D14 pin for LCD.
+        value:
+    LCD_D15_PIN:
+        description: D15 pin for LCD.
+        value:
     LCD_WR_PIN:
         description: WR pin for LCD.
         value:
diff --git a/hw/drivers/display/lcd_itf/pkg.yml 
b/hw/drivers/display/lcd_itf/pkg.yml
index 58db2b9e6..006dd9b2b 100644
--- a/hw/drivers/display/lcd_itf/pkg.yml
+++ b/hw/drivers/display/lcd_itf/pkg.yml
@@ -30,4 +30,6 @@ pkg.deps.'LCD_ITF == "spi"':
     - "@apache-mynewt-core/hw/drivers/display/lcd_itf/itf_spi"
 pkg.deps.'LCD_ITF == "8080_II_8_bit"':
     - "@apache-mynewt-core/hw/drivers/display/lcd_itf/itf_8080"
+pkg.deps.'LCD_ITF == "8080_II_16_bit"':
+    - "@apache-mynewt-core/hw/drivers/display/lcd_itf/itf_8080"
 
diff --git a/hw/drivers/display/lcd_itf/syscfg.yml 
b/hw/drivers/display/lcd_itf/syscfg.yml
index cab3c7263..0705c716e 100644
--- a/hw/drivers/display/lcd_itf/syscfg.yml
+++ b/hw/drivers/display/lcd_itf/syscfg.yml
@@ -24,6 +24,7 @@ syscfg.defs:
             - custom
             - spi
             - 8080_II_8_bit
+            - 8080_II_16_bit
         value: spi
     LCD_CS_PIN:
         description: LCD chip select pin for SPI.

Reply via email to