From fa2a5f841dd91d8dfef7c4723fc328945b74891c Mon Sep 17 00:00:00 2001 From: Vilem Zavodny Date: Wed, 10 Apr 2024 16:18:38 +0200 Subject: [PATCH] lt8912b: HDMI support. --- LCD.md | 1 + bsp/esp32_p4_function_ev_board/Kconfig | 23 +- bsp/esp32_p4_function_ev_board/README.md | 13 +- .../esp32_p4_function_ev_board.c | 119 ++- .../idf_component.yml | 6 +- .../include/bsp/display.h | 31 + components/lcd/esp_lcd_lt8912b/CMakeLists.txt | 4 + components/lcd/esp_lcd_lt8912b/README.md | 24 + .../lcd/esp_lcd_lt8912b/esp_lcd_lt8912b.c | 711 ++++++++++++++++++ .../lcd/esp_lcd_lt8912b/idf_component.yml | 7 + .../esp_lcd_lt8912b/include/esp_lcd_lt8912b.h | 402 ++++++++++ components/lcd/esp_lcd_lt8912b/license.txt | 201 +++++ docu/pics/Lontium.webp | Bin 0 -> 168532 bytes 13 files changed, 1529 insertions(+), 13 deletions(-) create mode 100644 components/lcd/esp_lcd_lt8912b/CMakeLists.txt create mode 100644 components/lcd/esp_lcd_lt8912b/README.md create mode 100644 components/lcd/esp_lcd_lt8912b/esp_lcd_lt8912b.c create mode 100644 components/lcd/esp_lcd_lt8912b/idf_component.yml create mode 100644 components/lcd/esp_lcd_lt8912b/include/esp_lcd_lt8912b.h create mode 100644 components/lcd/esp_lcd_lt8912b/license.txt create mode 100644 docu/pics/Lontium.webp diff --git a/LCD.md b/LCD.md index 60db4549..dea816b4 100644 --- a/LCD.md +++ b/LCD.md @@ -20,3 +20,4 @@ The list of available LCD displays and links to LCD driver component and touch d | | Parallel/SPI | ST7796 | [Component Manager](https://components.espressif.com/component/espressif/esp_lcd_st7796) | - | - | | | | [ESP32-S3-LCD-EV-Board](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-lcd-ev-board/user_guide.html) | GC9503 | [Component Manager](https://components.espressif.com/component/espressif/esp_lcd_gc9503) | FT5X06 | [Component Manager](https://components.espressif.com/component/espressif/esp_lcd_touch_ft5x06) | | | | [ESP32-S3-LCD-EV-Board-2](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-lcd-ev-board/user_guide.html) | ST7262E43 | **N/A** | GT1151 | [Component Manager](https://components.espressif.com/component/espressif/esp_lcd_touch_gt1151) | | +| | HDMI | LT8912B | [Component Manager](https://components.espressif.com/component/espressif/esp_lcd_lt8912b) | - | - | | diff --git a/bsp/esp32_p4_function_ev_board/Kconfig b/bsp/esp32_p4_function_ev_board/Kconfig index c69edaf0..b21e39ce 100644 --- a/bsp/esp32_p4_function_ev_board/Kconfig +++ b/bsp/esp32_p4_function_ev_board/Kconfig @@ -1,4 +1,4 @@ -menu "Board Support Package(ESP32-P4)" +menu "Board Support Package (ESP32-P4)" config BSP_ERROR_CHECK bool "Enable error check in BSP" @@ -131,7 +131,26 @@ menu "Board Support Package(ESP32-P4)" bool "LCD 7-inch 1024x600 - ek79007" config BSP_LCD_TYPE_1280_800 bool "LCD 1280x800 - ili9881c" - endchoice + config BSP_LCD_TYPE_HDMI + bool "HDMI - lt8912b" + endchoice + + choice BSP_LCD_HDMI_RESOLUTION + depends on BSP_LCD_TYPE_HDMI + prompt "Select HDMI resolution" + default BSP_LCD_HDMI_1280x720_60HZ + help + Select the HDMI resolution. + + config BSP_LCD_HDMI_800x600_60HZ + bool "800x600@60HZ" + config BSP_LCD_HDMI_1280x720_60HZ + bool "1280x720@60HZ" + config BSP_LCD_HDMI_1280x800_60HZ + bool "1280x800@60HZ" + config BSP_LCD_HDMI_1920x1080_30HZ + bool "1920x1080@30HZ" + endchoice endmenu diff --git a/bsp/esp32_p4_function_ev_board/README.md b/bsp/esp32_p4_function_ev_board/README.md index 45e904d8..6cf9379b 100644 --- a/bsp/esp32_p4_function_ev_board/README.md +++ b/bsp/esp32_p4_function_ev_board/README.md @@ -15,13 +15,24 @@ ESP32-P4 Function EV Board is internal Espressif board for testing features on E Configuration in `menuconfig`. Selection LCD display `Board Support Package(ESP32-P4) --> Display --> Select LCD type` -- LCD 7-inch 1280x800 - ili9881c (default) +- LCD 1280x800 - ili9881c (default) - LCD 1024x600 - ek79007 +- HDMI - lt8912b + - 800x600@60HZ + - 1280x720@60HZ + - 1280x800@60HZ + - 1920x1080@30HZ Selection color format `Board Support Package(ESP32-P4) --> Display --> Select LCD color format` - RGB565 (default) - RGB888 +## HDMI Support + +This BSP supports HDMI converter Lontium LT8912B. Follow these rules for using it with HDMI: +- Use ESP-IDF 5.4 or older (from commit [93fdbf2](https://github.com/espressif/esp-idf/commit/93fdbf25b3ea7e44d1f519ed61050847dcc8a076)) +- Only RGB888 is supported with HDMI +- Use MIPI-DSI to HDMI converter Lontium LT8912B ### Capabilities and dependencies diff --git a/bsp/esp32_p4_function_ev_board/esp32_p4_function_ev_board.c b/bsp/esp32_p4_function_ev_board/esp32_p4_function_ev_board.c index 16bbbeec..e8584812 100644 --- a/bsp/esp32_p4_function_ev_board/esp32_p4_function_ev_board.c +++ b/bsp/esp32_p4_function_ev_board/esp32_p4_function_ev_board.c @@ -21,6 +21,8 @@ #if CONFIG_BSP_LCD_TYPE_1024_600 #include "esp_lcd_ek79007.h" +#elif CONFIG_BSP_LCD_TYPE_HDMI +#include "esp_lcd_lt8912b.h" #else #include "esp_lcd_ili9881c.h" #endif @@ -402,12 +404,14 @@ esp_err_t bsp_display_new(const bsp_display_config_t *config, esp_lcd_panel_hand esp_err_t bsp_display_new_with_handles(const bsp_display_config_t *config, bsp_lcd_handles_t *ret_handles) { esp_err_t ret = ESP_OK; + esp_lcd_panel_io_handle_t io = NULL; + esp_lcd_panel_handle_t disp_panel = NULL; ESP_RETURN_ON_ERROR(bsp_display_brightness_init(), TAG, "Brightness init failed"); ESP_RETURN_ON_ERROR(bsp_enable_dsi_phy_power(), TAG, "DSI PHY power failed"); /* create MIPI DSI bus first, it will initialize the DSI PHY as well */ - esp_lcd_dsi_bus_handle_t mipi_dsi_bus; + esp_lcd_dsi_bus_handle_t mipi_dsi_bus = NULL; esp_lcd_dsi_bus_config_t bus_config = { .bus_id = 0, .num_data_lanes = BSP_LCD_MIPI_DSI_LANE_NUM, @@ -416,17 +420,17 @@ esp_err_t bsp_display_new_with_handles(const bsp_display_config_t *config, bsp_l }; ESP_RETURN_ON_ERROR(esp_lcd_new_dsi_bus(&bus_config, &mipi_dsi_bus), TAG, "New DSI bus init failed"); +#if !CONFIG_BSP_LCD_TYPE_HDMI ESP_LOGI(TAG, "Install MIPI DSI LCD control panel"); // we use DBI interface to send LCD commands and parameters - esp_lcd_panel_io_handle_t io; esp_lcd_dbi_io_config_t dbi_config = { .virtual_channel = 0, - .lcd_cmd_bits = 8, // according to the LCD ILI9881C spec - .lcd_param_bits = 8, // according to the LCD ILI9881C spec + .lcd_cmd_bits = 8, // according to the LCD spec + .lcd_param_bits = 8, // according to the LCD spec }; ESP_GOTO_ON_ERROR(esp_lcd_new_panel_io_dbi(mipi_dsi_bus, &dbi_config, &io), err, TAG, "New panel IO failed"); +#endif - esp_lcd_panel_handle_t disp_panel = NULL; #if CONFIG_BSP_LCD_TYPE_1024_600 // create EK79007 control panel ESP_LOGI(TAG, "Install EK79007 LCD control panel"); @@ -453,7 +457,7 @@ esp_err_t bsp_display_new_with_handles(const bsp_display_config_t *config, bsp_l ESP_GOTO_ON_ERROR(esp_lcd_new_panel_ek79007(io, &lcd_dev_config, &disp_panel), err, TAG, "New LCD panel EK79007 failed"); ESP_GOTO_ON_ERROR(esp_lcd_panel_reset(disp_panel), err, TAG, "LCD panel reset failed"); ESP_GOTO_ON_ERROR(esp_lcd_panel_init(disp_panel), err, TAG, "LCD panel init failed"); -#else +#elif CONFIG_BSP_LCD_TYPE_1280_800 // create ILI9881C control panel ESP_LOGI(TAG, "Install ILI9881C LCD control panel"); #if CONFIG_BSP_LCD_COLOR_FORMAT_RGB888 @@ -480,7 +484,92 @@ esp_err_t bsp_display_new_with_handles(const bsp_display_config_t *config, bsp_l ESP_GOTO_ON_ERROR(esp_lcd_panel_reset(disp_panel), err, TAG, "LCD panel reset failed"); ESP_GOTO_ON_ERROR(esp_lcd_panel_init(disp_panel), err, TAG, "LCD panel init failed"); ESP_GOTO_ON_ERROR(esp_lcd_panel_disp_on_off(disp_panel, true), err, TAG, "LCD panel ON failed"); + +#elif CONFIG_BSP_LCD_TYPE_HDMI + +#if !CONFIG_BSP_LCD_COLOR_FORMAT_RGB888 +#error The color format must be RGB888 in HDMI display type! +#endif + ESP_LOGI(TAG, "Install MIPI DSI HDMI control panel"); + ESP_RETURN_ON_ERROR(bsp_i2c_init(), TAG, "I2C init failed"); + + /* Main IO */ + esp_lcd_panel_io_i2c_config_t io_config = LT8912B_IO_CFG(CONFIG_BSP_I2C_CLK_SPEED_HZ, LT8912B_IO_I2C_MAIN_ADDRESS); + ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c(i2c_handle, &io_config, &io)); + + /* CEC DSI IO */ + esp_lcd_panel_io_handle_t io_cec_dsi = NULL; + esp_lcd_panel_io_i2c_config_t io_config_cec = LT8912B_IO_CFG(CONFIG_BSP_I2C_CLK_SPEED_HZ, LT8912B_IO_I2C_CEC_ADDRESS); + ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c(i2c_handle, &io_config_cec, &io_cec_dsi)); + + /* AVI IO */ + esp_lcd_panel_io_handle_t io_avi = NULL; + esp_lcd_panel_io_i2c_config_t io_config_avi = LT8912B_IO_CFG(CONFIG_BSP_I2C_CLK_SPEED_HZ, LT8912B_IO_I2C_AVI_ADDRESS); + ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c(i2c_handle, &io_config_avi, &io_avi)); + + /* DPI config */ +#if CONFIG_BSP_LCD_HDMI_800x600_60HZ + ESP_LOGI(TAG, "HDMI configuration for 800x600@60HZ"); + esp_lcd_dpi_panel_config_t dpi_config = LT8912B_800x600_PANEL_60HZ_DPI_CONFIG(); +#elif CONFIG_BSP_LCD_HDMI_1024x768_60HZ + ESP_LOGI(TAG, "HDMI configuration for 1024x768@60HZ"); + esp_lcd_dpi_panel_config_t dpi_config = LT8912B_1024x768_PANEL_60HZ_DPI_CONFIG(); +#elif CONFIG_BSP_LCD_HDMI_1280x720_60HZ + ESP_LOGI(TAG, "HDMI configuration for 1280x720@60HZ"); + esp_lcd_dpi_panel_config_t dpi_config = LT8912B_1280x720_PANEL_60HZ_DPI_CONFIG(); +#elif CONFIG_BSP_LCD_HDMI_1280x800_60HZ + ESP_LOGI(TAG, "HDMI configuration for 1280x800@60HZ"); + esp_lcd_dpi_panel_config_t dpi_config = LT8912B_1280x800_PANEL_60HZ_DPI_CONFIG(); +#elif CONFIG_BSP_LCD_HDMI_1920x1080_30HZ + ESP_LOGI(TAG, "HDMI configuration for 1920x1080@30HZ"); + esp_lcd_dpi_panel_config_t dpi_config = LT8912B_1920x1080_PANEL_30HZ_DPI_CONFIG(); +#elif CONFIG_BSP_LCD_HDMI_1920x1080_60HZ + ESP_LOGI(TAG, "HDMI configuration for 1920x1080@60HZ"); + /* This setting is not working yet, it is only for developing and testing */ + esp_lcd_dpi_panel_config_t dpi_config = LT8912B_1920x1080_PANEL_60HZ_DPI_CONFIG(); +#else +#error Unsupported display type #endif + dpi_config.num_fbs = CONFIG_BSP_LCD_DPI_BUFFER_NUMS; + lt8912b_vendor_config_t vendor_config = { +#if CONFIG_BSP_LCD_HDMI_800x600_60HZ + .video_timing = ESP_LCD_LT8912B_VIDEO_TIMING_800x600_60Hz(), +#elif CONFIG_BSP_LCD_HDMI_1024x768_60HZ + .video_timing = ESP_LCD_LT8912B_VIDEO_TIMING_1024x768_60Hz(), +#elif CONFIG_BSP_LCD_HDMI_1280x720_60HZ + .video_timing = ESP_LCD_LT8912B_VIDEO_TIMING_1280x720_60Hz(), +#elif CONFIG_BSP_LCD_HDMI_1280x800_60HZ + .video_timing = ESP_LCD_LT8912B_VIDEO_TIMING_1280x800_60Hz(), +#elif CONFIG_BSP_LCD_HDMI_1920x1080_30HZ + .video_timing = ESP_LCD_LT8912B_VIDEO_TIMING_1920x1080_30Hz(), +#elif CONFIG_BSP_LCD_HDMI_1920x1080_60HZ + /* This setting is not working yet, it is only for developing and testing */ + .video_timing = ESP_LCD_LT8912B_VIDEO_TIMING_1920x1080_60Hz(), +#else +#error Unsupported display type +#endif + .mipi_config = { + .dsi_bus = mipi_dsi_bus, + .dpi_config = &dpi_config, + .lane_num = BSP_LCD_MIPI_DSI_LANE_NUM, + }, + }; + const esp_lcd_panel_dev_config_t panel_config = { + .bits_per_pixel = 24, + .rgb_ele_order = BSP_LCD_COLOR_SPACE, + .reset_gpio_num = BSP_LCD_RST, + .vendor_config = &vendor_config, + }; + const esp_lcd_panel_lt8912b_io_t io_all = { + .main = io, + .cec_dsi = io_cec_dsi, + .avi = io_avi, + }; + ESP_ERROR_CHECK(esp_lcd_new_panel_lt8912b(&io_all, &panel_config, &disp_panel)); + ESP_GOTO_ON_ERROR(esp_lcd_panel_reset(disp_panel), err, TAG, "LCD panel reset failed"); + ESP_GOTO_ON_ERROR(esp_lcd_panel_init(disp_panel), err, TAG, "LCD panel init failed"); + +#endif //CONFIG_BSP_LCD_TYPE_ /* Return all handles */ ret_handles->io = io; @@ -488,7 +577,7 @@ esp_err_t bsp_display_new_with_handles(const bsp_display_config_t *config, bsp_l ret_handles->panel = disp_panel; ret_handles->control = NULL; - ESP_LOGI(TAG, "Display initialized"); + ESP_LOGI(TAG, "Display initialized with resolution %dx%d", BSP_LCD_H_RES, BSP_LCD_V_RES); return ret; @@ -499,12 +588,21 @@ esp_err_t bsp_display_new_with_handles(const bsp_display_config_t *config, bsp_l if (io) { esp_lcd_panel_io_del(io); } +#if CONFIG_BSP_LCD_TYPE_HDMI + if (io_cec_dsi) { + esp_lcd_panel_io_del(io_cec_dsi); + } + if (io_avi) { + esp_lcd_panel_io_del(io_avi); + } +#endif if (mipi_dsi_bus) { esp_lcd_del_dsi_bus(mipi_dsi_bus); } return ret; } +#if !CONFIG_BSP_LCD_TYPE_HDMI esp_err_t bsp_touch_new(const bsp_touch_config_t *config, esp_lcd_touch_handle_t *ret_touch) { /* Initilize I2C */ @@ -537,6 +635,7 @@ esp_err_t bsp_touch_new(const bsp_touch_config_t *config, esp_lcd_touch_handle_t ESP_RETURN_ON_ERROR(esp_lcd_new_panel_io_i2c(i2c_handle, &tp_io_config, &tp_io_handle), TAG, ""); return esp_lcd_touch_new_i2c_gt911(tp_io_handle, &tp_cfg, ret_touch); } +#endif //!CONFIG_BSP_LCD_TYPE_HDMI #if (BSP_CONFIG_NO_GRAPHIC_LIB == 0) static lv_display_t *bsp_display_lcd_init(const bsp_display_cfg_t *cfg) @@ -601,6 +700,7 @@ static lv_display_t *bsp_display_lcd_init(const bsp_display_cfg_t *cfg) return lvgl_port_add_disp_dsi(&disp_cfg, &dpi_cfg); } +#if !CONFIG_BSP_LCD_TYPE_HDMI static lv_indev_t *bsp_display_indev_init(lv_display_t *disp) { esp_lcd_touch_handle_t tp; @@ -615,6 +715,7 @@ static lv_indev_t *bsp_display_indev_init(lv_display_t *disp) return lvgl_port_add_touch(&touch_cfg); } +#endif //!CONFIG_BSP_LCD_TYPE_HDMI lv_display_t *bsp_display_start(void) { @@ -645,9 +746,9 @@ lv_display_t *bsp_display_start_with_config(const bsp_display_cfg_t *cfg) BSP_ERROR_CHECK_RETURN_NULL(bsp_display_brightness_init()); BSP_NULL_CHECK(disp = bsp_display_lcd_init(cfg), NULL); - +#if !CONFIG_BSP_LCD_TYPE_HDMI BSP_NULL_CHECK(disp_indev = bsp_display_indev_init(disp), NULL); - +#endif return disp; } diff --git a/bsp/esp32_p4_function_ev_board/idf_component.yml b/bsp/esp32_p4_function_ev_board/idf_component.yml index 3536bae7..c2cf40e2 100644 --- a/bsp/esp32_p4_function_ev_board/idf_component.yml +++ b/bsp/esp32_p4_function_ev_board/idf_component.yml @@ -1,4 +1,4 @@ -version: "4.1.1" +version: "4.2.0" description: Board Support Package (BSP) for ESP32-P4 Function EV Board (preview) url: https://github.com/espressif/esp-bsp/tree/master/bsp/esp32_p4_function_ev_board @@ -23,3 +23,7 @@ dependencies: esp_codec_dev: version: "1.2.*" public: true + + espressif/esp_lcd_lt8912b: + version: ">=0.1.0,<1.0.0" + override_path: "../../components/lcd/esp_lcd_lt8912b" diff --git a/bsp/esp32_p4_function_ev_board/include/bsp/display.h b/bsp/esp32_p4_function_ev_board/include/bsp/display.h index 68b9d0c2..97593857 100644 --- a/bsp/esp32_p4_function_ev_board/include/bsp/display.h +++ b/bsp/esp32_p4_function_ev_board/include/bsp/display.h @@ -47,6 +47,37 @@ #define BSP_LCD_MIPI_DSI_LCD_VSYNC (635) #define BSP_LCD_MIPI_DSI_LCD_VBP (23) #define BSP_LCD_MIPI_DSI_LCD_VFP (12) + +#elif CONFIG_BSP_LCD_TYPE_HDMI +#if CONFIG_BSP_LCD_HDMI_800x600_60HZ +/* LCD display definition 800x600 60Hz */ +#define BSP_LCD_H_RES (800) +#define BSP_LCD_V_RES (600) +#elif CONFIG_BSP_LCD_HDMI_1024x768_60HZ +/* LCD display definition 1024x768 60Hz */ +#define BSP_LCD_H_RES (1024) +#define BSP_LCD_V_RES (768) +#elif CONFIG_BSP_LCD_HDMI_1280x720_60HZ +/* LCD display definition 1280x720 60Hz */ +#define BSP_LCD_H_RES (1280) +#define BSP_LCD_V_RES (720) +#elif CONFIG_BSP_LCD_HDMI_1280x800_60HZ +/* LCD display definition 1280x800 60Hz */ +#define BSP_LCD_H_RES (1280) +#define BSP_LCD_V_RES (800) +#elif CONFIG_BSP_LCD_HDMI_1920x1080_30HZ +/* LCD display definition 1920x1080 30Hz */ +#define BSP_LCD_H_RES (1920) +#define BSP_LCD_V_RES (1080) +#elif CONFIG_BSP_LCD_HDMI_1920x1080_60HZ +/* LCD display definition 1920x1080 60Hz */ +/* This setting is not working yet, it is only for developing and testing */ +#define BSP_LCD_H_RES (1920) +#define BSP_LCD_V_RES (1080) +#else +#error Unsupported display type +#endif + #else /* LCD display definition 1280x800 */ #define BSP_LCD_H_RES (800) diff --git a/components/lcd/esp_lcd_lt8912b/CMakeLists.txt b/components/lcd/esp_lcd_lt8912b/CMakeLists.txt new file mode 100644 index 00000000..abd1b9ee --- /dev/null +++ b/components/lcd/esp_lcd_lt8912b/CMakeLists.txt @@ -0,0 +1,4 @@ +idf_component_register(SRCS "esp_lcd_lt8912b.c" + INCLUDE_DIRS "include" + REQUIRES "esp_lcd" + PRIV_REQUIRES "esp_driver_gpio") diff --git a/components/lcd/esp_lcd_lt8912b/README.md b/components/lcd/esp_lcd_lt8912b/README.md new file mode 100644 index 00000000..8a18e8bc --- /dev/null +++ b/components/lcd/esp_lcd_lt8912b/README.md @@ -0,0 +1,24 @@ +# ESP LCD LT8912B + +[![Component Registry](https://components.espressif.com/components/espressif/esp_lcd_lt8912b/badge.svg)](https://components.espressif.com/components/espressif/esp_lcd_lt8912b) + +Implementation of the LT8912B MIPI-DSI to HDMI bridge with esp_lcd component. + +| LCD controller | Communication interface | Component name | Link to datasheet | +| :------------: | :---------------------: | :------------: | :---------------: | +| LT8912B | I2C | esp_lcd_lt8912b | [Specification](http://www.lontiumsemi.com/UploadFiles/2022-03/LT8912B_Brief_R1.3.pdf) | + +> [!WARNING] +> This controller suports only RGB888 color mode. + +## Add to project + +Packages from this repository are uploaded to [Espressif's component service](https://components.espressif.com/). +You can add them to your project via `idf.py add-dependency`, e.g. + +```text +idf.py add-dependency esp_lcd_lt8912b +``` + +Alternatively, you can create `idf_component.yml`. More is in [Espressif's documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-component-manager.html). + diff --git a/components/lcd/esp_lcd_lt8912b/esp_lcd_lt8912b.c b/components/lcd/esp_lcd_lt8912b/esp_lcd_lt8912b.c new file mode 100644 index 00000000..1626e394 --- /dev/null +++ b/components/lcd/esp_lcd_lt8912b/esp_lcd_lt8912b.c @@ -0,0 +1,711 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_lcd_panel_interface.h" +#include "esp_lcd_panel_io.h" +#include "esp_lcd_panel_vendor.h" +#include "esp_lcd_panel_ops.h" +#include "esp_lcd_panel_commands.h" +#include "driver/gpio.h" +#include "esp_log.h" +#include "esp_check.h" +#include "esp_lcd_lt8912b.h" + +#define ENABLE_TEST_PATTERN 0 + +static const char *TAG = "lt8912b"; + +static esp_err_t panel_lt8912b_del(esp_lcd_panel_t *panel); +static esp_err_t panel_lt8912b_reset(esp_lcd_panel_t *panel); +static esp_err_t panel_lt8912b_init(esp_lcd_panel_t *panel); +static esp_err_t panel_lt8912b_invert_color(esp_lcd_panel_t *panel, bool invert_color_data); +static esp_err_t panel_lt8912b_mirror(esp_lcd_panel_t *panel, bool mirror_x, bool mirror_y); +static esp_err_t panel_lt8912b_disp_on_off(esp_lcd_panel_t *panel, bool off); +static esp_err_t panel_lt8912b_sleep(esp_lcd_panel_t *panel, bool sleep); + +static esp_err_t _panel_lt8912b_detect_input_mipi(esp_lcd_panel_t *panel); +static bool _panel_lt8912b_get_hpd(esp_lcd_panel_t *panel); + +typedef struct { + esp_lcd_panel_lt8912b_io_t io; + esp_lcd_panel_lt8912b_video_timing_t video_timing; + int reset_gpio_num; + bool reset_level; + uint8_t lane_num; + // To save the original functions of MIPI DPI panel + esp_err_t (*del)(esp_lcd_panel_t *panel); + esp_err_t (*init)(esp_lcd_panel_t *panel); +} lt8912b_panel_t; + +typedef struct { + uint8_t cmd; + uint8_t data; +} lt8912b_lcd_init_cmd_t; + +static const lt8912b_lcd_init_cmd_t cmd_digital_clock_en[] = { + // {cmd, data} + + /* Digital clock en*/ + {0x02, 0xf7}, + {0x08, 0xff}, + {0x09, 0xff}, + {0x0a, 0xff}, + {0x0b, 0x7c}, + {0x0c, 0xff}, +}; + +static const lt8912b_lcd_init_cmd_t cmd_tx_analog[] = { + // {cmd, data} + + /*Tx Analog*/ + {0x31, 0xe1}, + {0x32, 0xe1}, + {0x33, 0x0c}, + {0x37, 0x00}, + {0x38, 0x22}, + {0x60, 0x82}, +}; + +static const lt8912b_lcd_init_cmd_t cmd_cbus_analog[] = { + // {cmd, data} + + /*Cbus Analog*/ + {0x39, 0x45}, + {0x3a, 0x00}, + {0x3b, 0x00}, +}; + +static const lt8912b_lcd_init_cmd_t cmd_hdmi_pll_analog[] = { + // {cmd, data} + + /*HDMI Pll Analog*/ + {0x44, 0x31}, + {0x55, 0x44}, + {0x57, 0x01}, + {0x5a, 0x02}, +}; + +static const lt8912b_lcd_init_cmd_t cmd_audio_iis_mode[] = { + // {cmd, data} + + /*Audio IIs Mode */ + {0xB2, 0x01}, //DVI mode:0x00; HDMI mode:0x01; +}; + +static const lt8912b_lcd_init_cmd_t cmd_audio_iis_en[] = { + // {cmd, data} + + /*Audio IIs En*/ + {0x06, 0x08}, + {0x07, 0xF0}, + {0x34, 0xD2}, + {0x0F, 0x2B}, +}; + +static const lt8912b_lcd_init_cmd_t cmd_lvds[] = { + // {cmd, data} + + /* Lvds Power Up */ + {0x44, 0x30}, + {0x51, 0x05}, + + /*Lvds Bypass*/ + {0x50, 0x24}, //cp=50uA + {0x51, 0x2d}, //Pix_clk as reference,second order passive LPF PLL + {0x52, 0x04}, //loopdiv=0;use second-order PLL + {0x69, 0x0e}, //CP_PRESET_DIV_RATIO + {0x69, 0x8e}, + {0x6a, 0x00}, + {0x6c, 0xb8}, //RGD_CP_SOFT_K_EN,RGD_CP_SOFT_K[13:8] + {0x6b, 0x51}, + + {0x04, 0xfb}, //core pll reset + {0x04, 0xff}, + + {0x7f, 0x00}, //disable scaler + {0xa8, 0x13}, //0x13:VSEA ; 0x33:JEIDA; +}; + +static const lt8912b_lcd_init_cmd_t cmd_dds_config[] = { + // {cmd, data} + + /*DDS Config*/ + {0x4e, 0x93}, //strm_sw_freq_word[ 7: 0] + {0x4f, 0x3E}, //strm_sw_freq_word[15: 8] + {0x50, 0x29}, //strm_sw_freq_word[23:16] + {0x51, 0x80}, //[0]=strm_sw_freq_word[24] + {0x1e, 0x4f}, + {0x1f, 0x5e}, //full_value 464 + {0x20, 0x01}, + {0x21, 0x2c}, //full_value1 416 + {0x22, 0x01}, + {0x23, 0xfa}, //full_value2 400 + {0x24, 0x00}, + {0x25, 0xc8}, //full_value3 384 + {0x26, 0x00}, + {0x27, 0x5e}, //empty_value 464 + {0x28, 0x01}, + {0x29, 0x2c}, //empty_value1 416 + {0x2a, 0x01}, + {0x2b, 0xfa}, //empty_value2 400 + {0x2c, 0x00}, + {0x2d, 0xc8}, //empty_value3 384 + {0x2e, 0x00}, + {0x42, 0x64}, //tmr_set[ 7:0]:100us + {0x43, 0x00}, //tmr_set[15:8]:100us + {0x44, 0x04}, //timer step + {0x45, 0x00}, + {0x46, 0x59}, + {0x47, 0x00}, + {0x48, 0xf2}, + {0x49, 0x06}, + {0x4a, 0x00}, + {0x4b, 0x72}, + {0x4c, 0x45}, + {0x4d, 0x00}, + {0x52, 0x08}, // trend step + {0x53, 0x00}, + {0x54, 0xb2}, + {0x55, 0x00}, + {0x56, 0xe4}, + {0x57, 0x0d}, + {0x58, 0x00}, + {0x59, 0xe4}, + {0x5a, 0x8a}, + {0x5b, 0x00}, + {0x5c, 0x34}, + {0x51, 0x00}, +}; + +esp_err_t esp_lcd_new_panel_lt8912b(const esp_lcd_panel_lt8912b_io_t *io, const esp_lcd_panel_dev_config_t *panel_dev_config, esp_lcd_panel_handle_t *ret_panel) +{ + ESP_RETURN_ON_FALSE(io && io->main && io->cec_dsi && io->avi && panel_dev_config && ret_panel, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + lt8912b_vendor_config_t *vendor_config = (lt8912b_vendor_config_t *)panel_dev_config->vendor_config; + ESP_RETURN_ON_FALSE(vendor_config && vendor_config->mipi_config.dpi_config && vendor_config->mipi_config.dsi_bus, ESP_ERR_INVALID_ARG, TAG, "invalid vendor config"); + + + esp_err_t ret = ESP_OK; + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)calloc(1, sizeof(lt8912b_panel_t)); + ESP_RETURN_ON_FALSE(lt8912b, ESP_ERR_NO_MEM, TAG, "no mem for lt8912b panel"); + + if (panel_dev_config->reset_gpio_num >= 0) { + gpio_config_t io_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = 1ULL << panel_dev_config->reset_gpio_num, + }; + ESP_GOTO_ON_ERROR(gpio_config(&io_conf), err, TAG, "configure GPIO for RST line failed"); + } + + memcpy(<8912b->io, io, sizeof(esp_lcd_panel_lt8912b_io_t)); + memcpy(<8912b->video_timing, &vendor_config->video_timing, sizeof(esp_lcd_panel_lt8912b_video_timing_t)); + lt8912b->lane_num = vendor_config->mipi_config.lane_num; + lt8912b->reset_gpio_num = panel_dev_config->reset_gpio_num; + lt8912b->reset_level = panel_dev_config->flags.reset_active_high; + + // Create MIPI DPI panel + ESP_GOTO_ON_ERROR(esp_lcd_new_panel_dpi(vendor_config->mipi_config.dsi_bus, vendor_config->mipi_config.dpi_config, ret_panel), err, TAG, + "create MIPI DPI panel failed"); + ESP_LOGD(TAG, "new MIPI DPI panel @%p", *ret_panel); + + // Save the original functions of MIPI DPI panel + lt8912b->del = (*ret_panel)->del; + lt8912b->init = (*ret_panel)->init; + // Overwrite the functions of MIPI DPI panel + (*ret_panel)->del = panel_lt8912b_del; + (*ret_panel)->init = panel_lt8912b_init; + (*ret_panel)->reset = panel_lt8912b_reset; + (*ret_panel)->mirror = panel_lt8912b_mirror; + (*ret_panel)->invert_color = panel_lt8912b_invert_color; + (*ret_panel)->disp_on_off = panel_lt8912b_disp_on_off; + (*ret_panel)->disp_sleep = panel_lt8912b_sleep; + (*ret_panel)->user_data = lt8912b; + ESP_LOGD(TAG, "new lt8912b panel @%p", lt8912b); + + return ESP_OK; + +err: + if (lt8912b) { + if (panel_dev_config->reset_gpio_num >= 0) { + gpio_reset_pin(panel_dev_config->reset_gpio_num); + } + free(lt8912b); + } + return ret; +} + +bool esp_lcd_panel_lt8912b_is_ready(esp_lcd_panel_t *panel) +{ + _panel_lt8912b_detect_input_mipi(panel); + return _panel_lt8912b_get_hpd(panel); +} + +static esp_err_t panel_lt8912b_del(esp_lcd_panel_t *panel) +{ + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + + if (lt8912b->reset_gpio_num >= 0) { + gpio_reset_pin(lt8912b->reset_gpio_num); + } + // Delete MIPI DPI panel + lt8912b->del(panel); + free(lt8912b); + return ESP_OK; +} + +static esp_err_t panel_lt8912b_reset(esp_lcd_panel_t *panel) +{ + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_main = lt8912b->io.main; + + // perform hardware reset + if (lt8912b->reset_gpio_num >= 0) { + gpio_set_level(lt8912b->reset_gpio_num, lt8912b->reset_level); + vTaskDelay(pdMS_TO_TICKS(10)); + gpio_set_level(lt8912b->reset_gpio_num, !lt8912b->reset_level); + vTaskDelay(pdMS_TO_TICKS(10)); + } else { // perform software reset + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_tx_param(io_main, LCD_CMD_SWRESET, NULL, 0), TAG, "send command failed"); + vTaskDelay(pdMS_TO_TICKS(20)); // spec, wait at least 5ms before sending new command + } + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_send_data(esp_lcd_panel_io_handle_t io, uint8_t reg, uint8_t data) +{ + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_tx_param(io, reg, (uint8_t []) { + data + }, 1), TAG, "send command failed"); + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_send_data_array(esp_lcd_panel_io_handle_t io, const lt8912b_lcd_init_cmd_t *cmds, uint16_t cmds_size) +{ + for (int i = 0; i < cmds_size; i++) { + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io, cmds[i].cmd, cmds[i].data), TAG, "send command failed"); + } + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_send_mipi_analog(esp_lcd_panel_io_handle_t io_main, bool pn_swap) +{ + /* P/N swap or not */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x3e, (pn_swap ? 0xf6 : 0xd6)), TAG, "send command failed"); + + /* EQ */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x3f, 0xd4), TAG, "send command failed"); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x41, 0x3c), TAG, "send command failed"); + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_send_mipi_basic_set(esp_lcd_panel_io_handle_t io_cec, uint8_t lane_count, bool lane_swap) +{ + /* term en */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec, 0x10, 0x01), TAG, "send command failed"); + /* settle */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec, 0x11, 0x10), TAG, "send command failed"); + /* trail */ + //ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec, 0x12, 0x08), TAG, "send command failed"); + /* 00: 4 lane, 01: 1 lane, 02: 2 lane, 03: 3lane */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec, 0x13, lane_count), TAG, "send command failed"); + /* debug mux */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec, 0x14, 0x00), TAG, "send command failed"); + /* Lane swap */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec, 0x15, (lane_swap ? 0xa8 : 0x00)), TAG, "send command failed"); + + /* hshift 3 */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec, 0x1a, 0x03), TAG, "send command failed"); + /* vshift 3 */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec, 0x1b, 0x03), TAG, "send command failed"); + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_send_video_setup(esp_lcd_panel_t *panel) +{ + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_cec_dsi = lt8912b->io.cec_dsi; + esp_lcd_panel_lt8912b_video_timing_t *video_format = <8912b->video_timing; + + /* hwidth */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x18, (uint8_t)(video_format->hs % 256)), TAG, "send command failed"); + /* vwidth */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x19, (uint8_t)(video_format->vs % 256)), TAG, "send command failed"); + /* H_active[7:0] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x1c, (uint8_t)(video_format->hact % 256)), TAG, "send command failed"); + /* H_active[15:8] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x1d, (uint8_t)(video_format->hact / 256)), TAG, "send command failed"); + /* fifo_buff_length 12 */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x2f, 0x0c), TAG, "send command failed"); + /* H_total[7:0] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x34, (uint8_t)(video_format->htotal % 256)), TAG, "send command failed"); + /* H_total[15:8] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x35, (uint8_t)(video_format->htotal / 256)), TAG, "send command failed"); + /* V_total[7:0] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x36, (uint8_t)(video_format->vtotal % 256)), TAG, "send command failed"); + /* V_total[15:8] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x37, (uint8_t)(video_format->vtotal / 256)), TAG, "send command failed"); + /* VBP[7:0] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x38, (uint8_t)(video_format->vbp % 256)), TAG, "send command failed"); + /* VBP[15:8] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x39, (uint8_t)(video_format->vbp / 256)), TAG, "send command failed"); + /* VFP[7:0] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x3a, (uint8_t)(video_format->vfp % 256)), TAG, "send command failed"); + /* VFP[15:8] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x3b, (uint8_t)(video_format->vfp / 256)), TAG, "send command failed"); + /* HBP[7:0] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x3c, (uint8_t)(video_format->hbp % 256)), TAG, "send command failed"); + /* HBP[15:8] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x3d, (uint8_t)(video_format->hbp / 256)), TAG, "send command failed"); + /* HFP[7:0] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x3e, (uint8_t)(video_format->hfp % 256)), TAG, "send command failed"); + /* HFP[15:8] */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x3f, (uint8_t)(video_format->hfp / 256)), TAG, "send command failed"); + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_send_avi_infoframe(esp_lcd_panel_t *panel) +{ + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_main = lt8912b->io.main; + esp_lcd_panel_io_handle_t io_avi = lt8912b->io.avi; + esp_lcd_panel_lt8912b_video_timing_t *video_timing = <8912b->video_timing; + + uint8_t vic = video_timing->vic; + uint8_t aspect_ratio = video_timing->aspect_ratio; + uint8_t pb0, pb2, pb4, sync_polarity; + + /* enable null package */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_avi, 0x3c, 0x41), TAG, "send command failed"); + + sync_polarity = (video_timing->h_polarity * 0x02) + (video_timing->v_polarity * 0x01); + pb2 = (aspect_ratio << 4) + 0x08; + pb4 = vic; + pb0 = (((pb2 + pb4) <= 0x5f) ? (0x5f - pb2 - pb4) : (0x15f - pb2 - pb4)); + + /* sync polarity */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0xab, sync_polarity), TAG, "send command failed"); + + /* PB0:check sum */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_avi, 0x43, pb0), TAG, "send command failed"); + /* PB1:RGB888 */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_avi, 0x44, 0x10), TAG, "send command failed"); + /* PB2 */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_avi, 0x45, pb2), TAG, "send command failed"); + /* PB3 */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_avi, 0x46, 0x00), TAG, "send command failed"); + /* PB4:vic */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_avi, 0x47, pb4), TAG, "send command failed"); + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_mipi_rx_logic_reset(esp_lcd_panel_io_handle_t io_main) +{ + /* mipi rx reset */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x03, 0x7f), TAG, "send command failed"); + vTaskDelay(pdMS_TO_TICKS(10)); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x03, 0xff), TAG, "send command failed"); + + /* DDS Reset */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x05, 0xfb), TAG, "send command failed"); + vTaskDelay(pdMS_TO_TICKS(10)); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x05, 0xff), TAG, "send command failed"); + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_detect_input_mipi(esp_lcd_panel_t *panel) +{ + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_main = lt8912b->io.main; + + uint8_t hsync_l = 0, hsync_h = 0, vsync_l = 0, vsync_h = 0; + + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_rx_param(io_main, 0x9c, &hsync_l, 1), TAG, "read data failed"); + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_rx_param(io_main, 0x9d, &hsync_h, 1), TAG, "read data failed"); + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_rx_param(io_main, 0x9e, &vsync_l, 1), TAG, "read data failed"); + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_rx_param(io_main, 0x9f, &vsync_h, 1), TAG, "read data failed"); + + ESP_LOGI(TAG, "Detected MIPI input. H sync: 0x%02x 0x%02x, V sync: 0x%02x 0x%02x", hsync_h, hsync_l, vsync_h, vsync_l); + + + /* MIPI Video Setup */ + //ESP_RETURN_ON_ERROR(_panel_lt8912b_send_video_setup(panel), TAG, "send command failed"); + + /* AVI Infoframe */ + //ESP_RETURN_ON_ERROR(_panel_lt8912b_send_avi_infoframe(panel), TAG, "send command failed"); + + /* MIPI RX Logic Reset */ + //ESP_RETURN_ON_ERROR(_panel_lt8912b_mipi_rx_logic_reset(io_main), TAG, "send command failed"); + + return ESP_OK; +} + +static bool _panel_lt8912b_get_hpd(esp_lcd_panel_t *panel) +{ + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_main = lt8912b->io.main; + + uint8_t data = 0; + esp_lcd_panel_io_rx_param(io_main, 0xc1, &data, 1); + + if ((data & 0x80) == 0x80) { + return true; + } + return false; +} + +static esp_err_t _panel_lt8912b_lvds_output(esp_lcd_panel_io_handle_t io_main, bool on) +{ + if (on) { + /* lvds pll reset */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x02, 0xf7), TAG, "read data failed"); + /* scaler module reset */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x02, 0xff), TAG, "read data failed"); + /* lvds tx module reset */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x03, 0xcb), TAG, "read data failed"); + + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x03, 0xfb), TAG, "read data failed"); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x03, 0xff), TAG, "read data failed"); + + /* enbale lvds output */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x44, 0x30), TAG, "read data failed"); + + ESP_LOGI(TAG, "LT8912 LVDS output enabled!"); + } else { + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x44, 0x31), TAG, "read data failed"); + ESP_LOGI(TAG, "LT8912 LVDS output disabled!"); + } + + return ESP_OK; +} + +static esp_err_t _panel_lt8912b_hdmi_output(esp_lcd_panel_io_handle_t io_main, bool on) +{ + if (on) { + /* enable hdmi output */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x33, 0x0e), TAG, "read data failed"); + ESP_LOGI(TAG, "LT8912 HDMI output enabled!"); + } else { + /* disable hdmi output */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_main, 0x33, 0x0c), TAG, "read data failed"); + ESP_LOGI(TAG, "LT8912 HDMI output disabled!"); + } + + return ESP_OK; +} + +#if ENABLE_TEST_PATTERN +static esp_err_t _panel_lt8912b_send_test(esp_lcd_panel_t *panel) +{ + uint32_t DDS_initial_value; + uint8_t pclk_Mhz; + + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_cec_dsi = lt8912b->io.cec_dsi; + esp_lcd_panel_lt8912b_video_timing_t *video_format = <8912b->video_timing; + + /************* Pattern resolution set *************/ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x72, 0x12), TAG, "read data failed"); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x73, (uint8_t)((video_format->hs + video_format->hbp) % 256)), TAG, "send command failed"); //RGD_PTN_DE_DLY[7:0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x74, (uint8_t)((video_format->hs + video_format->hbp) / 256)), TAG, "send command failed"); //RGD_PTN_DE_DLY[11:8] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x75, (uint8_t)((video_format->vs + video_format->vbp) % 256)), TAG, "send command failed"); //RGD_PTN_DE_TOP[6:0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x76, (uint8_t)(video_format->hact % 256)), TAG, "send command failed"); //RGD_PTN_DE_CNT[7:0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x77, (uint8_t)(video_format->vact % 256)), TAG, "send command failed"); //RGD_PTN_DE_LIN[7:0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x78, ((((uint8_t)(video_format->vact / 256)) << 4) + ((uint8_t)(video_format->hact / 256)))), TAG, "send command failed"); //RGD_PTN_DE_LIN[10:8],RGD_PTN_DE_CNT[11:8] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x79, (uint8_t)(video_format->htotal % 256)), TAG, "send command failed"); //RGD_PTN_H_TOTAL[7:0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x7a, (uint8_t)(video_format->vtotal % 256)), TAG, "send command failed"); //RGD_PTN_V_TOTAL[7:0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x7b, ((((uint8_t)(video_format->vtotal / 256)) << 4) + ((uint8_t)(video_format->htotal / 256)))), TAG, "send command failed"); //RGD_PTN_V_TOTAL[10:8],RGD_PTN_H_TOTAL[11:8] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x7c, (uint8_t)(video_format->hs % 256)), TAG, "send command failed"); //RGD_PTN_HWIDTH[7:0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x7d, ((((uint8_t)(video_format->hs / 256)) << 6) + ((uint8_t)(video_format->vs % 256)))), TAG, "send command failed"); //RGD_PTN_HWIDTH[9:8],RGD_PTN_VWIDTH[5:0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x70, 0x80), TAG, "send command failed"); //pattern enable + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x71, 0x51), TAG, "send command failed"); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x42, 0x12), TAG, "send command failed"); + /**************************************************/ + + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x1e, 0x67), TAG, "send command failed"); //h v d pol hdmi sel pll sel + + + /************* Pattern pixl clock set *************/ + uint32_t DDS_initial_value = (uint32_t)(video_format->pclk_mhz * 0x16C16); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x4e, (uint8_t)(DDS_initial_value & 0x000000ff)), TAG, "send command failed"); //strm_sw_freq_word[ 7: 0] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x4f, (uint8_t)((DDS_initial_value & 0x0000ff00) >> 8)), TAG, "send command failed"); //strm_sw_freq_word[15: 8] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x50, (uint8_t)((DDS_initial_value & 0x00ff0000) >> 16)), TAG, "send command failed"); //strm_sw_freq_word[23:16] + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x51, 0x80), TAG, "send command failed"); + +// ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x4e, 0x3E), TAG, "send command failed"); //strm_sw_freq_word[ 7: 0] +// ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x4f, 0xE9), TAG, "send command failed"); //strm_sw_freq_word[15: 8] +// ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x50, 0xD3), TAG, "send command failed"); //strm_sw_freq_word[23:16] +// ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data(io_cec_dsi, 0x51, 0x80), TAG, "send command failed"); //pattern en + /**************************************************/ + + ESP_LOGW(TAG, "Test pattern enabled!"); + + return ESP_OK; +} +#endif //ENABLE_TEST_PATTERN + +#if 0 //For testing purposes +static esp_err_t _panel_lt8912b_read_dds(esp_lcd_panel_t *panel) +{ + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_cec_dsi = lt8912b->io.cec_dsi; + + uint8_t reg_920c = 0, reg_920d = 0, reg_920e = 0, reg_920f = 0; + + for (int i = 0; i < 10; i++) { + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_rx_param(io_cec_dsi, 0x0c, ®_920c, 1), TAG, "read data failed"); + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_rx_param(io_cec_dsi, 0x0d, ®_920d, 1), TAG, "read data failed"); + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_rx_param(io_cec_dsi, 0x0e, ®_920e, 1), TAG, "read data failed"); + ESP_RETURN_ON_ERROR(esp_lcd_panel_io_rx_param(io_cec_dsi, 0x0f, ®_920f, 1), TAG, "read data failed"); + + ESP_LOGI(TAG, "DDS: 0x%02x 0x%02x 0x%02x 0x%02x", reg_920c, reg_920d, reg_920e, reg_920f); + if ((reg_920e == 0xd2) && (reg_920d < 0xff) && (reg_920d > 0xd0)) { //shall update threshold here base on actual dds result. + ESP_LOGI(TAG, "lvds_check_dds: stable!"); + } + } + + return ESP_OK; +} +#endif + +static esp_err_t panel_lt8912b_init(esp_lcd_panel_t *panel) +{ + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_main = lt8912b->io.main; + esp_lcd_panel_io_handle_t io_cec_dsi = lt8912b->io.cec_dsi; + esp_lcd_panel_io_handle_t io_avi = lt8912b->io.avi; + + /* Digital Clock En */ + uint16_t cmds_size = sizeof(cmd_digital_clock_en) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data_array(io_main, cmd_digital_clock_en, cmds_size), TAG, "send command failed"); + + /* Tx Analog */ + cmds_size = sizeof(cmd_tx_analog) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data_array(io_main, cmd_tx_analog, cmds_size), TAG, "send command failed"); + + /* Cbus Analog */ + cmds_size = sizeof(cmd_cbus_analog) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data_array(io_main, cmd_cbus_analog, cmds_size), TAG, "send command failed"); + + /* HDMI Pll Analog */ + cmds_size = sizeof(cmd_hdmi_pll_analog) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data_array(io_main, cmd_hdmi_pll_analog, cmds_size), TAG, "send command failed"); + + /* Mipi Analog - Set P/N swap */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_mipi_analog(io_main, false), TAG, "send command failed"); + + /* Mipi Basic Set - lines count, lines swapped */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_mipi_basic_set(io_cec_dsi, 2, false), TAG, "send command failed"); + + /* DDS Config */ + cmds_size = sizeof(cmd_dds_config) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data_array(io_cec_dsi, cmd_dds_config, cmds_size), TAG, "send command failed"); + + /* MIPI Video Setup */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_video_setup(panel), TAG, "send command failed"); + + /* MIPI Input detection */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_detect_input_mipi(panel), TAG, "send command failed"); + + /* MIPI Video Setup */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_video_setup(panel), TAG, "send command failed"); + + /* AVI Infoframe */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_avi_infoframe(panel), TAG, "send command failed"); + + /* MIPI RX Logic Reset */ + ESP_RETURN_ON_ERROR(_panel_lt8912b_mipi_rx_logic_reset(io_main), TAG, "send command failed"); + + /* Audio IIs Mode */ + cmds_size = sizeof(cmd_audio_iis_mode) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data_array(io_main, cmd_audio_iis_mode, cmds_size), TAG, "send command failed"); + + /* Audio IIs En */ + cmds_size = sizeof(cmd_audio_iis_en) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data_array(io_avi, cmd_audio_iis_en, cmds_size), TAG, "send command failed"); + + /* Lvds Bypass */ + cmds_size = sizeof(cmd_lvds) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_send_data_array(io_main, cmd_lvds, cmds_size), TAG, "send command failed"); + + /* LVDS Enable */ + cmds_size = sizeof(cmd_lvds) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_lvds_output(io_main, false), TAG, "send command failed"); + + /* HDMI Enable */ + cmds_size = sizeof(cmd_lvds) / sizeof(lt8912b_lcd_init_cmd_t); + ESP_RETURN_ON_ERROR(_panel_lt8912b_hdmi_output(io_main, true), TAG, "send command failed"); + +#if ENABLE_TEST_PATTERN + /* Show test pattern - debug */ + _panel_lt8912b_send_test(panel); +#endif //ENABLE_TEST_PATTERN + + ESP_RETURN_ON_ERROR(lt8912b->init(panel), TAG, "init MIPI DPI panel failed"); + + return ESP_OK; +} + +static esp_err_t panel_lt8912b_invert_color(esp_lcd_panel_t *panel, bool invert_color_data) +{ + return ESP_ERR_NOT_SUPPORTED; +} + +static esp_err_t panel_lt8912b_mirror(esp_lcd_panel_t *panel, bool mirror_x, bool mirror_y) +{ + ESP_LOGW(TAG, "Mirror is not supported in LT8912B driver. Please use SW rotation."); + return ESP_ERR_NOT_SUPPORTED; +} + +static esp_err_t panel_lt8912b_disp_on_off(esp_lcd_panel_t *panel, bool on_off) +{ + return ESP_ERR_NOT_SUPPORTED; +} + +static esp_err_t panel_lt8912b_sleep(esp_lcd_panel_t *panel, bool sleep) +{ + esp_err_t ret = ESP_OK; + lt8912b_panel_t *lt8912b = (lt8912b_panel_t *)panel->user_data; + esp_lcd_panel_io_handle_t io_main = lt8912b->io.main; + + if (sleep) { + ret |= _panel_lt8912b_send_data(io_main, 0x54, 0x1d); + ret |= _panel_lt8912b_send_data(io_main, 0x51, 0x15); + ret |= _panel_lt8912b_send_data(io_main, 0x44, 0x31); + ret |= _panel_lt8912b_send_data(io_main, 0x41, 0xbd); + ret |= _panel_lt8912b_send_data(io_main, 0x5c, 0x11); + } else { + ret |= _panel_lt8912b_send_data(io_main, 0x5c, 0x10); + ret |= _panel_lt8912b_send_data(io_main, 0x54, 0x1c); + ret |= _panel_lt8912b_send_data(io_main, 0x51, 0x2d); + ret |= _panel_lt8912b_send_data(io_main, 0x44, 0x30); + ret |= _panel_lt8912b_send_data(io_main, 0x41, 0xbc); + + vTaskDelay(pdMS_TO_TICKS(10)); + ret |= _panel_lt8912b_send_data(io_main, 0x03, 0x7f); + vTaskDelay(pdMS_TO_TICKS(10)); + ret |= _panel_lt8912b_send_data(io_main, 0x03, 0xff); + + vTaskDelay(pdMS_TO_TICKS(10)); + ret |= _panel_lt8912b_send_data(io_main, 0x05, 0xfb); + vTaskDelay(pdMS_TO_TICKS(10)); + ret |= _panel_lt8912b_send_data(io_main, 0x05, 0xff); + } + vTaskDelay(pdMS_TO_TICKS(100)); + + return ret; +} diff --git a/components/lcd/esp_lcd_lt8912b/idf_component.yml b/components/lcd/esp_lcd_lt8912b/idf_component.yml new file mode 100644 index 00000000..964a358b --- /dev/null +++ b/components/lcd/esp_lcd_lt8912b/idf_component.yml @@ -0,0 +1,7 @@ +version: "0.1.0" +description: ESP LCD LT8912B (MIPI DSI - HDMI) +url: https://github.com/espressif/esp-bsp/tree/master/components/lcd/esp_lcd_lt8912b +repository: "https://github.com/espressif/esp-bsp.git" +issues: "https://github.com/espressif/esp-bsp/issues" # URL of the issue tracker +dependencies: + idf: ">=5.3" diff --git a/components/lcd/esp_lcd_lt8912b/include/esp_lcd_lt8912b.h b/components/lcd/esp_lcd_lt8912b/include/esp_lcd_lt8912b.h new file mode 100644 index 00000000..0b669ce3 --- /dev/null +++ b/components/lcd/esp_lcd_lt8912b/include/esp_lcd_lt8912b.h @@ -0,0 +1,402 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * @file + * @brief ESP LCD: LT8912B + */ + +#pragma once + +#include "esp_lcd_panel_vendor.h" +#include "esp_lcd_mipi_dsi.h" +#include "esp_lcd_panel_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief LCD IO handles. + */ +typedef struct { + esp_lcd_panel_io_handle_t main; + esp_lcd_panel_io_handle_t cec_dsi; + esp_lcd_panel_io_handle_t avi; +} esp_lcd_panel_lt8912b_io_t; + +/** + * @brief LCD panel video timing configuration. + */ +typedef struct { + uint16_t hfp; + uint16_t hs; + uint16_t hbp; + uint16_t hact; + uint16_t htotal; + uint16_t vfp; + uint16_t vs; + uint16_t vbp; + uint16_t vact; + uint16_t vtotal; + bool h_polarity; + bool v_polarity; + uint16_t vic; + uint8_t aspect_ratio; // 0=no data, 1=4:3, 2=16:9, 3=no data. + uint32_t pclk_mhz; +} esp_lcd_panel_lt8912b_video_timing_t; + +/** + * @brief LCD panel vendor configuration. + * + * @note This structure needs to be passed to the `esp_lcd_panel_dev_config_t::vendor_config`. + * + */ +typedef struct { + esp_lcd_panel_lt8912b_video_timing_t video_timing; /*!< Video timing settings for HDMI */ + struct { + esp_lcd_dsi_bus_handle_t dsi_bus; /*!< MIPI-DSI bus configuration */ + const esp_lcd_dpi_panel_config_t *dpi_config; /*!< MIPI-DPI panel configuration */ + uint8_t lane_num; /*!< Number of MIPI-DSI lanes */ + } mipi_config; +} lt8912b_vendor_config_t; + +/** + * @brief Create LCD control panel for LT8912B + * + * @param[in] io LCD panel IO handles + * @param[in] panel_dev_config general panel device configuration + * @param[out] ret_panel Returned LCD panel handle + * @return + * - ESP_OK: Create LCD panel successfully + * - ESP_ERR_INVALID_ARG: Create LCD panel failed because of invalid arguments + * - ESP_ERR_NO_MEM: Create LCD panel failed because of memory allocation failure + * - ESP_FAIL: Create LCD panel failed because of other errors + */ +esp_err_t esp_lcd_new_panel_lt8912b(const esp_lcd_panel_lt8912b_io_t *io, const esp_lcd_panel_dev_config_t *panel_dev_config, esp_lcd_panel_handle_t *ret_panel); + +/** + * @brief Return true if HDMI is ready + * + * @param[in] panel LCD panel handle + * @return + * - true when ready + */ +bool esp_lcd_panel_lt8912b_is_ready(esp_lcd_panel_t *panel); + +/** + * @brief I2C address of the LT8912B controller + * + */ +#define LT8912B_IO_I2C_MAIN_ADDRESS (0x48) +#define LT8912B_IO_I2C_CEC_ADDRESS (0x49) +#define LT8912B_IO_I2C_AVI_ADDRESS (0x4A) + + +#define LT8912B_ASPECT_RATION_NO 0x00 +#define LT8912B_ASPECT_RATION_4_3 0x01 +#define LT8912B_ASPECT_RATION_16_9 0x02 + +/** + * @brief MIPI-DSI bus configuration structure + * + */ +#define LT8912B_PANEL_BUS_DSI_2CH_CONFIG() \ + { \ + .bus_id = 0, \ + .num_data_lanes = 2, \ + .phy_clk_src = MIPI_DSI_PHY_CLK_SRC_DEFAULT, \ + .lane_bit_rate_mbps = 1000, \ + } + +/** + * @brief MIPI-I2C panel IO configuration structure + * + */ +#define LT8912B_IO_CFG(clk_speed_hz, address) \ + { \ + .scl_speed_hz = clk_speed_hz, \ + .dev_addr = address, \ + .control_phase_bytes = 1, \ + .lcd_cmd_bits = 8, \ + .lcd_param_bits = 8, \ + .dc_bit_offset = 0, \ + .flags = \ + { \ + .disable_control_phase = 1, \ + } \ + } + +/** + * @brief Video timing configuration structure (800x600 60Hz) + * + */ +#define ESP_LCD_LT8912B_VIDEO_TIMING_800x600_60Hz() \ + { \ + .hfp = 48, \ + .hs = 128, \ + .hbp = 88, \ + .hact = 800, \ + .htotal = 1056, \ + .vfp = 1, \ + .vs = 4, \ + .vbp = 23, \ + .vact = 600, \ + .vtotal = 628, \ + .h_polarity = 1, \ + .v_polarity = 1, \ + .vic = 0, \ + .aspect_ratio = LT8912B_ASPECT_RATION_16_9, \ + .pclk_mhz = 40, \ + } + +#define LT8912B_800x600_PANEL_60HZ_DPI_CONFIG() \ + { \ + .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, \ + .dpi_clock_freq_mhz = 40, \ + .virtual_channel = 0, \ + .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB888, \ + .num_fbs = 1, \ + .video_timing = { \ + .h_size = BSP_LCD_H_RES, \ + .v_size = BSP_LCD_V_RES, \ + .hsync_back_porch = 88, \ + .hsync_pulse_width = 128, \ + .hsync_front_porch = 48, \ + .vsync_back_porch = 23, \ + .vsync_pulse_width = 4, \ + .vsync_front_porch = 1, \ + }, \ + .flags.use_dma2d = true, \ + .flags.disable_lp = true, \ + } + +/** + * @brief Video timing configuration structure (1024x768 60Hz) + * + */ +#define ESP_LCD_LT8912B_VIDEO_TIMING_1024x768_60Hz() \ + { \ + .hfp = 48, \ + .hs = 32, \ + .hbp = 80, \ + .hact = 1024, \ + .htotal = 1184, \ + .vfp = 3, \ + .vs = 4, \ + .vbp = 15, \ + .vact = 768, \ + .vtotal = 790, \ + .h_polarity = 1, \ + .v_polarity = 0, \ + .vic = 0, \ + .aspect_ratio = LT8912B_ASPECT_RATION_16_9, \ + .pclk_mhz = 56, \ + } + +#define LT8912B_1024x768_PANEL_60HZ_DPI_CONFIG() \ + { \ + .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, \ + .dpi_clock_freq_mhz = 56, \ + .virtual_channel = 0, \ + .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB888, \ + .num_fbs = 1, \ + .video_timing = { \ + .h_size = BSP_LCD_H_RES, \ + .v_size = BSP_LCD_V_RES, \ + .hsync_back_porch = 80, \ + .hsync_pulse_width = 32, \ + .hsync_front_porch = 48, \ + .vsync_back_porch = 15, \ + .vsync_pulse_width = 4, \ + .vsync_front_porch = 3, \ + }, \ + .flags.use_dma2d = true, \ + .flags.disable_lp = true, \ + } + +/** + * @brief Video timing configuration structure (1280x720 60Hz) + * + */ +#define ESP_LCD_LT8912B_VIDEO_TIMING_1280x720_60Hz() \ + { \ + .hfp = 48, \ + .hs = 32, \ + .hbp = 80, \ + .hact = 1280, \ + .htotal = 1440, \ + .vfp = 3, \ + .vs = 5, \ + .vbp = 13, \ + .vact = 720, \ + .vtotal = 741, \ + .h_polarity = 1, \ + .v_polarity = 0, \ + .vic = 0, \ + .aspect_ratio = LT8912B_ASPECT_RATION_16_9, \ + .pclk_mhz = 64, \ + } + +#define LT8912B_1280x720_PANEL_60HZ_DPI_CONFIG() \ + { \ + .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, \ + .dpi_clock_freq_mhz = 64, \ + .virtual_channel = 0, \ + .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB888, \ + .num_fbs = 1, \ + .video_timing = { \ + .h_size = BSP_LCD_H_RES, \ + .v_size = BSP_LCD_V_RES, \ + .hsync_back_porch = 80, \ + .hsync_pulse_width = 32, \ + .hsync_front_porch = 48, \ + .vsync_back_porch = 13, \ + .vsync_pulse_width = 5, \ + .vsync_front_porch = 3, \ + }, \ + .flags.use_dma2d = true, \ + .flags.disable_lp = true, \ + } + +/** + * @brief Video timing configuration structure (1280x800 60Hz) + * + */ +#define ESP_LCD_LT8912B_VIDEO_TIMING_1280x800_60Hz() \ + { \ + .hfp = 48, \ + .hs = 32, \ + .hbp = 80, \ + .hact = 1280, \ + .htotal = 1440, \ + .vfp = 3, \ + .vs = 6, \ + .vbp = 14, \ + .vact = 800, \ + .vtotal = 823, \ + .h_polarity = 1, \ + .v_polarity = 0, \ + .vic = 0, \ + .aspect_ratio = LT8912B_ASPECT_RATION_16_9, \ + .pclk_mhz = 70, \ + } + +#define LT8912B_1280x800_PANEL_60HZ_DPI_CONFIG() \ + { \ + .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, \ + .dpi_clock_freq_mhz = 70, \ + .virtual_channel = 0, \ + .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB888, \ + .num_fbs = 1, \ + .video_timing = { \ + .h_size = BSP_LCD_H_RES, \ + .v_size = BSP_LCD_V_RES, \ + .hsync_back_porch = 80, \ + .hsync_pulse_width = 32, \ + .hsync_front_porch = 48, \ + .vsync_back_porch = 14, \ + .vsync_pulse_width = 6, \ + .vsync_front_porch = 3, \ + }, \ + .flags.use_dma2d = true, \ + .flags.disable_lp = true, \ + } + +/** + * @brief Video timing configuration structure (1920x1080 30Hz) + * + */ +#define ESP_LCD_LT8912B_VIDEO_TIMING_1920x1080_30Hz() \ + { \ + .hfp = 48, \ + .hs = 32, \ + .hbp = 80, \ + .hact = 1920, \ + .htotal = 2080, \ + .vfp = 3, \ + .vs = 5, \ + .vbp = 8, \ + .vact = 1080, \ + .vtotal = 1096, \ + .h_polarity = 1, \ + .v_polarity = 0, \ + .vic = 0, \ + .aspect_ratio = LT8912B_ASPECT_RATION_16_9, \ + .pclk_mhz = 70, \ + } + +#define LT8912B_1920x1080_PANEL_30HZ_DPI_CONFIG() \ + { \ + .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, \ + .dpi_clock_freq_mhz = 70, \ + .virtual_channel = 0, \ + .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB888, \ + .num_fbs = 1, \ + .video_timing = { \ + .h_size = BSP_LCD_H_RES, \ + .v_size = BSP_LCD_V_RES, \ + .hsync_back_porch = 80, \ + .hsync_pulse_width = 32, \ + .hsync_front_porch = 48, \ + .vsync_back_porch = 8, \ + .vsync_pulse_width = 5, \ + .vsync_front_porch = 3, \ + }, \ + .flags.use_dma2d = true, \ + .flags.disable_lp = true, \ + } + +/** + * @brief Video timing configuration structure (1920x1080 60Hz) + * + */ + +/* This setting is not working yet, it is only for developing and testing */ +#define ESP_LCD_LT8912B_VIDEO_TIMING_1920x1080_60Hz() \ + { \ + .hfp = 48, \ + .hs = 32, \ + .hbp = 80, \ + .hact = 1920, \ + .htotal = 2080, \ + .vfp = 3, \ + .vs = 5, \ + .vbp = 19, \ + .vact = 1080, \ + .vtotal = 1107, \ + .h_polarity = 1, \ + .v_polarity = 0, \ + .vic = 0, \ + .aspect_ratio = LT8912B_ASPECT_RATION_16_9, \ + .pclk_mhz = 120, \ + } + +/* This setting is not working yet, it is only for developing and testing */ +#define LT8912B_1920x1080_PANEL_60HZ_DPI_CONFIG() \ + { \ + .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, \ + .dpi_clock_freq_mhz = 120, \ + .virtual_channel = 0, \ + .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB888, \ + .num_fbs = 1, \ + .video_timing = { \ + .h_size = BSP_LCD_H_RES, \ + .v_size = BSP_LCD_V_RES, \ + .hsync_back_porch = 80, \ + .hsync_pulse_width = 32, \ + .hsync_front_porch = 48, \ + .vsync_back_porch = 19, \ + .vsync_pulse_width = 5, \ + .vsync_front_porch = 3, \ + }, \ + .flags.use_dma2d = true, \ + .flags.disable_lp = true, \ + } + + +#ifdef __cplusplus +} +#endif diff --git a/components/lcd/esp_lcd_lt8912b/license.txt b/components/lcd/esp_lcd_lt8912b/license.txt new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/components/lcd/esp_lcd_lt8912b/license.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docu/pics/Lontium.webp b/docu/pics/Lontium.webp new file mode 100644 index 0000000000000000000000000000000000000000..4b3281d41d09a83da329742035dc087af6ee27f6 GIT binary patch literal 168532 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