1818#include "freertos/task.h"
1919#include "freertos/semphr.h"
2020
21- #if CONFIG_IDF_TARGET_ESP32S3 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 )
21+ #if ( CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 ) )
2222#include "esp_lcd_panel_rgb.h"
2323#endif
2424
25- #if (CONFIG_IDF_TARGET_ESP32P4 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 ))
25+ #if (CONFIG_SOC_MIPI_DSI_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 ))
2626#include "esp_lcd_mipi_dsi.h"
2727#endif
2828
@@ -57,10 +57,10 @@ static lv_disp_t *lvgl_port_add_disp_priv(const lvgl_port_display_cfg_t *disp_cf
5757static lvgl_port_display_ctx_t * lvgl_port_get_display_ctx (lv_disp_t * disp );
5858#if LVGL_PORT_HANDLE_FLUSH_READY
5959static bool lvgl_port_flush_io_ready_callback (esp_lcd_panel_io_handle_t panel_io , esp_lcd_panel_io_event_data_t * edata , void * user_ctx );
60- #if (CONFIG_IDF_TARGET_ESP32S3 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 ))
60+ #if (CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 ))
6161static bool lvgl_port_flush_rgb_vsync_ready_callback (esp_lcd_panel_handle_t panel_io , const esp_lcd_rgb_panel_event_data_t * edata , void * user_ctx );
6262#endif
63- #if (CONFIG_IDF_TARGET_ESP32P4 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 ))
63+ #if (CONFIG_SOC_MIPI_DSI_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 ))
6464static bool lvgl_port_flush_dpi_panel_ready_callback (esp_lcd_panel_handle_t panel_io , esp_lcd_dpi_panel_event_data_t * edata , void * user_ctx );
6565static bool lvgl_port_flush_dpi_vsync_ready_callback (esp_lcd_panel_handle_t panel_io , esp_lcd_dpi_panel_event_data_t * edata , void * user_ctx );
6666#endif
@@ -100,6 +100,7 @@ lv_display_t *lvgl_port_add_disp_dsi(const lvgl_port_display_cfg_t *disp_cfg, co
100100{
101101 assert (dsi_cfg != NULL );
102102 const lvgl_port_disp_priv_cfg_t priv_cfg = {
103+ .disp_type = LVGL_PORT_DISP_TYPE_DSI ,
103104 .avoid_tearing = dsi_cfg -> flags .avoid_tearing ,
104105 };
105106 lv_disp_t * disp = lvgl_port_add_disp_priv (disp_cfg , & priv_cfg );
@@ -109,7 +110,7 @@ lv_display_t *lvgl_port_add_disp_dsi(const lvgl_port_display_cfg_t *disp_cfg, co
109110 /* Set display type */
110111 disp_ctx -> disp_type = LVGL_PORT_DISP_TYPE_DSI ;
111112
112- #if (CONFIG_IDF_TARGET_ESP32P4 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 ))
113+ #if (CONFIG_SOC_MIPI_DSI_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 ))
113114 esp_lcd_dpi_panel_event_callbacks_t cbs = {0 };
114115 if (dsi_cfg -> flags .avoid_tearing ) {
115116 cbs .on_refresh_done = lvgl_port_flush_dpi_vsync_ready_callback ;
@@ -130,6 +131,7 @@ lv_display_t *lvgl_port_add_disp_rgb(const lvgl_port_display_cfg_t *disp_cfg, co
130131{
131132 assert (rgb_cfg != NULL );
132133 const lvgl_port_disp_priv_cfg_t priv_cfg = {
134+ .disp_type = LVGL_PORT_DISP_TYPE_RGB ,
133135 .avoid_tearing = rgb_cfg -> flags .avoid_tearing ,
134136 };
135137 lv_disp_t * disp = lvgl_port_add_disp_priv (disp_cfg , & priv_cfg );
@@ -139,16 +141,14 @@ lv_display_t *lvgl_port_add_disp_rgb(const lvgl_port_display_cfg_t *disp_cfg, co
139141 /* Set display type */
140142 disp_ctx -> disp_type = LVGL_PORT_DISP_TYPE_RGB ;
141143
142- #if (CONFIG_IDF_TARGET_ESP32S3 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 ))
144+ #if (CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 ))
143145 /* Register done callback */
144146 const esp_lcd_rgb_panel_event_callbacks_t vsync_cbs = {
145147 .on_vsync = lvgl_port_flush_rgb_vsync_ready_callback ,
146148 };
147149
148150 const esp_lcd_rgb_panel_event_callbacks_t bb_cbs = {
149- #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (6 , 0 , 0 )
150- .on_frame_buf_complete = lvgl_port_flush_rgb_vsync_ready_callback ,
151- #elif ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 1 , 2 )
151+ #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 1 , 2 )
152152 .on_bounce_frame_finish = lvgl_port_flush_rgb_vsync_ready_callback ,
153153#endif
154154 };
@@ -159,7 +159,7 @@ lv_display_t *lvgl_port_add_disp_rgb(const lvgl_port_display_cfg_t *disp_cfg, co
159159 ESP_ERROR_CHECK (esp_lcd_rgb_panel_register_event_callbacks (disp_ctx -> panel_handle , & vsync_cbs , & disp_ctx -> disp_drv ));
160160 }
161161#else
162- ESP_RETURN_ON_FALSE (false, NULL , TAG , "RGB is supported only on ESP32S3 and from IDF 5.0!" );
162+ ESP_RETURN_ON_FALSE (false, NULL , TAG , "RGB is supported only on ESP32S3/ESP32P4 and from IDF 5.0!" );
163163#endif
164164 }
165165
@@ -254,12 +254,16 @@ static lv_disp_t *lvgl_port_add_disp_priv(const lvgl_port_display_cfg_t *disp_cf
254254
255255 /* Use RGB internal buffers for avoid tearing effect */
256256 if (priv_cfg && priv_cfg -> avoid_tearing ) {
257- #if CONFIG_IDF_TARGET_ESP32S3 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 )
258- buffer_size = disp_cfg -> hres * disp_cfg -> vres ;
259- ESP_GOTO_ON_ERROR (esp_lcd_rgb_panel_get_frame_buffer (disp_cfg -> panel_handle , 2 , (void * )& buf1 , (void * )& buf2 ), err , TAG , "Get RGB buffers failed" );
260- #elif CONFIG_IDF_TARGET_ESP32P4 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 )
261- buffer_size = disp_cfg -> hres * disp_cfg -> vres ;
262- ESP_GOTO_ON_ERROR (esp_lcd_dpi_panel_get_frame_buffer (disp_cfg -> panel_handle , 2 , (void * )& buf1 , (void * )& buf2 ), err , TAG , "Get RGB buffers failed" );
257+ #if CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 )
258+ if (priv_cfg -> disp_type == LVGL_PORT_DISP_TYPE_RGB ) {
259+ buffer_size = disp_cfg -> hres * disp_cfg -> vres ;
260+ ESP_GOTO_ON_ERROR (esp_lcd_rgb_panel_get_frame_buffer (disp_cfg -> panel_handle , 2 , (void * )& buf1 , (void * )& buf2 ), err , TAG , "Get RGB buffers failed" );
261+ }
262+ #elif CONFIG_SOC_MIPI_DSI_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 )
263+ if (priv_cfg -> disp_type == LVGL_PORT_DISP_TYPE_DSI ) {
264+ buffer_size = disp_cfg -> hres * disp_cfg -> vres ;
265+ ESP_GOTO_ON_ERROR (esp_lcd_dpi_panel_get_frame_buffer (disp_cfg -> panel_handle , 2 , (void * )& buf1 , (void * )& buf2 ), err , TAG , "Get RGB buffers failed" );
266+ }
263267#endif
264268
265269 trans_sem = xSemaphoreCreateCounting (1 , 0 );
@@ -378,7 +382,7 @@ static bool lvgl_port_flush_io_ready_callback(esp_lcd_panel_io_handle_t panel_io
378382 return false;
379383}
380384
381- #if (CONFIG_IDF_TARGET_ESP32P4 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 ))
385+ #if (CONFIG_SOC_MIPI_DSI_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 3 , 0 ))
382386static bool lvgl_port_flush_dpi_panel_ready_callback (esp_lcd_panel_handle_t panel_io , esp_lcd_dpi_panel_event_data_t * edata , void * user_ctx )
383387{
384388 BaseType_t taskAwake = pdFALSE ;
@@ -413,7 +417,7 @@ static bool lvgl_port_flush_dpi_vsync_ready_callback(esp_lcd_panel_handle_t pane
413417}
414418#endif
415419
416- #if (CONFIG_IDF_TARGET_ESP32S3 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 ))
420+ #if (CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 ))
417421static bool lvgl_port_flush_rgb_vsync_ready_callback (esp_lcd_panel_handle_t panel_io , const esp_lcd_rgb_panel_event_data_t * edata , void * user_ctx )
418422{
419423 BaseType_t need_yield = pdFALSE ;
0 commit comments