fix(platform): prevent LCD artifacts during startup
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user