@@ -21,6 +21,8 @@ esp_err_t esp_lcd_new_dsi_bus(const esp_lcd_dsi_bus_config_t *bus_config, esp_lc
2121{
2222 esp_err_t ret = ESP_OK ;
2323 ESP_RETURN_ON_FALSE (bus_config && ret_bus , ESP_ERR_INVALID_ARG , TAG , "invalid argument" );
24+ ESP_RETURN_ON_FALSE (bus_config -> num_data_lanes <= MIPI_DSI_LL_MAX_DATA_LANES ,
25+ ESP_ERR_INVALID_ARG , TAG , "invalid number of data lanes %d" , bus_config -> num_data_lanes );
2426 ESP_RETURN_ON_FALSE (bus_config -> lane_bit_rate_mbps >= MIPI_DSI_LL_MIN_PHY_MBPS &&
2527 bus_config -> lane_bit_rate_mbps <= MIPI_DSI_LL_MAX_PHY_MBPS , ESP_ERR_INVALID_ARG , TAG ,
2628 "invalid lane bit rate %" PRIu32 , bus_config -> lane_bit_rate_mbps );
@@ -64,11 +66,16 @@ esp_err_t esp_lcd_new_dsi_bus(const esp_lcd_dsi_bus_config_t *bus_config, esp_lc
6466 esp_pm_lock_acquire (dsi_bus -> pm_lock );
6567#endif
6668
69+ // if the number of data lanes is not assigned, fallback to the maximum number of data lanes
70+ int num_data_lanes = bus_config -> num_data_lanes ;
71+ if (num_data_lanes == 0 ) {
72+ num_data_lanes = MIPI_DSI_LL_MAX_DATA_LANES ;
73+ }
6774 // initialize HAL context
6875 mipi_dsi_hal_config_t hal_config = {
6976 .bus_id = bus_id ,
7077 .lane_bit_rate_mbps = bus_config -> lane_bit_rate_mbps ,
71- .num_data_lanes = bus_config -> num_data_lanes ,
78+ .num_data_lanes = num_data_lanes ,
7279 };
7380 mipi_dsi_hal_init (& dsi_bus -> hal , & hal_config );
7481 mipi_dsi_hal_context_t * hal = & dsi_bus -> hal ;
@@ -84,7 +91,7 @@ esp_err_t esp_lcd_new_dsi_bus(const esp_lcd_dsi_bus_config_t *bus_config, esp_lc
8491 while (!mipi_dsi_phy_ll_is_pll_locked (hal -> host )) {
8592 vTaskDelay (pdMS_TO_TICKS (1 ));
8693 }
87- while (!mipi_dsi_phy_ll_are_lanes_stopped (hal -> host )) {
94+ while (!mipi_dsi_phy_ll_are_lanes_stopped (hal -> host , num_data_lanes )) {
8895 vTaskDelay (pdMS_TO_TICKS (1 ));
8996 }
9097
0 commit comments