aboutsummaryrefslogtreecommitdiff
path: root/include/msm7k/mddi.h
blob: 619655e96be218845e418e33eaa4cc9bfa7051be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
/*
 * Copyright (c) 2008, Google Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the 
 *    distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef __ASM_ARCH_MSM7200_MDDI_H
#define __ASM_ARCH_MSM7200_MDDI_H

#define MSM_MDDI_BASE 0xAA600000

/* see 80-VA736-2 C pp 776-787 */

#define MDDI_REG(off) (MSM_MDDI_BASE + (off))

#define MDDI_CMD               MDDI_REG(0x0000)
#define MDDI_VERSION           MDDI_REG(0x0004)
#define MDDI_PRI_PTR           MDDI_REG(0x0008)
#define MDDI_SEC_PTR           MDDI_REG(0x000C)
#define MDDI_BPS               MDDI_REG(0x0010)
#define MDDI_SPM               MDDI_REG(0x0014)
#define MDDI_INT               MDDI_REG(0x0018)

#define MDDI_INT_PRI_PTR_READ          (1 << 0)
#define MDDI_INT_SEC_PTR_READ          (1 << 1)
#define MDDI_INT_REV_DATA_AVAIL        (1 << 2)
#define MDDI_INT_DISP_REQ              (1 << 3)
#define MDDI_INT_PRI_UNDERFLOW         (1 << 4)
#define MDDI_INT_SEC_UNDERFLOW         (1 << 5)
#define MDDI_INT_REV_OVERFLOW          (1 << 6)
#define MDDI_INT_CRC_ERROR             (1 << 7)
#define MDDI_INT_MDDI_IN               (1 << 8)
#define MDDI_INT_PRI_OVERWRITE         (1 << 9)
#define MDDI_INT_SEC_OVERWRITE         (1 << 10)
#define MDDI_INT_REV_OVERWRITE         (1 << 11)
#define MDDI_INT_DMA_FAILURE           (1 << 12)
#define MDDI_INT_LINK_ACTIVE           (1 << 13)
#define MDDI_INT_IN_HIBERNATION        (1 << 14)
#define MDDI_INT_PRI_LINK_LIST_DONE    (1 << 15)
#define MDDI_INT_SEC_LINK_LIST_DONE    (1 << 16)
#define MDDI_INT_NO_REQ_PKTS_PENDING   (1 << 17)
#define MDDI_INT_RTD_FAILURE           (1 << 18)
#define MDDI_INT_REV_PKT_RECEIVED      (1 << 19)
#define MDDI_INT_REV_PKTS_AVAIL        (1 << 20)

#define MDDI_INTEN             MDDI_REG(0x001C)
#define MDDI_REV_PTR           MDDI_REG(0x0020)
#define MDDI_REV_SIZE          MDDI_REG(0x0024)
#define MDDI_STAT              MDDI_REG(0x0028)

#define MDDI_STAT_LINK_ACTIVE                (1 << 0)
#define MDDI_STAT_NEW_REV_PTR                (1 << 1)
#define MDDI_STAT_NEW_PRI_PTR                (1 << 2)
#define MDDI_STAT_NEW_SEC_PTR                (1 << 3)
#define MDDI_STAT_IN_HIBERNATION             (1 << 4)
#define MDDI_STAT_PRI_LINK_LIST_DONE         (1 << 5)
#define MDDI_STAT_SEC_LINK_LIST_DONE         (1 << 6)
#define MDDI_STAT_SEND_TIMING_PKT            (1 << 7)
#define MDDI_STAT_SEND_REV_ENCAP_WITH_FLAGS  (1 << 8)
#define MDDI_STAT_SEND_POWER_DOWN            (1 << 9)
#define MDDI_STAT_DO_HANDSHAKE               (1 << 10)
#define MDDI_STAT_RTD_MEAS_FAIL              (1 << 11)
#define MDDI_STAT_CLIENT_WAKEUP_REQ          (1 << 12)
#define MDDI_STAT_DMA_ABORT                  (1 << 13)
#define MDDI_STAT_REV_OVERFLOW_RESET         (1 << 14)
#define MDDI_STAT_FORCE_NEW_REV_PTR          (1 << 15)
#define MDDI_STAT_CRC_ERRORS                 (1 << 16)

#define MDDI_REV_RATE_DIV      MDDI_REG(0x002C)
#define MDDI_REV_CRC_ERR       MDDI_REG(0x0030)
#define MDDI_TA1_LEN           MDDI_REG(0x0034)
#define MDDI_TA2_LEN           MDDI_REG(0x0038)
#define MDDI_TEST_BUS          MDDI_REG(0x003C)
#define MDDI_TEST              MDDI_REG(0x0040)
#define MDDI_REV_PKT_CNT       MDDI_REG(0x0044)
#define MDDI_DRIVE_HI          MDDI_REG(0x0048)
#define MDDI_DRIVE_LO          MDDI_REG(0x004C)
#define MDDI_DISP_WAKE         MDDI_REG(0x0050)
#define MDDI_REV_ENCAP_SZ      MDDI_REG(0x0054)
#define MDDI_RTD_VAL           MDDI_REG(0x0058)
#define MDDI_MDP_VID_FMT_DES   MDDI_REG(0x005C)
#define MDDI_MDP_VID_PIX_ATTR  MDDI_REG(0x0060)
#define MDDI_MDP_VID_CLIENTID  MDDI_REG(0x0064)
#define MDDI_PAD_CTL           MDDI_REG(0x0068)
#define MDDI_DRIVER_START_CNT  MDDI_REG(0x006C)
#define MDDI_NEXT_PRI_PTR      MDDI_REG(0x0070)
#define MDDI_NEXT_SEC_PTR      MDDI_REG(0x0074)
#define MDDI_MISR_CTL          MDDI_REG(0x0078)
#define MDDI_MISR_DATA         MDDI_REG(0x007C)
#define MDDI_SF_CNT            MDDI_REG(0x0080)
#define MDDI_MF_CNT            MDDI_REG(0x0084)
#define MDDI_CURR_REV_PTR      MDDI_REG(0x0088)
#define MDDI_CORE_VER          MDDI_REG(0x008C)

#define CMD_POWER_DOWN         0x0100
#define CMD_POWER_UP           0x0200
#define CMD_HIBERNATE          0x0300
#define CMD_RESET              0x0400
#define CMD_IGNORE             0x0500
#define CMD_REV_ENC_REQ        0x0600
#define CMD_RTD_MEASURE        0x0700
#define CMD_LINK_ACTIVE        0x0900
#define CMD_PERIODIC_REV_ENC   0x0A00
#define CMD_FORCE_NEW_REV_PTR  0x0C00

#define CMD_GET_CLIENT_CAP     0x0601
#define CMD_GET_CLIENT_STATUS  0x0602

#if 1
#define FORMAT_18BPP           0x5666
#define FORMAT_24BPP           0x5888
#define FORMAT_16BPP           0x5565
#else
#define FORMAT_MONOCHROME      (0 << 13)
#define FORMAT_PALETTE         (1 << 13)
#define FORMAT_RGB             (2 << 13)
#define FORMAT_YCBCR422        (3 << 13)
#define FORMAT_BAYER           (4 << 13)
#endif

#define PIXATTR_BOTH_EYES      3
#define PIXATTR_LEFT_EYE       2
#define PIXATTR_RIGHT_EYE      1
#define PIXATTR_ALT_DISPLAY    0

#define PIXATTR_PROGRESSIVE    0
#define PIXATTR_INTERLACED     (1 << 2)
#define PIXATTR_ALTERNATE      (1 << 3)

#define PIXATTR_IGNORE_LRTB    (1 << 5)

#define PIXATTR_TO_REFRESH     (0 << 6)
#define PIXATTR_TO_OFFLINE     (1 << 6)
#define PIXATTR_TO_ALL         (3 << 6)

#define PIXATTR_LAST_ROW       (1 << 15)

#define TYPE_VIDEO_STREAM      16
#define TYPE_CLIENT_CAPS       66
#define TYPE_REGISTER_ACCESS   146
#define TYPE_CLIENT_STATUS     70

typedef struct mddi_video_stream mddi_video_stream;
typedef struct mddi_register_access mddi_register_access;
typedef struct mddi_client_caps mddi_client_caps;

typedef struct mddi_llentry mddi_llentry;

struct __attribute__((packed)) mddi_video_stream 
{
    unsigned short length;      /* length in bytes excluding this field */
    unsigned short type;        /* MDDI_TYPE_VIDEO_STREAM */
    unsigned short client_id;   /* set to zero */
    
    unsigned short format;
    unsigned short pixattr;

    unsigned short left;
    unsigned short top;
    unsigned short right;
    unsigned short bottom;

    unsigned short start_x;
    unsigned short start_y;

    unsigned short pixels;

    unsigned short crc;
    unsigned short reserved;
};

struct __attribute__((packed)) mddi_register_access
{
    unsigned short length;
    unsigned short type;
    unsigned short client_id;

    unsigned short rw_info;    /* flag below | count of reg_data */
#define MDDI_WRITE     (0 << 14)
#define MDDI_READ      (2 << 14)
#define MDDI_READ_RESP (3 << 14)
    
    unsigned reg_addr;
    unsigned short crc;        /* 16 bit crc of the above */

    unsigned reg_data;         /* "list" of 3byte data values */
};

struct __attribute__((packed)) mddi_llentry {
    unsigned short flags;
    unsigned short header_count;
    unsigned short data_count;
    void *data;
    mddi_llentry *next;
    unsigned short reserved;
    union {
        mddi_video_stream v;
        mddi_register_access r;
        unsigned _[12];
    } u;
};

struct __attribute__((packed)) mddi_client_caps 
{
    unsigned short length;
    unsigned short type;
    unsigned short client_id;

    unsigned short protocol_ver;
    unsigned short min_protocol_ver;
    unsigned short data_rate_cap;
    unsigned char interface_type_cap;
    unsigned char num_alt_displays;
    unsigned short postcal_data_rate;
    unsigned short bitmap_width;
    unsigned short bitmap_height;
    unsigned short display_window_width;
    unsigned short display_window_height;
    unsigned cmap_size;
    unsigned short cmap_rgb_width;
    unsigned short rgb_cap;
    unsigned char mono_cap;
    unsigned char reserved1;
    unsigned short ycbcr_cap;
    unsigned short bayer_cap;
    unsigned short alpha_cursor_planes;
    unsigned client_feature_cap;
    unsigned char max_video_frame_rate_cap;
    unsigned char min_video_frame_rate_cap;
    unsigned short min_sub_frame_rate;
    unsigned short audio_buf_depth;
    unsigned short audio_channel_cap;
    unsigned short audio_sampe_rate_rap;
    unsigned char audio_sample_res;
    unsigned char mic_audio_sample_res;
    unsigned short mic_sample_rate_cap;
    unsigned char keyboard_data_fmt;
    unsigned char pointing_device_data_fmt;
    unsigned short content_protection_type;
    unsigned short manufacturer_name;
    unsigned short product_code;
    unsigned short reserved3;
    unsigned serial_no;
    unsigned char week_of_manufacture;
    unsigned char year_of_manufacture;

    unsigned short crc;    
};

#endif