From 48d5fa309fc3a106e531528867406d6a3adb3059 Mon Sep 17 00:00:00 2001 From: Per Persson Date: Fri, 2 Jul 2010 13:14:25 +0200 Subject: HDMI and AV8100: new features * HDMI api, including EDID, CEC, INFOFRAME, audio coniguration, aes key handling, event support. * Automatic detection and handling of av8100 chip version 1 and 2. * Support for av8100/mcde hw trig method using I2SDAT3 (menuconfig). ST Ericsson Change-Id: WP264235 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/2120 Reviewed-by: Dan JOHANSSON Tested-by: Per PERSSON Reviewed-by: Marcel TUNNISSEN Signed-off-by: Mian Yousaf Kaukab Change-Id: Ic205e046988fff7a5d49ae3091559d1fd76768d2 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/2841 --- include/video/hdmi.h | 157 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 132 insertions(+), 25 deletions(-) mode change 100644 => 100755 include/video/hdmi.h (limited to 'include/video/hdmi.h') diff --git a/include/video/hdmi.h b/include/video/hdmi.h old mode 100644 new mode 100755 index 7745d80d147..7aeafb433eb --- a/include/video/hdmi.h +++ b/include/video/hdmi.h @@ -1,7 +1,7 @@ /* * Copyright (C) ST-Ericsson AB 2010 * - * AV8100 driver + * HDMI driver * * Author: Per Persson * for ST-Ericsson. @@ -11,40 +11,147 @@ #ifndef __HDMI__H__ #define __HDMI__H__ -#define HDMI_DRIVER_MINOR_NUMBER 241 -struct hdmi_register { - unsigned char value; - unsigned char offset; -}; - -struct hdmi_command_register { - unsigned char cmd_id; /* input */ - unsigned char buf_len; /* input, output */ - unsigned char buf[128]; /* input, output */ - unsigned char return_status; /* output */ -}; +#define HDMI_CEC_READ_MAXSIZE 16 +#define HDMI_CEC_WRITE_MAXSIZE 15 +#define HDMI_INFOFRAME_MAX_SIZE 27 +#define HDMI_HDCP_FUSEAES_KEYSIZE 16 +#define HDMI_HDCP_AES_BLOCK_START 128 +#define HDMI_HDCP_KSV_BLOCK 40 +#define HDMI_HDCP_AES_NR_OF_BLOCKS 18 +#define HDMI_HDCP_AES_KEYSIZE 16 +#define HDMI_HDCP_AES_KSVSIZE 5 +#define HDMI_HDCP_AES_KSVZEROESSIZE 3 -/* IOCTL return status */ -#define HDMI_COMMAND_RETURN_STATUS_OK 0 -#define HDMI_COMMAND_RETURN_STATUS_FAIL 1 +#define HDMI_STOREASTEXT_TEXT_SIZE 2 +#define HDMI_STOREASTEXT_BIN_SIZE 1 +#define HDMI_PLUGDETEN_TEXT_SIZE 6 +#define HDMI_PLUGDETEN_BIN_SIZE 3 +#define HDMI_EDIDREAD_TEXT_SIZE 4 +#define HDMI_EDIDREAD_BIN_SIZE 2 +#define HDMI_CECEVEN_TEXT_SIZE 2 +#define HDMI_CECEVEN_BIN_SIZE 1 +#define HDMI_CECSEND_TEXT_SIZE_MAX 37 +#define HDMI_CECSEND_TEXT_SIZE_MIN 6 +#define HDMI_CECSEND_BIN_SIZE_MAX 18 +#define HDMI_CECSEND_BIN_SIZE_MIN 3 +#define HDMI_INFOFRSEND_TEXT_SIZE_MIN 8 +#define HDMI_INFOFRSEND_TEXT_SIZE_MAX 63 +#define HDMI_INFOFRSEND_BIN_SIZE_MIN 4 +#define HDMI_INFOFRSEND_BIN_SIZE_MAX 31 +#define HDMI_HDCPEVEN_TEXT_SIZE 2 +#define HDMI_HDCPEVEN_BIN_SIZE 1 +#define HDMI_HDCP_FUSEAES_TEXT_SIZE 34 +#define HDMI_HDCP_FUSEAES_BIN_SIZE 17 +#define HDMI_HDCP_LOADAES_TEXT_SIZE 586 +#define HDMI_HDCP_LOADAES_BIN_SIZE 293 +#define HDMI_HDCPAUTHENCR_TEXT_SIZE 4 +#define HDMI_HDCPAUTHENCR_BIN_SIZE 2 +#define HDMI_EVCLR_TEXT_SIZE 2 +#define HDMI_EVCLR_BIN_SIZE 1 +#define HDMI_AUDIOCFG_TEXT_SIZE 14 +#define HDMI_AUDIOCFG_BIN_SIZE 7 #define HDMI_IOC_MAGIC 0xcc /** IOCTL Operations */ -#define IOC_HDMI_POWER _IOWR(HDMI_IOC_MAGIC, 1, int) -#define IOC_HDMI_ENABLE_INTERRUPTS _IOWR(HDMI_IOC_MAGIC, 2, int) -#define IOC_HDMI_DOWNLOAD_FW _IOWR(HDMI_IOC_MAGIC, 3, int) -#define IOC_HDMI_ONOFF _IOWR(HDMI_IOC_MAGIC, 4, int) - -#define IOC_HDMI_REGISTER_WRITE _IOWR(HDMI_IOC_MAGIC, 5, int) -#define IOC_HDMI_REGISTER_READ _IOWR(HDMI_IOC_MAGIC, 6, int) -#define IOC_HDMI_STATUS_GET _IOWR(HDMI_IOC_MAGIC, 7, int) -#define IOC_HDMI_CONFIGURATION_WRITE _IOWR(HDMI_IOC_MAGIC, 8, int) +#define IOC_PLUG_DETECT_ENABLE _IOWR(HDMI_IOC_MAGIC, 1, int) +#define IOC_EDID_READ _IOWR(HDMI_IOC_MAGIC, 2, int) +#define IOC_CEC_EVENT_ENABLE _IOWR(HDMI_IOC_MAGIC, 3, int) +#define IOC_CEC_READ _IOWR(HDMI_IOC_MAGIC, 4, int) +#define IOC_CEC_SEND _IOWR(HDMI_IOC_MAGIC, 5, int) +#define IOC_INFOFRAME_SEND _IOWR(HDMI_IOC_MAGIC, 6, int) +#define IOC_HDCP_EVENT_ENABLE _IOWR(HDMI_IOC_MAGIC, 7, int) +#define IOC_HDCP_CHKAESOTP _IOWR(HDMI_IOC_MAGIC, 8, int) +#define IOC_HDCP_FUSEAES _IOWR(HDMI_IOC_MAGIC, 9, int) +#define IOC_HDCP_LOADAES _IOWR(HDMI_IOC_MAGIC, 10, int) +#define IOC_HDCP_AUTHENCR_REQ _IOWR(HDMI_IOC_MAGIC, 11, int) +#define IOC_HDCP_STATE_GET _IOWR(HDMI_IOC_MAGIC, 12, int) +#define IOC_REVOCATION_LIST_GET _IOWR(HDMI_IOC_MAGIC, 13, int) +#define IOC_REVOCATION_LIST_SET _IOWR(HDMI_IOC_MAGIC, 14, int) +#define IOC_EVENTS_READ _IOWR(HDMI_IOC_MAGIC, 15, int) +#define IOC_EVENTS_CLEAR _IOWR(HDMI_IOC_MAGIC, 16, int) +#define IOC_AUDIO_CFG _IOWR(HDMI_IOC_MAGIC, 17, int) /* HDMI driver */ +void hdmi_event(enum av8100_hdmi_event); int hdmi_init(void); void hdmi_exit(void); +enum hdmi_event { + HDMI_EVENT_NONE = 0x0, + HDMI_EVENT_HDMI_PLUGIN = 0x1, + HDMI_EVENT_HDMI_PLUGOUT = 0x2, + HDMI_EVENT_CEC = 0x4, + HDMI_EVENT_HDCP = 0x8, +}; + +enum hdmi_hdcp_auth_type { + HDMI_HDCP_AUTH_OFF = 0, + HDMI_HDCP_AUTH_START = 1, + HDMI_HDCP_AUTH_CONT = 2, +}; + +enum hdmi_hdcp_encr_type { + HDMI_HDCP_ENCR_OFF = 0, + HDMI_HDCP_ENCR_OESS = 1, + HDMI_HDCP_ENCR_EESS = 2, +}; + +struct plug_detect { + u8 hdmi_detect_enable; + u8 on_time; + u8 hdmi_off_time; +}; + +struct edid_read { + u8 address; + u8 block_nr; + u8 data_length; + u8 data[128]; +}; + +struct cec_rw { + u8 src; + u8 dest; + u8 length; + u8 data[15]; +}; + +struct info_fr { + u8 type; + u8 ver; + u8 crc; + u8 length; + u8 data[27]; +}; + +struct hdcp_fuseaes { + u8 key[16]; + u8 crc; + u8 result; +}; + +struct hdcp_loadaesall { + u8 ksv[5]; + u8 key[288]; + u8 result; +}; + +struct hdcp_authencr { + u8 auth_type; + u8 encr_type; +}; + +struct audio_cfg { + u8 if_format; + u8 i2s_entries; + u8 freq; + u8 word_length; + u8 format; + u8 if_mode; + u8 mute; +}; + #endif /* __HDMI__H__ */ -- cgit v1.2.3