1 /* 2 * Copyright (c) 2008, Google Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #ifndef __ASM_ARCH_MSM7200_MDDI_H 30 #define __ASM_ARCH_MSM7200_MDDI_H 31 32 #define MSM_MDDI_BASE 0xAA600000 33 34 /* see 80-VA736-2 C pp 776-787 */ 35 36 #define MDDI_REG(off) (MSM_MDDI_BASE + (off)) 37 38 #define MDDI_CMD MDDI_REG(0x0000) 39 #define MDDI_VERSION MDDI_REG(0x0004) 40 #define MDDI_PRI_PTR MDDI_REG(0x0008) 41 #define MDDI_SEC_PTR MDDI_REG(0x000C) 42 #define MDDI_BPS MDDI_REG(0x0010) 43 #define MDDI_SPM MDDI_REG(0x0014) 44 #define MDDI_INT MDDI_REG(0x0018) 45 46 #define MDDI_INT_PRI_PTR_READ (1 << 0) 47 #define MDDI_INT_SEC_PTR_READ (1 << 1) 48 #define MDDI_INT_REV_DATA_AVAIL (1 << 2) 49 #define MDDI_INT_DISP_REQ (1 << 3) 50 #define MDDI_INT_PRI_UNDERFLOW (1 << 4) 51 #define MDDI_INT_SEC_UNDERFLOW (1 << 5) 52 #define MDDI_INT_REV_OVERFLOW (1 << 6) 53 #define MDDI_INT_CRC_ERROR (1 << 7) 54 #define MDDI_INT_MDDI_IN (1 << 8) 55 #define MDDI_INT_PRI_OVERWRITE (1 << 9) 56 #define MDDI_INT_SEC_OVERWRITE (1 << 10) 57 #define MDDI_INT_REV_OVERWRITE (1 << 11) 58 #define MDDI_INT_DMA_FAILURE (1 << 12) 59 #define MDDI_INT_LINK_ACTIVE (1 << 13) 60 #define MDDI_INT_IN_HIBERNATION (1 << 14) 61 #define MDDI_INT_PRI_LINK_LIST_DONE (1 << 15) 62 #define MDDI_INT_SEC_LINK_LIST_DONE (1 << 16) 63 #define MDDI_INT_NO_REQ_PKTS_PENDING (1 << 17) 64 #define MDDI_INT_RTD_FAILURE (1 << 18) 65 #define MDDI_INT_REV_PKT_RECEIVED (1 << 19) 66 #define MDDI_INT_REV_PKTS_AVAIL (1 << 20) 67 68 #define MDDI_INTEN MDDI_REG(0x001C) 69 #define MDDI_REV_PTR MDDI_REG(0x0020) 70 #define MDDI_REV_SIZE MDDI_REG(0x0024) 71 #define MDDI_STAT MDDI_REG(0x0028) 72 73 #define MDDI_STAT_LINK_ACTIVE (1 << 0) 74 #define MDDI_STAT_NEW_REV_PTR (1 << 1) 75 #define MDDI_STAT_NEW_PRI_PTR (1 << 2) 76 #define MDDI_STAT_NEW_SEC_PTR (1 << 3) 77 #define MDDI_STAT_IN_HIBERNATION (1 << 4) 78 #define MDDI_STAT_PRI_LINK_LIST_DONE (1 << 5) 79 #define MDDI_STAT_SEC_LINK_LIST_DONE (1 << 6) 80 #define MDDI_STAT_SEND_TIMING_PKT (1 << 7) 81 #define MDDI_STAT_SEND_REV_ENCAP_WITH_FLAGS (1 << 8) 82 #define MDDI_STAT_SEND_POWER_DOWN (1 << 9) 83 #define MDDI_STAT_DO_HANDSHAKE (1 << 10) 84 #define MDDI_STAT_RTD_MEAS_FAIL (1 << 11) 85 #define MDDI_STAT_CLIENT_WAKEUP_REQ (1 << 12) 86 #define MDDI_STAT_DMA_ABORT (1 << 13) 87 #define MDDI_STAT_REV_OVERFLOW_RESET (1 << 14) 88 #define MDDI_STAT_FORCE_NEW_REV_PTR (1 << 15) 89 #define MDDI_STAT_CRC_ERRORS (1 << 16) 90 91 #define MDDI_REV_RATE_DIV MDDI_REG(0x002C) 92 #define MDDI_REV_CRC_ERR MDDI_REG(0x0030) 93 #define MDDI_TA1_LEN MDDI_REG(0x0034) 94 #define MDDI_TA2_LEN MDDI_REG(0x0038) 95 #define MDDI_TEST_BUS MDDI_REG(0x003C) 96 #define MDDI_TEST MDDI_REG(0x0040) 97 #define MDDI_REV_PKT_CNT MDDI_REG(0x0044) 98 #define MDDI_DRIVE_HI MDDI_REG(0x0048) 99 #define MDDI_DRIVE_LO MDDI_REG(0x004C) 100 #define MDDI_DISP_WAKE MDDI_REG(0x0050) 101 #define MDDI_REV_ENCAP_SZ MDDI_REG(0x0054) 102 #define MDDI_RTD_VAL MDDI_REG(0x0058) 103 #define MDDI_MDP_VID_FMT_DES MDDI_REG(0x005C) 104 #define MDDI_MDP_VID_PIX_ATTR MDDI_REG(0x0060) 105 #define MDDI_MDP_VID_CLIENTID MDDI_REG(0x0064) 106 #define MDDI_PAD_CTL MDDI_REG(0x0068) 107 #define MDDI_DRIVER_START_CNT MDDI_REG(0x006C) 108 #define MDDI_NEXT_PRI_PTR MDDI_REG(0x0070) 109 #define MDDI_NEXT_SEC_PTR MDDI_REG(0x0074) 110 #define MDDI_MISR_CTL MDDI_REG(0x0078) 111 #define MDDI_MISR_DATA MDDI_REG(0x007C) 112 #define MDDI_SF_CNT MDDI_REG(0x0080) 113 #define MDDI_MF_CNT MDDI_REG(0x0084) 114 #define MDDI_CURR_REV_PTR MDDI_REG(0x0088) 115 #define MDDI_CORE_VER MDDI_REG(0x008C) 116 117 #define CMD_POWER_DOWN 0x0100 118 #define CMD_POWER_UP 0x0200 119 #define CMD_HIBERNATE 0x0300 120 #define CMD_RESET 0x0400 121 #define CMD_IGNORE 0x0500 122 #define CMD_REV_ENC_REQ 0x0600 123 #define CMD_RTD_MEASURE 0x0700 124 #define CMD_LINK_ACTIVE 0x0900 125 #define CMD_PERIODIC_REV_ENC 0x0A00 126 #define CMD_FORCE_NEW_REV_PTR 0x0C00 127 128 #define CMD_GET_CLIENT_CAP 0x0601 129 #define CMD_GET_CLIENT_STATUS 0x0602 130 131 #if 1 132 #define FORMAT_18BPP 0x5666 133 #define FORMAT_24BPP 0x5888 134 #define FORMAT_16BPP 0x5565 135 #else 136 #define FORMAT_MONOCHROME (0 << 13) 137 #define FORMAT_PALETTE (1 << 13) 138 #define FORMAT_RGB (2 << 13) 139 #define FORMAT_YCBCR422 (3 << 13) 140 #define FORMAT_BAYER (4 << 13) 141 #endif 142 143 #define PIXATTR_BOTH_EYES 3 144 #define PIXATTR_LEFT_EYE 2 145 #define PIXATTR_RIGHT_EYE 1 146 #define PIXATTR_ALT_DISPLAY 0 147 148 #define PIXATTR_PROGRESSIVE 0 149 #define PIXATTR_INTERLACED (1 << 2) 150 #define PIXATTR_ALTERNATE (1 << 3) 151 152 #define PIXATTR_IGNORE_LRTB (1 << 5) 153 154 #define PIXATTR_TO_REFRESH (0 << 6) 155 #define PIXATTR_TO_OFFLINE (1 << 6) 156 #define PIXATTR_TO_ALL (3 << 6) 157 158 #define PIXATTR_LAST_ROW (1 << 15) 159 160 #define TYPE_VIDEO_STREAM 16 161 #define TYPE_CLIENT_CAPS 66 162 #define TYPE_REGISTER_ACCESS 146 163 #define TYPE_CLIENT_STATUS 70 164 165 typedef struct mddi_video_stream mddi_video_stream; 166 typedef struct mddi_register_access mddi_register_access; 167 typedef struct mddi_client_caps mddi_client_caps; 168 169 typedef struct mddi_llentry mddi_llentry; 170 171 struct __attribute__((packed)) mddi_video_stream 172 { 173 unsigned short length; /* length in bytes excluding this field */ 174 unsigned short type; /* MDDI_TYPE_VIDEO_STREAM */ 175 unsigned short client_id; /* set to zero */ 176 177 unsigned short format; 178 unsigned short pixattr; 179 180 unsigned short left; 181 unsigned short top; 182 unsigned short right; 183 unsigned short bottom; 184 185 unsigned short start_x; 186 unsigned short start_y; 187 188 unsigned short pixels; 189 190 unsigned short crc; 191 unsigned short reserved; 192 }; 193 194 struct __attribute__((packed)) mddi_register_access 195 { 196 unsigned short length; 197 unsigned short type; 198 unsigned short client_id; 199 200 unsigned short rw_info; /* flag below | count of reg_data */ 201 #define MDDI_WRITE (0 << 14) 202 #define MDDI_READ (2 << 14) 203 #define MDDI_READ_RESP (3 << 14) 204 205 unsigned reg_addr; 206 unsigned short crc; /* 16 bit crc of the above */ 207 208 unsigned reg_data; /* "list" of 3byte data values */ 209 }; 210 211 struct __attribute__((packed)) mddi_llentry { 212 unsigned short flags; 213 unsigned short header_count; 214 unsigned short data_count; 215 void *data; 216 mddi_llentry *next; 217 unsigned short reserved; 218 union { 219 mddi_video_stream v; 220 mddi_register_access r; 221 unsigned _[12]; 222 } u; 223 }; 224 225 struct __attribute__((packed)) mddi_client_caps 226 { 227 unsigned short length; 228 unsigned short type; 229 unsigned short client_id; 230 231 unsigned short protocol_ver; 232 unsigned short min_protocol_ver; 233 unsigned short data_rate_cap; 234 unsigned char interface_type_cap; 235 unsigned char num_alt_displays; 236 unsigned short postcal_data_rate; 237 unsigned short bitmap_width; 238 unsigned short bitmap_height; 239 unsigned short display_window_width; 240 unsigned short display_window_height; 241 unsigned cmap_size; 242 unsigned short cmap_rgb_width; 243 unsigned short rgb_cap; 244 unsigned char mono_cap; 245 unsigned char reserved1; 246 unsigned short ycbcr_cap; 247 unsigned short bayer_cap; 248 unsigned short alpha_cursor_planes; 249 unsigned client_feature_cap; 250 unsigned char max_video_frame_rate_cap; 251 unsigned char min_video_frame_rate_cap; 252 unsigned short min_sub_frame_rate; 253 unsigned short audio_buf_depth; 254 unsigned short audio_channel_cap; 255 unsigned short audio_sampe_rate_rap; 256 unsigned char audio_sample_res; 257 unsigned char mic_audio_sample_res; 258 unsigned short mic_sample_rate_cap; 259 unsigned char keyboard_data_fmt; 260 unsigned char pointing_device_data_fmt; 261 unsigned short content_protection_type; 262 unsigned short manufacturer_name; 263 unsigned short product_code; 264 unsigned short reserved3; 265 unsigned serial_no; 266 unsigned char week_of_manufacture; 267 unsigned char year_of_manufacture; 268 269 unsigned short crc; 270 }; 271 272 #endif 273