| // Copyright 2017 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. |
| |
| #pragma once |
| |
| #include <ddk/device.h> |
| #include <ddk/io-buffer.h> |
| #include <ddk/protocol/platform/device.h> |
| #include <zircon/listnode.h> |
| #include <zircon/types.h> |
| #include <threads.h> |
| |
| typedef struct { |
| uint16_t pixel_clk; |
| uint16_t HActive; |
| uint16_t HBlanking; |
| uint16_t VActive; |
| uint16_t VBlanking; |
| uint16_t HSyncOffset; |
| uint16_t HSyncPulseWidth; |
| uint8_t VSyncOffset; |
| uint8_t VSyncPulseWidth; |
| uint16_t HImageSize; |
| uint16_t VImageSize; |
| uint8_t HBorder; |
| uint8_t VBorder; |
| uint8_t Flags; |
| uint8_t align[9]; |
| } __attribute__((__packed__)) disp_timing_t; |
| |
| typedef struct { |
| uint8_t raw_pixel_clk[2]; /* LSB first */ |
| uint8_t raw_Hact; |
| uint8_t raw_HBlank; |
| uint8_t raw_Hact_HBlank; |
| uint8_t raw_Vact; |
| uint8_t raw_VBlank; |
| uint8_t raw_Vact_VBlank; |
| uint8_t raw_HSyncOff; |
| uint8_t raw_HSyncPW; |
| uint8_t raw_VSyncOff_VSyncPW; |
| uint8_t raw_HSync_VSync_OFF_PW; |
| uint8_t raw_HImageSize; |
| uint8_t raw_VImageSize; |
| uint8_t raw_H_V_ImageSize; |
| uint8_t raw_HBorder; |
| uint8_t raw_VBorder; |
| uint8_t raw_Flags; |
| } detailed_timing_t; |
| |
| typedef struct { |
| uint8_t header[8]; /* Header */ |
| uint8_t id_mfg[2]; /* ID Manufacturer Name */ |
| uint8_t id_pcode[2]; /* ID Produce Code */ |
| uint8_t id_serial[4]; /* ID Serial Number */ |
| uint8_t wom; /* Week of Manufacture */ |
| uint8_t yom; /* Year of Manufacture */ |
| uint8_t version; /* Version #*/ |
| uint8_t revision; /* Revision */ |
| uint8_t vid_input_def; /* Video Input Definition */ |
| uint8_t max_hoz_img_size; /* cm */ |
| uint8_t max_ver_img_size; /* cm */ |
| uint8_t gamma; /* Display transfer characteristics */ |
| uint8_t feature_support; |
| uint8_t color_char[10]; /* Color Characteristics */ |
| uint8_t established_timings1; |
| uint8_t established_timings2; |
| uint8_t mfg_reserved_timings; |
| uint8_t std_timing_id[16]; |
| detailed_timing_t detailed_timing_desc[4]; /* 4 x 18B*/ |
| uint8_t ext_flag; |
| uint8_t cksum; |
| } edid_t; |
| |
| bool edid_has_extension(const uint8_t* edid_buf); |
| zx_status_t edid_get_num_dtd(const uint8_t* edid_buf, uint8_t* num_dtd); |
| zx_status_t edid_parse_display_timing(const uint8_t* edid_buf, detailed_timing_t* raw_dtd, |
| disp_timing_t* disp_timing, uint8_t num_dtd); |
| zx_status_t edid_parse_std_display_timing(const uint8_t* edid_buf, detailed_timing_t* raw_dtd, |
| disp_timing_t* disp_timing); |