]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/staging/dream/camera/msm_vfe8x.h
kconfig: Have streamline_config process menuconfigs too
[net-next-2.6.git] / drivers / staging / dream / camera / msm_vfe8x.h
CommitLineData
eb7b797b
BS
1/*
2 * Copyright (C) 2008-2009 QUALCOMM Incorporated.
3 */
4#ifndef __MSM_VFE8X_H__
5#define __MSM_VFE8X_H__
6
7#define TRUE 1
8#define FALSE 0
9#define boolean uint8_t
10
11enum VFE_STATE {
12 VFE_STATE_IDLE,
13 VFE_STATE_ACTIVE
14};
15
16enum vfe_cmd_id {
17 /*
18 *Important! Command_ID are arranged in order.
19 *Don't change!*/
20 VFE_CMD_ID_START,
21 VFE_CMD_ID_RESET,
22
23 /* bus and camif config */
24 VFE_CMD_ID_AXI_INPUT_CONFIG,
25 VFE_CMD_ID_CAMIF_CONFIG,
26 VFE_CMD_ID_AXI_OUTPUT_CONFIG,
27
28 /* module config */
29 VFE_CMD_ID_BLACK_LEVEL_CONFIG,
30 VFE_CMD_ID_ROLL_OFF_CONFIG,
31 VFE_CMD_ID_DEMUX_CHANNEL_GAIN_CONFIG,
32 VFE_CMD_ID_DEMOSAIC_CONFIG,
33 VFE_CMD_ID_FOV_CROP_CONFIG,
34 VFE_CMD_ID_MAIN_SCALER_CONFIG,
35 VFE_CMD_ID_WHITE_BALANCE_CONFIG,
36 VFE_CMD_ID_COLOR_CORRECTION_CONFIG,
37 VFE_CMD_ID_LA_CONFIG,
38 VFE_CMD_ID_RGB_GAMMA_CONFIG,
39 VFE_CMD_ID_CHROMA_ENHAN_CONFIG,
40 VFE_CMD_ID_CHROMA_SUPPRESSION_CONFIG,
41 VFE_CMD_ID_ASF_CONFIG,
42 VFE_CMD_ID_SCALER2Y_CONFIG,
43 VFE_CMD_ID_SCALER2CbCr_CONFIG,
44 VFE_CMD_ID_CHROMA_SUBSAMPLE_CONFIG,
45 VFE_CMD_ID_FRAME_SKIP_CONFIG,
46 VFE_CMD_ID_OUTPUT_CLAMP_CONFIG,
47
48 /* test gen */
49 VFE_CMD_ID_TEST_GEN_START,
50
51 VFE_CMD_ID_UPDATE,
52
53 /* ackownledge from upper layer */
54 VFE_CMD_ID_OUTPUT1_ACK,
55 VFE_CMD_ID_OUTPUT2_ACK,
56 VFE_CMD_ID_EPOCH1_ACK,
57 VFE_CMD_ID_EPOCH2_ACK,
58 VFE_CMD_ID_STATS_AUTOFOCUS_ACK,
59 VFE_CMD_ID_STATS_WB_EXP_ACK,
60
61 /* module update commands */
62 VFE_CMD_ID_BLACK_LEVEL_UPDATE,
63 VFE_CMD_ID_DEMUX_CHANNEL_GAIN_UPDATE,
64 VFE_CMD_ID_DEMOSAIC_BPC_UPDATE,
65 VFE_CMD_ID_DEMOSAIC_ABF_UPDATE,
66 VFE_CMD_ID_FOV_CROP_UPDATE,
67 VFE_CMD_ID_WHITE_BALANCE_UPDATE,
68 VFE_CMD_ID_COLOR_CORRECTION_UPDATE,
69 VFE_CMD_ID_LA_UPDATE,
70 VFE_CMD_ID_RGB_GAMMA_UPDATE,
71 VFE_CMD_ID_CHROMA_ENHAN_UPDATE,
72 VFE_CMD_ID_CHROMA_SUPPRESSION_UPDATE,
73 VFE_CMD_ID_MAIN_SCALER_UPDATE,
74 VFE_CMD_ID_SCALER2CbCr_UPDATE,
75 VFE_CMD_ID_SCALER2Y_UPDATE,
76 VFE_CMD_ID_ASF_UPDATE,
77 VFE_CMD_ID_FRAME_SKIP_UPDATE,
78 VFE_CMD_ID_CAMIF_FRAME_UPDATE,
79
80 /* stats update commands */
81 VFE_CMD_ID_STATS_AUTOFOCUS_UPDATE,
82 VFE_CMD_ID_STATS_WB_EXP_UPDATE,
83
84 /* control of start, stop, update, etc... */
85 VFE_CMD_ID_STOP,
86 VFE_CMD_ID_GET_HW_VERSION,
87
88 /* stats */
89 VFE_CMD_ID_STATS_SETTING,
90 VFE_CMD_ID_STATS_AUTOFOCUS_START,
91 VFE_CMD_ID_STATS_AUTOFOCUS_STOP,
92 VFE_CMD_ID_STATS_WB_EXP_START,
93 VFE_CMD_ID_STATS_WB_EXP_STOP,
94
95 VFE_CMD_ID_ASYNC_TIMER_SETTING,
96
97 /* max id */
98 VFE_CMD_ID_MAX
99};
100
101struct vfe_cmd_hw_version {
102 uint32_t minorVersion;
103 uint32_t majorVersion;
104 uint32_t coreVersion;
105};
106
107enum VFE_CAMIF_SYNC_EDGE {
108 VFE_CAMIF_SYNC_EDGE_ActiveHigh,
109 VFE_CAMIF_SYNC_EDGE_ActiveLow
110};
111
112enum VFE_CAMIF_SYNC_MODE {
113 VFE_CAMIF_SYNC_MODE_APS,
114 VFE_CAMIF_SYNC_MODE_EFS,
115 VFE_CAMIF_SYNC_MODE_ELS,
116 VFE_CAMIF_SYNC_MODE_ILLEGAL
117};
118
119struct vfe_cmds_camif_efs {
120 uint8_t efsendofline;
121 uint8_t efsstartofline;
122 uint8_t efsendofframe;
123 uint8_t efsstartofframe;
124};
125
126struct vfe_cmds_camif_frame {
127 uint16_t pixelsPerLine;
128 uint16_t linesPerFrame;
129};
130
131struct vfe_cmds_camif_window {
132 uint16_t firstpixel;
133 uint16_t lastpixel;
134 uint16_t firstline;
135 uint16_t lastline;
136};
137
138enum CAMIF_SUBSAMPLE_FRAME_SKIP {
139 CAMIF_SUBSAMPLE_FRAME_SKIP_0,
140 CAMIF_SUBSAMPLE_FRAME_SKIP_AllFrames,
141 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_2Frame,
142 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_3Frame,
143 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_4Frame,
144 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_5Frame,
145 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_6Frame,
146 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_7Frame,
147 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_8Frame,
148 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_9Frame,
149 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_10Frame,
150 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_11Frame,
151 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_12Frame,
152 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_13Frame,
153 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_14Frame,
154 CAMIF_SUBSAMPLE_FRAME_SKIP_ONE_OUT_OF_EVERY_15Frame
155};
156
157struct vfe_cmds_camif_subsample {
158 uint16_t pixelskipmask;
159 uint16_t lineskipmask;
160 enum CAMIF_SUBSAMPLE_FRAME_SKIP frameskip;
161 uint8_t frameskipmode;
162 uint8_t pixelskipwrap;
163};
164
165struct vfe_cmds_camif_epoch {
166 uint8_t enable;
167 uint16_t lineindex;
168};
169
170struct vfe_cmds_camif_cfg {
171 enum VFE_CAMIF_SYNC_EDGE vSyncEdge;
172 enum VFE_CAMIF_SYNC_EDGE hSyncEdge;
173 enum VFE_CAMIF_SYNC_MODE syncMode;
174 uint8_t vfeSubSampleEnable;
175 uint8_t busSubSampleEnable;
176 uint8_t irqSubSampleEnable;
177 uint8_t binningEnable;
178 uint8_t misrEnable;
179};
180
181struct vfe_cmd_camif_config {
182 struct vfe_cmds_camif_cfg camifConfig;
183 struct vfe_cmds_camif_efs EFS;
184 struct vfe_cmds_camif_frame frame;
185 struct vfe_cmds_camif_window window;
186 struct vfe_cmds_camif_subsample subsample;
187 struct vfe_cmds_camif_epoch epoch1;
188 struct vfe_cmds_camif_epoch epoch2;
189};
190
191enum VFE_AXI_OUTPUT_MODE {
192 VFE_AXI_OUTPUT_MODE_Output1,
193 VFE_AXI_OUTPUT_MODE_Output2,
194 VFE_AXI_OUTPUT_MODE_Output1AndOutput2,
195 VFE_AXI_OUTPUT_MODE_CAMIFToAXIViaOutput2,
196 VFE_AXI_OUTPUT_MODE_Output2AndCAMIFToAXIViaOutput1,
197 VFE_AXI_OUTPUT_MODE_Output1AndCAMIFToAXIViaOutput2,
198 VFE_AXI_LAST_OUTPUT_MODE_ENUM
199};
200
201enum VFE_RAW_WR_PATH_SEL {
202 VFE_RAW_OUTPUT_DISABLED,
203 VFE_RAW_OUTPUT_ENC_CBCR_PATH,
204 VFE_RAW_OUTPUT_VIEW_CBCR_PATH,
205 VFE_RAW_OUTPUT_PATH_INVALID
206};
207
208enum VFE_RAW_PIXEL_DATA_SIZE {
209 VFE_RAW_PIXEL_DATA_SIZE_8BIT,
210 VFE_RAW_PIXEL_DATA_SIZE_10BIT,
211 VFE_RAW_PIXEL_DATA_SIZE_12BIT,
212};
213
214#define VFE_AXI_OUTPUT_BURST_LENGTH 4
215#define VFE_MAX_NUM_FRAGMENTS_PER_FRAME 4
216#define VFE_AXI_OUTPUT_CFG_FRAME_COUNT 3
217
218struct vfe_cmds_axi_out_per_component {
219 uint16_t imageWidth;
220 uint16_t imageHeight;
221 uint16_t outRowCount;
222 uint16_t outRowIncrement;
223 uint32_t outFragments[VFE_AXI_OUTPUT_CFG_FRAME_COUNT]
224 [VFE_MAX_NUM_FRAGMENTS_PER_FRAME];
225};
226
227struct vfe_cmds_axi_per_output_path {
228 uint8_t fragmentCount;
229 struct vfe_cmds_axi_out_per_component outputY;
230 struct vfe_cmds_axi_out_per_component outputCbcr;
231};
232
233enum VFE_AXI_BURST_LENGTH {
234 VFE_AXI_BURST_LENGTH_IS_2 = 2,
235 VFE_AXI_BURST_LENGTH_IS_4 = 4,
236 VFE_AXI_BURST_LENGTH_IS_8 = 8,
237 VFE_AXI_BURST_LENGTH_IS_16 = 16
238};
239
240struct vfe_cmd_axi_output_config {
241 enum VFE_AXI_BURST_LENGTH burstLength;
242 enum VFE_AXI_OUTPUT_MODE outputMode;
243 enum VFE_RAW_PIXEL_DATA_SIZE outputDataSize;
244 struct vfe_cmds_axi_per_output_path output1;
245 struct vfe_cmds_axi_per_output_path output2;
246};
247
248struct vfe_cmd_fov_crop_config {
249 uint8_t enable;
250 uint16_t firstPixel;
251 uint16_t lastPixel;
252 uint16_t firstLine;
253 uint16_t lastLine;
254};
255
256struct vfe_cmds_main_scaler_stripe_init {
257 uint16_t MNCounterInit;
258 uint16_t phaseInit;
259};
260
261struct vfe_cmds_scaler_one_dimension {
262 uint8_t enable;
263 uint16_t inputSize;
264 uint16_t outputSize;
265 uint32_t phaseMultiplicationFactor;
266 uint8_t interpolationResolution;
267};
268
269struct vfe_cmd_main_scaler_config {
270 uint8_t enable;
271 struct vfe_cmds_scaler_one_dimension hconfig;
272 struct vfe_cmds_scaler_one_dimension vconfig;
273 struct vfe_cmds_main_scaler_stripe_init MNInitH;
274 struct vfe_cmds_main_scaler_stripe_init MNInitV;
275};
276
277struct vfe_cmd_scaler2_config {
278 uint8_t enable;
279 struct vfe_cmds_scaler_one_dimension hconfig;
280 struct vfe_cmds_scaler_one_dimension vconfig;
281};
282
283struct vfe_cmd_frame_skip_config {
284 uint8_t output1Period;
285 uint32_t output1Pattern;
286 uint8_t output2Period;
287 uint32_t output2Pattern;
288};
289
290struct vfe_cmd_frame_skip_update {
291 uint32_t output1Pattern;
292 uint32_t output2Pattern;
293};
294
295struct vfe_cmd_output_clamp_config {
296 uint8_t minCh0;
297 uint8_t minCh1;
298 uint8_t minCh2;
299 uint8_t maxCh0;
300 uint8_t maxCh1;
301 uint8_t maxCh2;
302};
303
304struct vfe_cmd_chroma_subsample_config {
305 uint8_t enable;
306 uint8_t cropEnable;
307 uint8_t vsubSampleEnable;
308 uint8_t hsubSampleEnable;
309 uint8_t vCosited;
310 uint8_t hCosited;
311 uint8_t vCositedPhase;
312 uint8_t hCositedPhase;
313 uint16_t cropWidthFirstPixel;
314 uint16_t cropWidthLastPixel;
315 uint16_t cropHeightFirstLine;
316 uint16_t cropHeightLastLine;
317};
318
319enum VFE_START_INPUT_SOURCE {
320 VFE_START_INPUT_SOURCE_CAMIF,
321 VFE_START_INPUT_SOURCE_TESTGEN,
322 VFE_START_INPUT_SOURCE_AXI,
323 VFE_START_INPUT_SOURCE_INVALID
324};
325
326enum VFE_START_OPERATION_MODE {
327 VFE_START_OPERATION_MODE_CONTINUOUS,
328 VFE_START_OPERATION_MODE_SNAPSHOT
329};
330
331enum VFE_START_PIXEL_PATTERN {
332 VFE_BAYER_RGRGRG,
333 VFE_BAYER_GRGRGR,
334 VFE_BAYER_BGBGBG,
335 VFE_BAYER_GBGBGB,
336 VFE_YUV_YCbYCr,
337 VFE_YUV_YCrYCb,
338 VFE_YUV_CbYCrY,
339 VFE_YUV_CrYCbY
340};
341
342enum VFE_BUS_RD_INPUT_PIXEL_PATTERN {
343 VFE_BAYER_RAW,
344 VFE_YUV_INTERLEAVED,
345 VFE_YUV_PSEUDO_PLANAR_Y,
346 VFE_YUV_PSEUDO_PLANAR_CBCR
347};
348
349enum VFE_YUV_INPUT_COSITING_MODE {
350 VFE_YUV_COSITED,
351 VFE_YUV_INTERPOLATED
352};
353
354struct vfe_cmd_start {
355 enum VFE_START_INPUT_SOURCE inputSource;
356 enum VFE_START_OPERATION_MODE operationMode;
357 uint8_t snapshotCount;
358 enum VFE_START_PIXEL_PATTERN pixel;
359 enum VFE_YUV_INPUT_COSITING_MODE yuvInputCositingMode;
360};
361
362struct vfe_cmd_output_ack {
363 uint32_t ybufaddr[VFE_MAX_NUM_FRAGMENTS_PER_FRAME];
364 uint32_t chromabufaddr[VFE_MAX_NUM_FRAGMENTS_PER_FRAME];
365};
366
367#define VFE_STATS_BUFFER_COUNT 3
368
369struct vfe_cmd_stats_setting {
370 uint16_t frameHDimension;
371 uint16_t frameVDimension;
372 uint8_t afBusPrioritySelection;
373 uint8_t afBusPriority;
374 uint8_t awbBusPrioritySelection;
375 uint8_t awbBusPriority;
376 uint8_t histBusPrioritySelection;
377 uint8_t histBusPriority;
378 uint32_t afBuffer[VFE_STATS_BUFFER_COUNT];
379 uint32_t awbBuffer[VFE_STATS_BUFFER_COUNT];
380 uint32_t histBuffer[VFE_STATS_BUFFER_COUNT];
381};
382
383struct vfe_cmd_stats_af_start {
384 uint8_t enable;
385 uint8_t windowMode;
386 uint16_t windowHOffset;
387 uint16_t windowVOffset;
388 uint16_t windowWidth;
389 uint16_t windowHeight;
390 uint8_t gridForMultiWindows[16];
391 uint8_t metricSelection;
392 int16_t metricMax;
393 int8_t highPassCoef[7];
394 int8_t bufferHeader;
395};
396
397struct vfe_cmd_stats_af_update {
398 uint8_t windowMode;
399 uint16_t windowHOffset;
400 uint16_t windowVOffset;
401 uint16_t windowWidth;
402 uint16_t windowHeight;
403};
404
405struct vfe_cmd_stats_wb_exp_start {
406 uint8_t enable;
407 uint8_t wbExpRegions;
408 uint8_t wbExpSubRegion;
409 uint8_t awbYMin;
410 uint8_t awbYMax;
411 int8_t awbMCFG[4];
412 int16_t awbCCFG[4];
413 int8_t axwHeader;
414};
415
416struct vfe_cmd_stats_wb_exp_update {
417 uint8_t wbExpRegions;
418 uint8_t wbExpSubRegion;
419 int8_t awbYMin;
420 int8_t awbYMax;
421 int8_t awbMCFG[4];
422 int16_t awbCCFG[4];
423};
424
425struct vfe_cmd_stats_af_ack {
426 uint32_t nextAFOutputBufferAddr;
427};
428
429struct vfe_cmd_stats_wb_exp_ack {
430 uint32_t nextWbExpOutputBufferAddr;
431};
432
433struct vfe_cmd_black_level_config {
434 uint8_t enable;
435 uint16_t evenEvenAdjustment;
436 uint16_t evenOddAdjustment;
437 uint16_t oddEvenAdjustment;
438 uint16_t oddOddAdjustment;
439};
440
441/* 13*1 */
442#define VFE_ROLL_OFF_INIT_TABLE_SIZE 13
443/* 13*16 */
444#define VFE_ROLL_OFF_DELTA_TABLE_SIZE 208
445
446struct vfe_cmd_roll_off_config {
447 uint8_t enable;
448 uint16_t gridWidth;
449 uint16_t gridHeight;
450 uint16_t yDelta;
451 uint8_t gridXIndex;
452 uint8_t gridYIndex;
453 uint16_t gridPixelXIndex;
454 uint16_t gridPixelYIndex;
455 uint16_t yDeltaAccum;
456 uint16_t initTableR[VFE_ROLL_OFF_INIT_TABLE_SIZE];
457 uint16_t initTableGr[VFE_ROLL_OFF_INIT_TABLE_SIZE];
458 uint16_t initTableB[VFE_ROLL_OFF_INIT_TABLE_SIZE];
459 uint16_t initTableGb[VFE_ROLL_OFF_INIT_TABLE_SIZE];
460 int16_t deltaTableR[VFE_ROLL_OFF_DELTA_TABLE_SIZE];
461 int16_t deltaTableGr[VFE_ROLL_OFF_DELTA_TABLE_SIZE];
462 int16_t deltaTableB[VFE_ROLL_OFF_DELTA_TABLE_SIZE];
463 int16_t deltaTableGb[VFE_ROLL_OFF_DELTA_TABLE_SIZE];
464};
465
466struct vfe_cmd_demux_channel_gain_config {
467 uint16_t ch0EvenGain;
468 uint16_t ch0OddGain;
469 uint16_t ch1Gain;
470 uint16_t ch2Gain;
471};
472
473struct vfe_cmds_demosaic_abf {
474 uint8_t enable;
475 uint8_t forceOn;
476 uint8_t shift;
477 uint16_t lpThreshold;
478 uint16_t max;
479 uint16_t min;
480 uint8_t ratio;
481};
482
483struct vfe_cmds_demosaic_bpc {
484 uint8_t enable;
485 uint16_t fmaxThreshold;
486 uint16_t fminThreshold;
487 uint16_t redDiffThreshold;
488 uint16_t blueDiffThreshold;
489 uint16_t greenDiffThreshold;
490};
491
492struct vfe_cmd_demosaic_config {
493 uint8_t enable;
494 uint8_t slopeShift;
495 struct vfe_cmds_demosaic_abf abfConfig;
496 struct vfe_cmds_demosaic_bpc bpcConfig;
497};
498
499struct vfe_cmd_demosaic_bpc_update {
500 struct vfe_cmds_demosaic_bpc bpcUpdate;
501};
502
503struct vfe_cmd_demosaic_abf_update {
504 struct vfe_cmds_demosaic_abf abfUpdate;
505};
506
507struct vfe_cmd_white_balance_config {
508 uint8_t enable;
509 uint16_t ch2Gain;
510 uint16_t ch1Gain;
511 uint16_t ch0Gain;
512};
513
514enum VFE_COLOR_CORRECTION_COEF_QFACTOR {
515 COEF_IS_Q7_SIGNED,
516 COEF_IS_Q8_SIGNED,
517 COEF_IS_Q9_SIGNED,
518 COEF_IS_Q10_SIGNED
519};
520
521struct vfe_cmd_color_correction_config {
522 uint8_t enable;
523 enum VFE_COLOR_CORRECTION_COEF_QFACTOR coefQFactor;
524 int16_t C0;
525 int16_t C1;
526 int16_t C2;
527 int16_t C3;
528 int16_t C4;
529 int16_t C5;
530 int16_t C6;
531 int16_t C7;
532 int16_t C8;
533 int16_t K0;
534 int16_t K1;
535 int16_t K2;
536};
537
538#define VFE_LA_TABLE_LENGTH 256
539struct vfe_cmd_la_config {
540 uint8_t enable;
541 int16_t table[VFE_LA_TABLE_LENGTH];
542};
543
544#define VFE_GAMMA_TABLE_LENGTH 256
545enum VFE_RGB_GAMMA_TABLE_SELECT {
546 RGB_GAMMA_CH0_SELECTED,
547 RGB_GAMMA_CH1_SELECTED,
548 RGB_GAMMA_CH2_SELECTED,
549 RGB_GAMMA_CH0_CH1_SELECTED,
550 RGB_GAMMA_CH0_CH2_SELECTED,
551 RGB_GAMMA_CH1_CH2_SELECTED,
552 RGB_GAMMA_CH0_CH1_CH2_SELECTED
553};
554
555struct vfe_cmd_rgb_gamma_config {
556 uint8_t enable;
557 enum VFE_RGB_GAMMA_TABLE_SELECT channelSelect;
558 int16_t table[VFE_GAMMA_TABLE_LENGTH];
559};
560
561struct vfe_cmd_chroma_enhan_config {
562 uint8_t enable;
563 int16_t am;
564 int16_t ap;
565 int16_t bm;
566 int16_t bp;
567 int16_t cm;
568 int16_t cp;
569 int16_t dm;
570 int16_t dp;
571 int16_t kcr;
572 int16_t kcb;
573 int16_t RGBtoYConversionV0;
574 int16_t RGBtoYConversionV1;
575 int16_t RGBtoYConversionV2;
576 uint8_t RGBtoYConversionOffset;
577};
578
579struct vfe_cmd_chroma_suppression_config {
580 uint8_t enable;
581 uint8_t m1;
582 uint8_t m3;
583 uint8_t n1;
584 uint8_t n3;
585 uint8_t nn1;
586 uint8_t mm1;
587};
588
589struct vfe_cmd_asf_config {
590 uint8_t enable;
591 uint8_t smoothFilterEnabled;
592 uint8_t sharpMode;
593 uint8_t smoothCoefCenter;
594 uint8_t smoothCoefSurr;
595 uint8_t normalizeFactor;
596 uint8_t sharpK1;
597 uint8_t sharpK2;
598 uint8_t sharpThreshE1;
599 int8_t sharpThreshE2;
600 int8_t sharpThreshE3;
601 int8_t sharpThreshE4;
602 int8_t sharpThreshE5;
603 int8_t filter1Coefficients[9];
604 int8_t filter2Coefficients[9];
605 uint8_t cropEnable;
606 uint16_t cropFirstPixel;
607 uint16_t cropLastPixel;
608 uint16_t cropFirstLine;
609 uint16_t cropLastLine;
610};
611
612struct vfe_cmd_asf_update {
613 uint8_t enable;
614 uint8_t smoothFilterEnabled;
615 uint8_t sharpMode;
616 uint8_t smoothCoefCenter;
617 uint8_t smoothCoefSurr;
618 uint8_t normalizeFactor;
619 uint8_t sharpK1;
620 uint8_t sharpK2;
621 uint8_t sharpThreshE1;
622 int8_t sharpThreshE2;
623 int8_t sharpThreshE3;
624 int8_t sharpThreshE4;
625 int8_t sharpThreshE5;
626 int8_t filter1Coefficients[9];
627 int8_t filter2Coefficients[9];
628 uint8_t cropEnable;
629};
630
631enum VFE_TEST_GEN_SYNC_EDGE {
632 VFE_TEST_GEN_SYNC_EDGE_ActiveHigh,
633 VFE_TEST_GEN_SYNC_EDGE_ActiveLow
634};
635
636struct vfe_cmd_test_gen_start {
637 uint8_t pixelDataSelect;
638 uint8_t systematicDataSelect;
639 enum VFE_TEST_GEN_SYNC_EDGE hsyncEdge;
640 enum VFE_TEST_GEN_SYNC_EDGE vsyncEdge;
641 uint16_t numFrame;
642 enum VFE_RAW_PIXEL_DATA_SIZE pixelDataSize;
643 uint16_t imageWidth;
644 uint16_t imageHeight;
645 uint32_t startOfFrameOffset;
646 uint32_t endOfFrameNOffset;
647 uint16_t startOfLineOffset;
648 uint16_t endOfLineNOffset;
649 uint16_t hbi;
650 uint8_t vblEnable;
651 uint16_t vbl;
652 uint8_t startOfFrameDummyLine;
653 uint8_t endOfFrameDummyLine;
654 uint8_t unicolorBarEnable;
655 uint8_t colorBarsSplitEnable;
656 uint8_t unicolorBarSelect;
657 enum VFE_START_PIXEL_PATTERN colorBarsPixelPattern;
658 uint8_t colorBarsRotatePeriod;
659 uint16_t testGenRandomSeed;
660};
661
662struct vfe_cmd_bus_pm_start {
663 uint8_t output2YWrPmEnable;
664 uint8_t output2CbcrWrPmEnable;
665 uint8_t output1YWrPmEnable;
666 uint8_t output1CbcrWrPmEnable;
667};
668
669struct vfe_cmd_camif_frame_update {
670 struct vfe_cmds_camif_frame camifFrame;
671};
672
673struct vfe_cmd_sync_timer_setting {
674 uint8_t whichSyncTimer;
675 uint8_t operation;
676 uint8_t polarity;
677 uint16_t repeatCount;
678 uint16_t hsyncCount;
679 uint32_t pclkCount;
680 uint32_t outputDuration;
681};
682
683struct vfe_cmd_async_timer_setting {
684 uint8_t whichAsyncTimer;
685 uint8_t operation;
686 uint8_t polarity;
687 uint16_t repeatCount;
688 uint16_t inactiveCount;
689 uint32_t activeCount;
690};
691
692struct vfe_frame_skip_counts {
693 uint32_t totalFrameCount;
694 uint32_t output1Count;
695 uint32_t output2Count;
696};
697
698enum VFE_AXI_RD_UNPACK_HBI_SEL {
699 VFE_AXI_RD_HBI_32_CLOCK_CYCLES,
700 VFE_AXI_RD_HBI_64_CLOCK_CYCLES,
701 VFE_AXI_RD_HBI_128_CLOCK_CYCLES,
702 VFE_AXI_RD_HBI_256_CLOCK_CYCLES,
703 VFE_AXI_RD_HBI_512_CLOCK_CYCLES,
704 VFE_AXI_RD_HBI_1024_CLOCK_CYCLES,
705 VFE_AXI_RD_HBI_2048_CLOCK_CYCLES,
706 VFE_AXI_RD_HBI_4096_CLOCK_CYCLES
707};
708
709struct vfe_cmd_axi_input_config {
710 uint32_t fragAddr[4];
711 uint8_t totalFragmentCount;
712 uint16_t ySize;
713 uint16_t xOffset;
714 uint16_t xSize;
715 uint16_t rowIncrement;
716 uint16_t numOfRows;
717 enum VFE_AXI_BURST_LENGTH burstLength;
718 uint8_t unpackPhase;
719 enum VFE_AXI_RD_UNPACK_HBI_SEL unpackHbi;
720 enum VFE_RAW_PIXEL_DATA_SIZE pixelSize;
721 uint8_t padRepeatCountLeft;
722 uint8_t padRepeatCountRight;
723 uint8_t padRepeatCountTop;
724 uint8_t padRepeatCountBottom;
725 uint8_t padLeftComponentSelectCycle0;
726 uint8_t padLeftComponentSelectCycle1;
727 uint8_t padLeftComponentSelectCycle2;
728 uint8_t padLeftComponentSelectCycle3;
729 uint8_t padLeftStopCycle0;
730 uint8_t padLeftStopCycle1;
731 uint8_t padLeftStopCycle2;
732 uint8_t padLeftStopCycle3;
733 uint8_t padRightComponentSelectCycle0;
734 uint8_t padRightComponentSelectCycle1;
735 uint8_t padRightComponentSelectCycle2;
736 uint8_t padRightComponentSelectCycle3;
737 uint8_t padRightStopCycle0;
738 uint8_t padRightStopCycle1;
739 uint8_t padRightStopCycle2;
740 uint8_t padRightStopCycle3;
741 uint8_t padTopLineCount;
742 uint8_t padBottomLineCount;
743};
744
745struct vfe_interrupt_status {
746 uint8_t camifErrorIrq;
747 uint8_t camifSofIrq;
748 uint8_t camifEolIrq;
749 uint8_t camifEofIrq;
750 uint8_t camifEpoch1Irq;
751 uint8_t camifEpoch2Irq;
752 uint8_t camifOverflowIrq;
753 uint8_t ceIrq;
754 uint8_t regUpdateIrq;
755 uint8_t resetAckIrq;
756 uint8_t encYPingpongIrq;
757 uint8_t encCbcrPingpongIrq;
758 uint8_t viewYPingpongIrq;
759 uint8_t viewCbcrPingpongIrq;
760 uint8_t rdPingpongIrq;
761 uint8_t afPingpongIrq;
762 uint8_t awbPingpongIrq;
763 uint8_t histPingpongIrq;
764 uint8_t encIrq;
765 uint8_t viewIrq;
766 uint8_t busOverflowIrq;
767 uint8_t afOverflowIrq;
768 uint8_t awbOverflowIrq;
769 uint8_t syncTimer0Irq;
770 uint8_t syncTimer1Irq;
771 uint8_t syncTimer2Irq;
772 uint8_t asyncTimer0Irq;
773 uint8_t asyncTimer1Irq;
774 uint8_t asyncTimer2Irq;
775 uint8_t asyncTimer3Irq;
776 uint8_t axiErrorIrq;
777 uint8_t violationIrq;
778 uint8_t anyErrorIrqs;
779 uint8_t anyOutput1PathIrqs;
780 uint8_t anyOutput2PathIrqs;
781 uint8_t anyOutputPathIrqs;
782 uint8_t anyAsyncTimerIrqs;
783 uint8_t anySyncTimerIrqs;
784 uint8_t anyIrqForActiveStatesOnly;
785};
786
787enum VFE_MESSAGE_ID {
788 VFE_MSG_ID_RESET_ACK,
789 VFE_MSG_ID_START_ACK,
790 VFE_MSG_ID_STOP_ACK,
791 VFE_MSG_ID_UPDATE_ACK,
792 VFE_MSG_ID_OUTPUT1,
793 VFE_MSG_ID_OUTPUT2,
794 VFE_MSG_ID_SNAPSHOT_DONE,
795 VFE_MSG_ID_STATS_AUTOFOCUS,
796 VFE_MSG_ID_STATS_WB_EXP,
797 VFE_MSG_ID_EPOCH1,
798 VFE_MSG_ID_EPOCH2,
799 VFE_MSG_ID_SYNC_TIMER0_DONE,
800 VFE_MSG_ID_SYNC_TIMER1_DONE,
801 VFE_MSG_ID_SYNC_TIMER2_DONE,
802 VFE_MSG_ID_ASYNC_TIMER0_DONE,
803 VFE_MSG_ID_ASYNC_TIMER1_DONE,
804 VFE_MSG_ID_ASYNC_TIMER2_DONE,
805 VFE_MSG_ID_ASYNC_TIMER3_DONE,
806 VFE_MSG_ID_AF_OVERFLOW,
807 VFE_MSG_ID_AWB_OVERFLOW,
808 VFE_MSG_ID_AXI_ERROR,
809 VFE_MSG_ID_CAMIF_OVERFLOW,
810 VFE_MSG_ID_VIOLATION,
811 VFE_MSG_ID_CAMIF_ERROR,
812 VFE_MSG_ID_BUS_OVERFLOW,
813};
814
815struct vfe_msg_stats_autofocus {
816 uint32_t afBuffer;
817 uint32_t frameCounter;
818};
819
820struct vfe_msg_stats_wb_exp {
821 uint32_t awbBuffer;
822 uint32_t frameCounter;
823};
824
825struct vfe_frame_bpc_info {
826 uint32_t greenDefectPixelCount;
827 uint32_t redBlueDefectPixelCount;
828};
829
830struct vfe_frame_asf_info {
831 uint32_t asfMaxEdge;
832 uint32_t asfHbiCount;
833};
834
835struct vfe_msg_camif_status {
836 uint8_t camifState;
837 uint32_t pixelCount;
838 uint32_t lineCount;
839};
840
841struct vfe_bus_pm_per_path {
842 uint32_t yWrPmStats0;
843 uint32_t yWrPmStats1;
844 uint32_t cbcrWrPmStats0;
845 uint32_t cbcrWrPmStats1;
846};
847
848struct vfe_bus_performance_monitor {
849 struct vfe_bus_pm_per_path encPathPmInfo;
850 struct vfe_bus_pm_per_path viewPathPmInfo;
851};
852
853struct vfe_irq_thread_msg {
854 uint32_t vfeIrqStatus;
855 uint32_t camifStatus;
856 uint32_t demosaicStatus;
857 uint32_t asfMaxEdge;
858 struct vfe_bus_performance_monitor pmInfo;
859};
860
861struct vfe_msg_output {
862 uint32_t yBuffer;
863 uint32_t cbcrBuffer;
864 struct vfe_frame_bpc_info bpcInfo;
865 struct vfe_frame_asf_info asfInfo;
866 uint32_t frameCounter;
867 struct vfe_bus_pm_per_path pmData;
868};
869
870struct vfe_message {
871 enum VFE_MESSAGE_ID _d;
872 union {
873 struct vfe_msg_output msgOutput1;
874 struct vfe_msg_output msgOutput2;
875 struct vfe_msg_stats_autofocus msgStatsAf;
876 struct vfe_msg_stats_wb_exp msgStatsWbExp;
877 struct vfe_msg_camif_status msgCamifError;
878 struct vfe_bus_performance_monitor msgBusOverflow;
879 } _u;
880};
881
882/* New one for 8k */
883struct msm_vfe_command_8k {
884 int32_t id;
885 uint16_t length;
886 void *value;
887};
888
889struct vfe_frame_extra {
890 struct vfe_frame_bpc_info bpcInfo;
891 struct vfe_frame_asf_info asfInfo;
892 uint32_t frameCounter;
893 struct vfe_bus_pm_per_path pmData;
894};
895#endif /* __MSM_VFE8X_H__ */