![Brian Swetland](/assets/img/avatar_default.png)
This patch adds driver for HTC Dream camera. I guess driver is slightly higher quality than usual for staging/ , but it is fairly big and I don't feel like doing all the cleanups myself. Also some parts can probably be removed, as they did not end up in shipping hardware.. Signed-off-by: Pavel Machek <pavel@ucw.cz> Cc: Brian Swetland <swetland@google.com> Cc: Iliyan Malchev <ibm@android.com> Cc: San Mehat <san@android.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
256 lines
7.9 KiB
C
256 lines
7.9 KiB
C
/*
|
|
* Copyright (C) 2008-2009 QUALCOMM Incorporated.
|
|
*/
|
|
#ifndef __MSM_VFE7X_H__
|
|
#define __MSM_VFE7X_H__
|
|
#include <media/msm_camera.h>
|
|
#include <mach/camera.h>
|
|
|
|
struct vfe_frame_extra {
|
|
uint32_t bl_evencol;
|
|
uint32_t bl_oddcol;
|
|
uint16_t g_def_p_cnt;
|
|
uint16_t r_b_def_p_cnt;
|
|
};
|
|
|
|
struct vfe_endframe {
|
|
uint32_t y_address;
|
|
uint32_t cbcr_address;
|
|
|
|
unsigned int blacklevelevencolumn:23;
|
|
uint16_t reserved1:9;
|
|
unsigned int blackleveloddcolumn:23;
|
|
uint16_t reserved2:9;
|
|
|
|
uint16_t greendefectpixelcount:8;
|
|
uint16_t reserved3:8;
|
|
uint16_t redbluedefectpixelcount:8;
|
|
uint16_t reserved4:8;
|
|
} __attribute__((packed, aligned(4)));
|
|
|
|
struct vfe_outputack {
|
|
uint32_t header;
|
|
void *output2newybufferaddress;
|
|
void *output2newcbcrbufferaddress;
|
|
} __attribute__((packed, aligned(4)));
|
|
|
|
struct vfe_stats_ack {
|
|
uint32_t header;
|
|
/* MUST BE 64 bit ALIGNED */
|
|
void *bufaddr;
|
|
} __attribute__((packed, aligned(4)));
|
|
|
|
/* AXI Output Config Command sent to DSP */
|
|
struct axiout {
|
|
uint32_t cmdheader:32;
|
|
int outputmode:3;
|
|
uint8_t format:2;
|
|
uint32_t /* reserved */ : 27;
|
|
|
|
/* AXI Output 1 Y Configuration, Part 1 */
|
|
uint32_t out1yimageheight:12;
|
|
uint32_t /* reserved */ : 4;
|
|
uint32_t out1yimagewidthin64bitwords:10;
|
|
uint32_t /* reserved */ : 6;
|
|
|
|
/* AXI Output 1 Y Configuration, Part 2 */
|
|
uint8_t out1yburstlen:2;
|
|
uint32_t out1ynumrows:12;
|
|
uint32_t out1yrowincin64bitincs:12;
|
|
uint32_t /* reserved */ : 6;
|
|
|
|
/* AXI Output 1 CbCr Configuration, Part 1 */
|
|
uint32_t out1cbcrimageheight:12;
|
|
uint32_t /* reserved */ : 4;
|
|
uint32_t out1cbcrimagewidthin64bitwords:10;
|
|
uint32_t /* reserved */ : 6;
|
|
|
|
/* AXI Output 1 CbCr Configuration, Part 2 */
|
|
uint8_t out1cbcrburstlen:2;
|
|
uint32_t out1cbcrnumrows:12;
|
|
uint32_t out1cbcrrowincin64bitincs:12;
|
|
uint32_t /* reserved */ : 6;
|
|
|
|
/* AXI Output 2 Y Configuration, Part 1 */
|
|
uint32_t out2yimageheight:12;
|
|
uint32_t /* reserved */ : 4;
|
|
uint32_t out2yimagewidthin64bitwords:10;
|
|
uint32_t /* reserved */ : 6;
|
|
|
|
/* AXI Output 2 Y Configuration, Part 2 */
|
|
uint8_t out2yburstlen:2;
|
|
uint32_t out2ynumrows:12;
|
|
uint32_t out2yrowincin64bitincs:12;
|
|
uint32_t /* reserved */ : 6;
|
|
|
|
/* AXI Output 2 CbCr Configuration, Part 1 */
|
|
uint32_t out2cbcrimageheight:12;
|
|
uint32_t /* reserved */ : 4;
|
|
uint32_t out2cbcrimagewidtein64bitwords:10;
|
|
uint32_t /* reserved */ : 6;
|
|
|
|
/* AXI Output 2 CbCr Configuration, Part 2 */
|
|
uint8_t out2cbcrburstlen:2;
|
|
uint32_t out2cbcrnumrows:12;
|
|
uint32_t out2cbcrrowincin64bitincs:12;
|
|
uint32_t /* reserved */ : 6;
|
|
|
|
/* Address configuration:
|
|
* output1 phisycal address */
|
|
unsigned long output1buffer1_y_phy;
|
|
unsigned long output1buffer1_cbcr_phy;
|
|
unsigned long output1buffer2_y_phy;
|
|
unsigned long output1buffer2_cbcr_phy;
|
|
unsigned long output1buffer3_y_phy;
|
|
unsigned long output1buffer3_cbcr_phy;
|
|
unsigned long output1buffer4_y_phy;
|
|
unsigned long output1buffer4_cbcr_phy;
|
|
unsigned long output1buffer5_y_phy;
|
|
unsigned long output1buffer5_cbcr_phy;
|
|
unsigned long output1buffer6_y_phy;
|
|
unsigned long output1buffer6_cbcr_phy;
|
|
unsigned long output1buffer7_y_phy;
|
|
unsigned long output1buffer7_cbcr_phy;
|
|
unsigned long output1buffer8_y_phy;
|
|
unsigned long output1buffer8_cbcr_phy;
|
|
|
|
/* output2 phisycal address */
|
|
unsigned long output2buffer1_y_phy;
|
|
unsigned long output2buffer1_cbcr_phy;
|
|
unsigned long output2buffer2_y_phy;
|
|
unsigned long output2buffer2_cbcr_phy;
|
|
unsigned long output2buffer3_y_phy;
|
|
unsigned long output2buffer3_cbcr_phy;
|
|
unsigned long output2buffer4_y_phy;
|
|
unsigned long output2buffer4_cbcr_phy;
|
|
unsigned long output2buffer5_y_phy;
|
|
unsigned long output2buffer5_cbcr_phy;
|
|
unsigned long output2buffer6_y_phy;
|
|
unsigned long output2buffer6_cbcr_phy;
|
|
unsigned long output2buffer7_y_phy;
|
|
unsigned long output2buffer7_cbcr_phy;
|
|
unsigned long output2buffer8_y_phy;
|
|
unsigned long output2buffer8_cbcr_phy;
|
|
} __attribute__((packed, aligned(4)));
|
|
|
|
struct vfe_stats_we_cfg {
|
|
uint32_t header;
|
|
|
|
/* White Balance/Exposure Statistic Selection */
|
|
uint8_t wb_expstatsenable:1;
|
|
uint8_t wb_expstatbuspriorityselection:1;
|
|
unsigned int wb_expstatbuspriorityvalue:4;
|
|
unsigned int /* reserved */ : 26;
|
|
|
|
/* White Balance/Exposure Statistic Configuration, Part 1 */
|
|
uint8_t exposurestatregions:1;
|
|
uint8_t exposurestatsubregions:1;
|
|
unsigned int /* reserved */ : 14;
|
|
|
|
unsigned int whitebalanceminimumy:8;
|
|
unsigned int whitebalancemaximumy:8;
|
|
|
|
/* White Balance/Exposure Statistic Configuration, Part 2 */
|
|
uint8_t wb_expstatslopeofneutralregionline[
|
|
NUM_WB_EXP_NEUTRAL_REGION_LINES];
|
|
|
|
/* White Balance/Exposure Statistic Configuration, Part 3 */
|
|
unsigned int wb_expstatcrinterceptofneutralregionline2:12;
|
|
unsigned int /* reserved */ : 4;
|
|
unsigned int wb_expstatcbinterceptofneutralreginnline1:12;
|
|
unsigned int /* reserved */ : 4;
|
|
|
|
/* White Balance/Exposure Statistic Configuration, Part 4 */
|
|
unsigned int wb_expstatcrinterceptofneutralregionline4:12;
|
|
unsigned int /* reserved */ : 4;
|
|
unsigned int wb_expstatcbinterceptofneutralregionline3:12;
|
|
unsigned int /* reserved */ : 4;
|
|
|
|
/* White Balance/Exposure Statistic Output Buffer Header */
|
|
unsigned int wb_expmetricheaderpattern:8;
|
|
unsigned int /* reserved */ : 24;
|
|
|
|
/* White Balance/Exposure Statistic Output Buffers-MUST
|
|
* BE 64 bit ALIGNED */
|
|
void *wb_expstatoutputbuffer[NUM_WB_EXP_STAT_OUTPUT_BUFFERS];
|
|
} __attribute__((packed, aligned(4)));
|
|
|
|
struct vfe_stats_af_cfg {
|
|
uint32_t header;
|
|
|
|
/* Autofocus Statistic Selection */
|
|
uint8_t af_enable:1;
|
|
uint8_t af_busprioritysel:1;
|
|
unsigned int af_buspriorityval:4;
|
|
unsigned int /* reserved */ : 26;
|
|
|
|
/* Autofocus Statistic Configuration, Part 1 */
|
|
unsigned int af_singlewinvoffset:12;
|
|
unsigned int /* reserved */ : 4;
|
|
unsigned int af_singlewinhoffset:12;
|
|
unsigned int /* reserved */ : 3;
|
|
uint8_t af_winmode:1;
|
|
|
|
/* Autofocus Statistic Configuration, Part 2 */
|
|
unsigned int af_singglewinvh:11;
|
|
unsigned int /* reserved */ : 5;
|
|
unsigned int af_singlewinhw:11;
|
|
unsigned int /* reserved */ : 5;
|
|
|
|
/* Autofocus Statistic Configuration, Parts 3-6 */
|
|
uint8_t af_multiwingrid[NUM_AUTOFOCUS_MULTI_WINDOW_GRIDS];
|
|
|
|
/* Autofocus Statistic Configuration, Part 7 */
|
|
signed int af_metrichpfcoefa00:5;
|
|
signed int af_metrichpfcoefa04:5;
|
|
unsigned int af_metricmaxval:11;
|
|
uint8_t af_metricsel:1;
|
|
unsigned int /* reserved */ : 10;
|
|
|
|
/* Autofocus Statistic Configuration, Part 8 */
|
|
signed int af_metrichpfcoefa20:5;
|
|
signed int af_metrichpfcoefa21:5;
|
|
signed int af_metrichpfcoefa22:5;
|
|
signed int af_metrichpfcoefa23:5;
|
|
signed int af_metrichpfcoefa24:5;
|
|
unsigned int /* reserved */ : 7;
|
|
|
|
/* Autofocus Statistic Output Buffer Header */
|
|
unsigned int af_metrichp:8;
|
|
unsigned int /* reserved */ : 24;
|
|
|
|
/* Autofocus Statistic Output Buffers - MUST BE 64 bit ALIGNED!!! */
|
|
void *af_outbuf[NUM_AF_STAT_OUTPUT_BUFFERS];
|
|
} __attribute__((packed, aligned(4))); /* VFE_StatsAutofocusConfigCmdType */
|
|
|
|
struct msm_camera_frame_msg {
|
|
unsigned long output_y_address;
|
|
unsigned long output_cbcr_address;
|
|
|
|
unsigned int blacklevelevenColumn:23;
|
|
uint16_t reserved1:9;
|
|
unsigned int blackleveloddColumn:23;
|
|
uint16_t reserved2:9;
|
|
|
|
uint16_t greendefectpixelcount:8;
|
|
uint16_t reserved3:8;
|
|
uint16_t redbluedefectpixelcount:8;
|
|
uint16_t reserved4:8;
|
|
} __attribute__((packed, aligned(4)));
|
|
|
|
/* New one for 7k */
|
|
struct msm_vfe_command_7k {
|
|
uint16_t queue;
|
|
uint16_t length;
|
|
void *value;
|
|
};
|
|
|
|
struct stop_event {
|
|
wait_queue_head_t wait;
|
|
int state;
|
|
int timeout;
|
|
};
|
|
|
|
|
|
#endif /* __MSM_VFE7X_H__ */
|