blob: 6afe3a93d29cf6e1ae242fa06ae3f564bb04f04f [file] [log] [blame]
// Copyright 2023 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/graphics/display/drivers/amlogic-display/panel-config.h"
#include <fuchsia/hardware/dsiimpl/c/banjo.h>
#include <lib/device-protocol/display-panel.h>
#include <zircon/types.h>
#include <cstdint>
#include "src/graphics/display/drivers/amlogic-display/initcodes-inl.h"
#include "src/graphics/display/drivers/amlogic-display/panel/boe-tv070wsm-fitipower-jd9364-astro.h"
#include "src/graphics/display/drivers/amlogic-display/panel/boe-tv070wsm-fitipower-jd9364-nelson.h"
#include "src/graphics/display/drivers/amlogic-display/panel/boe-tv070wsm-fitipower-jd9365.h"
#include "src/graphics/display/drivers/amlogic-display/panel/boe-tv101wxm-fitipower-jd9364.h"
#include "src/graphics/display/drivers/amlogic-display/panel/boe-tv101wxm-fitipower-jd9365.h"
#include "src/graphics/display/drivers/amlogic-display/panel/innolux-p070acb-fitipower-jd9364.h"
#include "src/graphics/display/drivers/amlogic-display/panel/innolux-p101dez-fitipower-jd9364.h"
#include "src/graphics/display/drivers/amlogic-display/panel/kd-kd070d82-fitipower-jd9364.h"
#include "src/graphics/display/drivers/amlogic-display/panel/kd-kd070d82-fitipower-jd9365.h"
#include "src/graphics/display/drivers/amlogic-display/panel/microtech-mtf050fhdi03-novatek-nt35596.h"
#include "src/graphics/display/lib/api-types-cpp/display-timing.h"
namespace amlogic_display {
namespace {
// BOE TV070WSM-TG1
//
// BOE TV070WSM-TG1 spec Section 6.1 "Signal Timing Spec", page 18 covers
// the timings below that aren't fixed by the MIPI DSI specification.
//
// The following timings also satisfy the minimum / maximum requirements
// specified in:
// - JD9364 datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 211-214;
// - JD9365D datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 197-200.
constexpr display::DisplayTiming kBoeTv070wsmPanelTimings = {
.horizontal_active_px = 600,
// The panel datasheet specifies a typical value of 20.
.horizontal_front_porch_px = 40,
.horizontal_sync_width_px = 24,
.horizontal_back_porch_px = 36,
.vertical_active_lines = 1024,
// The panel datasheet specifies a typical value of 6.
.vertical_front_porch_lines = 19,
.vertical_sync_width_lines = 2,
.vertical_back_porch_lines = 8,
// The panel datasheet specifies a typical value of 42.4 MHz, with no
// upper or lower bound.
.pixel_clock_frequency_hz = 44'226'000, // refresh rate: 60 Hz
.fields_per_frame = display::FieldsPerFrame::kProgressive,
.hsync_polarity = display::SyncPolarity::kNegative,
.vsync_polarity = display::SyncPolarity::kNegative,
.vblank_alternates = false,
.pixel_repetition = 0,
};
// BOE TV101WXM-AG0
//
// BOE TV101WXM-AG0 spec Section 6.1 "Signal Timing Spec", page 18 covers
// the timings below that aren't fixed by the MIPI DSI specification.
//
// The following timings also satisfy the minimum / maximum requirements
// specified in:
// - JD9364 datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 211-214;
// - JD9365 datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 197-200.
constexpr display::DisplayTiming kBoeTv101wxmPanelTimings = {
.horizontal_active_px = 800,
// The timings here don't match the minimum timings in the panel datasheet
// or typical timings in the DDIC datasheets.
// The panel datasheet specifies a minimum value of 40, while the DDIC
// datasheets specify a typical value of 18.
.horizontal_front_porch_px = 20,
// This value matches the typical value from the panel datasheet, while the
// DDIC datasheets specify a typical value of 18.
.horizontal_sync_width_px = 20,
// The panel datasheet specifies a minimum value of 20, while the DDIC
// datasheets specify a typical value of 18.
.horizontal_back_porch_px = 50,
.vertical_active_lines = 1280,
.vertical_front_porch_lines = 20,
.vertical_sync_width_lines = 4,
// This value matches the typical value from the panel datasheet, while the
// DDIC datasheets specify a typical value of 10.
.vertical_back_porch_lines = 20,
.pixel_clock_frequency_hz = 70'702'000, // refresh rate: 60 Hz
.fields_per_frame = display::FieldsPerFrame::kProgressive,
.hsync_polarity = display::SyncPolarity::kNegative,
.vsync_polarity = display::SyncPolarity::kNegative,
.vblank_alternates = false,
.pixel_repetition = 0,
};
// K&D KD070D82-39TI-A010
//
// K&D KD070D82-39TI-A010 spec Section 6.1 "Timing Setting Table", page 8
// covers the timings below that aren't fixed by the MIPI DSI specification.
//
// These are the typical timings specified in the panel datasheet.
//
// The following timings also satisfy the minimum / maximum requirements
// specified in:
// - JD9364 datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 211-214;
// - JD9365 datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 197-200.
constexpr display::DisplayTiming kKdKd070d82PanelTimings = {
.horizontal_active_px = 600,
.horizontal_front_porch_px = 80,
.horizontal_sync_width_px = 10,
.horizontal_back_porch_px = 80,
.vertical_active_lines = 1024,
.vertical_front_porch_lines = 20,
.vertical_sync_width_lines = 6,
.vertical_back_porch_lines = 20,
.pixel_clock_frequency_hz = 49'434'000, // refresh rate: 60 Hz
.fields_per_frame = display::FieldsPerFrame::kProgressive,
.hsync_polarity = display::SyncPolarity::kNegative,
.vsync_polarity = display::SyncPolarity::kNegative,
.vblank_alternates = false,
.pixel_repetition = 0,
};
constexpr PanelConfig kBoeTv070wsmFitipowerJd9364AstroPanelConfig = {
.name = "BOE_TV070WSM_FITIPOWER_JD9364_ASTRO",
.dsi_on = lcd_init_sequence_BOE_TV070WSM_FITIPOWER_JD9364_ASTRO,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// BOE TV070WSM-TG1 spec, Section 6.1 "Signal Timing Spec", page 18 states
// that the panel supports a MIPI (presumably D-PHY) clock between
// 145-250 MHz.
//
// JD9364 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 207
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 180'000'000,
.display_timing = kBoeTv070wsmPanelTimings,
};
// See PANEL_BOE_TV070WSM_FITIPOWER_JD9364_NELSON for model information.
constexpr PanelConfig kBoeTv070wsmFitipowerJd9364NelsonPanelConfig = {
.name = "BOE_TV070WSM_FITIPOWER_JD9364_NELSON",
.dsi_on = lcd_init_sequence_BOE_TV070WSM_FITIPOWER_JD9364_NELSON,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// BOE TV070WSM-TG1 spec, Section 6.1 "Signal Timing Spec", page 18 states
// that the panel supports a MIPI (presumably D-PHY) clock between
// 145-250 MHz.
//
// JD9364 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 207
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 180'000'000,
.display_timing = kBoeTv070wsmPanelTimings,
};
// See PANEL_INNOLUX_P070ACB_FITIPOWER_JD9364 for model information.
constexpr PanelConfig kInnoluxP070acbFitipowerJd9364PanelConfig = {
.name = "INNOLUX_P070ACB_FITIPOWER_JD9364",
.dsi_on = lcd_init_sequence_INNOLUX_P070ACB_FITIPOWER_JD9364,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// Innolux P070ACB-DB0 spec Section 3.2.2.1.1 "High Speed Mode", page 11
// states that during a 4-lane D-PHY transmission, the allowed range of the
// DSI (presumably D-PHY) clock period is between 4ns-8ns. Therefore, the
// panel-supported clock lane frequency is between 1/(8ns) = 125 MHz and
// 1/(4ns) = 250 MHz.
//
// JD9364 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 207
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 200'000'000,
// Innolux P070ACB-DB0 spec Section 3.5 "Signal Timing Specifications",
// page 20 covers the timings below that aren't fixed by the MIPI DSI
// specification.
//
// These are the typical values specified in the datasheet.
//
// The following timings also satisfy the minimum / maximum requirements
// specified in:
// - JD9364 datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 211-214;
// - JD9365D datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 197-200.
.display_timing =
{
.horizontal_active_px = 600,
.horizontal_front_porch_px = 80,
.horizontal_sync_width_px = 10,
.horizontal_back_porch_px = 80,
.vertical_active_lines = 1024,
.vertical_front_porch_lines = 20,
.vertical_sync_width_lines = 6,
.vertical_back_porch_lines = 20,
.pixel_clock_frequency_hz = 49'434'000, // refresh rate: 60 Hz
.fields_per_frame = display::FieldsPerFrame::kProgressive,
.hsync_polarity = display::SyncPolarity::kNegative,
.vsync_polarity = display::SyncPolarity::kNegative,
.vblank_alternates = false,
.pixel_repetition = 0,
},
};
// See PANEL_BOE_TV101WXM_FITIPOWER_JD9364 for model information.
constexpr PanelConfig kBoeTv101wxmFitipowerJd9364PanelConfig = {
.name = "BOE_TV101WXM_FITIPOWER_JD9364",
.dsi_on = lcd_init_sequence_BOE_TV101WXM_FITIPOWER_JD9364,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// The current value exceeds both the typical value of the panel spec and
// the limit of the display driver IC.
//
// BOE TV101WXM-AG0 spec, Section 6.1 "Signal Timing Spec", page 18 states
// that the panel supports a typical MIPI (presumably D-PHY) clock of
// 250 MHz.
//
// JD9364 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 207
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 283'000'000,
.display_timing = kBoeTv101wxmPanelTimings,
};
// See PANEL_INNOLUX_P101DEZ_FITIPOWER_JD9364 for model information.
constexpr PanelConfig kInnoluxP101dezFitipowerJd9364PanelConfig = {
.name = "INNOLUX_P101DEZ_FITIPOWER_JD9364",
.dsi_on = lcd_init_sequence_INNOLUX_P101DEZ_FITIPOWER_JD9364,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// The current value exceeds the frequency limits of the display driver IC.
//
// JD9364 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 207
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 283'000'000,
// The following timings satisfy the minimum / maximum requirements
// specified in:
// - JD9364 datasheet, Section 11.3.3 "Timings for DSI Video Mode",
// pages 211-214;
.display_timing =
{
.horizontal_active_px = 800,
// The DDIC datasheet specifies a typical value of 18.
.horizontal_front_porch_px = 46,
// The DDIC datasheet specifies a typical value of 18.
.horizontal_sync_width_px = 24,
// The DDIC datasheet specifies a typical value of 18.
.horizontal_back_porch_px = 20,
.vertical_active_lines = 1280,
.vertical_front_porch_lines = 20,
.vertical_sync_width_lines = 4,
// The DDIC datasheet specifies a typical value of 10.
.vertical_back_porch_lines = 20,
.pixel_clock_frequency_hz = 70'702'000, // refresh rate: 60 Hz
.fields_per_frame = display::FieldsPerFrame::kProgressive,
.hsync_polarity = display::SyncPolarity::kNegative,
.vsync_polarity = display::SyncPolarity::kNegative,
.vblank_alternates = false,
.pixel_repetition = 0,
},
};
// See PANEL_BOE_TV101WXM_FITIPOWER_JD9365 for model information.
constexpr PanelConfig kBoeTv101wxmFitipowerJd9365PanelConfig = {
.name = "BOE_TV101WXM_FITIPOWER_JD9365",
.dsi_on = lcd_init_sequence_BOE_TV101WXM_FITIPOWER_JD9365,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// The current value exceeds both the typical value of the panel spec and
// the limit of the display driver IC.
//
// BOE TV101WXM-AG0 spec, Section 6.1 "Signal Timing Spec", page 18 states
// that the panel supports a typical MIPI (presumably D-PHY) clock of
// 250 MHz.
//
// JD9365 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 193
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 283'000'000,
.display_timing = kBoeTv101wxmPanelTimings,
};
// See PANEL_BOE_TV070WSM_FITIPOWER_JD9365 for model information.
constexpr PanelConfig kBoeTv070wsmFitipowerJd9365PanelConfig = {
.name = "BOE_TV070WSM_FITIPOWER_JD9365",
.dsi_on = lcd_init_sequence_BOE_TV070WSM_FITIPOWER_JD9365,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// BOE TV070WSM-TG1 spec, Section 6.1 "Signal Timing Spec", page 18 states
// that the panel supports a MIPI (presumably D-PHY) clock between
// 145-250 MHz.
//
// JD9365 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 193
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 180'000'000,
.display_timing = kBoeTv070wsmPanelTimings,
};
// See PANEL_KD_KD070D82_FITIPOWER_JD9364 for model information.
constexpr PanelConfig kKdKd070d82FitipowerJd9364PanelConfig = {
.name = "KD_KD070D82_FITIPOWER_JD9364",
.dsi_on = lcd_init_sequence_KD_KD070D82_FITIPOWER_JD9364,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// The panel datasheet doesn't specify the D-PHY clock frequency limit.
//
// JD9364 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 207
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 200'000'000,
.display_timing = kKdKd070d82PanelTimings,
};
// See PANEL_KD_KD070D82_FITIPOWER_JD9365 for model information.
constexpr PanelConfig kKdKd070d82FitipowerJd9365PanelConfig = {
.name = "KD_KD070D82_FITIPOWER_JD9365",
.dsi_on = lcd_init_sequence_KD_KD070D82_FITIPOWER_JD9365,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForAstroSherlockNelson,
.power_off = kLcdPowerOffSequenceForAstroSherlockNelson,
.dphy_data_lane_count = 4,
// The panel datasheet doesn't specify the D-PHY clock frequency limit.
//
// JD9365 datasheet, Section 11.3.2 "DSI D-PHY electronic characteristics",
// Table 11.11 "Reverse HS Data Transmission Timing Parameters", page 193
// states that the per-lane data rate must be between 80-500 Mbps (for
// 4-lane 24-bit pixel data). Therefore, the DDIC-supported D-PHY clock
// lane frequency is between 40-250 MHz.
.maximum_dphy_clock_lane_frequency_hz = 200'000'000,
.display_timing = kKdKd070d82PanelTimings,
};
// See PANEL_MICROTECH_MTF050FHDI03_NOVATEK_NT35596 for model information.
constexpr PanelConfig kMicrotechMtf050fhdi03NovatekNt35596PanelConfig = {
.name = "MICROTECH_MTF050FHDI03_NOVATEK_NT35596",
.dsi_on = lcd_init_sequence_MICROTECH_MTF050FHDI03_NOVATEK_NT35596,
.dsi_off = lcd_shutdown_sequence,
.power_on = kLcdPowerOnSequenceForVim3Ts050,
.power_off = kLcdPowerOffSequenceForVim3Ts050,
.dphy_data_lane_count = 4,
// Microtech MTF050FHDI-03 spec, Section 3.4 "MIPI-DSI characteristics",
// page 9 states that the allowed range of the DSI (presumably D-PHY) clock
// period is between 2ns and 25ns.
// Therefore, the clock lane frequency must be between 1/(25ns) = 40 MHz
// and 1/(2ns) = 500 MHz.
//
// This exactly matches the value stated in the Novatek NT35596 DDIC
// datasheet v0.05, Section 5.5.2.4.5 "Parameters", page 132, and
// Section 7.3.1 "MIPI Interface Characteristics", page 222.
.maximum_dphy_clock_lane_frequency_hz = 500'000'000,
// Microtech MTF050FHDI-03 spec doesn't contain the display timing values.
//
// NT35596 datasheet doesn't have any constraints on the timing parameters
// (where all the constraints are TBD) in Section 5.5.2.4.5 "Parameters",
// page 132.
//
// The following values were provided by Microtech engineers and tweaked
// by Khadas.
.display_timing =
{
.horizontal_active_px = 1080,
.horizontal_front_porch_px = 15,
.horizontal_sync_width_px = 2,
.horizontal_back_porch_px = 23,
.vertical_active_lines = 1920,
.vertical_front_porch_lines = 2,
.vertical_sync_width_lines = 4,
.vertical_back_porch_lines = 7,
.pixel_clock_frequency_hz = 120'000'000, // refresh rate: 55.428 Hz
.fields_per_frame = display::FieldsPerFrame::kProgressive,
.hsync_polarity = display::SyncPolarity::kNegative,
.vsync_polarity = display::SyncPolarity::kNegative,
.vblank_alternates = false,
.pixel_repetition = 0,
},
};
} // namespace
const PanelConfig* GetPanelConfig(uint32_t panel_type) {
// LINT.IfChange
switch (panel_type) {
case PANEL_BOE_TV070WSM_FITIPOWER_JD9364_ASTRO:
return &kBoeTv070wsmFitipowerJd9364AstroPanelConfig;
case PANEL_INNOLUX_P070ACB_FITIPOWER_JD9364:
return &kInnoluxP070acbFitipowerJd9364PanelConfig;
case PANEL_BOE_TV101WXM_FITIPOWER_JD9364:
return &kBoeTv101wxmFitipowerJd9364PanelConfig;
case PANEL_INNOLUX_P101DEZ_FITIPOWER_JD9364:
return &kInnoluxP101dezFitipowerJd9364PanelConfig;
case PANEL_BOE_TV101WXM_FITIPOWER_JD9365:
return &kBoeTv101wxmFitipowerJd9365PanelConfig;
case PANEL_BOE_TV070WSM_FITIPOWER_JD9365:
return &kBoeTv070wsmFitipowerJd9365PanelConfig;
case PANEL_KD_KD070D82_FITIPOWER_JD9364:
return &kKdKd070d82FitipowerJd9364PanelConfig;
case PANEL_KD_KD070D82_FITIPOWER_JD9365:
return &kKdKd070d82FitipowerJd9365PanelConfig;
case PANEL_MICROTECH_MTF050FHDI03_NOVATEK_NT35596:
return &kMicrotechMtf050fhdi03NovatekNt35596PanelConfig;
case PANEL_BOE_TV070WSM_FITIPOWER_JD9364_NELSON:
return &kBoeTv070wsmFitipowerJd9364NelsonPanelConfig;
}
// LINT.ThenChange(//src/graphics/display/lib/device-protocol-display/include/lib/device-protocol/display-panel.h)
return nullptr;
}
display_setting_t ToDisplaySetting(const PanelConfig& config) {
const int64_t maximum_per_data_lane_megabit_per_second =
(config.maximum_per_data_lane_bit_per_second() + 500'000) / 1'000'000;
return display_setting_t{
.lane_num = static_cast<uint32_t>(config.dphy_data_lane_count),
.bit_rate_max = static_cast<uint32_t>(maximum_per_data_lane_megabit_per_second),
.lcd_clock = static_cast<uint32_t>(config.display_timing.pixel_clock_frequency_hz),
.h_active = static_cast<uint32_t>(config.display_timing.horizontal_active_px),
.v_active = static_cast<uint32_t>(config.display_timing.vertical_active_lines),
.h_period = static_cast<uint32_t>(config.display_timing.horizontal_total_px()),
.v_period = static_cast<uint32_t>(config.display_timing.vertical_total_lines()),
.hsync_width = static_cast<uint32_t>(config.display_timing.horizontal_sync_width_px),
.hsync_bp = static_cast<uint32_t>(config.display_timing.horizontal_back_porch_px),
.hsync_pol =
config.display_timing.hsync_polarity == display::SyncPolarity::kPositive ? 1u : 0u,
.vsync_width = static_cast<uint32_t>(config.display_timing.vertical_sync_width_lines),
.vsync_bp = static_cast<uint32_t>(config.display_timing.vertical_back_porch_lines),
.vsync_pol =
config.display_timing.vsync_polarity == display::SyncPolarity::kPositive ? 1u : 0u,
};
}
} // namespace amlogic_display