diff --git a/components/platform/src/lcd_direct.c b/components/platform/src/lcd_direct.c index 74bce11..6a93e21 100644 --- a/components/platform/src/lcd_direct.c +++ b/components/platform/src/lcd_direct.c @@ -523,7 +523,7 @@ static uint32_t lcd_direct_backlight_duty(uint8_t brightness_percent) return duty; } -static esp_err_t lcd_direct_backlight_init(void) +static esp_err_t lcd_direct_backlight_init(uint8_t initial_brightness_percent) { const ledc_timer_config_t timer_config = { .speed_mode = LEDC_LOW_SPEED_MODE, @@ -540,7 +540,7 @@ static esp_err_t lcd_direct_backlight_init(void) .channel = LCD_DIRECT_BACKLIGHT_PWM_CHANNEL, .intr_type = LEDC_INTR_DISABLE, .timer_sel = LCD_DIRECT_BACKLIGHT_PWM_TIMER, - .duty = lcd_direct_backlight_duty(CONFIG_TQ_SCREEN_BACKLIGHT_BRIGHTNESS_PERCENT), + .duty = lcd_direct_backlight_duty(initial_brightness_percent), .hpoint = 0, }; ESP_RETURN_ON_ERROR(ledc_channel_config(&channel_config), TAG, "backlight PWM channel config failed"); @@ -549,7 +549,7 @@ static esp_err_t lcd_direct_backlight_init(void) "Backlight PWM initialized gpio=%d frequency=%uHz brightness=%d%% active_high=%d", CONFIG_TQ_SCREEN_BACKLIGHT_GPIO, (unsigned)LCD_DIRECT_BACKLIGHT_PWM_FREQUENCY_HZ, - CONFIG_TQ_SCREEN_BACKLIGHT_BRIGHTNESS_PERCENT, + initial_brightness_percent, CONFIG_TQ_SCREEN_BACKLIGHT_ACTIVE_HIGH ? 1 : 0); return ESP_OK; } @@ -574,7 +574,7 @@ static esp_err_t lcd_direct_gpio_init(void) if (CONFIG_TQ_SCREEN_RESET_PIN >= 0) { gpio_set_level(CONFIG_TQ_SCREEN_RESET_PIN, 1); } - return lcd_direct_backlight_init(); + return lcd_direct_backlight_init(0U); } static esp_err_t lcd_direct_panel_init(void) @@ -671,6 +671,22 @@ static esp_err_t lcd_direct_panel_init(void) return ESP_OK; } +static esp_err_t lcd_direct_clear_panel(void) +{ + memset(s_line_buffer, 0, sizeof(s_line_buffer)); + for (uint16_t row_start = 0; row_start < LCD_DIRECT_HEIGHT; + row_start += LCD_DIRECT_ROWS_PER_TRANSFER) { + uint16_t row_count = LCD_DIRECT_HEIGHT - row_start; + if (row_count > LCD_DIRECT_ROWS_PER_TRANSFER) { + row_count = LCD_DIRECT_ROWS_PER_TRANSFER; + } + ESP_RETURN_ON_ERROR(lcd_direct_draw_rows(row_start, row_count), + TAG, + "initial panel clear failed"); + } + return ESP_OK; +} + static uint16_t lcd_direct_color_for_row(uint16_t row, const lcd_direct_request_t *request) { uint16_t band = row / 40U; @@ -1633,6 +1649,18 @@ esp_err_t lcd_direct_init_device(void) ESP_RETURN_ON_ERROR(lcd_direct_gpio_init(), TAG, "gpio init failed"); ESP_RETURN_ON_ERROR(lcd_direct_panel_init(), TAG, "esp_lcd panel init failed"); + ESP_RETURN_ON_ERROR(lcd_direct_clear_panel(), TAG, "panel clear failed"); + + ESP_RETURN_ON_ERROR(ledc_set_duty(LEDC_LOW_SPEED_MODE, + LCD_DIRECT_BACKLIGHT_PWM_CHANNEL, + lcd_direct_backlight_duty( + CONFIG_TQ_SCREEN_BACKLIGHT_BRIGHTNESS_PERCENT)), + TAG, + "backlight brightness set failed"); + ESP_RETURN_ON_ERROR(ledc_update_duty(LEDC_LOW_SPEED_MODE, + LCD_DIRECT_BACKLIGHT_PWM_CHANNEL), + TAG, + "backlight brightness update failed"); s_initialized = true; ESP_LOGI(TAG,