]> bbs.cooldavid.org Git - net-next-2.6.git/blob - drivers/staging/dream/camera/msm_vfe7x.h
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel...
[net-next-2.6.git] / drivers / staging / dream / camera / msm_vfe7x.h
1 /*
2  * Copyright (C) 2008-2009 QUALCOMM Incorporated.
3  */
4 #ifndef __MSM_VFE7X_H__
5 #define __MSM_VFE7X_H__
6 #include <media/msm_camera.h>
7 #include <mach/camera.h>
8
9 struct vfe_frame_extra {
10         uint32_t  bl_evencol;
11         uint32_t  bl_oddcol;
12         uint16_t  g_def_p_cnt;
13         uint16_t  r_b_def_p_cnt;
14 };
15
16 struct vfe_endframe {
17         uint32_t      y_address;
18         uint32_t      cbcr_address;
19
20         unsigned int  blacklevelevencolumn:23;
21         uint16_t      reserved1:9;
22         unsigned int  blackleveloddcolumn:23;
23         uint16_t      reserved2:9;
24
25         uint16_t      greendefectpixelcount:8;
26         uint16_t      reserved3:8;
27         uint16_t      redbluedefectpixelcount:8;
28         uint16_t      reserved4:8;
29 } __attribute__((packed, aligned(4)));
30
31 struct vfe_outputack {
32         uint32_t  header;
33         void      *output2newybufferaddress;
34         void      *output2newcbcrbufferaddress;
35 } __attribute__((packed, aligned(4)));
36
37 struct vfe_stats_ack {
38         uint32_t header;
39         /* MUST BE 64 bit ALIGNED */
40         void     *bufaddr;
41 } __attribute__((packed, aligned(4)));
42
43 /* AXI Output Config Command sent to DSP */
44 struct axiout {
45         uint32_t            cmdheader:32;
46         int                 outputmode:3;
47         uint8_t             format:2;
48         uint32_t            /* reserved */ : 27;
49
50         /* AXI Output 1 Y Configuration, Part 1 */
51         uint32_t            out1yimageheight:12;
52         uint32_t            /* reserved */ : 4;
53         uint32_t            out1yimagewidthin64bitwords:10;
54         uint32_t            /* reserved */ : 6;
55
56         /* AXI Output 1 Y Configuration, Part 2 */
57         uint8_t             out1yburstlen:2;
58         uint32_t            out1ynumrows:12;
59         uint32_t            out1yrowincin64bitincs:12;
60         uint32_t            /* reserved */ : 6;
61
62         /* AXI Output 1 CbCr Configuration, Part 1 */
63         uint32_t            out1cbcrimageheight:12;
64         uint32_t            /* reserved */ : 4;
65         uint32_t            out1cbcrimagewidthin64bitwords:10;
66         uint32_t            /* reserved */ : 6;
67
68         /* AXI Output 1 CbCr Configuration, Part 2 */
69         uint8_t             out1cbcrburstlen:2;
70         uint32_t            out1cbcrnumrows:12;
71         uint32_t            out1cbcrrowincin64bitincs:12;
72         uint32_t            /* reserved */ : 6;
73
74         /* AXI Output 2 Y Configuration, Part 1 */
75         uint32_t            out2yimageheight:12;
76         uint32_t            /* reserved */ : 4;
77         uint32_t            out2yimagewidthin64bitwords:10;
78         uint32_t            /* reserved */ : 6;
79
80         /* AXI Output 2 Y Configuration, Part 2 */
81         uint8_t             out2yburstlen:2;
82         uint32_t            out2ynumrows:12;
83         uint32_t            out2yrowincin64bitincs:12;
84         uint32_t            /* reserved */ : 6;
85
86         /* AXI Output 2 CbCr Configuration, Part 1 */
87         uint32_t            out2cbcrimageheight:12;
88         uint32_t            /* reserved */ : 4;
89         uint32_t            out2cbcrimagewidtein64bitwords:10;
90         uint32_t            /* reserved */ : 6;
91
92         /* AXI Output 2 CbCr Configuration, Part 2 */
93         uint8_t             out2cbcrburstlen:2;
94         uint32_t            out2cbcrnumrows:12;
95         uint32_t            out2cbcrrowincin64bitincs:12;
96         uint32_t            /* reserved */ : 6;
97
98         /* Address configuration:
99          * output1 phisycal address */
100         unsigned long   output1buffer1_y_phy;
101         unsigned long   output1buffer1_cbcr_phy;
102         unsigned long   output1buffer2_y_phy;
103         unsigned long   output1buffer2_cbcr_phy;
104         unsigned long   output1buffer3_y_phy;
105         unsigned long   output1buffer3_cbcr_phy;
106         unsigned long   output1buffer4_y_phy;
107         unsigned long   output1buffer4_cbcr_phy;
108         unsigned long   output1buffer5_y_phy;
109         unsigned long   output1buffer5_cbcr_phy;
110         unsigned long   output1buffer6_y_phy;
111         unsigned long   output1buffer6_cbcr_phy;
112         unsigned long   output1buffer7_y_phy;
113         unsigned long   output1buffer7_cbcr_phy;
114         unsigned long   output1buffer8_y_phy;
115         unsigned long   output1buffer8_cbcr_phy;
116
117         /* output2 phisycal address */
118         unsigned long   output2buffer1_y_phy;
119         unsigned long   output2buffer1_cbcr_phy;
120         unsigned long   output2buffer2_y_phy;
121         unsigned long   output2buffer2_cbcr_phy;
122         unsigned long   output2buffer3_y_phy;
123         unsigned long   output2buffer3_cbcr_phy;
124         unsigned long   output2buffer4_y_phy;
125         unsigned long   output2buffer4_cbcr_phy;
126         unsigned long   output2buffer5_y_phy;
127         unsigned long   output2buffer5_cbcr_phy;
128         unsigned long   output2buffer6_y_phy;
129         unsigned long   output2buffer6_cbcr_phy;
130         unsigned long   output2buffer7_y_phy;
131         unsigned long   output2buffer7_cbcr_phy;
132         unsigned long   output2buffer8_y_phy;
133         unsigned long   output2buffer8_cbcr_phy;
134 } __attribute__((packed, aligned(4)));
135
136 struct vfe_stats_we_cfg {
137         uint32_t       header;
138
139         /* White Balance/Exposure Statistic Selection */
140         uint8_t        wb_expstatsenable:1;
141         uint8_t        wb_expstatbuspriorityselection:1;
142         unsigned int   wb_expstatbuspriorityvalue:4;
143         unsigned int   /* reserved */ : 26;
144
145         /* White Balance/Exposure Statistic Configuration, Part 1 */
146         uint8_t        exposurestatregions:1;
147         uint8_t        exposurestatsubregions:1;
148         unsigned int   /* reserved */ : 14;
149
150         unsigned int   whitebalanceminimumy:8;
151         unsigned int   whitebalancemaximumy:8;
152
153         /* White Balance/Exposure Statistic Configuration, Part 2 */
154         uint8_t wb_expstatslopeofneutralregionline[
155                 NUM_WB_EXP_NEUTRAL_REGION_LINES];
156
157         /* White Balance/Exposure Statistic Configuration, Part 3 */
158         unsigned int   wb_expstatcrinterceptofneutralregionline2:12;
159         unsigned int   /* reserved */ : 4;
160         unsigned int   wb_expstatcbinterceptofneutralreginnline1:12;
161         unsigned int    /* reserved */ : 4;
162
163         /* White Balance/Exposure Statistic Configuration, Part 4 */
164         unsigned int   wb_expstatcrinterceptofneutralregionline4:12;
165         unsigned int   /* reserved */ : 4;
166         unsigned int   wb_expstatcbinterceptofneutralregionline3:12;
167         unsigned int   /* reserved */ : 4;
168
169         /* White Balance/Exposure Statistic Output Buffer Header */
170         unsigned int   wb_expmetricheaderpattern:8;
171         unsigned int   /* reserved */ : 24;
172
173         /* White Balance/Exposure Statistic Output Buffers-MUST
174         * BE 64 bit ALIGNED */
175         void  *wb_expstatoutputbuffer[NUM_WB_EXP_STAT_OUTPUT_BUFFERS];
176 } __attribute__((packed, aligned(4)));
177
178 struct vfe_stats_af_cfg {
179         uint32_t header;
180
181         /* Autofocus Statistic Selection */
182         uint8_t       af_enable:1;
183         uint8_t       af_busprioritysel:1;
184         unsigned int  af_buspriorityval:4;
185         unsigned int  /* reserved */ : 26;
186
187         /* Autofocus Statistic Configuration, Part 1 */
188         unsigned int  af_singlewinvoffset:12;
189         unsigned int  /* reserved */ : 4;
190         unsigned int  af_singlewinhoffset:12;
191         unsigned int  /* reserved */ : 3;
192         uint8_t       af_winmode:1;
193
194         /* Autofocus Statistic Configuration, Part 2 */
195         unsigned int  af_singglewinvh:11;
196         unsigned int  /* reserved */ : 5;
197         unsigned int  af_singlewinhw:11;
198         unsigned int  /* reserved */ : 5;
199
200         /* Autofocus Statistic Configuration, Parts 3-6 */
201         uint8_t       af_multiwingrid[NUM_AUTOFOCUS_MULTI_WINDOW_GRIDS];
202
203         /* Autofocus Statistic Configuration, Part 7 */
204         signed int    af_metrichpfcoefa00:5;
205         signed int    af_metrichpfcoefa04:5;
206         unsigned int  af_metricmaxval:11;
207         uint8_t       af_metricsel:1;
208         unsigned int  /* reserved */ : 10;
209
210         /* Autofocus Statistic Configuration, Part 8 */
211         signed int    af_metrichpfcoefa20:5;
212         signed int    af_metrichpfcoefa21:5;
213         signed int    af_metrichpfcoefa22:5;
214         signed int    af_metrichpfcoefa23:5;
215         signed int    af_metrichpfcoefa24:5;
216         unsigned int  /* reserved */ : 7;
217
218         /* Autofocus Statistic Output Buffer Header */
219         unsigned int  af_metrichp:8;
220         unsigned int  /* reserved */ : 24;
221
222         /* Autofocus Statistic Output Buffers - MUST BE 64 bit ALIGNED!!! */
223         void *af_outbuf[NUM_AF_STAT_OUTPUT_BUFFERS];
224 } __attribute__((packed, aligned(4))); /* VFE_StatsAutofocusConfigCmdType */
225
226 struct msm_camera_frame_msg {
227         unsigned long   output_y_address;
228         unsigned long   output_cbcr_address;
229
230         unsigned int    blacklevelevenColumn:23;
231         uint16_t        reserved1:9;
232         unsigned int    blackleveloddColumn:23;
233         uint16_t        reserved2:9;
234
235         uint16_t        greendefectpixelcount:8;
236         uint16_t        reserved3:8;
237         uint16_t        redbluedefectpixelcount:8;
238         uint16_t        reserved4:8;
239 } __attribute__((packed, aligned(4)));
240
241 /* New one for 7k */
242 struct msm_vfe_command_7k {
243         uint16_t queue;
244         uint16_t length;
245         void     *value;
246 };
247
248 struct stop_event {
249   wait_queue_head_t wait;
250         int state;
251   int timeout;
252 };
253
254
255 #endif /* __MSM_VFE7X_H__ */