blob: f431581ef676bf0c612797395cc76d42e96d2ed1 [file] [log] [blame] [edit]
// Copyright 2025 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/display-timing-mode-conversion.h"
#include <gtest/gtest.h>
#include "src/graphics/display/lib/api-types/cpp/display-timing.h"
#include "src/graphics/display/lib/api-types/cpp/mode.h"
namespace amlogic_display {
TEST(ToDisplayModeTest, AstroDisplayTiming) {
static constexpr display::DisplayTiming kAstroDisplayPanelTimings = {
.horizontal_active_px = 600,
.horizontal_front_porch_px = 40,
.horizontal_sync_width_px = 24,
.horizontal_back_porch_px = 36,
.vertical_active_lines = 1024,
.vertical_front_porch_lines = 19,
.vertical_sync_width_lines = 2,
.vertical_back_porch_lines = 8,
.pixel_clock_frequency_hz = 44'226'000,
.fields_per_frame = display::FieldsPerFrame::kProgressive,
.hsync_polarity = display::SyncPolarity::kNegative,
.vsync_polarity = display::SyncPolarity::kNegative,
.vblank_alternates = false,
.pixel_repetition = 0,
};
EXPECT_EQ(kAstroDisplayPanelTimings.vertical_field_refresh_rate_millihertz(), 60'000);
display::Mode mode = ToDisplayMode(kAstroDisplayPanelTimings);
EXPECT_EQ(mode.active_area().width(), 600);
EXPECT_EQ(mode.active_area().height(), 1024);
EXPECT_EQ(mode.refresh_rate_millihertz(), 60'000);
}
TEST(ToDisplayModeTest, SherlockDisplayTiming) {
static constexpr display::DisplayTiming kSherlockDisplayPanelTimings = {
.horizontal_active_px = 800,
.horizontal_front_porch_px = 20,
.horizontal_sync_width_px = 20,
.horizontal_back_porch_px = 50,
.vertical_active_lines = 1280,
.vertical_front_porch_lines = 20,
.vertical_sync_width_lines = 4,
.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,
};
EXPECT_EQ(kSherlockDisplayPanelTimings.vertical_field_refresh_rate_millihertz(), 60'000);
display::Mode mode = ToDisplayMode(kSherlockDisplayPanelTimings);
EXPECT_EQ(mode.active_area().width(), 800);
EXPECT_EQ(mode.active_area().height(), 1280);
EXPECT_EQ(mode.refresh_rate_millihertz(), 60'000);
}
TEST(ToDisplayModeTest, NelsonDisplayTiming) {
static constexpr display::DisplayTiming kNelsonDisplayPanelTimings = {
.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,
};
EXPECT_EQ(kNelsonDisplayPanelTimings.vertical_field_refresh_rate_millihertz(), 60'000);
display::Mode mode = ToDisplayMode(kNelsonDisplayPanelTimings);
EXPECT_EQ(mode.active_area().width(), 600);
EXPECT_EQ(mode.active_area().height(), 1024);
EXPECT_EQ(mode.refresh_rate_millihertz(), 60'000);
}
} // namespace amlogic_display