113 lines
No EOL
3.4 KiB
C
113 lines
No EOL
3.4 KiB
C
/*
|
|
* Copyright (C) Texas Instruments - http://www.ti.com/
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef _EDID_PARSER_
|
|
#define _EDID_PARSER_
|
|
|
|
#define EDID_SIZE 256
|
|
#define MAX_VIC_CODES_PER_3D_FORMAT 16
|
|
|
|
struct edid_t;
|
|
|
|
enum datablock_id {
|
|
DATABLOCK_AUDIO = 1,
|
|
DATABLOCK_VIDEO = 2,
|
|
DATABLOCK_VENDOR = 3,
|
|
DATABLOCK_SPEAKERS = 4,
|
|
};
|
|
|
|
enum hdmi_3d_format {
|
|
HDMI_FRAME_PACKING = 0,
|
|
HDMI_FIELD_ALTERNATIVE = 1,
|
|
HDMI_LINE_ALTERNATIVE = 2,
|
|
HDMI_SIDE_BY_SIDE_FULL = 3,
|
|
HDMI_L_DEPTH = 4,
|
|
HDMI_L_DEPTH_GFX_GFX_DEPTH = 5,
|
|
HDMI_TOPBOTTOM = 6,
|
|
HDMI_SIDE_BY_SIDE_HALF = 8,
|
|
};
|
|
|
|
enum hdmi_3d_format_bits {
|
|
HDMI_FRAME_PACKING_BIT = 1 << HDMI_FRAME_PACKING,
|
|
HDMI_FIELD_ALTERNATIVE_BIT = 1 << HDMI_FIELD_ALTERNATIVE,
|
|
HDMI_LINE_ALTERNATIVE_BIT = 1 << HDMI_LINE_ALTERNATIVE,
|
|
HDMI_SIDE_BY_SIDE_FULL_BIT = 1 << HDMI_SIDE_BY_SIDE_FULL,
|
|
HDMI_L_DEPTH_BIT = 1 << HDMI_L_DEPTH ,
|
|
HDMI_L_DEPTH_GFX_GFX_DEPTH_BIT = 1 << HDMI_L_DEPTH_GFX_GFX_DEPTH,
|
|
HDMI_TOPBOTTOM_BIT = 1 << HDMI_TOPBOTTOM,
|
|
HDMI_SIDE_BY_SIDE_HALF_BIT = 1 << HDMI_SIDE_BY_SIDE_HALF,
|
|
HDMI_SIDE_BY_SIDE_HALF_QUINCUNX_BIT = 1 << 15,
|
|
};
|
|
|
|
//ALL = both horizontal and quincunx modes are supported
|
|
//HDMI_SS_QUINCUNX_ALL = all quincunx subsampling modes are supported
|
|
//OL = Odd left viewHorizontal sub
|
|
//OR = Odd right view
|
|
//ER = Even left view
|
|
//EL = Even right view
|
|
enum hdmi_3d_subsampling {
|
|
HDMI_SS_HORZANDQUINCUNX = 0,
|
|
HDMI_SS_HORIZONTAL = 1,
|
|
HDMI_SS_QUINCUNX_ALL = 6,
|
|
HDMI_SS_QUINCUNX_OLOR = 7,
|
|
HDMI_SS_QUINCUNX_OLER = 8,
|
|
HDMI_SS_QUINCUNX_ELOR = 9,
|
|
HDMI_SS_QUINCUNX_ELER = 10,
|
|
HDMI_SS_VERTICAL = 0xF0000,
|
|
HDMI_SS_NONE = 0xF0001,
|
|
};
|
|
|
|
enum hdmi_scan_type {
|
|
HDMI_SCAN_PROGRESSIVE,
|
|
HDMI_SCAN_INTERLACED,
|
|
};
|
|
|
|
struct svd_info_t {
|
|
uint32_t xres;
|
|
uint32_t yres;
|
|
uint32_t hz;
|
|
enum hdmi_scan_type scan_type;
|
|
char name[9];
|
|
};
|
|
|
|
struct svd_t {
|
|
uint8_t code;
|
|
bool native;
|
|
struct svd_info_t info;
|
|
};
|
|
|
|
struct hdmi_s3d_format_vic_info_t {
|
|
uint8_t vic_pos;
|
|
enum hdmi_3d_subsampling subsampling;
|
|
};
|
|
|
|
struct hdmi_s3d_format_info_t {
|
|
enum hdmi_3d_format format;
|
|
unsigned int num_valid_vic;
|
|
struct hdmi_s3d_format_vic_info_t vic_info[MAX_VIC_CODES_PER_3D_FORMAT];
|
|
};
|
|
|
|
int edid_parser_init(struct edid_t **edid, const uint8_t *raw_edid_data);
|
|
void edid_parser_deinit(struct edid_t *edid);
|
|
|
|
bool edid_s3d_capable(struct edid_t *edid);
|
|
bool edid_supports_s3d_format(struct edid_t *edid, enum hdmi_3d_format format);
|
|
const struct hdmi_s3d_format_info_t * edid_get_s3d_format_info(struct edid_t *edid, enum hdmi_3d_format format);
|
|
|
|
void edid_get_svd_list(struct edid_t *edid, struct svd_t **list, unsigned int *num_elements);
|
|
const struct svd_t *edid_get_svd_descriptor(struct edid_t *edid, uint8_t vic_pos);
|
|
|
|
#endif //_EDID_PARSER_
|