/*
* CAUTION: This file is automatically generated by Xilinx.
* Version: XSCT 2022.1
* Today is: Sun May 14 16:46:28 2023
*/
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target = <&fpga_full>;
overlay0: __overlay__ {
#address-cells = <2>;
#size-cells = <2>;
firmware-name = "kr260_cam_disp.bit.bin";
resets = <&zynqmp_reset 116>, <&zynqmp_reset 117>, <&zynqmp_reset 118>, <&zynqmp_reset 119>;
};
};
fragment@1 {
target = <&amba>;
overlay1: __overlay__ {
afi0: afi0 {
compatible = "xlnx,afi-fpga";
config-afi = < 0 0>, <1 0>, <2 0>, <3 0>, <4 0>, <5 0>, <6 0>, <7 0>, <8 0>, <9 0>, <10 0>, <11 0>, <12 0>, <13 0>, <14 0xa00>, <15 0x000>;
};
clocking0: clocking0 {
#clock-cells = <0>;
assigned-clock-rates = <99999001>;
assigned-clocks = <&zynqmp_clk 71>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,fclk";
};
clocking1: clocking1 {
#clock-cells = <0>;
assigned-clock-rates = <23809286>;
assigned-clocks = <&zynqmp_clk 72>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 72>;
compatible = "xlnx,fclk";
};
pwm_fan0: pwm-fan {
compatible = "pwm-fan";
status = "okay";
pwms = <&ttc0 2 40000 0>;
};
udmabuf4: udmabuf4 {
compatible = "ikwzm,u-dma-buf";
device-name = "udmabuf4";
minor-number = <0>;
size = <0x02000000>;
};
};
};
fragment@2 {
target = <&amba>;
overlay2: __overlay__ {
#address-cells = <2>;
#size-cells = <2>;
active_frame: gpio@80060000 {
#gpio-cells = <2>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
gpio-controller ;
reg = <0x0 0x80060000 0x0 0x10000>;
xlnx,all-inputs = <0x1>;
xlnx,all-inputs-2 = <0x0>;
xlnx,all-outputs = <0x0>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x00000000>;
xlnx,dout-default-2 = <0x00000000>;
xlnx,gpio-width = <0x2>;
xlnx,gpio2-width = <0x20>;
xlnx,interrupt-present = <0x0>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xFFFFFFFF>;
xlnx,tri-default-2 = <0xFFFFFFFF>;
};
misc_clk_0: misc_clk_0 {
#clock-cells = <0>;
clock-frequency = <199998000>;
compatible = "fixed-clock";
};
axi_intc_0: interrupt-controller@80000000 {
#interrupt-cells = <2>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
interrupt-controller ;
interrupt-names = "irq";
interrupt-parent = <&gic>;
interrupts = <0 89 4>;
reg = <0x0 0x80000000 0x0 0x10000>;
xlnx,kind-of-intr = <0xfffffffd>;
xlnx,num-intr-inputs = <0x20>;
};
camera_axi_iic_0: i2c@80010000 {
#address-cells = <1>;
#size-cells = <0>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80010000 0x0 0x10000>;
};
camera_mt9d111_inf_axis_0: mt9d111_inf_axis@80020000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "s_axi_lite_aclk", "m_axis_aclk";
clocks = <&misc_clk_0>, <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80020000 0x0 0x10000>;
};
camera_vflip_dma_write2_0: vflip_dma_write2@80030000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "ap_clk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80030000 0x0 0x10000>;
xlnx,s-axi-axilites-addr-width = <0x6>;
xlnx,s-axi-axilites-data-width = <0x20>;
};
display_axi_gpio_0: gpio@80040000 {
#gpio-cells = <2>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
gpio-controller ;
reg = <0x0 0x80040000 0x0 0x10000>;
xlnx,all-inputs = <0x0>;
xlnx,all-inputs-2 = <0x0>;
xlnx,all-outputs = <0x1>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x00000000>;
xlnx,dout-default-2 = <0x00000000>;
xlnx,gpio-width = <0x1>;
xlnx,gpio2-width = <0x20>;
xlnx,interrupt-present = <0x0>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xFFFFFFFF>;
xlnx,tri-default-2 = <0xFFFFFFFF>;
};
display_disp_dmar_axis_0: disp_dmar_axis@80050000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "ap_clk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80050000 0x0 0x10000>;
xlnx,s-axi-axilites-addr-width = <0x6>;
xlnx,s-axi-axilites-data-width = <0x20>;
};
lap_filter_axim_1: lap_filter_axim@a0000000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
/*clock-names = "ap_clk";
clocks = <&misc_clk_0>;*/
compatible = "generic-uio";
/*interrupt-names = "interrupt";
interrupt-parent = <&axi_intc_0>;
interrupts = <1 2>;*/
reg = <0x0 0xa0000000 0x0 0x10000>;
/*xlnx,s-axi-control-addr-width = <0x6>;
xlnx,s-axi-control-data-width = <0x20>;*/
};
zyxclmm_drm {
compatible = "xlnx,zocl";
interrupts-extended = <&axi_intc_0 0 4>, <&axi_intc_0 1 4>, <&axi_intc_0 2 4>, <&axi_intc_0 3 4>, <&axi_intc_0 4 4>, <&axi_intc_0 5 4>, <&axi_intc_0 6 4>, <&axi_intc_0 7 4>, <&axi_intc_0 8 4>, <&axi_intc_0 9 4>,
<&axi_intc_0 10 4>, <&axi_intc_0 11 4>, <&axi_intc_0 12 4>, <&axi_intc_0 13 4>, <&axi_intc_0 14 4>,
<&axi_intc_0 15 4>, <&axi_intc_0 16 4>, <&axi_intc_0 17 4>, <&axi_intc_0 18 4>, <&axi_intc_0 19 4>,
<&axi_intc_0 20 4>, <&axi_intc_0 21 4>, <&axi_intc_0 22 4>, <&axi_intc_0 23 4>, <&axi_intc_0 24 4>,
<&axi_intc_0 25 4>, <&axi_intc_0 26 4>, <&axi_intc_0 27 4>, <&axi_intc_0 28 4>, <&axi_intc_0 29 4>,
<&axi_intc_0 30 4>, <&axi_intc_0 31 4 >;
};
};
};
};
[ 2626.242446] fpga_manager fpga0: writing kr260_cam_disp.bit.bin to Xilinx ZynqMP FPGA Manager
[ 2628.213587] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
[ 2628.223693] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/resets
[ 2628.233615] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay0
[ 2628.243453] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay1
[ 2628.253285] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/afi0
[ 2628.262772] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/clocking0
[ 2628.272693] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/clocking1
[ 2628.282614] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pwm_fan0
[ 2628.292448] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/udmabuf4
[ 2628.302284] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay2
[ 2628.312118] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/active_frame
[ 2628.322300] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/misc_clk_0
[ 2628.332308] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/axi_intc_0
[ 2628.342321] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_axi_iic_0
[ 2628.352854] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_mt9d111_inf_axis_0
[ 2628.364164] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_vflip_dma_write2_0
[ 2628.375474] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/display_axi_gpio_0
[ 2628.386179] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/display_disp_dmar_axis_0
[ 2628.397400] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/lap_filter_axim_1
[ 2628.418872] pwm-fan axi:pwm-fan: error -EBUSY: Could not get PWM
[ 2628.424917] pwm-fan: probe of axi:pwm-fan failed with error -16
[ 2628.439545] u-dma-buf udmabuf4: driver version = 4.4.1
[ 2628.444687] u-dma-buf udmabuf4: major number = 239
[ 2628.449645] u-dma-buf udmabuf4: minor number = 0
[ 2628.454436] u-dma-buf udmabuf4: phys address = 0x0000000042200000
[ 2628.460702] u-dma-buf udmabuf4: buffer size = 33554432
[ 2628.466093] u-dma-buf axi:udmabuf4: driver installed.
// cam_dp_ov5642.cpp (for KR260, Debian11)
// 2018/12/14 by marsee
//
// This software converts the left and right of the camera image to BMP file.
// -b : bmp file name
// -n : Start File Number
// -h : help
//
// 2018/12/20 : completed.
// I am using the SVGA driver register setting of https://github.com/virajkanwade/rk3188_android_kernel/blob/master/drivers/media/video/ov5642.c
// 2018/12/22 : fixed
// 2018/12/30 : ov5642_inf_axis[0] fixed
// 2019/02/06 : for DisplayPort
// 2023/04/23 : kr260_cam_disp vitis platform
// 2023/05/15 : bug fix
// 2023/05/16 : Added support for lap_filter_axim
// 2023/06/05 : Changed uio4 and uio5 for ikwzm's Debian11
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#define PIXEL_NUM_OF_BYTES 4
#define NUMBER_OF_WRITE_FRAMES 4
#define SVGA_HORIZONTAL_PIXELS 800
#define SVGA_VERTICAL_LINES 600
#define SVGA_ALL_DISP_ADDRESS (SVGA_HORIZONTAL_PIXELS * SVGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define SVGA_3_PICTURES (SVGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define XGA_HORIZONTAL_PIXELS 1024
#define XGA_VERTICAL_LINES 768
#define XGA_ALL_DISP_ADDRESS (XGA_HORIZONTAL_PIXELS * XGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define XGA_3_PICTURES (XGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define HD_HORIZONTAL_PIXELS 1920
#define HD_VERTICAL_LINES 1080
#define HD_ALL_DISP_ADDRESS (HD_HORIZONTAL_PIXELS * HD_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define HD_3_PICTURES (HD_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution, bool filter_on);
void cam_i2c_init(volatile unsigned *ov5642_axi_iic) {
ov5642_axi_iic[64] = 0x2; // reset tx fifo ,address is 0x100, i2c_control_reg
ov5642_axi_iic[64] = 0x1; // enable i2c
}
void cam_i2x_write_sync(void) {
// unsigned c;
// c = *cam_i2c_rx_fifo;
// while ((c & 0x84) != 0x80)
// c = *cam_i2c_rx_fifo; // No Bus Busy and TX_FIFO_Empty = 1
usleep(1000);
}
void cam_i2c_write(volatile unsigned *ov5642_axi_iic, unsigned int device_addr, unsigned int write_addr, unsigned int write_data){
ov5642_axi_iic[66] = 0x100 | (device_addr & 0xfe); // Slave IIC Write Address, address is 0x108, i2c_tx_fifo
ov5642_axi_iic[66] = (write_addr >> 8) & 0xff; // address upper byte
ov5642_axi_iic[66] = write_addr & 0xff; // address lower byte
ov5642_axi_iic[66] = 0x200 | (write_data & 0xff); // data
cam_i2x_write_sync();
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr);
int main(int argc, char *argv[]){
int opt;
int c, help_flag=0;
char bmp_fn[256] = "bmp_file";
char attr[1024];
unsigned long phys_addr;
int file_no = -1;
int fd1, fd2, fd3, fd4, fd5, fd6, fd10, fd11, fd_lap;
volatile unsigned int *ov5642_inf_axis, *axi_iic, *disp_dmar_axis, *vflip_dma_write;
volatile unsigned int *axi_gpio_0, *active_frame_gpio, *lap_filter_axim;
volatile unsigned int *frame_buffer;
int active_frame;
int resolution;
int all_disp_addr;
bool filter_on = false;
resolution = 1; // XGA
while ((opt=getopt(argc, argv, "b:n:h:r:")) != -1){
switch (opt){
case 'b':
strcpy(bmp_fn, optarg);
break;
case 'n':
file_no = atoi(optarg);
printf("file_no = %d\n", file_no+1);
break;
case 'r':
resolution = atoi(optarg);
break;
case 'h':
help_flag = 1;
break;
}
}
if(resolution == 0){
printf("SVGA\n");
} else if(resolution == 1){
printf("XGA\n");
} else {
printf("HD\n");
}
if (help_flag == 1){ // help
printf("Usage : cam_capture [-b <bmp file name>] [-n <Start File Number>] [-h]\n");
printf(" -r [0|1|2](0:SVGA, 1:XGA, 2:HD)\n");
exit(0);
}
// all_disp_addr
switch(resolution){
case 0 :
all_disp_addr = SVGA_ALL_DISP_ADDRESS;
break;
case 1 :
all_disp_addr = XGA_ALL_DISP_ADDRESS;
break;
default : // 2
all_disp_addr = HD_ALL_DISP_ADDRESS;
break;
}
// ov5642_inf_axis-uio IP
fd1 = open("/dev/uio7", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd1 < 1){
fprintf(stderr, "/dev/uio7 (ov5642_inf_axis) open error\n");
exit(-1);
}
ov5642_inf_axis = (volatile unsigned *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
if (!ov5642_inf_axis){
fprintf(stderr, "ov5642_inf_axis mmap error\n");
exit(-1);
}
// axi_iic-uio IP
fd2 = open("/dev/uio6", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd2 < 1){
fprintf(stderr, "/dev/uio6 (axi_iic) open error\n");
exit(-1);
}
axi_iic = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
if (!axi_iic){
fprintf(stderr, "axi_iic mmap error\n");
exit(-1);
}
// disp_dmar_axis-uio IP
fd3 = open("/dev/uio10", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd3 < 1){
fprintf(stderr, "/dev/uio10 (disp_dmar_axis) open error\n");
exit(-1);
}
disp_dmar_axis = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd3, 0);
if (!disp_dmar_axis){
fprintf(stderr, "disp_dmar_axis mmap error\n");
exit(-1);
}
// vflip_dma_write-uio IP
fd4 = open("/dev/uio8", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd4 < 1){
fprintf(stderr, "/dev/uio8 (vflip_dma_write) open error\n");
exit(-1);
}
vflip_dma_write = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd4, 0);
if (!vflip_dma_write){
fprintf(stderr, "vflip_dma_write mmap error\n");
exit(-1);
}
// axi_gpio_0-uio IP (init_done output)
fd5 = open("/dev/uio9", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd5 < 1){
fprintf(stderr, "/dev/uio9 (axi_gpio_0) open error\n");
exit(-1);
}
axi_gpio_0 = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd5, 0);
if (!axi_gpio_0){
fprintf(stderr, "axi_gpio_0 mmap error\n");
exit(-1);
}
// active_frame_gpio-uio IP (active_frame input)
fd6 = open("/dev/uio5", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd6 < 1){
fprintf(stderr, "/dev/uio5 (active_frame_gpio) open error\n");
exit(-1);
}
active_frame_gpio = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd6, 0);
if (!active_frame_gpio){
fprintf(stderr, "active_frame_gpio mmap error\n");
exit(-1);
}
// laplacian_fliter-uio IP (active_frame input)
fd_lap = open("/dev/uio11", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd_lap < 1){
fprintf(stderr, "/dev/uio11 (lap_filter_axim) open error\n");
exit(-1);
}
lap_filter_axim = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd_lap, 0);
if (!active_frame_gpio){
fprintf(stderr, "lap_filter_axim mmap error\n");
exit(-1);
}
// udmabuf4
fd10 = open("/dev/udmabuf4", O_RDWR | O_SYNC); // frame_buffer, The chache is disabled.
if (fd10 == -1){
fprintf(stderr, "/dev/udmabuf4 open error\n");
exit(-1);
}
frame_buffer = (volatile unsigned int *)mmap(NULL, all_disp_addr*NUMBER_OF_WRITE_FRAMES, PROT_READ|PROT_WRITE, MAP_SHARED, fd10, 0);
if (!frame_buffer){
fprintf(stderr, "frame_buffer4 mmap error\n");
exit(-1);
}
// phys_addr of udmabuf4
fd11 = open("/sys/class/u-dma-buf/udmabuf4/phys_addr", O_RDONLY);
if (fd11 == -1){
fprintf(stderr, "/sys/class/u-dma-buf/udmabuf4/phys_addr open error\n");
exit(-1);
}
read(fd11, attr, 1024);
sscanf(attr, "%lx", &phys_addr);
close(fd11);
printf("phys_addr = %x\n", (int)phys_addr);
// vflip_dma_write start
vflip_dma_write[6] = phys_addr; // fb0
vflip_dma_write[8] = phys_addr+all_disp_addr; // fb1
vflip_dma_write[10] = phys_addr+2*all_disp_addr; // fb2
vflip_dma_write[12] = resolution;
vflip_dma_write[0] = 0x1; // start
vflip_dma_write[0] = 0x80; // EnableAutoRestart
// CMOS Camera initialize, ov5642
cam_i2c_init(axi_iic);
cam_reg_set(axi_iic, 0x78); // OV5642 register set
ov5642_inf_axis[0] = phys_addr; // ov5642 AXI4-Stream Start
ov5642_inf_axis[1] = 0;
// disp_dmar_axis start
disp_dmar_axis[4] = phys_addr; // fb0
disp_dmar_axis[6] = phys_addr+all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+2*all_disp_addr; // fb2
disp_dmar_axis[10] = resolution;
axi_gpio_0[0] = 1; // disp_dmar_axis start(init_done = 1)
char bmp_file[256];
// All 0 set
int all_disp_frame_index = all_disp_addr/PIXEL_NUM_OF_BYTES*NUMBER_OF_WRITE_FRAMES;
for (int i=0; i<all_disp_frame_index; i++){
frame_buffer[i] = 0x0;
}
// lap_filer_axm initialize
lap_filter_axim[5] = 0 ; // bit 31~0 - cam_fb[63:32] (Read/Write)
lap_filter_axim[7] = phys_addr+3*all_disp_addr; // bit 31~0 - lap_fb[31:0] (Read/Write)
lap_filter_axim[8] = 0; // bit 31~0 - lap_fb[63:32] (Read/Write)
switch (resolution){
case 0 : // SVGA
lap_filter_axim[10] = SVGA_HORIZONTAL_PIXELS;
lap_filter_axim[12] = SVGA_VERTICAL_LINES;
break;
case 1 : // XGA
lap_filter_axim[10] = XGA_HORIZONTAL_PIXELS;
lap_filter_axim[12] = XGA_VERTICAL_LINES;
break;
default : // HD
lap_filter_axim[10] = HD_HORIZONTAL_PIXELS;
lap_filter_axim[12] = HD_VERTICAL_LINES;
break;
}
// w - writed the left and right eye's bmp files. q - exit.
c = getc(stdin);
while(c != 'q'){
switch ((char)c) {
case 'w' : // w - writed a bmp files.
// writed the frame buffer
file_no++;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution, filter_on);
printf("file No. = %d\n", file_no);
break;
case 'e' : // e - writed a same bmp files.
// writed the frame buffer
if (file_no == -1)
file_no = 0;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution, filter_on);
printf("file No. = %d\n", file_no);
break;
case 'f' : // laplacian_filter on
filter_on = true;
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
int read_frame;
if (active_frame == 0)
read_frame = 2;
else if (active_frame == 1)
read_frame = 0;
else // active_frame == 2
read_frame = 1;
lap_filter_axim[4] = phys_addr+read_frame*all_disp_addr;
lap_filter_axim[0] = 0x81; // ap_start + auto_restart
disp_dmar_axis[4] = phys_addr+3*all_disp_addr; // fb0
disp_dmar_axis[6] = phys_addr+3*all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+3*all_disp_addr; // fb2
break;
case 'c' : // Display camera image
filter_on = false;
lap_filter_axim[0] = 1; // ap_start
disp_dmar_axis[4] = phys_addr; // fb0
disp_dmar_axis[6] = phys_addr+all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+2*all_disp_addr; // fb2
break;
}
c = getc(stdin);
}
munmap((void *)ov5642_inf_axis, 0x1000);
munmap((void *)axi_iic, 0x1000);
munmap((void *)disp_dmar_axis, 0x10000);
munmap((void *)vflip_dma_write, 0x10000);
munmap((void *)axi_gpio_0, 0x1000);
munmap((void *)active_frame_gpio, 0x1000);
munmap((void *)frame_buffer, all_disp_addr*3);
close(fd1);
close(fd2);
close(fd3);
close(fd4);
close(fd5);
close(fd6);
close(fd10);
return(0);
}
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution, bool filter_on){
int read_frame;
int img_width, img_height;
if (active_frame == 0)
read_frame = 2;
else if (active_frame == 1)
read_frame = 0;
else // active_frame == 2
read_frame = 1;
switch(resolution){
case 0 :
img_width = SVGA_HORIZONTAL_PIXELS;
img_height = SVGA_VERTICAL_LINES;
break;
case 1 :
img_width = XGA_HORIZONTAL_PIXELS;
img_height = XGA_VERTICAL_LINES;
break;
default : // case 2 :
img_width = HD_HORIZONTAL_PIXELS;
img_height = HD_VERTICAL_LINES;
break;
}
int offset_addr;
if (filter_on == false){
offset_addr = read_frame * img_width * img_height;
}else{
offset_addr = 3 * img_width * img_height;
}
cv::Mat img(img_height, img_width, CV_8UC3);
cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
for(int y=0; y<img.rows; y++){
for(int x=0; x<img.cols; x++){
cv::Vec3b pixel;
int rgb = frame_buffer[offset_addr+y*img.cols+x];
pixel[0] = (rgb & 0xff); // blue
pixel[1] = (rgb & 0xff00) >> 8; // green
pixel[2] = (rgb & 0xff0000) >> 16; // red
dst_vec3b(y,x) = pixel;
}
}
cv::imwrite(bmp_file, img);
return(0);
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr){
cam_i2c_write(axi_iic, device_addr, 0x3103, 0x93);
cam_i2c_write(axi_iic, device_addr, 0x3008, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x3017, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x3018, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc2);
cam_i2c_write(axi_iic, device_addr, 0x3615, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x5c);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3005, 0xb7);
cam_i2c_write(axi_iic, device_addr, 0x3006, 0x43);
cam_i2c_write(axi_iic, device_addr, 0x3007, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3011, 0x08); // 0x08 - 15fps, 0x10 - 30fps
cam_i2c_write(axi_iic, device_addr, 0x3010, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x460c, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x370c, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3602, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3612, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x3634, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3613, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3622, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3604, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x4000, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x401d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3600, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3606, 0x3f);
cam_i2c_write(axi_iic, device_addr, 0x3c01, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x5020, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x79);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x0a);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5080, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x300e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x4610, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x471d, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x4708, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x3710, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3632, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3631, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61); // RGB565
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x73);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3824, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0xc1);
cam_i2c_write(axi_iic, device_addr, 0x3705, 0xdb);
cam_i2c_write(axi_iic, device_addr, 0x370a, 0x81);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3827, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a1a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a13, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a18, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a19, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x350c, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x350d, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3500, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3030, 0x0b);
cam_i2c_write(axi_iic, device_addr, 0x3a02, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a03, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a04, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a14, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a15, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a16, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0x98);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x589b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x589a, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x4e);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x538a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538b, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x538c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538d, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538f, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xab);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x65);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x71);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x87);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x91);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x9a);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0xaa);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xcd);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xdd);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xea);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x86);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0x5b);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0x3b);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xed);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0xa5);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x3406, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04); // 0x04
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8); // 0xf8
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0xbd);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x68);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x02); // 0x02
cam_i2c_write(axi_iic, device_addr, 0x3633, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0xb2);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x370b, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x3c00, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xFF);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5503, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0xE1);
cam_i2c_write(axi_iic, device_addr, 0x538A, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538B, 0x2B);
cam_i2c_write(axi_iic, device_addr, 0x538C, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538D, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538E, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538F, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xB3);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xA6);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x49);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x56);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x76);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x88);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0x96);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xcc);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0xee);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0xd8);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xb3);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0x90);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b1, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54b2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b3, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b4, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54b5, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x54b6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b7, 0xdf);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5587, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5588, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x558a, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x5589, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0xcf);
cam_i2c_write(axi_iic, device_addr, 0x5800, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5801, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x5802, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5803, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5804, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5805, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5806, 0x29);
cam_i2c_write(axi_iic, device_addr, 0x5807, 0x38);
cam_i2c_write(axi_iic, device_addr, 0x5808, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x5809, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x580a, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x580b, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580c, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x580d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580e, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x580f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5810, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5811, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5812, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x5813, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5814, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5815, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5816, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5817, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5818, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5819, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x581a, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x581b, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581c, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581d, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x581e, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x581f, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5820, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x5821, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5822, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5823, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5824, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5825, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x5826, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x5827, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5828, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5829, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x582a, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x582b, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582c, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x582d, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582e, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x582f, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5830, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5831, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5832, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5833, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5834, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5835, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5836, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5837, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5838, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x5839, 0x39);
cam_i2c_write(axi_iic, device_addr, 0x583a, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x583b, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x583c, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x583d, 0x23);
cam_i2c_write(axi_iic, device_addr, 0x583e, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x583f, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x5840, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5841, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5842, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5843, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5844, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5845, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5846, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5847, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5848, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5849, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584a, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584b, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x584c, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584e, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x584f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5850, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5851, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5852, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5853, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5854, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5855, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5856, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5857, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5858, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5859, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x585a, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585b, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585c, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585d, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x585e, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x585f, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5860, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5861, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5862, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5863, 0x7);
cam_i2c_write(axi_iic, device_addr, 0x5864, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5865, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5866, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5867, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5868, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5869, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x586a, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x586b, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x586c, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586d, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x586f, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5870, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5871, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5872, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5873, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5874, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x5875, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5876, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5877, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5878, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5879, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x587a, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x587b, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x587c, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587d, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587e, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x587f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5880, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5881, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5882, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5883, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5884, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5885, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5886, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5887, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5180, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0x9c);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x34);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x4c);
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5196, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5198, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5199, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x519a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x519b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x519c, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x519d, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x519e, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3800, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3802, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0x58);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0x81); // No Mirror
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x4740, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x501e, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5002, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61);
return(0);
}
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
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 | - | - | - | - |