mirror of
https://github.com/openmv/openmv.git
synced 2025-09-26 23:09:13 +08:00
1902 lines
66 KiB
C
1902 lines
66 KiB
C
/* Copyright (C) 2023 Alif Semiconductor - All Rights Reserved.
|
|
* Use, distribution and modification of this code is permitted under the
|
|
* terms stated in the Alif Semiconductor Software License Agreement
|
|
*
|
|
* You should have received a copy of the Alif Semiconductor Software
|
|
* License Agreement with this file. If not, please write to:
|
|
* contact@alifsemi.com, or visit: https://alifsemi.com/license
|
|
*
|
|
*/
|
|
/**************************************************************************//**
|
|
* @file arx3A0_camera_sensor.c
|
|
* @author Prasanna Ravi
|
|
* @email prasanna.ravi@alifsemi.com
|
|
* @version V1.0.0
|
|
* @date 19-April-2023
|
|
* @brief ONsemi ARX3A0 Camera Sensor driver.
|
|
* @bug None.
|
|
* @Note None.
|
|
******************************************************************************/
|
|
/* System Includes */
|
|
#include "RTE_Device.h"
|
|
#include "RTE_Components.h"
|
|
#include CMSIS_device_header
|
|
#include "Camera_Sensor.h"
|
|
#include "Camera_Sensor_i2c.h"
|
|
#include "Driver_GPIO.h"
|
|
#include "Driver_CPI.h"
|
|
#include "sys_ctrl_cpi.h"
|
|
|
|
/* Proceed only if ARX3A0 Camera Sensor is enabled. */
|
|
#if RTE_ARX3A0_CAMERA_SENSOR_CSI_ENABLE
|
|
|
|
/* I2C Instance */
|
|
#if(RTE_ARX3A0_CAMERA_SENSOR_I2C_INSTANCE == 4)
|
|
#define CAMERA_SENSOR_I2C_INSTANCE I3C
|
|
#else
|
|
#define CAMERA_SENSOR_I2C_INSTANCE RTE_ARX3A0_CAMERA_SENSOR_I2C_INSTANCE
|
|
#endif
|
|
|
|
/* ARX3A0 Camera Sensor Slave Address. */
|
|
#define ARX3A0_CAMERA_SENSOR_SLAVE_ADDR 0x36
|
|
|
|
/* ARX3A0 Camera Sensor CHIP-ID registers */
|
|
#define ARX3A0_CHIP_ID_REGISTER 0x3000
|
|
#define ARX3A0_CHIP_ID_REGISTER_VALUE 0x0353
|
|
|
|
/* ARX3A0 Camera Sensor registers index */
|
|
#define ARX3A0_SOFTWARE_RESET_REGISTER 0x0103
|
|
#define ARX3A0_MODE_SELECT_REGISTER 0x0100
|
|
#define ARX3A0_MIPI_CONFIG_REGISTER 0x31BE
|
|
#define ARX3A0_RESET_REGISTER 0x301A
|
|
#define ARX3A0_COARSE_INTEGRATION_TIME_REGISTER 0x3012
|
|
#define ARX3A0_GLOBAL_GAIN_REGISTER 0x305E
|
|
#define ARX3A0_DATA_PEDESTAL_REGISTER 0x301E
|
|
|
|
/* Wrapper function for i2c read
|
|
* read register value from ARX3A0 Camera Sensor registers
|
|
* using i2c read API \ref camera_sensor_i2c_read
|
|
*
|
|
* for ARX3A0 Camera Sensor specific i2c configurations
|
|
* see \ref ARX3A0_camera_sensor_i2c_cnfg
|
|
*/
|
|
#define ARX3A0_READ_REG(reg_addr, reg_value, reg_size) \
|
|
camera_sensor_i2c_read(&arx3A0_camera_sensor_i2c_cnfg, \
|
|
reg_addr, \
|
|
reg_value, \
|
|
(CAMERA_SENSOR_I2C_REG_SIZE)reg_size)
|
|
|
|
/* Wrapper function for i2c write
|
|
* write register value to ARX3A0 Camera Sensor registers
|
|
* using i2c write API \ref camera_sensor_i2c_write.
|
|
*
|
|
* for ARX3A0 Camera Sensor specific i2c configurations
|
|
* see \ref ARX3A0_camera_sensor_i2c_cnfg
|
|
*/
|
|
#define ARX3A0_WRITE_REG(reg_addr, reg_value, reg_size) \
|
|
camera_sensor_i2c_write(&arx3A0_camera_sensor_i2c_cnfg, \
|
|
reg_addr, \
|
|
reg_value, \
|
|
(CAMERA_SENSOR_I2C_REG_SIZE)reg_size)
|
|
|
|
/**
|
|
\brief ARX3A0 Camera Sensor Register Array Structure
|
|
used for Camera Configuration.
|
|
*/
|
|
typedef struct _ARX3A0_REG {
|
|
uint16_t reg_addr; /* ARX3A0 Camera Sensor Register Address*/
|
|
uint16_t reg_value; /* ARX3A0 Camera Sensor Register Value*/
|
|
} ARX3A0_REG;
|
|
|
|
/* Wrapper function for Delay
|
|
* Delay for microsecond:
|
|
* Provide busy loop delay
|
|
*/
|
|
#define ARX3A0_DELAY_uSEC(usec) sys_busy_loop_us(usec)
|
|
|
|
/* ARX3A) integration time */
|
|
static uint32_t current_integration_time;
|
|
static uint32_t max_integration_time;
|
|
|
|
/* ARX3A0 Camera reset GPIO port */
|
|
extern ARM_DRIVER_GPIO ARM_Driver_GPIO_(RTE_ARX3A0_CAMERA_SENSOR_RESET_GPIO_PORT);
|
|
static ARM_DRIVER_GPIO *GPIO_Driver_CAM_RST = &ARM_Driver_GPIO_(RTE_ARX3A0_CAMERA_SENSOR_RESET_GPIO_PORT);
|
|
|
|
/* ARX3A0 Camera power GPIO port */
|
|
extern ARM_DRIVER_GPIO ARM_Driver_GPIO_(RTE_ARX3A0_CAMERA_SENSOR_POWER_GPIO_PORT);
|
|
static ARM_DRIVER_GPIO *GPIO_Driver_CAM_PWR = &ARM_Driver_GPIO_(RTE_ARX3A0_CAMERA_SENSOR_POWER_GPIO_PORT);
|
|
|
|
/* I2C Driver Instance */
|
|
extern ARM_DRIVER_I2C ARM_Driver_I2C_(CAMERA_SENSOR_I2C_INSTANCE);
|
|
|
|
/**
|
|
\brief ARX3A0 Camera Sensor slave i2c Configuration
|
|
\ref CAMERA_SENSOR_SLAVE_I2C_CONFIG
|
|
*/
|
|
static CAMERA_SENSOR_SLAVE_I2C_CONFIG arx3A0_camera_sensor_i2c_cnfg =
|
|
{
|
|
.drv_i2c = &ARM_Driver_I2C_(CAMERA_SENSOR_I2C_INSTANCE),
|
|
.bus_speed = ARM_I2C_BUS_SPEED_STANDARD,
|
|
.cam_sensor_slave_addr = ARX3A0_CAMERA_SENSOR_SLAVE_ADDR,
|
|
.cam_sensor_slave_reg_addr_type = CAMERA_SENSOR_I2C_REG_ADDR_TYPE_16BIT,
|
|
};
|
|
|
|
/**
|
|
\brief ARX3A0 Camera Sensor Resolution 560x560
|
|
*/
|
|
static const ARX3A0_REG arx3a0_560_regs[] = {
|
|
|
|
#if (RTE_ARX3A0_CAMERA_SENSOR_CSI_CFG_FPS == 90)
|
|
{0x304C, 0x3000 }, // OTPM_RECORD
|
|
{0x304A, 0x0070 }, // OTPM_CONTROL
|
|
{0x0103, 0x01 }, // SOFTWARE_RESET
|
|
|
|
{0xFFFF, 500 }, //DELAY= 100
|
|
|
|
{0x3ED0, 0x0748 }, // RESERVED_MFR_3ED0
|
|
{0x3ED6, 0x3136 }, // RESERVED_MFR_3ED6
|
|
{0x3EDC, 0x1020 }, // RESERVED_MFR_3EDC
|
|
{0x3EDE, 0x1D2A }, // RESERVED_MFR_3EDE
|
|
{0x3EE0, 0x282A }, // RESERVED_MFR_3EE0
|
|
{0x3EE2, 0x2821 }, // RESERVED_MFR_3EE2
|
|
{0x3EC8, 0x0401 }, // RESERVED_MFR_3EC8
|
|
{0x3ED2, 0x3903 }, // RESERVED_MFR_3ED2
|
|
{0x3EC0, 0x0011 }, // RESERVED_MFR_3EC0
|
|
{0x3ECA, 0x826F }, // RESERVED_MFR_3ECA
|
|
{0x3EBC, 0xA8AA }, // RESERVED_MFR_3EBC
|
|
{0x3EC4, 0x1000 }, // RESERVED_MFR_3EC4
|
|
{0x3EBA, 0x0044 }, // RESERVED_MFR_3EBA
|
|
{0x3ED0, 0x0745 }, // RESERVED_MFR_3ED0
|
|
{0x3ED4, 0x0016 }, // RESERVED_MFR_3ED4
|
|
{0x3EC6, 0x80F2 }, // RESERVED_MFR_3EC6
|
|
{0x3ED8, 0x55FF }, // RESERVED_MFR_3ED8
|
|
{0x3EE6, 0x8000 }, // RESERVED_MFR_3EE6
|
|
{0x30D2, 0x0000 }, // RESERVED_MFR_30D2
|
|
{0x31E0, 0x00F1 }, // PIX_DEF_ID
|
|
{0x31E6, 0xA35F }, // PIX_DEF_ID_2
|
|
{0x3180, 0x9096 }, // RESERVED_MFR_3180
|
|
{0x3120, 0x0001 }, // GAIN_DITHER_CONTROL
|
|
{0x301E, 0x002A }, // DATA_PEDESTAL_
|
|
{0x3D00, 0x0436 }, // RESERVED_MFR_3D00
|
|
{0x3D02, 0x435A }, // RESERVED_MFR_3D02
|
|
{0x3D04, 0xFFFF }, // RESERVED_MFR_3D04
|
|
{0x3D06, 0xFFFF }, // RESERVED_MFR_3D06
|
|
{0x3D08, 0x2180 }, // RESERVED_MFR_3D08
|
|
{0x3D0A, 0x0005 }, // RESERVED_MFR_3D0A
|
|
{0x3D0C, 0x108F }, // RESERVED_MFR_3D0C
|
|
{0x3D0E, 0x0802 }, // RESERVED_MFR_3D0E
|
|
{0x3D10, 0x5248 }, // RESERVED_MFR_3D10
|
|
{0x3D12, 0x801B }, // RESERVED_MFR_3D12
|
|
{0x3D14, 0x006F }, // RESERVED_MFR_3D14
|
|
{0x3D16, 0x8269 }, // RESERVED_MFR_3D16
|
|
{0x3D18, 0x6A82 }, // RESERVED_MFR_3D18
|
|
{0x3D1A, 0x5148 }, // RESERVED_MFR_3D1A
|
|
{0x3D1C, 0x5A80 }, // RESERVED_MFR_3D1C
|
|
{0x3D1E, 0x5902 }, // RESERVED_MFR_3D1E
|
|
{0x3D20, 0x8082 }, // RESERVED_MFR_3D20
|
|
{0x3D22, 0x3060 }, // RESERVED_MFR_3D22
|
|
{0x3D24, 0x8567 }, // RESERVED_MFR_3D24
|
|
{0x3D26, 0x5C20 }, // RESERVED_MFR_3D26
|
|
{0x3D28, 0x4880 }, // RESERVED_MFR_3D28
|
|
{0x3D2A, 0x0284 }, // RESERVED_MFR_3D2A
|
|
{0x3D2C, 0x6084 }, // RESERVED_MFR_3D2C
|
|
{0x3D2E, 0x5C91 }, // RESERVED_MFR_3D2E
|
|
{0x3D30, 0x5980 }, // RESERVED_MFR_3D30
|
|
{0x3D32, 0x5883 }, // RESERVED_MFR_3D32
|
|
{0x3D34, 0x6462 }, // RESERVED_MFR_3D34
|
|
{0x3D36, 0x8056 }, // RESERVED_MFR_3D36
|
|
{0x3D38, 0x8162 }, // RESERVED_MFR_3D38
|
|
{0x3D3A, 0x8422 }, // RESERVED_MFR_3D3A
|
|
{0x3D3C, 0x20A2 }, // RESERVED_MFR_3D3C
|
|
{0x3D3E, 0x2220 }, // RESERVED_MFR_3D3E
|
|
{0x3D40, 0x804B }, // RESERVED_MFR_3D40
|
|
{0x3D42, 0x8110 }, // RESERVED_MFR_3D42
|
|
{0x3D44, 0x0943 }, // RESERVED_MFR_3D44
|
|
{0x3D46, 0x9243 }, // RESERVED_MFR_3D46
|
|
{0x3D48, 0x8050 }, // RESERVED_MFR_3D48
|
|
{0x3D4A, 0x9A4B }, // RESERVED_MFR_3D4A
|
|
{0x3D4C, 0x8563 }, // RESERVED_MFR_3D4C
|
|
{0x3D4E, 0x8363 }, // RESERVED_MFR_3D4E
|
|
{0x3D50, 0x8422 }, // RESERVED_MFR_3D50
|
|
{0x3D52, 0x20A2 }, // RESERVED_MFR_3D52
|
|
{0x3D54, 0x61C6 }, // RESERVED_MFR_3D54
|
|
{0x3D56, 0x6F99 }, // RESERVED_MFR_3D56
|
|
{0x3D58, 0x3009 }, // RESERVED_MFR_3D58
|
|
{0x3D5A, 0x1FF6 }, // RESERVED_MFR_3D5A
|
|
{0x3D5C, 0x20ED }, // RESERVED_MFR_3D5C
|
|
{0x3D5E, 0x0874 }, // RESERVED_MFR_3D5E
|
|
{0x3D60, 0x8230 }, // RESERVED_MFR_3D60
|
|
{0x3D62, 0x609B }, // RESERVED_MFR_3D62
|
|
{0x3D64, 0x3060 }, // RESERVED_MFR_3D64
|
|
{0x3D66, 0x4600 }, // RESERVED_MFR_3D66
|
|
{0x3D68, 0x3783 }, // RESERVED_MFR_3D68
|
|
{0x3D6A, 0x7070 }, // RESERVED_MFR_3D6A
|
|
{0x3D6C, 0x8040 }, // RESERVED_MFR_3D6C
|
|
{0x3D6E, 0x4A44 }, // RESERVED_MFR_3D6E
|
|
{0x3D70, 0x8003 }, // RESERVED_MFR_3D70
|
|
{0x3D72, 0x0086 }, // RESERVED_MFR_3D72
|
|
{0x3D74, 0x4588 }, // RESERVED_MFR_3D74
|
|
{0x3D76, 0x46BA }, // RESERVED_MFR_3D76
|
|
{0x3D78, 0x0300 }, // RESERVED_MFR_3D78
|
|
{0x3D7A, 0xFFD7 }, // RESERVED_MFR_3D7A
|
|
{0x3D7C, 0x4688 }, // RESERVED_MFR_3D7C
|
|
{0x3D7E, 0x4588 }, // RESERVED_MFR_3D7E
|
|
{0x3D80, 0x4492 }, // RESERVED_MFR_3D80
|
|
{0x3D82, 0x4A9B }, // RESERVED_MFR_3D82
|
|
{0x3D84, 0x4070 }, // RESERVED_MFR_3D84
|
|
{0x3D86, 0x8040 }, // RESERVED_MFR_3D86
|
|
{0x3D88, 0x4AAD }, // RESERVED_MFR_3D88
|
|
{0x3D8A, 0x0070 }, // RESERVED_MFR_3D8A
|
|
{0x3D8C, 0xAE47 }, // RESERVED_MFR_3D8C
|
|
{0x3D8E, 0x8547 }, // RESERVED_MFR_3D8E
|
|
{0x3D90, 0xAD78 }, // RESERVED_MFR_3D90
|
|
{0x3D92, 0x6B85 }, // RESERVED_MFR_3D92
|
|
{0x3D94, 0x6A80 }, // RESERVED_MFR_3D94
|
|
{0x3D96, 0x6984 }, // RESERVED_MFR_3D96
|
|
{0x3D98, 0x6B8A }, // RESERVED_MFR_3D98
|
|
{0x3D9A, 0x6B80 }, // RESERVED_MFR_3D9A
|
|
{0x3D9C, 0x6980 }, // RESERVED_MFR_3D9C
|
|
{0x3D9E, 0x6A85 }, // RESERVED_MFR_3D9E
|
|
{0x3DA0, 0x7C93 }, // RESERVED_MFR_3DA0
|
|
{0x3DA2, 0x846B }, // RESERVED_MFR_3DA2
|
|
{0x3DA4, 0x8465 }, // RESERVED_MFR_3DA4
|
|
{0x3DA6, 0x46FF }, // RESERVED_MFR_3DA6
|
|
{0x3DA8, 0xAA65 }, // RESERVED_MFR_3DA8
|
|
{0x3DAA, 0x9C79 }, // RESERVED_MFR_3DAA
|
|
{0x3DAC, 0x4A00 }, // RESERVED_MFR_3DAC
|
|
{0x3DAE, 0x2180 }, // RESERVED_MFR_3DAE
|
|
{0x3DB0, 0x44AC }, // RESERVED_MFR_3DB0
|
|
{0x3DB2, 0x7070 }, // RESERVED_MFR_3DB2
|
|
{0x3DB4, 0x2180 }, // RESERVED_MFR_3DB4
|
|
{0x3DB6, 0x0005 }, // RESERVED_MFR_3DB6
|
|
{0x3DB8, 0x108F }, // RESERVED_MFR_3DB8
|
|
{0x3DBA, 0x0802 }, // RESERVED_MFR_3DBA
|
|
{0x3DBC, 0x5248 }, // RESERVED_MFR_3DBC
|
|
{0x3DBE, 0x801B }, // RESERVED_MFR_3DBE
|
|
{0x3DC0, 0x006F }, // RESERVED_MFR_3DC0
|
|
{0x3DC2, 0x8269 }, // RESERVED_MFR_3DC2
|
|
{0x3DC4, 0x6A82 }, // RESERVED_MFR_3DC4
|
|
{0x3DC6, 0x5148 }, // RESERVED_MFR_3DC6
|
|
{0x3DC8, 0x5A80 }, // RESERVED_MFR_3DC8
|
|
{0x3DCA, 0x5902 }, // RESERVED_MFR_3DCA
|
|
{0x3DCC, 0x8082 }, // RESERVED_MFR_3DCC
|
|
{0x3DCE, 0x3060 }, // RESERVED_MFR_3DCE
|
|
{0x3DD0, 0x8567 }, // RESERVED_MFR_3DD0
|
|
{0x3DD2, 0x5C20 }, // RESERVED_MFR_3DD2
|
|
{0x3DD4, 0x4880 }, // RESERVED_MFR_3DD4
|
|
{0x3DD6, 0x0284 }, // RESERVED_MFR_3DD6
|
|
{0x3DD8, 0x6084 }, // RESERVED_MFR_3DD8
|
|
{0x3DDA, 0x5C91 }, // RESERVED_MFR_3DDA
|
|
{0x3DDC, 0x5980 }, // RESERVED_MFR_3DDC
|
|
{0x3DDE, 0x5883 }, // RESERVED_MFR_3DDE
|
|
{0x3DE0, 0x6462 }, // RESERVED_MFR_3DE0
|
|
{0x3DE2, 0x8056 }, // RESERVED_MFR_3DE2
|
|
{0x3DE4, 0x8162 }, // RESERVED_MFR_3DE4
|
|
{0x3DE6, 0x8422 }, // RESERVED_MFR_3DE6
|
|
{0x3DE8, 0x209C }, // RESERVED_MFR_3DE8
|
|
{0x3DEA, 0x2220 }, // RESERVED_MFR_3DEA
|
|
{0x3DEC, 0x514B }, // RESERVED_MFR_3DEC
|
|
{0x3DEE, 0x8110 }, // RESERVED_MFR_3DEE
|
|
{0x3DF0, 0x0943 }, // RESERVED_MFR_3DF0
|
|
{0x3DF2, 0x9843 }, // RESERVED_MFR_3DF2
|
|
{0x3DF4, 0x8050 }, // RESERVED_MFR_3DF4
|
|
{0x3DF6, 0x8B51 }, // RESERVED_MFR_3DF6
|
|
{0x3DF8, 0x8D4B }, // RESERVED_MFR_3DF8
|
|
{0x3DFA, 0x9063 }, // RESERVED_MFR_3DFA
|
|
{0x3DFC, 0x8363 }, // RESERVED_MFR_3DFC
|
|
{0x3DFE, 0x8422 }, // RESERVED_MFR_3DFE
|
|
{0x3E00, 0x209C }, // RESERVED_MFR_3E00
|
|
{0x3E02, 0x61D3 }, // RESERVED_MFR_3E02
|
|
{0x3E04, 0x1FB6 }, // RESERVED_MFR_3E04
|
|
{0x3E06, 0x20ED }, // RESERVED_MFR_3E06
|
|
{0x3E08, 0x3809 }, // RESERVED_MFR_3E08
|
|
{0x3E0A, 0x524B }, // RESERVED_MFR_3E0A
|
|
{0x3E0C, 0x0014 }, // RESERVED_MFR_3E0C
|
|
{0x3E0E, 0x4580 }, // RESERVED_MFR_3E0E
|
|
{0x3E10, 0x4681 }, // RESERVED_MFR_3E10
|
|
{0x3E12, 0x3060 }, // RESERVED_MFR_3E12
|
|
{0x3E14, 0x9D30 }, // RESERVED_MFR_3E14
|
|
{0x3E16, 0x6083 }, // RESERVED_MFR_3E16
|
|
{0x3E18, 0x4645 }, // RESERVED_MFR_3E18
|
|
{0x3E1A, 0x0017 }, // RESERVED_MFR_3E1A
|
|
{0x3E1C, 0x8170 }, // RESERVED_MFR_3E1C
|
|
{0x3E1E, 0x7070 }, // RESERVED_MFR_3E1E
|
|
{0x3E20, 0x7070 }, // RESERVED_MFR_3E20
|
|
{0x3E22, 0x7070 }, // RESERVED_MFR_3E22
|
|
{0x3E24, 0x7070 }, // RESERVED_MFR_3E24
|
|
{0x3E26, 0x7070 }, // RESERVED_MFR_3E26
|
|
{0x3E28, 0x7070 }, // RESERVED_MFR_3E28
|
|
{0x3E2A, 0x7070 }, // RESERVED_MFR_3E2A
|
|
{0x3E2C, 0x7070 }, // RESERVED_MFR_3E2C
|
|
{0x3E2E, 0x7070 }, // RESERVED_MFR_3E2E
|
|
{0x3E30, 0x7070 }, // RESERVED_MFR_3E30
|
|
{0x3E32, 0x7070 }, // RESERVED_MFR_3E32
|
|
{0x3E34, 0x7070 }, // RESERVED_MFR_3E34
|
|
{0x3E36, 0x7070 }, // RESERVED_MFR_3E36
|
|
{0x3E38, 0x7070 }, // RESERVED_MFR_3E38
|
|
{0x3E3A, 0x7070 }, // RESERVED_MFR_3E3A
|
|
{0x3E3C, 0x7070 }, // RESERVED_MFR_3E3C
|
|
{0x3E3E, 0x7070 }, // RESERVED_MFR_3E3E
|
|
{0x3E40, 0x7070 }, // RESERVED_MFR_3E40
|
|
{0x3E42, 0x7070 }, // RESERVED_MFR_3E42
|
|
{0x3E44, 0x7070 }, // RESERVED_MFR_3E44
|
|
{0x3E46, 0x7070 }, // RESERVED_MFR_3E46
|
|
{0x3E48, 0x7070 }, // RESERVED_MFR_3E48
|
|
{0x3E4A, 0x7070 }, // RESERVED_MFR_3E4A
|
|
{0x3E4C, 0x7070 }, // RESERVED_MFR_3E4C
|
|
{0x3E4E, 0x7070 }, // RESERVED_MFR_3E4E
|
|
{0x3E50, 0x7070 }, // RESERVED_MFR_3E50
|
|
{0x3E52, 0x7070 }, // RESERVED_MFR_3E52
|
|
{0x3E54, 0x7070 }, // RESERVED_MFR_3E54
|
|
{0x3E56, 0x7070 }, // RESERVED_MFR_3E56
|
|
{0x3E58, 0x7070 }, // RESERVED_MFR_3E58
|
|
{0x3E5A, 0x7070 }, // RESERVED_MFR_3E5A
|
|
{0x3E5C, 0x7070 }, // RESERVED_MFR_3E5C
|
|
{0x3E5E, 0x7070 }, // RESERVED_MFR_3E5E
|
|
{0x3E60, 0x7070 }, // RESERVED_MFR_3E60
|
|
{0x3E62, 0x7070 }, // RESERVED_MFR_3E62
|
|
{0x3E64, 0x7070 }, // RESERVED_MFR_3E64
|
|
{0x3E66, 0x7070 }, // RESERVED_MFR_3E66
|
|
{0x3E68, 0x7070 }, // RESERVED_MFR_3E68
|
|
{0x3E6A, 0x7070 }, // RESERVED_MFR_3E6A
|
|
{0x3E6C, 0x7070 }, // RESERVED_MFR_3E6C
|
|
{0x3E6E, 0x7070 }, // RESERVED_MFR_3E6E
|
|
{0x3E70, 0x7070 }, // RESERVED_MFR_3E70
|
|
{0x3E72, 0x7070 }, // RESERVED_MFR_3E72
|
|
{0x3E74, 0x7070 }, // RESERVED_MFR_3E74
|
|
{0x3E76, 0x7070 }, // RESERVED_MFR_3E76
|
|
{0x3E78, 0x7070 }, // RESERVED_MFR_3E78
|
|
{0x3E7A, 0x7070 }, // RESERVED_MFR_3E7A
|
|
{0x3E7C, 0x7070 }, // RESERVED_MFR_3E7C
|
|
{0x3E7E, 0x7070 }, // RESERVED_MFR_3E7E
|
|
{0x3E80, 0x7070 }, // RESERVED_MFR_3E80
|
|
{0x3E82, 0x7070 }, // RESERVED_MFR_3E82
|
|
{0x3E84, 0x7070 }, // RESERVED_MFR_3E84
|
|
{0x3E86, 0x7070 }, // RESERVED_MFR_3E86
|
|
{0x3E88, 0x7070 }, // RESERVED_MFR_3E88
|
|
{0x3E8A, 0x7070 }, // RESERVED_MFR_3E8A
|
|
{0x3E8C, 0x7070 }, // RESERVED_MFR_3E8C
|
|
{0x3E8E, 0x7070 }, // RESERVED_MFR_3E8E
|
|
{0x3E90, 0x7070 }, // RESERVED_MFR_3E90
|
|
{0x3E92, 0x7070 }, // RESERVED_MFR_3E92
|
|
{0x3E94, 0x7070 }, // RESERVED_MFR_3E94
|
|
{0x3E96, 0x7070 }, // RESERVED_MFR_3E96
|
|
{0x3E98, 0x7070 }, // RESERVED_MFR_3E98
|
|
{0x3E9A, 0x7070 }, // RESERVED_MFR_3E9A
|
|
{0x3E9C, 0x7070 }, // RESERVED_MFR_3E9C
|
|
{0x3E9E, 0x7070 }, // RESERVED_MFR_3E9E
|
|
{0x3EA0, 0x7070 }, // RESERVED_MFR_3EA0
|
|
{0x3EA2, 0x7070 }, // RESERVED_MFR_3EA2
|
|
{0x3EA4, 0x7070 }, // RESERVED_MFR_3EA4
|
|
{0x3EA6, 0x7070 }, // RESERVED_MFR_3EA6
|
|
{0x3EA8, 0x7070 }, // RESERVED_MFR_3EA8
|
|
{0x3EAA, 0x7070 }, // RESERVED_MFR_3EAA
|
|
{0x3EAC, 0x7070 }, // RESERVED_MFR_3EAC
|
|
{0x3EAE, 0x7070 }, // RESERVED_MFR_3EAE
|
|
{0x3EB0, 0x7070 }, // RESERVED_MFR_3EB0
|
|
{0x3EB2, 0x7070 }, // RESERVED_MFR_3EB2
|
|
|
|
/*PLL Setting*/
|
|
{0x0300, 0x000C}, //VT_PIX_CLK_DIV
|
|
{0x0302, 0x0001}, //VT_SYS_CLK_DIV
|
|
{0x0304, 0x0101}, //PRE_PLL_CLK_DIV2 //PRE_PLL_CLK_DIV1
|
|
{0x0306, 0x2830}, //PLL_MULTIPLIER2 //PLL_MULTIPLIER1
|
|
{0x0308, 0x000A}, //OP_PIX_CLK_DIV
|
|
{0x030A, 0x0001}, //OP_SYS_CLK_DIV
|
|
|
|
{0x31B0, 0x0047}, //FRAME_PREAMBLE
|
|
{0x31B2, 0x0026}, //LINE_PREAMBLE
|
|
{0x31B4, 0x328C}, //MIPI_TIMING_0
|
|
{0x31B6, 0x3308}, //MIPI_TIMING_1
|
|
{0x31B8, 0x1C12}, //MIPI_TIMING_2
|
|
{0x31BA, 0x1452}, //MIPI_TIMING_3
|
|
{0x31BC, 0x8488}, //MIPI_TIMING_4
|
|
|
|
/*Group_Parameter Hold*/
|
|
{0x0104, 0x0001},
|
|
|
|
/*Mode Configuration*/
|
|
{0x0122, 0x0A0A}, //CCP_DATA_FORMAT
|
|
{0x31AE, 0x0202}, //SERIAL_FROMAT
|
|
|
|
{0x3004, 0x0004}, //X_ADDR_START
|
|
{0x3008, 0x0234}, //X_ADDR_END
|
|
{0x3002, 0x0004}, //Y_ADDR_START
|
|
{0x3006, 0x0233}, //Y_ADDR_END
|
|
{0x034C, 0x0230}, //X_OUTPUT_SIZE
|
|
{0x034E, 0x0230}, //Y_OUTPUT_SIZE
|
|
|
|
{0x300C, 0x02EA}, //LINE_LENGTH_PCK
|
|
{0x300A, 0x04A6}, //FRAME_LENGTH_LINES
|
|
{0x3040, 0x0001}, //Y_ODD_INC = 1
|
|
{0x30A4, 0x0001}, //Y_EVEN_INC_
|
|
{0x30AA, 0x0000}, //DIGITAL_HSKIP
|
|
{0x0400, 0x0000}, //SCALE_ENABLE
|
|
{0x0404, 0x0010}, //SCALE_M
|
|
{0x317A, 0x416E}, //SF_BIN_ENABLE0(FIELD_WR= ANALOG_CONTROL6, PARALLEL_SHUTTER)
|
|
{0x3F3C, 0x0003}, //SF_BIN_ENABLE1(FIELD_WR= ANALOG_CONTROL9, ANA_BLOCKS_ENABLE)
|
|
{0x3012, 0x0441}, //COARSE_INTEGRATION_TIME
|
|
{0x3730, 0x0000}, //FB_CTRL
|
|
{0x305E, 0x2035}, // GLOBAL_GAIN
|
|
|
|
/*Group_Parameter Hold*/
|
|
{0x0104, 0x0000},
|
|
#elif (RTE_ARX3A0_CAMERA_SENSOR_CSI_CFG_FPS == 60)
|
|
{0x304C, 0x3000 }, // OTPM_RECORD
|
|
{0x304A, 0x0070 }, // OTPM_CONTROL
|
|
{0x0103, 0x01 }, // SOFTWARE_RESET
|
|
|
|
{0xFFFF, 500 }, //DELAY= 100
|
|
|
|
{0x3ED0, 0x0748 }, // RESERVED_MFR_3ED0
|
|
{0x3ED6, 0x3136 }, // RESERVED_MFR_3ED6
|
|
{0x3EDC, 0x1020 }, // RESERVED_MFR_3EDC
|
|
{0x3EDE, 0x1D2A }, // RESERVED_MFR_3EDE
|
|
{0x3EE0, 0x282A }, // RESERVED_MFR_3EE0
|
|
{0x3EE2, 0x2821 }, // RESERVED_MFR_3EE2
|
|
{0x3EC8, 0x0401 }, // RESERVED_MFR_3EC8
|
|
{0x3ED2, 0x3903 }, // RESERVED_MFR_3ED2
|
|
{0x3EC0, 0x0011 }, // RESERVED_MFR_3EC0
|
|
{0x3ECA, 0x826F }, // RESERVED_MFR_3ECA
|
|
{0x3EBC, 0xA8AA }, // RESERVED_MFR_3EBC
|
|
{0x3EC4, 0x1000 }, // RESERVED_MFR_3EC4
|
|
{0x3EBA, 0x0044 }, // RESERVED_MFR_3EBA
|
|
{0x3ED0, 0x0745 }, // RESERVED_MFR_3ED0
|
|
{0x3ED4, 0x0016 }, // RESERVED_MFR_3ED4
|
|
{0x3EC6, 0x80F2 }, // RESERVED_MFR_3EC6
|
|
{0x3ED8, 0x55FF }, // RESERVED_MFR_3ED8
|
|
{0x3EE6, 0x8000 }, // RESERVED_MFR_3EE6
|
|
{0x30D2, 0x0000 }, // RESERVED_MFR_30D2
|
|
{0x31E0, 0x00F1 }, // PIX_DEF_ID
|
|
{0x31E6, 0xA35F }, // PIX_DEF_ID_2
|
|
{0x3180, 0x9096 }, // RESERVED_MFR_3180
|
|
{0x3120, 0x0001 }, // GAIN_DITHER_CONTROL
|
|
{0x301E, 0x002A }, // DATA_PEDESTAL_
|
|
{0x3D00, 0x0436 }, // RESERVED_MFR_3D00
|
|
{0x3D02, 0x435A }, // RESERVED_MFR_3D02
|
|
{0x3D04, 0xFFFF }, // RESERVED_MFR_3D04
|
|
{0x3D06, 0xFFFF }, // RESERVED_MFR_3D06
|
|
{0x3D08, 0x2180 }, // RESERVED_MFR_3D08
|
|
{0x3D0A, 0x0005 }, // RESERVED_MFR_3D0A
|
|
{0x3D0C, 0x108F }, // RESERVED_MFR_3D0C
|
|
{0x3D0E, 0x0802 }, // RESERVED_MFR_3D0E
|
|
{0x3D10, 0x5248 }, // RESERVED_MFR_3D10
|
|
{0x3D12, 0x801B }, // RESERVED_MFR_3D12
|
|
{0x3D14, 0x006F }, // RESERVED_MFR_3D14
|
|
{0x3D16, 0x8269 }, // RESERVED_MFR_3D16
|
|
{0x3D18, 0x6A82 }, // RESERVED_MFR_3D18
|
|
{0x3D1A, 0x5148 }, // RESERVED_MFR_3D1A
|
|
{0x3D1C, 0x5A80 }, // RESERVED_MFR_3D1C
|
|
{0x3D1E, 0x5902 }, // RESERVED_MFR_3D1E
|
|
{0x3D20, 0x8082 }, // RESERVED_MFR_3D20
|
|
{0x3D22, 0x3060 }, // RESERVED_MFR_3D22
|
|
{0x3D24, 0x8567 }, // RESERVED_MFR_3D24
|
|
{0x3D26, 0x5C20 }, // RESERVED_MFR_3D26
|
|
{0x3D28, 0x4880 }, // RESERVED_MFR_3D28
|
|
{0x3D2A, 0x0284 }, // RESERVED_MFR_3D2A
|
|
{0x3D2C, 0x6084 }, // RESERVED_MFR_3D2C
|
|
{0x3D2E, 0x5C91 }, // RESERVED_MFR_3D2E
|
|
{0x3D30, 0x5980 }, // RESERVED_MFR_3D30
|
|
{0x3D32, 0x5883 }, // RESERVED_MFR_3D32
|
|
{0x3D34, 0x6462 }, // RESERVED_MFR_3D34
|
|
{0x3D36, 0x8056 }, // RESERVED_MFR_3D36
|
|
{0x3D38, 0x8162 }, // RESERVED_MFR_3D38
|
|
{0x3D3A, 0x8422 }, // RESERVED_MFR_3D3A
|
|
{0x3D3C, 0x20A2 }, // RESERVED_MFR_3D3C
|
|
{0x3D3E, 0x2220 }, // RESERVED_MFR_3D3E
|
|
{0x3D40, 0x804B }, // RESERVED_MFR_3D40
|
|
{0x3D42, 0x8110 }, // RESERVED_MFR_3D42
|
|
{0x3D44, 0x0943 }, // RESERVED_MFR_3D44
|
|
{0x3D46, 0x9243 }, // RESERVED_MFR_3D46
|
|
{0x3D48, 0x8050 }, // RESERVED_MFR_3D48
|
|
{0x3D4A, 0x9A4B }, // RESERVED_MFR_3D4A
|
|
{0x3D4C, 0x8563 }, // RESERVED_MFR_3D4C
|
|
{0x3D4E, 0x8363 }, // RESERVED_MFR_3D4E
|
|
{0x3D50, 0x8422 }, // RESERVED_MFR_3D50
|
|
{0x3D52, 0x20A2 }, // RESERVED_MFR_3D52
|
|
{0x3D54, 0x61C6 }, // RESERVED_MFR_3D54
|
|
{0x3D56, 0x6F99 }, // RESERVED_MFR_3D56
|
|
{0x3D58, 0x3009 }, // RESERVED_MFR_3D58
|
|
{0x3D5A, 0x1FF6 }, // RESERVED_MFR_3D5A
|
|
{0x3D5C, 0x20ED }, // RESERVED_MFR_3D5C
|
|
{0x3D5E, 0x0874 }, // RESERVED_MFR_3D5E
|
|
{0x3D60, 0x8230 }, // RESERVED_MFR_3D60
|
|
{0x3D62, 0x609B }, // RESERVED_MFR_3D62
|
|
{0x3D64, 0x3060 }, // RESERVED_MFR_3D64
|
|
{0x3D66, 0x4600 }, // RESERVED_MFR_3D66
|
|
{0x3D68, 0x3783 }, // RESERVED_MFR_3D68
|
|
{0x3D6A, 0x7070 }, // RESERVED_MFR_3D6A
|
|
{0x3D6C, 0x8040 }, // RESERVED_MFR_3D6C
|
|
{0x3D6E, 0x4A44 }, // RESERVED_MFR_3D6E
|
|
{0x3D70, 0x8003 }, // RESERVED_MFR_3D70
|
|
{0x3D72, 0x0086 }, // RESERVED_MFR_3D72
|
|
{0x3D74, 0x4588 }, // RESERVED_MFR_3D74
|
|
{0x3D76, 0x46BA }, // RESERVED_MFR_3D76
|
|
{0x3D78, 0x0300 }, // RESERVED_MFR_3D78
|
|
{0x3D7A, 0xFFD7 }, // RESERVED_MFR_3D7A
|
|
{0x3D7C, 0x4688 }, // RESERVED_MFR_3D7C
|
|
{0x3D7E, 0x4588 }, // RESERVED_MFR_3D7E
|
|
{0x3D80, 0x4492 }, // RESERVED_MFR_3D80
|
|
{0x3D82, 0x4A9B }, // RESERVED_MFR_3D82
|
|
{0x3D84, 0x4070 }, // RESERVED_MFR_3D84
|
|
{0x3D86, 0x8040 }, // RESERVED_MFR_3D86
|
|
{0x3D88, 0x4AAD }, // RESERVED_MFR_3D88
|
|
{0x3D8A, 0x0070 }, // RESERVED_MFR_3D8A
|
|
{0x3D8C, 0xAE47 }, // RESERVED_MFR_3D8C
|
|
{0x3D8E, 0x8547 }, // RESERVED_MFR_3D8E
|
|
{0x3D90, 0xAD78 }, // RESERVED_MFR_3D90
|
|
{0x3D92, 0x6B85 }, // RESERVED_MFR_3D92
|
|
{0x3D94, 0x6A80 }, // RESERVED_MFR_3D94
|
|
{0x3D96, 0x6984 }, // RESERVED_MFR_3D96
|
|
{0x3D98, 0x6B8A }, // RESERVED_MFR_3D98
|
|
{0x3D9A, 0x6B80 }, // RESERVED_MFR_3D9A
|
|
{0x3D9C, 0x6980 }, // RESERVED_MFR_3D9C
|
|
{0x3D9E, 0x6A85 }, // RESERVED_MFR_3D9E
|
|
{0x3DA0, 0x7C93 }, // RESERVED_MFR_3DA0
|
|
{0x3DA2, 0x846B }, // RESERVED_MFR_3DA2
|
|
{0x3DA4, 0x8465 }, // RESERVED_MFR_3DA4
|
|
{0x3DA6, 0x46FF }, // RESERVED_MFR_3DA6
|
|
{0x3DA8, 0xAA65 }, // RESERVED_MFR_3DA8
|
|
{0x3DAA, 0x9C79 }, // RESERVED_MFR_3DAA
|
|
{0x3DAC, 0x4A00 }, // RESERVED_MFR_3DAC
|
|
{0x3DAE, 0x2180 }, // RESERVED_MFR_3DAE
|
|
{0x3DB0, 0x44AC }, // RESERVED_MFR_3DB0
|
|
{0x3DB2, 0x7070 }, // RESERVED_MFR_3DB2
|
|
{0x3DB4, 0x2180 }, // RESERVED_MFR_3DB4
|
|
{0x3DB6, 0x0005 }, // RESERVED_MFR_3DB6
|
|
{0x3DB8, 0x108F }, // RESERVED_MFR_3DB8
|
|
{0x3DBA, 0x0802 }, // RESERVED_MFR_3DBA
|
|
{0x3DBC, 0x5248 }, // RESERVED_MFR_3DBC
|
|
{0x3DBE, 0x801B }, // RESERVED_MFR_3DBE
|
|
{0x3DC0, 0x006F }, // RESERVED_MFR_3DC0
|
|
{0x3DC2, 0x8269 }, // RESERVED_MFR_3DC2
|
|
{0x3DC4, 0x6A82 }, // RESERVED_MFR_3DC4
|
|
{0x3DC6, 0x5148 }, // RESERVED_MFR_3DC6
|
|
{0x3DC8, 0x5A80 }, // RESERVED_MFR_3DC8
|
|
{0x3DCA, 0x5902 }, // RESERVED_MFR_3DCA
|
|
{0x3DCC, 0x8082 }, // RESERVED_MFR_3DCC
|
|
{0x3DCE, 0x3060 }, // RESERVED_MFR_3DCE
|
|
{0x3DD0, 0x8567 }, // RESERVED_MFR_3DD0
|
|
{0x3DD2, 0x5C20 }, // RESERVED_MFR_3DD2
|
|
{0x3DD4, 0x4880 }, // RESERVED_MFR_3DD4
|
|
{0x3DD6, 0x0284 }, // RESERVED_MFR_3DD6
|
|
{0x3DD8, 0x6084 }, // RESERVED_MFR_3DD8
|
|
{0x3DDA, 0x5C91 }, // RESERVED_MFR_3DDA
|
|
{0x3DDC, 0x5980 }, // RESERVED_MFR_3DDC
|
|
{0x3DDE, 0x5883 }, // RESERVED_MFR_3DDE
|
|
{0x3DE0, 0x6462 }, // RESERVED_MFR_3DE0
|
|
{0x3DE2, 0x8056 }, // RESERVED_MFR_3DE2
|
|
{0x3DE4, 0x8162 }, // RESERVED_MFR_3DE4
|
|
{0x3DE6, 0x8422 }, // RESERVED_MFR_3DE6
|
|
{0x3DE8, 0x209C }, // RESERVED_MFR_3DE8
|
|
{0x3DEA, 0x2220 }, // RESERVED_MFR_3DEA
|
|
{0x3DEC, 0x514B }, // RESERVED_MFR_3DEC
|
|
{0x3DEE, 0x8110 }, // RESERVED_MFR_3DEE
|
|
{0x3DF0, 0x0943 }, // RESERVED_MFR_3DF0
|
|
{0x3DF2, 0x9843 }, // RESERVED_MFR_3DF2
|
|
{0x3DF4, 0x8050 }, // RESERVED_MFR_3DF4
|
|
{0x3DF6, 0x8B51 }, // RESERVED_MFR_3DF6
|
|
{0x3DF8, 0x8D4B }, // RESERVED_MFR_3DF8
|
|
{0x3DFA, 0x9063 }, // RESERVED_MFR_3DFA
|
|
{0x3DFC, 0x8363 }, // RESERVED_MFR_3DFC
|
|
{0x3DFE, 0x8422 }, // RESERVED_MFR_3DFE
|
|
{0x3E00, 0x209C }, // RESERVED_MFR_3E00
|
|
{0x3E02, 0x61D3 }, // RESERVED_MFR_3E02
|
|
{0x3E04, 0x1FB6 }, // RESERVED_MFR_3E04
|
|
{0x3E06, 0x20ED }, // RESERVED_MFR_3E06
|
|
{0x3E08, 0x3809 }, // RESERVED_MFR_3E08
|
|
{0x3E0A, 0x524B }, // RESERVED_MFR_3E0A
|
|
{0x3E0C, 0x0014 }, // RESERVED_MFR_3E0C
|
|
{0x3E0E, 0x4580 }, // RESERVED_MFR_3E0E
|
|
{0x3E10, 0x4681 }, // RESERVED_MFR_3E10
|
|
{0x3E12, 0x3060 }, // RESERVED_MFR_3E12
|
|
{0x3E14, 0x9D30 }, // RESERVED_MFR_3E14
|
|
{0x3E16, 0x6083 }, // RESERVED_MFR_3E16
|
|
{0x3E18, 0x4645 }, // RESERVED_MFR_3E18
|
|
{0x3E1A, 0x0017 }, // RESERVED_MFR_3E1A
|
|
{0x3E1C, 0x8170 }, // RESERVED_MFR_3E1C
|
|
{0x3E1E, 0x7070 }, // RESERVED_MFR_3E1E
|
|
{0x3E20, 0x7070 }, // RESERVED_MFR_3E20
|
|
{0x3E22, 0x7070 }, // RESERVED_MFR_3E22
|
|
{0x3E24, 0x7070 }, // RESERVED_MFR_3E24
|
|
{0x3E26, 0x7070 }, // RESERVED_MFR_3E26
|
|
{0x3E28, 0x7070 }, // RESERVED_MFR_3E28
|
|
{0x3E2A, 0x7070 }, // RESERVED_MFR_3E2A
|
|
{0x3E2C, 0x7070 }, // RESERVED_MFR_3E2C
|
|
{0x3E2E, 0x7070 }, // RESERVED_MFR_3E2E
|
|
{0x3E30, 0x7070 }, // RESERVED_MFR_3E30
|
|
{0x3E32, 0x7070 }, // RESERVED_MFR_3E32
|
|
{0x3E34, 0x7070 }, // RESERVED_MFR_3E34
|
|
{0x3E36, 0x7070 }, // RESERVED_MFR_3E36
|
|
{0x3E38, 0x7070 }, // RESERVED_MFR_3E38
|
|
{0x3E3A, 0x7070 }, // RESERVED_MFR_3E3A
|
|
{0x3E3C, 0x7070 }, // RESERVED_MFR_3E3C
|
|
{0x3E3E, 0x7070 }, // RESERVED_MFR_3E3E
|
|
{0x3E40, 0x7070 }, // RESERVED_MFR_3E40
|
|
{0x3E42, 0x7070 }, // RESERVED_MFR_3E42
|
|
{0x3E44, 0x7070 }, // RESERVED_MFR_3E44
|
|
{0x3E46, 0x7070 }, // RESERVED_MFR_3E46
|
|
{0x3E48, 0x7070 }, // RESERVED_MFR_3E48
|
|
{0x3E4A, 0x7070 }, // RESERVED_MFR_3E4A
|
|
{0x3E4C, 0x7070 }, // RESERVED_MFR_3E4C
|
|
{0x3E4E, 0x7070 }, // RESERVED_MFR_3E4E
|
|
{0x3E50, 0x7070 }, // RESERVED_MFR_3E50
|
|
{0x3E52, 0x7070 }, // RESERVED_MFR_3E52
|
|
{0x3E54, 0x7070 }, // RESERVED_MFR_3E54
|
|
{0x3E56, 0x7070 }, // RESERVED_MFR_3E56
|
|
{0x3E58, 0x7070 }, // RESERVED_MFR_3E58
|
|
{0x3E5A, 0x7070 }, // RESERVED_MFR_3E5A
|
|
{0x3E5C, 0x7070 }, // RESERVED_MFR_3E5C
|
|
{0x3E5E, 0x7070 }, // RESERVED_MFR_3E5E
|
|
{0x3E60, 0x7070 }, // RESERVED_MFR_3E60
|
|
{0x3E62, 0x7070 }, // RESERVED_MFR_3E62
|
|
{0x3E64, 0x7070 }, // RESERVED_MFR_3E64
|
|
{0x3E66, 0x7070 }, // RESERVED_MFR_3E66
|
|
{0x3E68, 0x7070 }, // RESERVED_MFR_3E68
|
|
{0x3E6A, 0x7070 }, // RESERVED_MFR_3E6A
|
|
{0x3E6C, 0x7070 }, // RESERVED_MFR_3E6C
|
|
{0x3E6E, 0x7070 }, // RESERVED_MFR_3E6E
|
|
{0x3E70, 0x7070 }, // RESERVED_MFR_3E70
|
|
{0x3E72, 0x7070 }, // RESERVED_MFR_3E72
|
|
{0x3E74, 0x7070 }, // RESERVED_MFR_3E74
|
|
{0x3E76, 0x7070 }, // RESERVED_MFR_3E76
|
|
{0x3E78, 0x7070 }, // RESERVED_MFR_3E78
|
|
{0x3E7A, 0x7070 }, // RESERVED_MFR_3E7A
|
|
{0x3E7C, 0x7070 }, // RESERVED_MFR_3E7C
|
|
{0x3E7E, 0x7070 }, // RESERVED_MFR_3E7E
|
|
{0x3E80, 0x7070 }, // RESERVED_MFR_3E80
|
|
{0x3E82, 0x7070 }, // RESERVED_MFR_3E82
|
|
{0x3E84, 0x7070 }, // RESERVED_MFR_3E84
|
|
{0x3E86, 0x7070 }, // RESERVED_MFR_3E86
|
|
{0x3E88, 0x7070 }, // RESERVED_MFR_3E88
|
|
{0x3E8A, 0x7070 }, // RESERVED_MFR_3E8A
|
|
{0x3E8C, 0x7070 }, // RESERVED_MFR_3E8C
|
|
{0x3E8E, 0x7070 }, // RESERVED_MFR_3E8E
|
|
{0x3E90, 0x7070 }, // RESERVED_MFR_3E90
|
|
{0x3E92, 0x7070 }, // RESERVED_MFR_3E92
|
|
{0x3E94, 0x7070 }, // RESERVED_MFR_3E94
|
|
{0x3E96, 0x7070 }, // RESERVED_MFR_3E96
|
|
{0x3E98, 0x7070 }, // RESERVED_MFR_3E98
|
|
{0x3E9A, 0x7070 }, // RESERVED_MFR_3E9A
|
|
{0x3E9C, 0x7070 }, // RESERVED_MFR_3E9C
|
|
{0x3E9E, 0x7070 }, // RESERVED_MFR_3E9E
|
|
{0x3EA0, 0x7070 }, // RESERVED_MFR_3EA0
|
|
{0x3EA2, 0x7070 }, // RESERVED_MFR_3EA2
|
|
{0x3EA4, 0x7070 }, // RESERVED_MFR_3EA4
|
|
{0x3EA6, 0x7070 }, // RESERVED_MFR_3EA6
|
|
{0x3EA8, 0x7070 }, // RESERVED_MFR_3EA8
|
|
{0x3EAA, 0x7070 }, // RESERVED_MFR_3EAA
|
|
{0x3EAC, 0x7070 }, // RESERVED_MFR_3EAC
|
|
{0x3EAE, 0x7070 }, // RESERVED_MFR_3EAE
|
|
{0x3EB0, 0x7070 }, // RESERVED_MFR_3EB0
|
|
{0x3EB2, 0x7070 }, // RESERVED_MFR_3EB2
|
|
|
|
/*PLL Setting*/
|
|
{0x0300, 0x000C}, //VT_PIX_CLK_DIV
|
|
{0x0302, 0x0001}, //VT_SYS_CLK_DIV
|
|
{0x0304, 0x0101}, //PRE_PLL_CLK_DIV2 //PRE_PLL_CLK_DIV1
|
|
{0x0306, 0x2830}, //PLL_MULTIPLIER2 //PLL_MULTIPLIER1
|
|
{0x0308, 0x000A}, //OP_PIX_CLK_DIV
|
|
{0x030A, 0x0001}, //OP_SYS_CLK_DIV
|
|
|
|
{0x31B0, 0x0047}, //FRAME_PREAMBLE
|
|
{0x31B2, 0x0026}, //LINE_PREAMBLE
|
|
{0x31B4, 0x328C}, //MIPI_TIMING_0
|
|
{0x31B6, 0x3308}, //MIPI_TIMING_1
|
|
{0x31B8, 0x1C12}, //MIPI_TIMING_2
|
|
{0x31BA, 0x1452}, //MIPI_TIMING_3
|
|
{0x31BC, 0x8488}, //MIPI_TIMING_4
|
|
|
|
/*Group_Parameter Hold*/
|
|
{0x0104, 0x0001},
|
|
|
|
/*Mode Configuration*/
|
|
{0x0122, 0x0A0A}, //CCP_DATA_FORMAT
|
|
{0x31AE, 0x0202}, //SERIAL_FROMAT
|
|
|
|
{0x3004, 0x0004}, //X_ADDR_START
|
|
{0x3008, 0x0234}, //X_ADDR_END
|
|
{0x3002, 0x0004}, //Y_ADDR_START
|
|
{0x3006, 0x0233}, //Y_ADDR_END
|
|
{0x034C, 0x0230}, //X_OUTPUT_SIZE
|
|
{0x034E, 0x0230}, //Y_OUTPUT_SIZE
|
|
|
|
{0x300C, 0x02EA}, //LINE_LENGTH_PCK
|
|
{0x300A, 0x06FA}, //FRAME_LENGTH_LINES
|
|
{0x3040, 0x0001}, //Y_ODD_INC = 1
|
|
{0x30A4, 0x0001}, //Y_EVEN_INC_
|
|
{0x30AA, 0x0000}, //DIGITAL_HSKIP
|
|
{0x0400, 0x0000}, //SCALE_ENABLE
|
|
{0x0404, 0x0010}, //SCALE_M
|
|
{0x317A, 0x416E}, //SF_BIN_ENABLE0(FIELD_WR= ANALOG_CONTROL6, PARALLEL_SHUTTER)
|
|
{0x3F3C, 0x0003}, //SF_BIN_ENABLE1(FIELD_WR= ANALOG_CONTROL9, ANA_BLOCKS_ENABLE)
|
|
{0x3012, 0x0441}, //COARSE_INTEGRATION_TIME
|
|
{0x3730, 0x0000}, //FB_CTRL
|
|
{0x305E, 0x2035}, // GLOBAL_GAIN
|
|
|
|
/*Group_Parameter Hold*/
|
|
{0x0104, 0x0000},
|
|
#elif (RTE_ARX3A0_CAMERA_SENSOR_CSI_CFG_FPS == 40)
|
|
{0x304C, 0x3000 }, // OTPM_RECORD
|
|
{0x304A, 0x0070 }, // OTPM_CONTROL
|
|
{0x0103, 0x01 }, // SOFTWARE_RESET
|
|
|
|
{0xFFFF, 500 }, //DELAY= 100
|
|
|
|
{0x0300, 0x000A }, // VT_PIX_CLK_DIV
|
|
{0x0302, 0x0001 }, // VT_SYS_CLK_DIV
|
|
{0x0304, 0x0101 }, // PRE_PLL_CLK_DIV
|
|
{0x0306, 0x2828 }, // PLL_MULTIPLIER
|
|
{0x0308, 0x000A }, // OP_PIX_CLK_DIV
|
|
{0x030A, 0x0001 }, // OP_SYS_CLK_DIV
|
|
|
|
{0x31B0, 0x0047 }, // FRAME_PREAMBLE
|
|
{0x31B2, 0x0026 }, // LINE_PREAMBLE
|
|
{0x31B4, 0x328C }, // MIPI_TIMING_0
|
|
{0x31B6, 0x32E8 }, // MIPI_TIMING_1
|
|
{0x31B8, 0x1C12 }, // MIPI_TIMING_2
|
|
{0x31BA, 0x1452 }, // MIPI_TIMING_3
|
|
{0x31BC, 0x8488 }, // MIPI_TIMING_4
|
|
|
|
{0x3ED0, 0x0748 }, // RESERVED_MFR_3ED0
|
|
{0x3ED6, 0x3136 }, // RESERVED_MFR_3ED6
|
|
{0x3EDC, 0x1020 }, // RESERVED_MFR_3EDC
|
|
{0x3EDE, 0x1D2A }, // RESERVED_MFR_3EDE
|
|
{0x3EE0, 0x282A }, // RESERVED_MFR_3EE0
|
|
{0x3EE2, 0x2821 }, // RESERVED_MFR_3EE2
|
|
{0x3EC8, 0x0401 }, // RESERVED_MFR_3EC8
|
|
{0x3ED2, 0x3903 }, // RESERVED_MFR_3ED2
|
|
{0x3EC0, 0x0011 }, // RESERVED_MFR_3EC0
|
|
{0x3ECA, 0x826F }, // RESERVED_MFR_3ECA
|
|
{0x3EBC, 0xA8AA }, // RESERVED_MFR_3EBC
|
|
{0x3EC4, 0x1000 }, // RESERVED_MFR_3EC4
|
|
{0x3EBA, 0x0044 }, // RESERVED_MFR_3EBA
|
|
{0x3ED0, 0x0745 }, // RESERVED_MFR_3ED0
|
|
{0x3ED4, 0x0016 }, // RESERVED_MFR_3ED4
|
|
{0x3EC6, 0x80F2 }, // RESERVED_MFR_3EC6
|
|
{0x3ED8, 0x55FF }, // RESERVED_MFR_3ED8
|
|
{0x3EE6, 0x8000 }, // RESERVED_MFR_3EE6
|
|
{0x30D2, 0x0000 }, // RESERVED_MFR_30D2
|
|
{0x31E0, 0x00F1 }, // PIX_DEF_ID
|
|
{0x31E6, 0xA35F }, // PIX_DEF_ID_2
|
|
{0x3180, 0x9096 }, // RESERVED_MFR_3180
|
|
{0x3120, 0x0001 }, // GAIN_DITHER_CONTROL
|
|
{0x301E, 0x002A }, // DATA_PEDESTAL_
|
|
{0x3D00, 0x0436 }, // RESERVED_MFR_3D00
|
|
{0x3D02, 0x435A }, // RESERVED_MFR_3D02
|
|
{0x3D04, 0xFFFF }, // RESERVED_MFR_3D04
|
|
{0x3D06, 0xFFFF }, // RESERVED_MFR_3D06
|
|
{0x3D08, 0x2180 }, // RESERVED_MFR_3D08
|
|
{0x3D0A, 0x0005 }, // RESERVED_MFR_3D0A
|
|
{0x3D0C, 0x108F }, // RESERVED_MFR_3D0C
|
|
{0x3D0E, 0x0802 }, // RESERVED_MFR_3D0E
|
|
{0x3D10, 0x5248 }, // RESERVED_MFR_3D10
|
|
{0x3D12, 0x801B }, // RESERVED_MFR_3D12
|
|
{0x3D14, 0x006F }, // RESERVED_MFR_3D14
|
|
{0x3D16, 0x8269 }, // RESERVED_MFR_3D16
|
|
{0x3D18, 0x6A82 }, // RESERVED_MFR_3D18
|
|
{0x3D1A, 0x5148 }, // RESERVED_MFR_3D1A
|
|
{0x3D1C, 0x5A80 }, // RESERVED_MFR_3D1C
|
|
{0x3D1E, 0x5902 }, // RESERVED_MFR_3D1E
|
|
{0x3D20, 0x8082 }, // RESERVED_MFR_3D20
|
|
{0x3D22, 0x3060 }, // RESERVED_MFR_3D22
|
|
{0x3D24, 0x8567 }, // RESERVED_MFR_3D24
|
|
{0x3D26, 0x5C20 }, // RESERVED_MFR_3D26
|
|
{0x3D28, 0x4880 }, // RESERVED_MFR_3D28
|
|
{0x3D2A, 0x0284 }, // RESERVED_MFR_3D2A
|
|
{0x3D2C, 0x6084 }, // RESERVED_MFR_3D2C
|
|
{0x3D2E, 0x5C91 }, // RESERVED_MFR_3D2E
|
|
{0x3D30, 0x5980 }, // RESERVED_MFR_3D30
|
|
{0x3D32, 0x5883 }, // RESERVED_MFR_3D32
|
|
{0x3D34, 0x6462 }, // RESERVED_MFR_3D34
|
|
{0x3D36, 0x8056 }, // RESERVED_MFR_3D36
|
|
{0x3D38, 0x8162 }, // RESERVED_MFR_3D38
|
|
{0x3D3A, 0x8422 }, // RESERVED_MFR_3D3A
|
|
{0x3D3C, 0x20A2 }, // RESERVED_MFR_3D3C
|
|
{0x3D3E, 0x2220 }, // RESERVED_MFR_3D3E
|
|
{0x3D40, 0x804B }, // RESERVED_MFR_3D40
|
|
{0x3D42, 0x8110 }, // RESERVED_MFR_3D42
|
|
{0x3D44, 0x0943 }, // RESERVED_MFR_3D44
|
|
{0x3D46, 0x9243 }, // RESERVED_MFR_3D46
|
|
{0x3D48, 0x8050 }, // RESERVED_MFR_3D48
|
|
{0x3D4A, 0x9A4B }, // RESERVED_MFR_3D4A
|
|
{0x3D4C, 0x8563 }, // RESERVED_MFR_3D4C
|
|
{0x3D4E, 0x8363 }, // RESERVED_MFR_3D4E
|
|
{0x3D50, 0x8422 }, // RESERVED_MFR_3D50
|
|
{0x3D52, 0x20A2 }, // RESERVED_MFR_3D52
|
|
{0x3D54, 0x61C6 }, // RESERVED_MFR_3D54
|
|
{0x3D56, 0x6F99 }, // RESERVED_MFR_3D56
|
|
{0x3D58, 0x3009 }, // RESERVED_MFR_3D58
|
|
{0x3D5A, 0x1FF6 }, // RESERVED_MFR_3D5A
|
|
{0x3D5C, 0x20ED }, // RESERVED_MFR_3D5C
|
|
{0x3D5E, 0x0874 }, // RESERVED_MFR_3D5E
|
|
{0x3D60, 0x8230 }, // RESERVED_MFR_3D60
|
|
{0x3D62, 0x609B }, // RESERVED_MFR_3D62
|
|
{0x3D64, 0x3060 }, // RESERVED_MFR_3D64
|
|
{0x3D66, 0x4600 }, // RESERVED_MFR_3D66
|
|
{0x3D68, 0x3783 }, // RESERVED_MFR_3D68
|
|
{0x3D6A, 0x7070 }, // RESERVED_MFR_3D6A
|
|
{0x3D6C, 0x8040 }, // RESERVED_MFR_3D6C
|
|
{0x3D6E, 0x4A44 }, // RESERVED_MFR_3D6E
|
|
{0x3D70, 0x8003 }, // RESERVED_MFR_3D70
|
|
{0x3D72, 0x0086 }, // RESERVED_MFR_3D72
|
|
{0x3D74, 0x4588 }, // RESERVED_MFR_3D74
|
|
{0x3D76, 0x46BA }, // RESERVED_MFR_3D76
|
|
{0x3D78, 0x0300 }, // RESERVED_MFR_3D78
|
|
{0x3D7A, 0xFFD7 }, // RESERVED_MFR_3D7A
|
|
{0x3D7C, 0x4688 }, // RESERVED_MFR_3D7C
|
|
{0x3D7E, 0x4588 }, // RESERVED_MFR_3D7E
|
|
{0x3D80, 0x4492 }, // RESERVED_MFR_3D80
|
|
{0x3D82, 0x4A9B }, // RESERVED_MFR_3D82
|
|
{0x3D84, 0x4070 }, // RESERVED_MFR_3D84
|
|
{0x3D86, 0x8040 }, // RESERVED_MFR_3D86
|
|
{0x3D88, 0x4AAD }, // RESERVED_MFR_3D88
|
|
{0x3D8A, 0x0070 }, // RESERVED_MFR_3D8A
|
|
{0x3D8C, 0xAE47 }, // RESERVED_MFR_3D8C
|
|
{0x3D8E, 0x8547 }, // RESERVED_MFR_3D8E
|
|
{0x3D90, 0xAD78 }, // RESERVED_MFR_3D90
|
|
{0x3D92, 0x6B85 }, // RESERVED_MFR_3D92
|
|
{0x3D94, 0x6A80 }, // RESERVED_MFR_3D94
|
|
{0x3D96, 0x6984 }, // RESERVED_MFR_3D96
|
|
{0x3D98, 0x6B8A }, // RESERVED_MFR_3D98
|
|
{0x3D9A, 0x6B80 }, // RESERVED_MFR_3D9A
|
|
{0x3D9C, 0x6980 }, // RESERVED_MFR_3D9C
|
|
{0x3D9E, 0x6A85 }, // RESERVED_MFR_3D9E
|
|
{0x3DA0, 0x7C93 }, // RESERVED_MFR_3DA0
|
|
{0x3DA2, 0x846B }, // RESERVED_MFR_3DA2
|
|
{0x3DA4, 0x8465 }, // RESERVED_MFR_3DA4
|
|
{0x3DA6, 0x46FF }, // RESERVED_MFR_3DA6
|
|
{0x3DA8, 0xAA65 }, // RESERVED_MFR_3DA8
|
|
{0x3DAA, 0x9C79 }, // RESERVED_MFR_3DAA
|
|
{0x3DAC, 0x4A00 }, // RESERVED_MFR_3DAC
|
|
{0x3DAE, 0x2180 }, // RESERVED_MFR_3DAE
|
|
{0x3DB0, 0x44AC }, // RESERVED_MFR_3DB0
|
|
{0x3DB2, 0x7070 }, // RESERVED_MFR_3DB2
|
|
{0x3DB4, 0x2180 }, // RESERVED_MFR_3DB4
|
|
{0x3DB6, 0x0005 }, // RESERVED_MFR_3DB6
|
|
{0x3DB8, 0x108F }, // RESERVED_MFR_3DB8
|
|
{0x3DBA, 0x0802 }, // RESERVED_MFR_3DBA
|
|
{0x3DBC, 0x5248 }, // RESERVED_MFR_3DBC
|
|
{0x3DBE, 0x801B }, // RESERVED_MFR_3DBE
|
|
{0x3DC0, 0x006F }, // RESERVED_MFR_3DC0
|
|
{0x3DC2, 0x8269 }, // RESERVED_MFR_3DC2
|
|
{0x3DC4, 0x6A82 }, // RESERVED_MFR_3DC4
|
|
{0x3DC6, 0x5148 }, // RESERVED_MFR_3DC6
|
|
{0x3DC8, 0x5A80 }, // RESERVED_MFR_3DC8
|
|
{0x3DCA, 0x5902 }, // RESERVED_MFR_3DCA
|
|
{0x3DCC, 0x8082 }, // RESERVED_MFR_3DCC
|
|
{0x3DCE, 0x3060 }, // RESERVED_MFR_3DCE
|
|
{0x3DD0, 0x8567 }, // RESERVED_MFR_3DD0
|
|
{0x3DD2, 0x5C20 }, // RESERVED_MFR_3DD2
|
|
{0x3DD4, 0x4880 }, // RESERVED_MFR_3DD4
|
|
{0x3DD6, 0x0284 }, // RESERVED_MFR_3DD6
|
|
{0x3DD8, 0x6084 }, // RESERVED_MFR_3DD8
|
|
{0x3DDA, 0x5C91 }, // RESERVED_MFR_3DDA
|
|
{0x3DDC, 0x5980 }, // RESERVED_MFR_3DDC
|
|
{0x3DDE, 0x5883 }, // RESERVED_MFR_3DDE
|
|
{0x3DE0, 0x6462 }, // RESERVED_MFR_3DE0
|
|
{0x3DE2, 0x8056 }, // RESERVED_MFR_3DE2
|
|
{0x3DE4, 0x8162 }, // RESERVED_MFR_3DE4
|
|
{0x3DE6, 0x8422 }, // RESERVED_MFR_3DE6
|
|
{0x3DE8, 0x209C }, // RESERVED_MFR_3DE8
|
|
{0x3DEA, 0x2220 }, // RESERVED_MFR_3DEA
|
|
{0x3DEC, 0x514B }, // RESERVED_MFR_3DEC
|
|
{0x3DEE, 0x8110 }, // RESERVED_MFR_3DEE
|
|
{0x3DF0, 0x0943 }, // RESERVED_MFR_3DF0
|
|
{0x3DF2, 0x9843 }, // RESERVED_MFR_3DF2
|
|
{0x3DF4, 0x8050 }, // RESERVED_MFR_3DF4
|
|
{0x3DF6, 0x8B51 }, // RESERVED_MFR_3DF6
|
|
{0x3DF8, 0x8D4B }, // RESERVED_MFR_3DF8
|
|
{0x3DFA, 0x9063 }, // RESERVED_MFR_3DFA
|
|
{0x3DFC, 0x8363 }, // RESERVED_MFR_3DFC
|
|
{0x3DFE, 0x8422 }, // RESERVED_MFR_3DFE
|
|
{0x3E00, 0x209C }, // RESERVED_MFR_3E00
|
|
{0x3E02, 0x61D3 }, // RESERVED_MFR_3E02
|
|
{0x3E04, 0x1FB6 }, // RESERVED_MFR_3E04
|
|
{0x3E06, 0x20ED }, // RESERVED_MFR_3E06
|
|
{0x3E08, 0x3809 }, // RESERVED_MFR_3E08
|
|
{0x3E0A, 0x524B }, // RESERVED_MFR_3E0A
|
|
{0x3E0C, 0x0014 }, // RESERVED_MFR_3E0C
|
|
{0x3E0E, 0x4580 }, // RESERVED_MFR_3E0E
|
|
{0x3E10, 0x4681 }, // RESERVED_MFR_3E10
|
|
{0x3E12, 0x3060 }, // RESERVED_MFR_3E12
|
|
{0x3E14, 0x9D30 }, // RESERVED_MFR_3E14
|
|
{0x3E16, 0x6083 }, // RESERVED_MFR_3E16
|
|
{0x3E18, 0x4645 }, // RESERVED_MFR_3E18
|
|
{0x3E1A, 0x0017 }, // RESERVED_MFR_3E1A
|
|
{0x3E1C, 0x8170 }, // RESERVED_MFR_3E1C
|
|
{0x3E1E, 0x7070 }, // RESERVED_MFR_3E1E
|
|
{0x3E20, 0x7070 }, // RESERVED_MFR_3E20
|
|
{0x3E22, 0x7070 }, // RESERVED_MFR_3E22
|
|
{0x3E24, 0x7070 }, // RESERVED_MFR_3E24
|
|
{0x3E26, 0x7070 }, // RESERVED_MFR_3E26
|
|
{0x3E28, 0x7070 }, // RESERVED_MFR_3E28
|
|
{0x3E2A, 0x7070 }, // RESERVED_MFR_3E2A
|
|
{0x3E2C, 0x7070 }, // RESERVED_MFR_3E2C
|
|
{0x3E2E, 0x7070 }, // RESERVED_MFR_3E2E
|
|
{0x3E30, 0x7070 }, // RESERVED_MFR_3E30
|
|
{0x3E32, 0x7070 }, // RESERVED_MFR_3E32
|
|
{0x3E34, 0x7070 }, // RESERVED_MFR_3E34
|
|
{0x3E36, 0x7070 }, // RESERVED_MFR_3E36
|
|
{0x3E38, 0x7070 }, // RESERVED_MFR_3E38
|
|
{0x3E3A, 0x7070 }, // RESERVED_MFR_3E3A
|
|
{0x3E3C, 0x7070 }, // RESERVED_MFR_3E3C
|
|
{0x3E3E, 0x7070 }, // RESERVED_MFR_3E3E
|
|
{0x3E40, 0x7070 }, // RESERVED_MFR_3E40
|
|
{0x3E42, 0x7070 }, // RESERVED_MFR_3E42
|
|
{0x3E44, 0x7070 }, // RESERVED_MFR_3E44
|
|
{0x3E46, 0x7070 }, // RESERVED_MFR_3E46
|
|
{0x3E48, 0x7070 }, // RESERVED_MFR_3E48
|
|
{0x3E4A, 0x7070 }, // RESERVED_MFR_3E4A
|
|
{0x3E4C, 0x7070 }, // RESERVED_MFR_3E4C
|
|
{0x3E4E, 0x7070 }, // RESERVED_MFR_3E4E
|
|
{0x3E50, 0x7070 }, // RESERVED_MFR_3E50
|
|
{0x3E52, 0x7070 }, // RESERVED_MFR_3E52
|
|
{0x3E54, 0x7070 }, // RESERVED_MFR_3E54
|
|
{0x3E56, 0x7070 }, // RESERVED_MFR_3E56
|
|
{0x3E58, 0x7070 }, // RESERVED_MFR_3E58
|
|
{0x3E5A, 0x7070 }, // RESERVED_MFR_3E5A
|
|
{0x3E5C, 0x7070 }, // RESERVED_MFR_3E5C
|
|
{0x3E5E, 0x7070 }, // RESERVED_MFR_3E5E
|
|
{0x3E60, 0x7070 }, // RESERVED_MFR_3E60
|
|
{0x3E62, 0x7070 }, // RESERVED_MFR_3E62
|
|
{0x3E64, 0x7070 }, // RESERVED_MFR_3E64
|
|
{0x3E66, 0x7070 }, // RESERVED_MFR_3E66
|
|
{0x3E68, 0x7070 }, // RESERVED_MFR_3E68
|
|
{0x3E6A, 0x7070 }, // RESERVED_MFR_3E6A
|
|
{0x3E6C, 0x7070 }, // RESERVED_MFR_3E6C
|
|
{0x3E6E, 0x7070 }, // RESERVED_MFR_3E6E
|
|
{0x3E70, 0x7070 }, // RESERVED_MFR_3E70
|
|
{0x3E72, 0x7070 }, // RESERVED_MFR_3E72
|
|
{0x3E74, 0x7070 }, // RESERVED_MFR_3E74
|
|
{0x3E76, 0x7070 }, // RESERVED_MFR_3E76
|
|
{0x3E78, 0x7070 }, // RESERVED_MFR_3E78
|
|
{0x3E7A, 0x7070 }, // RESERVED_MFR_3E7A
|
|
{0x3E7C, 0x7070 }, // RESERVED_MFR_3E7C
|
|
{0x3E7E, 0x7070 }, // RESERVED_MFR_3E7E
|
|
{0x3E80, 0x7070 }, // RESERVED_MFR_3E80
|
|
{0x3E82, 0x7070 }, // RESERVED_MFR_3E82
|
|
{0x3E84, 0x7070 }, // RESERVED_MFR_3E84
|
|
{0x3E86, 0x7070 }, // RESERVED_MFR_3E86
|
|
{0x3E88, 0x7070 }, // RESERVED_MFR_3E88
|
|
{0x3E8A, 0x7070 }, // RESERVED_MFR_3E8A
|
|
{0x3E8C, 0x7070 }, // RESERVED_MFR_3E8C
|
|
{0x3E8E, 0x7070 }, // RESERVED_MFR_3E8E
|
|
{0x3E90, 0x7070 }, // RESERVED_MFR_3E90
|
|
{0x3E92, 0x7070 }, // RESERVED_MFR_3E92
|
|
{0x3E94, 0x7070 }, // RESERVED_MFR_3E94
|
|
{0x3E96, 0x7070 }, // RESERVED_MFR_3E96
|
|
{0x3E98, 0x7070 }, // RESERVED_MFR_3E98
|
|
{0x3E9A, 0x7070 }, // RESERVED_MFR_3E9A
|
|
{0x3E9C, 0x7070 }, // RESERVED_MFR_3E9C
|
|
{0x3E9E, 0x7070 }, // RESERVED_MFR_3E9E
|
|
{0x3EA0, 0x7070 }, // RESERVED_MFR_3EA0
|
|
{0x3EA2, 0x7070 }, // RESERVED_MFR_3EA2
|
|
{0x3EA4, 0x7070 }, // RESERVED_MFR_3EA4
|
|
{0x3EA6, 0x7070 }, // RESERVED_MFR_3EA6
|
|
{0x3EA8, 0x7070 }, // RESERVED_MFR_3EA8
|
|
{0x3EAA, 0x7070 }, // RESERVED_MFR_3EAA
|
|
{0x3EAC, 0x7070 }, // RESERVED_MFR_3EAC
|
|
{0x3EAE, 0x7070 }, // RESERVED_MFR_3EAE
|
|
{0x3EB0, 0x7070 }, // RESERVED_MFR_3EB0
|
|
{0x3EB2, 0x7070 }, // RESERVED_MFR_3EB2
|
|
{0x3EB4, 0x7070 }, // RESERVED_MFR_3EB4
|
|
|
|
{0x0344, 0x0004 }, // X_ADDR_START
|
|
{0x0346, 0x0004 }, // Y_ADDR_START
|
|
{0x0348, 0x0233 }, // X_ADDR_END
|
|
{0x034A, 0x0233 }, // Y_ADDR_END
|
|
{0x034C, 0x0230 }, // X_OUTPUT_SIZE
|
|
{0x034E, 0x0230 }, // Y_OUTPUT_SIZE
|
|
{0x3040, 0x0041 }, // READ_MODE
|
|
{0x30A4, 0x0001 }, // Y_EVEN_INC_
|
|
{0x0342, 0x02F8 }, // LINE_LENGTH_PCK
|
|
{0x0340, 0x0248 }, // FRAME_LENGTH_LINES
|
|
{0x3012, 0x0107 }, // COARSE_INTEGRATION_TIME_
|
|
|
|
{0xFFFF, 50 }, //DELAY= 50
|
|
|
|
{0x301A, 0x001C }, // RESET_REGISTER
|
|
{0x31E0, 0x0000 }, // PIX_DEF_ID
|
|
{0x3022, 0x01 }, // GROUPED_PARAMETER_HOLD_
|
|
{0x300A, 0x1491 }, // FRAME_LENGTH_LINES_
|
|
{0x0202, 0x148F }, // COARSE_INTEGRATION_TIME
|
|
|
|
{0x3022, 0x00 }, // GROUPED_PARAMETER_HOLD_
|
|
{0x305E, 0x2010 }, // GLOBAL_GAIN
|
|
#elif (RTE_ARX3A0_CAMERA_SENSOR_CSI_CFG_FPS == 5)
|
|
/*LOAD= PLL_360Fps_80MHz_80MHz_20MHz*/
|
|
{0x300, 0xA },
|
|
{0x302, 0x1 },
|
|
{0x304, 0x101 },
|
|
{0x306, 0x2828 },
|
|
{0x308, 0xA },
|
|
{0x30A, 0x1 },
|
|
|
|
/*LOAD= MIPI_TIMING_10bit*/
|
|
{0x31B0, 0x47 },
|
|
{0x31B2, 0x26 },
|
|
{0x31B4, 0x328C },
|
|
{0x31B6, 0x32E8 },
|
|
{0x31B8, 0x1C12 },
|
|
{0x31BA, 0x1452 },
|
|
{0x31BC, 0x8488 },
|
|
|
|
/*LOAD= Analog_Setup_Recommended*/
|
|
{0x3ED0, 0x748 },
|
|
{0x3ED6, 0x3136 },
|
|
{0x3EDC, 0x1020 },
|
|
{0x3EDE, 0x1D2A },
|
|
{0x3EE0, 0x282A },
|
|
{0x3EE2, 0x2821 },
|
|
{0x3EC8, 0x401 },
|
|
{0x3ED2, 0x3903 },
|
|
{0x3EC0, 0x0011 },
|
|
{0x3ECA, 0x826F },
|
|
{0x3EBC, 0xA8AA },
|
|
{0x3EC4, 0x1000 },
|
|
{0x3EBA, 0x44 },
|
|
|
|
/*LOAD= Corrections_Recommended*/
|
|
{0x3ED0, 0x745 },
|
|
{0x3ED4, 0x16 },
|
|
{0x3EC6, 0x80F2 },
|
|
{0x3ED8, 0x55FF },
|
|
{0x3EE6, 0x8000 },
|
|
{0x30D2, 0x0 },
|
|
{0x31E0, 0x00F1 },
|
|
{0x31E6, 0xA35F },
|
|
{0x3180, 0x9096 },
|
|
{0x3120, 0x1 },
|
|
{0x301E, 0x2A },
|
|
|
|
/*LOAD= Pixel_Timing_Recommended_10bit*/
|
|
{0x3D00, 0x0436 },
|
|
{0x3D02, 0x435A },
|
|
{0x3D04, 0xFFFF },
|
|
{0x3D06, 0xFFFF },
|
|
{0x3D08, 0x2180 },
|
|
{0x3D0A, 0x0005 },
|
|
{0x3D0C, 0x108F },
|
|
{0x3D0E, 0x0802 },
|
|
{0x3D10, 0x5248 },
|
|
{0x3D12, 0x801B },
|
|
{0x3D14, 0x006F },
|
|
{0x3D16, 0x8269 },
|
|
{0x3D18, 0x6A82 },
|
|
{0x3D1A, 0x5148 },
|
|
{0x3D1C, 0x5A80 },
|
|
{0x3D1E, 0x5902 },
|
|
{0x3D20, 0x8082 },
|
|
{0x3D22, 0x3060 },
|
|
{0x3D24, 0x8567 },
|
|
{0x3D26, 0x5C20 },
|
|
{0x3D28, 0x4880 },
|
|
{0x3D2A, 0x0284 },
|
|
{0x3D2C, 0x6084 },
|
|
{0x3D2E, 0x5C91 },
|
|
{0x3D30, 0x5980 },
|
|
{0x3D32, 0x5883 },
|
|
{0x3D34, 0x6462 },
|
|
{0x3D36, 0x8056 },
|
|
{0x3D38, 0x8162 },
|
|
{0x3D3A, 0x8422 },
|
|
{0x3D3C, 0x20A2 },
|
|
{0x3D3E, 0x2220 },
|
|
{0x3D40, 0x804B },
|
|
{0x3D42, 0x8110 },
|
|
{0x3D44, 0x0943 },
|
|
{0x3D46, 0x9243 },
|
|
{0x3D48, 0x8050 },
|
|
{0x3D4A, 0x9A4B },
|
|
{0x3D4C, 0x8563 },
|
|
{0x3D4E, 0x8363 },
|
|
{0x3D50, 0x8422 },
|
|
{0x3D52, 0x20A2 },
|
|
{0x3D54, 0x61C6 },
|
|
{0x3D56, 0x6F99 },
|
|
{0x3D58, 0x3009 },
|
|
{0x3D5A, 0x1FF6 },
|
|
{0x3D5C, 0x20ED },
|
|
{0x3D5E, 0x0874 },
|
|
{0x3D60, 0x8230 },
|
|
{0x3D62, 0x609B },
|
|
{0x3D64, 0x3060 },
|
|
{0x3D66, 0x4600 },
|
|
{0x3D68, 0x3783 },
|
|
{0x3D6A, 0x7070 },
|
|
{0x3D6C, 0x8040 },
|
|
{0x3D6E, 0x4A44 },
|
|
{0x3D70, 0x8003 },
|
|
{0x3D72, 0x0086 },
|
|
{0x3D74, 0x4588 },
|
|
{0x3D76, 0x46BA },
|
|
{0x3D78, 0x0300 },
|
|
{0x3D7A, 0xFFD7 },
|
|
{0x3D7C, 0x4688 },
|
|
{0x3D7E, 0x4588 },
|
|
{0x3D80, 0x4492 },
|
|
{0x3D82, 0x4A9B },
|
|
{0x3D84, 0x4070 },
|
|
{0x3D86, 0x8040 },
|
|
{0x3D88, 0x4AAD },
|
|
{0x3D8A, 0x0070 },
|
|
{0x3D8C, 0xAE47 },
|
|
{0x3D8E, 0x8547 },
|
|
{0x3D90, 0xAD78 },
|
|
{0x3D92, 0x6B85 },
|
|
{0x3D94, 0x6A80 },
|
|
{0x3D96, 0x6984 },
|
|
{0x3D98, 0x6B8A },
|
|
{0x3D9A, 0x6B80 },
|
|
{0x3D9C, 0x6980 },
|
|
{0x3D9E, 0x6A85 },
|
|
{0x3DA0, 0x7C93 },
|
|
{0x3DA2, 0x846B },
|
|
{0x3DA4, 0x8465 },
|
|
{0x3DA6, 0x46FF },
|
|
{0x3DA8, 0xAA65 },
|
|
{0x3DAA, 0x9C79 },
|
|
{0x3DAC, 0x4A00 },
|
|
{0x3DAE, 0x2180 },
|
|
{0x3DB0, 0x44AC },
|
|
{0x3DB2, 0x7070 },
|
|
{0x3DB4, 0x2180 },
|
|
{0x3DB6, 0x0005 },
|
|
{0x3DB8, 0x108F },
|
|
{0x3DBA, 0x0802 },
|
|
{0x3DBC, 0x5248 },
|
|
{0x3DBE, 0x801B },
|
|
{0x3DC0, 0x006F },
|
|
{0x3DC2, 0x8269 },
|
|
{0x3DC4, 0x6A82 },
|
|
{0x3DC6, 0x5148 },
|
|
{0x3DC8, 0x5A80 },
|
|
{0x3DCA, 0x5902 },
|
|
{0x3DCC, 0x8082 },
|
|
{0x3DCE, 0x3060 },
|
|
{0x3DD0, 0x8567 },
|
|
{0x3DD2, 0x5C20 },
|
|
{0x3DD4, 0x4880 },
|
|
{0x3DD6, 0x0284 },
|
|
{0x3DD8, 0x6084 },
|
|
{0x3DDA, 0x5C91 },
|
|
{0x3DDC, 0x5980 },
|
|
{0x3DDE, 0x5883 },
|
|
{0x3DE0, 0x6462 },
|
|
{0x3DE2, 0x8056 },
|
|
{0x3DE4, 0x8162 },
|
|
{0x3DE6, 0x8422 },
|
|
{0x3DE8, 0x209C },
|
|
{0x3DEA, 0x2220 },
|
|
{0x3DEC, 0x514B },
|
|
{0x3DEE, 0x8110 },
|
|
{0x3DF0, 0x0943 },
|
|
{0x3DF2, 0x9843 },
|
|
{0x3DF4, 0x8050 },
|
|
{0x3DF6, 0x8B51 },
|
|
{0x3DF8, 0x8D4B },
|
|
{0x3DFA, 0x9063 },
|
|
{0x3DFC, 0x8363 },
|
|
{0x3DFE, 0x8422 },
|
|
{0x3E00, 0x209C },
|
|
{0x3E02, 0x61D3 },
|
|
{0x3E04, 0x1FB6 },
|
|
{0x3E06, 0x20ED },
|
|
{0x3E08, 0x3809 },
|
|
{0x3E0A, 0x524B },
|
|
{0x3E0C, 0x0014 },
|
|
{0x3E0E, 0x4580 },
|
|
{0x3E10, 0x4681 },
|
|
{0x3E12, 0x3060 },
|
|
{0x3E14, 0x9D30 },
|
|
{0x3E16, 0x6083 },
|
|
{0x3E18, 0x4645 },
|
|
{0x3E1A, 0x0017 },
|
|
{0x3E1C, 0x8170 },
|
|
{0x3E1E, 0x7070 },
|
|
{0x3E20, 0x7070 },
|
|
{0x3E22, 0x7070 },
|
|
{0x3E24, 0x7070 },
|
|
{0x3E26, 0x7070 },
|
|
{0x3E28, 0x7070 },
|
|
{0x3E2A, 0x7070 },
|
|
{0x3E2C, 0x7070 },
|
|
{0x3E2E, 0x7070 },
|
|
{0x3E30, 0x7070 },
|
|
{0x3E32, 0x7070 },
|
|
{0x3E34, 0x7070 },
|
|
{0x3E36, 0x7070 },
|
|
{0x3E38, 0x7070 },
|
|
{0x3E3A, 0x7070 },
|
|
{0x3E3C, 0x7070 },
|
|
{0x3E3E, 0x7070 },
|
|
{0x3E40, 0x7070 },
|
|
{0x3E42, 0x7070 },
|
|
{0x3E44, 0x7070 },
|
|
{0x3E46, 0x7070 },
|
|
{0x3E48, 0x7070 },
|
|
{0x3E4A, 0x7070 },
|
|
{0x3E4C, 0x7070 },
|
|
{0x3E4E, 0x7070 },
|
|
{0x3E50, 0x7070 },
|
|
{0x3E52, 0x7070 },
|
|
{0x3E54, 0x7070 },
|
|
{0x3E56, 0x7070 },
|
|
{0x3E58, 0x7070 },
|
|
{0x3E5A, 0x7070 },
|
|
{0x3E5C, 0x7070 },
|
|
{0x3E5E, 0x7070 },
|
|
{0x3E60, 0x7070 },
|
|
{0x3E62, 0x7070 },
|
|
{0x3E64, 0x7070 },
|
|
{0x3E66, 0x7070 },
|
|
{0x3E68, 0x7070 },
|
|
{0x3E6A, 0x7070 },
|
|
{0x3E6C, 0x7070 },
|
|
{0x3E6E, 0x7070 },
|
|
{0x3E70, 0x7070 },
|
|
{0x3E72, 0x7070 },
|
|
{0x3E74, 0x7070 },
|
|
{0x3E76, 0x7070 },
|
|
{0x3E78, 0x7070 },
|
|
{0x3E7A, 0x7070 },
|
|
{0x3E7C, 0x7070 },
|
|
{0x3E7E, 0x7070 },
|
|
{0x3E80, 0x7070 },
|
|
{0x3E82, 0x7070 },
|
|
{0x3E84, 0x7070 },
|
|
{0x3E86, 0x7070 },
|
|
{0x3E88, 0x7070 },
|
|
{0x3E8A, 0x7070 },
|
|
{0x3E8C, 0x7070 },
|
|
{0x3E8E, 0x7070 },
|
|
{0x3E90, 0x7070 },
|
|
{0x3E92, 0x7070 },
|
|
{0x3E94, 0x7070 },
|
|
{0x3E96, 0x7070 },
|
|
{0x3E98, 0x7070 },
|
|
{0x3E9A, 0x7070 },
|
|
{0x3E9C, 0x7070 },
|
|
{0x3E9E, 0x7070 },
|
|
{0x3EA0, 0x7070 },
|
|
{0x3EA2, 0x7070 },
|
|
{0x3EA4, 0x7070 },
|
|
{0x3EA6, 0x7070 },
|
|
{0x3EA8, 0x7070 },
|
|
{0x3EAA, 0x7070 },
|
|
{0x3EAC, 0x7070 },
|
|
{0x3EAE, 0x7070 },
|
|
{0x3EB0, 0x7070 },
|
|
{0x3EB2, 0x7070 },
|
|
{0x3EB4, 0x7070 },
|
|
{0x0104, 0x0001 }, //Group_Parameter Hold
|
|
{0x0344, 0x0004 }, //X_ADDR_START
|
|
{0x0346, 0x0004 }, //Y_ADDR_START
|
|
{0x0348, 0x0233 }, //X_ADDR_END
|
|
{0x034A, 0x0233 }, //Y_ADDR_END
|
|
{0x034C, 0x0230 }, //X_OUTPUT_SIZE
|
|
{0x034E, 0x0230 }, //Y_OUTPUT_SIZE
|
|
{0x3040, 0x41 }, //Y_ODD_INC
|
|
{0x30A4, 0x1 }, //Y_EVEN_INC
|
|
{0x342, 0x2F8 }, //line_length_pck
|
|
{0x340, 0x248 }, //frame_length_lines ??
|
|
{0x3012, 0x0107 }, //coarse_integration_time ??
|
|
{0x112 , 0xA0A }, //RAW10
|
|
{0x202 , 0x366A },
|
|
{0x300 , 0xA },
|
|
{0x302 , 0x1 },
|
|
{0x304 , 0x101 },
|
|
{0x306 , 0x2828 },
|
|
{0x308 , 0xA },
|
|
{0x30A , 0x1 },
|
|
{0x340 , 0xA47B },
|
|
{0x342 , 0x2F8 },
|
|
{0x344 , 0x4 },
|
|
{0x346 , 0x4 },
|
|
{0x348 , 0x233 },
|
|
{0x34A , 0x233 },
|
|
{0x34C , 0x230 },
|
|
{0x34E , 0x230 },
|
|
{0x382 , 0x1 },
|
|
{0x386 , 0x1 },
|
|
{0x400 , 0x0 },
|
|
{0x402 , 0x0 },
|
|
{0x404 , 0x10 },
|
|
{0x3000, 0x353 },
|
|
{0x3002, 0x4 },
|
|
{0x3004, 0x4 },
|
|
{0x3006, 0x233 },
|
|
{0x3008, 0x233 },
|
|
{0x300A, 0xA47B },
|
|
{0x300C, 0x2F8 },
|
|
{0x3012, 0x366A },
|
|
{0x3018, 0x0 },
|
|
{0x301A, 0x1C },
|
|
{0x301C, 0x1 },
|
|
{0x301D, 0x0 },
|
|
{0x301E, 0x2A },
|
|
{0x3021, 0x0 },
|
|
{0x3022, 0x0 },
|
|
{0x3023, 0x0 },
|
|
{0x3026, 0xFFFF },
|
|
{0x3028, 0x4 },
|
|
{0x3032, 0x100 },
|
|
{0x303A, 0xA },
|
|
{0x303B, 0xF7 },
|
|
{0x303C, 0x0 },
|
|
{0x303E, 0x0 },
|
|
{0x3040, 0x41 },
|
|
{0x3044, 0x10C0 },
|
|
{0x3046, 0x608 },
|
|
{0x3048, 0x8 },
|
|
{0x304A, 0x60 },
|
|
{0x304C, 0x200 },
|
|
{0x305E, 0x2000 },
|
|
{0x3064, 0x5840 },
|
|
{0x3068, 0x0 },
|
|
{0x306A, 0x0 },
|
|
{0x306E, 0x9000 },
|
|
{0x3070, 0x0 },
|
|
{0x3072, 0x0 },
|
|
{0x3074, 0x0 },
|
|
{0x3076, 0x0 },
|
|
{0x3078, 0x0 },
|
|
{0x307A, 0x0 },
|
|
{0x307E, 0x20 },
|
|
{0x3088, 0x1 },
|
|
{0x30A0, 0x1 },
|
|
{0x30A2, 0x1 },
|
|
{0x30A4, 0x1 },
|
|
{0x30A6, 0x1 },
|
|
{0x30AA, 0x0 },
|
|
{0x30B0, 0x400 },
|
|
{0x30BC, 0x0 },
|
|
{0x30BE, 0x0 },
|
|
{0x30C0, 0x2000 },
|
|
{0x30C2, 0x0 },
|
|
{0x30E8, 0x0 },
|
|
{0x30EA, 0x0 },
|
|
{0x30EC, 0x5AE7 },
|
|
{0x30F8, 0x33 },
|
|
{0x30FA, 0xFC4C },
|
|
{0x3120, 0x1 },
|
|
{0x3122, 0x7 },
|
|
{0x3124, 0x1A7 },
|
|
{0x3126, 0x0 },
|
|
{0x3128, 0x1CF },
|
|
{0x312A, 0x4567 },
|
|
{0x312C, 0x89AB },
|
|
{0x312E, 0xCDEF },
|
|
{0x3152, 0x10 },
|
|
{0x3154, 0x3200 },
|
|
{0x3156, 0xC8F7 },
|
|
{0x3158, 0x0 },
|
|
{0x315A, 0x0 },
|
|
{0x315C, 0x0 },
|
|
{0x315E, 0x0 },
|
|
{0x3160, 0xEC },
|
|
{0x3162, 0x317 },
|
|
{0x3164, 0x0 },
|
|
{0x0104, 0x0000 }, //Group_Parameter Hold
|
|
#else
|
|
#error "Selected FPS configuration not found"
|
|
#endif
|
|
};
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Bulk_Write_Reg(const ARX3A0_REG arx3A0_reg[],
|
|
uint32_t total_num, uint32_t reg_size))
|
|
\brief write array of registers value to ARX3A0 Camera Sensor registers.
|
|
\param[in] arx3A0_reg : ARX3A0 Camera Sensor Register Array Structure
|
|
\ref ARX3A0_REG
|
|
\param[in] total_num : total number of registers(size of array)
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Bulk_Write_Reg(const ARX3A0_REG arx3A0_reg[],
|
|
uint32_t total_num, uint32_t reg_size)
|
|
{
|
|
uint32_t i = 0;
|
|
int32_t ret = 0;
|
|
|
|
for(i = 0; i < total_num; i++)
|
|
{
|
|
ret = ARX3A0_WRITE_REG(arx3A0_reg[i].reg_addr, arx3A0_reg[i].reg_value, \
|
|
reg_size);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
}
|
|
|
|
return ARM_DRIVER_OK;
|
|
}
|
|
|
|
/**
|
|
\fn void ARX3A0_Sensor_Enable_Clk_Src(void)
|
|
\brief Enable ARX3A0 Camera Sensor external clock source configuration.
|
|
\param[in] none
|
|
\return none
|
|
*/
|
|
static void ARX3A0_Sensor_Enable_Clk_Src(void)
|
|
{
|
|
set_cpi_pixel_clk(CPI_PIX_CLKSEL_400MZ, RTE_ARX3A0_CAMERA_SENSOR_CSI_CLK_SCR_DIV);
|
|
}
|
|
|
|
/**
|
|
\fn void ARX3A0_Sensor_Disable_Clk_Src(void)
|
|
\brief Disable ARX3A0 Camera Sensor external clock source configuration.
|
|
\param[in] none
|
|
\return none
|
|
*/
|
|
static void ARX3A0_Sensor_Disable_Clk_Src(void)
|
|
{
|
|
clear_cpi_pixel_clk();
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Camera_Hard_Reseten(void)
|
|
\brief Hard Reset ARX3A0 Camera Sensor
|
|
\param[in] none
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Camera_Hard_Reseten(void)
|
|
{
|
|
int32_t ret = 0;
|
|
|
|
ret = GPIO_Driver_CAM_RST->Initialize(RTE_ARX3A0_CAMERA_SENSOR_RESET_PIN_NO, NULL);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_RST->PowerControl(RTE_ARX3A0_CAMERA_SENSOR_RESET_PIN_NO, ARM_POWER_FULL);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_RST->SetDirection(RTE_ARX3A0_CAMERA_SENSOR_RESET_PIN_NO, GPIO_PIN_DIRECTION_OUTPUT);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_PWR->Initialize(RTE_ARX3A0_CAMERA_SENSOR_POWER_PIN_NO, NULL);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_PWR->PowerControl(RTE_ARX3A0_CAMERA_SENSOR_POWER_PIN_NO, ARM_POWER_FULL);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_PWR->SetDirection(RTE_ARX3A0_CAMERA_SENSOR_POWER_PIN_NO, GPIO_PIN_DIRECTION_OUTPUT);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_RST->SetValue(RTE_ARX3A0_CAMERA_SENSOR_RESET_PIN_NO, GPIO_PIN_OUTPUT_STATE_LOW);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ARX3A0_DELAY_uSEC(2000);
|
|
|
|
ret = GPIO_Driver_CAM_PWR->SetValue(RTE_ARX3A0_CAMERA_SENSOR_POWER_PIN_NO, GPIO_PIN_OUTPUT_STATE_HIGH);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ARX3A0_DELAY_uSEC(1000);
|
|
|
|
ret = GPIO_Driver_CAM_RST->SetValue(RTE_ARX3A0_CAMERA_SENSOR_RESET_PIN_NO, GPIO_PIN_OUTPUT_STATE_HIGH);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ARX3A0_DELAY_uSEC(100000);
|
|
|
|
return ARM_DRIVER_OK;
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Camera_Soft_Reseten(void)
|
|
\brief Software Reset ARX3A0 Camera Sensor
|
|
\param[in] none
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Camera_Soft_Reseten(void)
|
|
{
|
|
int32_t ret = 0;
|
|
|
|
ret = ARX3A0_WRITE_REG(ARX3A0_SOFTWARE_RESET_REGISTER, 0x01, 1);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
/* @Observation: more delay is required for Camera Sensor
|
|
* to setup after Soft Reset.
|
|
*/
|
|
ARX3A0_DELAY_uSEC(1000);
|
|
|
|
return ARM_DRIVER_OK;
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Camera_Cfg(void)
|
|
\brief Initialize ARX3A0 Camera Sensor.
|
|
this function will
|
|
- configure Camera Sensor resolution registers as per input parameter.
|
|
(currently supports only 560x560(WxH) Camera resolution)
|
|
- configure Camera Sensor slew rate.
|
|
\ref ARX3A0_Camera_Resolution
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Camera_Cfg(void)
|
|
{
|
|
uint32_t total_num = 0;
|
|
|
|
/* Camera Sensor Resolution: 560x560(WxH) */
|
|
total_num = (sizeof(arx3a0_560_regs) / sizeof(ARX3A0_REG));
|
|
return ARX3A0_Bulk_Write_Reg(arx3a0_560_regs, total_num, 2);
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Camera_Gain(uint32_t gain)
|
|
\brief Set camera gain
|
|
this function will
|
|
- configure Camera Sensor gain and integration time as per input parameter.
|
|
|
|
Gain 1 is the default integration time with camera gain set to 1.
|
|
|
|
For requested gain > 1, we use the default integration time and adjust the analogue+digital gain.
|
|
For requested gain < 1, we set gain to 1 and use a reduced integration time.
|
|
|
|
\param[in] gain : gain value * 65536 (so 1.0 gain = 65536); 0 to read
|
|
\return \ref actual gain
|
|
*/
|
|
static int32_t ARX3A0_Camera_Gain(const uint32_t gain)
|
|
{
|
|
uint32_t digital_gain;
|
|
uint32_t fine_gain = gain;
|
|
uint32_t coarse_gain;
|
|
|
|
if (max_integration_time == 0)
|
|
{
|
|
/* Record the integration time set by the configuration tables. We won't adjust it upwards, as it may
|
|
* interfere with frame timing, but we can freely adjust it downwards.
|
|
*/
|
|
int32_t ret = ARX3A0_READ_REG(ARX3A0_COARSE_INTEGRATION_TIME_REGISTER, ¤t_integration_time, 2);
|
|
if (ret != 0)
|
|
return ret;
|
|
|
|
max_integration_time = current_integration_time;
|
|
|
|
/* Slight hackery - if this API is in use, assume the caller does not want the data pedestal - disable it */
|
|
uint32_t reset_register;
|
|
ret = ARX3A0_READ_REG(ARX3A0_RESET_REGISTER, &reset_register, 2);
|
|
if (ret != 0)
|
|
return ret;
|
|
|
|
/* Unlock the data pedestal setting */
|
|
ret = ARX3A0_WRITE_REG(ARX3A0_RESET_REGISTER, reset_register &~ 8, 2);
|
|
if (ret != 0)
|
|
return ret;
|
|
|
|
/* Set it to zero */
|
|
ret = ARX3A0_WRITE_REG(ARX3A0_DATA_PEDESTAL_REGISTER, 0, 2);
|
|
if (ret != 0)
|
|
return ret;
|
|
|
|
/* Restore the lock */
|
|
ret = ARX3A0_WRITE_REG(ARX3A0_RESET_REGISTER, reset_register, 2);
|
|
if (ret != 0)
|
|
return ret;
|
|
}
|
|
|
|
if (gain != 0)
|
|
{
|
|
/* Request to set gain */
|
|
|
|
/* From the Design Guide:
|
|
*
|
|
* Total Gain = (R0x305E[0:3]/16+1)*2^R0x0305E[4:6]*(R0x305E[7:15]/64)
|
|
*
|
|
* (Register guide is misleading, no doubt in part due to the backwards-
|
|
* compatibility analogue gain API in register 0x3028).
|
|
*
|
|
* First clamp analogue gain, using digital gain to get more if
|
|
* necessary. Otherwise digital gain is used to fine adjust.
|
|
*/
|
|
uint32_t new_integration_time = max_integration_time;
|
|
if (gain < 0x10000)
|
|
{
|
|
/* Minimum gain is 1.0 */
|
|
fine_gain = 0x10000;
|
|
|
|
/* But we can lower integration time */
|
|
new_integration_time = (uint32_t) (((float) max_integration_time * gain) * 0x1p-16f + 0.5f);
|
|
}
|
|
else if (gain > 0x80000)
|
|
{
|
|
/* Maximum analogue gain is 8.0 */
|
|
fine_gain = 0x80000;
|
|
}
|
|
|
|
/* Set integration time */
|
|
if (new_integration_time != current_integration_time)
|
|
{
|
|
int32_t ret = ARX3A0_WRITE_REG(ARX3A0_COARSE_INTEGRATION_TIME_REGISTER, new_integration_time, 2);
|
|
if (ret != 0)
|
|
{
|
|
return ret;
|
|
}
|
|
current_integration_time = new_integration_time;
|
|
}
|
|
|
|
/*
|
|
* First get coarse analogue power of two, leaving fine gain in range [0x10000,0x1FFFF]
|
|
*/
|
|
coarse_gain = 0;
|
|
while (fine_gain >= 0x20000)
|
|
{
|
|
coarse_gain++;
|
|
fine_gain /= 2;
|
|
}
|
|
|
|
/* And we then have 16 steps of fine gain. Round down here, and
|
|
* we tune with digital gain >= 1.0
|
|
*/
|
|
fine_gain = (fine_gain - 0x10000) / 0x1000;
|
|
|
|
/* Use digital gain to extend gain beyond the analogue limits of
|
|
* x1 to x8, or to fine-tune within that range.
|
|
*
|
|
* We don't let digital gain go below 1.0 - it just loses information,
|
|
* and clamping it lets an auto-gain controller see that we are
|
|
* unable to improve exposure by such lowering. Another camera might
|
|
* be able to usefully set gain to <1.0, so a controller could try it.
|
|
*
|
|
* (When we're fine tuning, digital gain is always >=1.0, because we
|
|
* round down analogue gain, so it can only go below 1.0 by the user
|
|
* requesting total gain < 1.0).
|
|
*/
|
|
uint32_t resulting_analogue_gain = ((fine_gain + 16) << coarse_gain) * 0x1000;
|
|
digital_gain = (64 * gain + (resulting_analogue_gain / 2)) / resulting_analogue_gain;
|
|
if (digital_gain > 0x1FF)
|
|
{
|
|
/* Maximum digital gain is just under 8.0 (limited by register size) */
|
|
digital_gain = 0x1FF;
|
|
}
|
|
else if (digital_gain < 64)
|
|
{
|
|
/* Digital gain >= 1.0, as per discussion above */
|
|
digital_gain = 64;
|
|
}
|
|
int32_t ret = ARX3A0_WRITE_REG(ARX3A0_GLOBAL_GAIN_REGISTER, (digital_gain << 7) | (coarse_gain << 4) | fine_gain, 2);
|
|
if (ret != 0)
|
|
return ret;
|
|
}
|
|
else
|
|
{
|
|
uint32_t reg_value;
|
|
|
|
int32_t ret = ARX3A0_READ_REG(ARX3A0_GLOBAL_GAIN_REGISTER, ®_value, 2);
|
|
if (ret != 0)
|
|
return ret;
|
|
|
|
digital_gain = reg_value >> 7;
|
|
coarse_gain = (reg_value >> 4) & 7;
|
|
fine_gain = reg_value & 0xF;
|
|
}
|
|
|
|
// Fixed point factors of 16 and 64 in registers, so multiply by 64 to get our *0x10000 scale
|
|
uint32_t resulting_gain = ((fine_gain + 16) << coarse_gain) * digital_gain * 64;
|
|
|
|
// And adjust for any reduction of integration time (in which case gain should be 0x10000 initially...)
|
|
if (current_integration_time != max_integration_time)
|
|
{
|
|
resulting_gain = (uint32_t) (((float) resulting_gain * current_integration_time) / max_integration_time + 0.5f);
|
|
}
|
|
return resulting_gain;
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Init(ARM_CAMERA_RESOLUTION cam_resolution)
|
|
\brief Initialize ARX3A0 Camera Sensor
|
|
this function will
|
|
- initialize i2c using i3c instance
|
|
- software reset ARX3A0 Camera Sensor
|
|
- read ARX3A0 chip-id, proceed only it is correct.
|
|
\param[in] cam_resolution : Camera Resolution \ref ARM_CAMERA_RESOLUTION
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Init(void)
|
|
{
|
|
int32_t ret = 0;
|
|
uint32_t rcv_data = 0;
|
|
|
|
/*Enable camera sensor clock source config*/
|
|
ARX3A0_Sensor_Enable_Clk_Src();
|
|
|
|
/*camera sensor resten*/
|
|
ret = ARX3A0_Camera_Hard_Reseten();
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
/* Initialize i2c using i3c driver instance depending on
|
|
* ARX3A0 Camera Sensor specific i2c configurations
|
|
* \ref arx3A0_camera_sensor_i2c_cnfg
|
|
*/
|
|
ret = camera_sensor_i2c_init(&arx3A0_camera_sensor_i2c_cnfg);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
/* Soft Reset ARX3A0 Camera Sensor */
|
|
ret = ARX3A0_Camera_Soft_Reseten();
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
/* Read ARX3A0 Camera Sensor CHIP ID */
|
|
ret = ARX3A0_READ_REG(ARX3A0_CHIP_ID_REGISTER, &rcv_data, 2);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
/* Proceed only if CHIP ID is correct. */
|
|
if(rcv_data != ARX3A0_CHIP_ID_REGISTER_VALUE)
|
|
return ARM_DRIVER_ERROR_UNSUPPORTED;
|
|
|
|
/*Putting sensor in standby mode*/
|
|
ret = ARX3A0_WRITE_REG(ARX3A0_MODE_SELECT_REGISTER, 0x00, 1);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = ARX3A0_READ_REG(ARX3A0_MIPI_CONFIG_REGISTER, &rcv_data, 2);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = ARX3A0_WRITE_REG(ARX3A0_MIPI_CONFIG_REGISTER, rcv_data | (1U << 7), 2);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
/*start streaming*/
|
|
ret = ARX3A0_WRITE_REG(ARX3A0_MODE_SELECT_REGISTER, 0x01, 1);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ARX3A0_DELAY_uSEC(50000);
|
|
|
|
/*stop streaming*/
|
|
ret = ARX3A0_WRITE_REG(ARX3A0_MODE_SELECT_REGISTER, 0x00, 1);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
/*Adding delay to finish streaming*/
|
|
for(uint32_t count = 0; count < 5; count++)
|
|
ARX3A0_DELAY_uSEC(100000);
|
|
|
|
/* Force re-reading of the registers */
|
|
max_integration_time = current_integration_time = 0;
|
|
|
|
return ARM_DRIVER_OK;
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Start(void)
|
|
\brief Start ARX3A0 Camera Sensor Streaming.
|
|
\param[in] none
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Start(void)
|
|
{
|
|
/* Start streaming */
|
|
return ARX3A0_WRITE_REG(ARX3A0_MODE_SELECT_REGISTER, 0x01, 1);;
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Stop(void)
|
|
\brief Stop ARX3A0 Camera Sensor Streaming.
|
|
\param[in] none
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Stop(void)
|
|
{
|
|
/* Suspend any stream */
|
|
return ARX3A0_WRITE_REG(ARX3A0_MODE_SELECT_REGISTER, 0x00, 1);;
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Control(uint32_t control, uint32_t arg)
|
|
\brief Control ARX3A0 Camera Sensor.
|
|
\param[in] control : Operation
|
|
\param[in] arg : Argument of operation
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Control(uint32_t control, uint32_t arg)
|
|
{
|
|
|
|
switch (control)
|
|
{
|
|
case CPI_CAMERA_SENSOR_CONFIGURE:
|
|
return ARX3A0_Camera_Cfg();
|
|
break;
|
|
case CPI_CAMERA_SENSOR_GAIN:
|
|
return ARX3A0_Camera_Gain(arg);
|
|
break;
|
|
default:
|
|
return ARM_DRIVER_ERROR_PARAMETER;
|
|
}
|
|
}
|
|
|
|
/**
|
|
\fn int32_t ARX3A0_Uninit(void)
|
|
\brief Un-initialize ARX3A0 Camera Sensor.
|
|
\param[in] none
|
|
\return \ref execution_status
|
|
*/
|
|
static int32_t ARX3A0_Uninit(void)
|
|
{
|
|
int32_t ret;
|
|
|
|
/*Disable camera sensor clock source config*/
|
|
ARX3A0_Sensor_Disable_Clk_Src();
|
|
|
|
ret = GPIO_Driver_CAM_RST->SetValue(RTE_ARX3A0_CAMERA_SENSOR_RESET_PIN_NO, GPIO_PIN_OUTPUT_STATE_LOW);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_RST->PowerControl(RTE_ARX3A0_CAMERA_SENSOR_RESET_PIN_NO, ARM_POWER_OFF);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_RST->Uninitialize(RTE_ARX3A0_CAMERA_SENSOR_RESET_PIN_NO);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_PWR->SetValue(RTE_ARX3A0_CAMERA_SENSOR_POWER_PIN_NO, GPIO_PIN_OUTPUT_STATE_LOW);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_PWR->PowerControl(RTE_ARX3A0_CAMERA_SENSOR_POWER_PIN_NO, ARM_POWER_OFF);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
ret = GPIO_Driver_CAM_PWR->Uninitialize(RTE_ARX3A0_CAMERA_SENSOR_POWER_PIN_NO);
|
|
if(ret != ARM_DRIVER_OK)
|
|
return ret;
|
|
|
|
return ARM_DRIVER_OK;
|
|
}
|
|
|
|
/**
|
|
\brief ARX3A0 Camera Sensor CSi informations
|
|
\ref CSI_INFO
|
|
*/
|
|
static CSI_INFO arx3a0_csi_info =
|
|
{
|
|
.frequency = RTE_ARX3A0_CAMERA_SENSOR_CSI_FREQ,
|
|
.dt = RTE_ARX3A0_CAMERA_SENSOR_CSI_DATA_TYPE,
|
|
.n_lanes = RTE_ARX3A0_CAMERA_SENSOR_CSI_N_LANES,
|
|
.vc_id = RTE_ARX3A0_CAMERA_SENSOR_CSI_VC_ID,
|
|
.cpi_cfg.override = RTE_ARX3A0_CAMERA_SENSOR_OVERRIDE_CPI_COLOR_MODE,
|
|
.cpi_cfg.cpi_color_mode = RTE_ARX3A0_CAMERA_SENSOR_CPI_COLOR_MODE
|
|
};
|
|
|
|
/**
|
|
\brief ARX3A0 Camera Sensor Operations
|
|
\ref CAMERA_SENSOR_OPERATIONS
|
|
*/
|
|
static CAMERA_SENSOR_OPERATIONS arx3a0_ops =
|
|
{
|
|
.Init = ARX3A0_Init,
|
|
.Uninit = ARX3A0_Uninit,
|
|
.Start = ARX3A0_Start,
|
|
.Stop = ARX3A0_Stop,
|
|
.Control = ARX3A0_Control,
|
|
};
|
|
|
|
/**
|
|
\brief ARX3A0 Camera Sensor Device Structure
|
|
\ref CAMERA_SENSOR_DEVICE
|
|
*/
|
|
static CAMERA_SENSOR_DEVICE arx3a0_camera_sensor =
|
|
{
|
|
.interface = CAMERA_SENSOR_INTERFACE_MIPI,
|
|
.width = RTE_ARX3A0_CAMERA_SENSOR_FRAME_WIDTH,
|
|
.height = RTE_ARX3A0_CAMERA_SENSOR_FRAME_HEIGHT,
|
|
.csi_info = &arx3a0_csi_info,
|
|
.ops = &arx3a0_ops,
|
|
};
|
|
|
|
/* Registering CPI sensor */
|
|
CAMERA_SENSOR(arx3a0_camera_sensor)
|
|
|
|
#endif /* RTE_ARX3A0_CAMERA_SENSOR_CSI_ENABLE */
|