1 /*\r
2 * Copyright (c) 2016, Texas Instruments Incorporated\r
3 * All rights reserved.\r
4 *\r
5 * Redistribution and use in source and binary forms, with or without\r
6 * modification, are permitted provided that the following conditions\r
7 * are met:\r
8 *\r
9 * * Redistributions of source code must retain the above copyright\r
10 * notice, this list of conditions and the following disclaimer.\r
11 *\r
12 * * Redistributions in binary form must reproduce the above copyright\r
13 * notice, this list of conditions and the following disclaimer in the\r
14 * documentation and/or other materials provided with the distribution.\r
15 *\r
16 * * Neither the name of Texas Instruments Incorporated nor the names of\r
17 * its contributors may be used to endorse or promote products derived\r
18 * from this software without specific prior written permission.\r
19 *\r
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
31 *\r
32 */\r
33 \r
34 /**\r
35 *\r
36 * \file evmk2g_hdmi.h\r
37 *\r
38 * \brief This is the header file for hdmi\r
39 ******************************************************************************/\r
40 \r
41 #ifndef _EVMK2G_HDMI_H_\r
42 #define _EVMK2G_HDMI_H_\r
43 \r
44 /**************************************************************************\r
45 ** Macro Definitions\r
46 **************************************************************************/\r
47 \r
48 /** Macros for I2C slave address and instance */\r
49 #define HDMI_SLAVE_ADDR (0x3B)\r
50 #define HDMI_I2C_INSTANCE (1)\r
51 \r
52 /** Macros definitons for return types */\r
53 #define HDMI_ERR (-1)\r
54 #define HDMI_SUCCESS (0)\r
55 \r
56 /** Macros to unmute/mute HDMI audio */\r
57 #define HDMI_AUDIO_MUTE (1)\r
58 #define HDMI_AUDIO_UNMUTE (0)\r
59 \r
60 /** Macros for HDMI GPIO pin */\r
61 #define HDMI_ENABLE_GPIO_INSTANCE (0)\r
62 #define HDMI_ENABLE_GPIO_PIN (84)\r
63 #define HDMI_INT_GPIO_INSTANCE (1)\r
64 #define HDMI_INT_GPIO_PIN (31)\r
65 \r
66 /** Macro for maximum number of bytes to read edid */\r
67 #define HDMI_EDID_MAX_LEN (256)\r
68 \r
69 /** Registers for HDMI controller */\r
70 #define HDMI_REG_CHIPID0 (0x1B)\r
71 #define HDMI_REG_TPI_RQB (0xC7)\r
72 \r
73 #define VERTICAL_FREQ (0x3C)\r
74 \r
75 /** HDMI TPI Registers */\r
76 #define HDMI_TPI_VIDEO_DATA_BASE_REG (0x00)\r
77 #define HDMI_TPI_PIXEL_CLK_LSB_REG (HDMI_TPI_VIDEO_DATA_BASE_REG + 0x00)\r
78 #define HDMI_TPI_PIXEL_CLK_MSB_REG (HDMI_TPI_VIDEO_DATA_BASE_REG + 0x01)\r
79 #define HDMI_TPI_VFREQ_LSB_REG (HDMI_TPI_VIDEO_DATA_BASE_REG + 0x02)\r
80 #define HDMI_TPI_VFREQ_MSB_REG (HDMI_TPI_VIDEO_DATA_BASE_REG + 0x03)\r
81 #define HDMI_TPI_PIXELS_LSB_REG (HDMI_TPI_VIDEO_DATA_BASE_REG + 0x04)\r
82 #define HDMI_TPI_PIXELS_MSB_REG (HDMI_TPI_VIDEO_DATA_BASE_REG + 0x05)\r
83 #define HDMI_TPI_LINES_LSB_REG (HDMI_TPI_VIDEO_DATA_BASE_REG + 0x06)\r
84 #define HDMI_TPI_LINES_MSB_REG (HDMI_TPI_VIDEO_DATA_BASE_REG + 0x07)\r
85 \r
86 #define HDMI_TPI_PIXEL_REPETITION_REG (0x08)\r
87 \r
88 #define HDMI_TPI_AVI_INOUT_BASE_REG (0x09)\r
89 #define HDMI_TPI_AVI_IN_FORMAT_REG (HDMI_TPI_AVI_INOUT_BASE_REG + 0x00)\r
90 #define HDMI_TPI_AVI_OUT_FORMAT_REG (HDMI_TPI_AVI_INOUT_BASE_REG + 0x01)\r
91 \r
92 #define HDMI_SYS_CTRL_DATA_REG (0x1A)\r
93 #define HDMI_TPI_POWER_STATE_CTRL_REG (0x1E)\r
94 \r
95 #define HDMI_REG_1F (0x1F)\r
96 #define HDMI_REG_20 (0x20)\r
97 #define HDMI_REG_21 (0x21)\r
98 #define HDMI_REG_22 (0x22)\r
99 #define HDMI_REG_23 (0x23)\r
100 #define HDMI_REG_24 (0x24)\r
101 #define HDMI_REG_25 (0x25)\r
102 #define HDMI_REG_26 (0x26)\r
103 #define HDMI_REG_27 (0x27)\r
104 #define HDMI_REG_BC (0xBC)\r
105 #define HDMI_REG_BD (0xBD)\r
106 #define HDMI_REG_BE (0xBE)\r
107 \r
108 /** Macros for HDCP */\r
109 #define HDMI_TPI_HDCP_QUERYDATA_REG (0x29)\r
110 #define HDMI_TPI_HDCP_CONTROLDATA_REG (0x2A)\r
111 \r
112 /** Macros for HDMI_TPI_AVI_OUTPUT_FORMAT */\r
113 #define TPI_AVI_OUTPUT_CONV_BT709 (1 << 4)\r
114 #define TPI_AVI_OUTPUT_CONV_BT601 (0 << 4)\r
115 #define TPI_AVI_OUTPUT_RANGE_LIMITED (2 << 2)\r
116 #define TPI_AVI_OUTPUT_RANGE_FULL (1 << 2)\r
117 #define TPI_AVI_OUTPUT_RANGE_AUTO (0 << 2)\r
118 #define TPI_AVI_OUTPUT_COLORSPACE_RGBDVI (3 << 0)\r
119 #define TPI_AVI_OUTPUT_COLORSPACE_YUV422 (2 << 0)\r
120 #define TPI_AVI_OUTPUT_COLORSPACE_YUV444 (1 << 0)\r
121 #define TPI_AVI_OUTPUT_COLORSPACE_RGBHDMI (0 << 0)\r
122 \r
123 /** Macros for HDMI_SYS_CTRL_DATA_REG */\r
124 #define TPI_SYS_CTRL_POWER_DOWN (1 << 4)\r
125 #define TPI_SYS_CTRL_POWER_ACTIVE (0 << 4)\r
126 #define TPI_SYS_CTRL_AV_MUTE (1 << 3)\r
127 #define TPI_SYS_CTRL_DDC_BUS_REQUEST (1 << 2)\r
128 #define TPI_SYS_CTRL_DDC_BUS_GRANTED (1 << 1)\r
129 #define TPI_SYS_CTRL_OUTPUT_MODE_HDMI (1 << 0)\r
130 #define TPI_SYS_CTRL_OUTPUT_MODE_DVI (0 << 0)\r
131 \r
132 /** Macros for ratio of TDMS Clock to input Video Clock */\r
133 #define TPI_CLK_RATIO_HALF (0 << 6)\r
134 #define TPI_CLK_RATIO_1X (1 << 6)\r
135 #define TPI_CLK_RATIO_2X (2 << 6)\r
136 #define TPI_CLK_RATIO_4X (3 << 6)\r
137 \r
138 /** Macros for HDMI_TPI_DEVICE_POWER_STATE */\r
139 #define TPI_AVI_POWER_STATE_D3 (3 << 0)\r
140 #define TPI_AVI_POWER_STATE_D2 (2 << 0)\r
141 #define TPI_AVI_POWER_STATE_D0 (0 << 0)\r
142 \r
143 /** Macros for HDMI_TPI_PIXEL_REPETITION */\r
144 #define TPI_AVI_PIXEL_REP_BUS_24BIT (1 << 5)\r
145 #define TPI_AVI_PIXEL_REP_BUS_12BIT (0 << 5)\r
146 #define TPI_AVI_PIXEL_REP_RISING_EDGE (1 << 4)\r
147 #define TPI_AVI_PIXEL_REP_FALLING_EDGE (0 << 4)\r
148 #define TPI_AVI_PIXEL_REP_4X (3 << 0)\r
149 #define TPI_AVI_PIXEL_REP_2X (1 << 0)\r
150 #define TPI_AVI_PIXEL_REP_NONE (0 << 0)\r
151 \r
152 /** Macros for HDMI_TPI_AVI_INPUT_FORMAT */\r
153 #define TPI_AVI_INPUT_BITMODE_12BIT (1 << 7)\r
154 #define TPI_AVI_INPUT_BITMODE_8BIT (0 << 7)\r
155 #define TPI_AVI_INPUT_DITHER (1 << 6)\r
156 #define TPI_AVI_INPUT_RANGE_LIMITED (2 << 2)\r
157 #define TPI_AVI_INPUT_RANGE_FULL (1 << 2)\r
158 #define TPI_AVI_INPUT_RANGE_AUTO (0 << 2)\r
159 #define TPI_AVI_INPUT_COLORSPACE_BLACK (3 << 0)\r
160 #define TPI_AVI_INPUT_COLORSPACE_YUV422 (2 << 0)\r
161 #define TPI_AVI_INPUT_COLORSPACE_YUV444 (1 << 0)\r
162 #define TPI_AVI_INPUT_COLORSPACE_RGB (0 << 0)\r
163 \r
164 /** Macors for Stream Header Data */\r
165 #define HDMI_SH_PCM (0x1 << 4)\r
166 #define HDMI_SH_TWO_CHANNELS (0x1 << 0)\r
167 #define HDMI_SH_44KHz (0x2 << 2)\r
168 #define HDMI_SH_48KHz (0x3 << 2)\r
169 #define HDMI_SH_16BIT (0x1 << 0)\r
170 #define HDMI_SH_24BIT (0x3 << 0)\r
171 #define HDMI_SH_SPKR_FLFR (0x0)\r
172 #define HDMI_SH_0dB_ATUN (0x0)\r
173 \r
174 \r
175 /**************************************************************************\r
176 ** API function Prototypes\r
177 **************************************************************************/\r
178 \r
179 /**\r
180 *\r
181 * \brief Initializes the HDMI controller.\r
182 *\r
183 * \param NULL.\r
184 *\r
185 * \return NONE.\r
186 *\r
187 */\r
188 int8_t hdmiInit(void);\r
189 \r
190 /**\r
191 *\r
192 * \brief This function is used to set all the registers to enable\r
193 * the HDMI transmitter.\r
194 *\r
195 * \param NULL.\r
196 *\r
197 * \return HDMI_SUCCESS - On Success.\r
198 * HDMI_ERR - On Failure.\r
199 *\r
200 */\r
201 int8_t hdmiHwEnable(void);\r
202 \r
203 /**\r
204 * \brief Enables the power state of HDMI controller.\r
205 *\r
206 * \return HDMI_SUCCESS - On Success\r
207 * HDMI_ERR - On Failure\r
208 *\r
209 */\r
210 int8_t hdmiConnect(void);\r
211 \r
212 /**\r
213 * \brief Reads the HDMI edid information.\r
214 *\r
215 * \param data [IN] Pointer to the data buffer\r
216 * \param dataLen [IN] Length of edid data to be read.\r
217 *\r
218 * \return HDMI_SUCCESS - On Success\r
219 * HDMI_ERR - On Failure\r
220 *\r
221 */\r
222 int8_t hdmiReadEdid(uint8_t *data, uint32_t dataLen);\r
223 \r
224 /**\r
225 *\r
226 * \brief This function is used to check the HDMI chip version.\r
227 *\r
228 * \param chipVer : Pointer to the buffer passed from test app.\r
229 *\r
230 * \return HDMI_SUCCESS - On Success.\r
231 * HDMI_ERR - On Failure.\r
232 *\r
233 */\r
234 int8_t hdmiProbeChipVersion(uint8_t *chipVer);\r
235 \r
236 /**\r
237 *\r
238 * \brief Configures HDMI audio\r
239 *\r
240 * \param NULL.\r
241 *\r
242 * \return HDMI_SUCCESS - On Success\r
243 * HDMI_ERR - On Failure\r
244 *\r
245 */\r
246 int8_t hdmiAudioConfigure(void);\r
247 \r
248 #endif /* _EVMK2G_HDMI_H_ */\r