1// Copyright 2017 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7#include <ddk/device.h> 8#include <ddk/io-buffer.h> 9#include <ddk/protocol/platform-device.h> 10#include <zircon/listnode.h> 11#include <zircon/types.h> 12#include <threads.h> 13 14typedef struct { 15 uint16_t pixel_clk; 16 uint16_t HActive; 17 uint16_t HBlanking; 18 uint16_t VActive; 19 uint16_t VBlanking; 20 uint16_t HSyncOffset; 21 uint16_t HSyncPulseWidth; 22 uint8_t VSyncOffset; 23 uint8_t VSyncPulseWidth; 24 uint16_t HImageSize; 25 uint16_t VImageSize; 26 uint8_t HBorder; 27 uint8_t VBorder; 28 uint8_t Flags; 29 uint8_t align[9]; 30} __attribute__((__packed__)) disp_timing_t; 31 32typedef struct { 33 uint8_t raw_pixel_clk[2]; /* LSB first */ 34 uint8_t raw_Hact; 35 uint8_t raw_HBlank; 36 uint8_t raw_Hact_HBlank; 37 uint8_t raw_Vact; 38 uint8_t raw_VBlank; 39 uint8_t raw_Vact_VBlank; 40 uint8_t raw_HSyncOff; 41 uint8_t raw_HSyncPW; 42 uint8_t raw_VSyncOff_VSyncPW; 43 uint8_t raw_HSync_VSync_OFF_PW; 44 uint8_t raw_HImageSize; 45 uint8_t raw_VImageSize; 46 uint8_t raw_H_V_ImageSize; 47 uint8_t raw_HBorder; 48 uint8_t raw_VBorder; 49 uint8_t raw_Flags; 50} detailed_timing_t; 51 52typedef struct { 53 uint8_t header[8]; /* Header */ 54 uint8_t id_mfg[2]; /* ID Manfucturer Name */ 55 uint8_t id_pcode[2]; /* ID Produce Code */ 56 uint8_t id_serial[4]; /* ID Serial Number */ 57 uint8_t wom; /* Week of Manufacture */ 58 uint8_t yom; /* Year of Manufacture */ 59 uint8_t version; /* Version #*/ 60 uint8_t revision; /* Revision */ 61 uint8_t vid_input_def; /* Video Input Definition */ 62 uint8_t max_hoz_img_size; /* cm */ 63 uint8_t max_ver_img_size; /* cm */ 64 uint8_t gamma; /* Display tranfser characteristics */ 65 uint8_t feature_support; 66 uint8_t color_char[10]; /* Color Characteristics */ 67 uint8_t established_timings1; 68 uint8_t established_timings2; 69 uint8_t mfg_reserved_timings; 70 uint8_t std_timing_id[16]; 71 detailed_timing_t detailed_timing_desc[4]; /* 4 x 18B*/ 72 uint8_t ext_flag; 73 uint8_t cksum; 74} edid_t; 75 76bool edid_has_extension(const uint8_t* edid_buf); 77zx_status_t edid_get_num_dtd(const uint8_t* edid_buf, uint8_t* num_dtd); 78zx_status_t edid_parse_display_timing(const uint8_t* edid_buf, detailed_timing_t* raw_dtd, 79 disp_timing_t* disp_timing, uint8_t num_dtd); 80zx_status_t edid_parse_std_display_timing(const uint8_t* edid_buf, detailed_timing_t* raw_dtd, 81 disp_timing_t* disp_timing);