25#define IMX708_MODE_SELECT 0x0100
26#define IMX708_ACTIVE 0x01
27#define IMX708_SLEEP 0x00
30#define IMX708_cam_initIAL_PIXEL_RATE 590000000
32#define IMX708_REG_BASE_SPC_GAINS_L 0x7b10
33#define IMX708_REG_BASE_SPC_GAINS_R 0x7c00
36#define IMX708_LPF_INTENSITY_EN 0xC428
37#define IMX708_LPF_INTENSITY_ENABLED 0x00
38#define IMX708_LPF_INTENSITY_DISABLED 0x01
39#define IMX708_LPF_INTENSITY 0xC429
42#define IMX708_REG_TEST_PATTERN 0x0600
43#define IMX708_TEST_PATTERN_DISABLE 0
44#define IMX708_TEST_PATTERN_SOLID_COLOR 1
45#define IMX708_TEST_PATTERN_COLOR_BARS 2
46#define IMX708_TEST_PATTERN_GREY_COLOR 3
47#define IMX708_TEST_PATTERN_PN9 4
50#define IMX708_REG_TEST_PATTERN_R 0x0602
51#define IMX708_REG_TEST_PATTERN_GR 0x0604
52#define IMX708_REG_TEST_PATTERN_B 0x0606
53#define IMX708_REG_TEST_PATTERN_GB 0x0608
54#define IMX708_TEST_PATTERN_COLOUR_MIN 0
55#define IMX708_TEST_PATTERN_COLOUR_MAX 0x0fff
56#define IMX708_TEST_PATTERN_COLOUR_STEP 1
58#define IMX708_REG_BASE_SPC_GAINS_L 0x7b10
59#define IMX708_REG_BASE_SPC_GAINS_R 0x7c00
62#define IMX708_HDR_EXPOSURE_RATIO 2
63#define IMX708_REG_MID_EXPOSURE 0x3116
64#define IMX708_REG_SHT_EXPOSURE 0x0224
65#define IMX708_REG_MID_ANALOG_GAIN 0x3118
66#define IMX708_REG_SHT_ANALOG_GAIN 0x0216
69#define IMX708_REG_EXPOSURE 0x0202
70#define IMX708_EXPOSURE_OFFSET 48
71#define IMX708_EXPOSURE_DEFAULT 0x640
72#define IMX708_EXPOSURE_STEP 1
73#define IMX708_EXPOSURE_MIN 1
74#define IMX708_EXPOSURE_MAX (IMX708_FRAME_LENGTH_MAX - IMX708_EXPOSURE_OFFSET)
77#define IMX708_REG_ANALOG_GAIN 0x0204
78#define IMX708_ANA_GAIN_MIN 112
79#define IMX708_ANA_GAIN_MAX 960
80#define IMX708_ANA_GAIN_STEP 1
81#define IMX708_ANA_GAIN_DEFAULT IMX708_ANA_GAIN_MIN
84#define IMX708_REG_DIGITAL_GAIN 0x020e
85#define IMX708_DGTL_GAIN_MIN 0x0100
86#define IMX708_DGTL_GAIN_MAX 0xffff
87#define IMX708_DGTL_GAIN_DEFAULT 0x0100
88#define IMX708_DGTL_GAIN_STEP 1
96static const struct imx708_reg mode_common_regs[] = {
147static const struct imx708_reg mode_1920x1080_cropped_regs[] = {
248static const struct imx708_reg mode_2x2binned_1920x1080_regs[] = {
348static const struct imx708_reg mode_hdr_1920x1080_regs[] = {
459static const u8 pdaf_gains[2][9] = {
460 { 0x4c, 0x4c, 0x4c, 0x46, 0x3e, 0x38, 0x35, 0x35, 0x35 },
461 { 0x35, 0x35, 0x35, 0x38, 0x3e, 0x46, 0x4c, 0x4c, 0x4c }
465static const struct imx708_reg link_450Mhz_regs[] = {
470static const struct imx708_reg link_447Mhz_regs[] = {
475static const struct imx708_reg link_453Mhz_regs[] = {
480#define DW9807_I2C_ADDRESS 0x0C << 1
482#define DW9807_MAX_FOCUS_POS 1023
487#define DW9807_FOCUS_STEPS 1
494#define DW9807_CTRL_STEPS 16
495#define DW9807_CTRL_DELAY_US 1000
497#define DW9807_CTL_ADDR 0x02
502#define DW9807_MSB_ADDR 0x03
503#define DW9807_LSB_ADDR 0x04
504#define DW9807_STATUS_ADDR 0x05
505#define DW9807_MODE_ADDR 0x06
506#define DW9807_RESONANCE_ADDR 0x07
508#define DW9807_PW_MIN_DELAY_US 100
509#define DW9807_PW_DELAY_RANGE_US 10
511#define DW9807_ACTIVE 0x00
512#define DW9807_SLEEP 0x01
528 for (
int i = 0; i <
sizeof(mode_common_regs)/
sizeof(mode_common_regs[0]); i++) {
541 for (
int i = 0; i <
sizeof(mode_1920x1080_cropped_regs)/
sizeof(mode_1920x1080_cropped_regs[0]); i++) {
546 else if (mode == 1) {
547 for (
int i = 0; i <
sizeof(mode_2x2binned_1920x1080_regs)/
sizeof(mode_2x2binned_1920x1080_regs[0]); i++) {
552 else if (mode == 2) {
553 for (
int i = 0; i <
sizeof(mode_hdr_1920x1080_regs)/
sizeof(mode_hdr_1920x1080_regs[0]); i++) {
562 for (
int i = 0; i <
sizeof(link_450Mhz_regs)/
sizeof(link_450Mhz_regs[0]); i++) {
575 for (
int i = 0; i < 54 ;i++) {
652 else if (focus_step <= 0)
#define IMX708_ANA_GAIN_MIN
#define IMX708_REG_ANALOG_GAIN
#define IMX708_LPF_INTENSITY_EN
#define IMX708_REG_EXPOSURE
#define IMX708_REG_DIGITAL_GAIN
#define IMX708_HDR_EXPOSURE_RATIO
void IMX708_ConfigQuadBayerRemosaicAdjustment(cam_instance_t *cam)
#define IMX708_REG_BASE_SPC_GAINS_L
#define IMX708_LPF_INTENSITY
#define IMX708_MODE_SELECT
#define IMX708_DGTL_GAIN_MAX
#define DW9807_I2C_ADDRESS
#define IMX708_DGTL_GAIN_MIN
#define IMX708_LPF_INTENSITY_ENABLED
#define IMX708_REG_BASE_SPC_GAINS_R
#define IMX708_ANA_GAIN_MAX
#define DW9807_MAX_FOCUS_POS
imx708 Driver API definitions. This file provides data structures and APIs for controlling the imx708...
cam_status_t
CAM Status List.
@ CAM_OK
Successful Operation */.
void cam_writeReg(cam_instance_t *cam, u16 reg, u8 data)
Write Data to specific register in camera.
struct cam_instance cam_instance_t
Forward declaration of CAM instance.
#define LOG_INFO(debug, fmt,...)
#define BSP_ASSERT(cond, msg)
#define DBG_MOD_CAM
Camera.
void i2c_startMasterBlocking(i2c_instance_t *inst)
Initiate start condition for I2C master mode and waits until the operation is complete.
void i2c_txByte(i2c_instance_t *inst, u8 byte)
Transmits a byte of data over I2C.
u32 i2c_rxAck(i2c_instance_t *inst)
Reads data from I2C receive data register.
void i2c_txNackBlocking(i2c_instance_t *inst)
Sends an NACK signal over the I2C bus and waits until the transmission is complete.
void i2c_stopMasterBlocking(i2c_instance_t *inst)
Initiate stop condition for I2C master mode and waits until the operation is complete.
const cam_api_t IMX708_DRIVER
IMX708 Driver Instance. Point your generic RTC pointer to this structure to use the IMX708 hardware.
void IMX708_OnActuator(cam_instance_t *cam)
Enable Lens Actuator (VCM).
cam_status_t IMX708_cam_init(cam_instance_t *cam)
Initialize Camera Sequence.
void IMX708_SetPdafGain(cam_instance_t *cam)
Set PDAF (Phase Detection Auto Focus) Gain.
void IMX708_SetExposure(cam_instance_t *cam, u16 val)
Set Exposure Time.
void IMX708_SetAnalogueGain(cam_instance_t *cam, u16 val)
Set Analog Gain.
void IMX708_OffActuator(cam_instance_t *cam)
Disable Lens Actuator (VCM).
cam_status_t IMX708_startStreaming(cam_instance_t *cam)
Start Stream Video.
void IMX708_ConfigFormat(cam_instance_t *cam, u8 mode)
Configure Sensor Output Format.
void IMX708_ConfigLinkFreq(cam_instance_t *cam)
Configure MIPI Link Frequency.
cam_status_t IMX708_stopStreaming(cam_instance_t *cam)
Stop Stream Video.
void IMX708_SetDigitalGain(cam_instance_t *cam, u16 val)
Set Digital Gain.
void IMX708_SetFocusStep(cam_instance_t *cam, u32 focus_step)
Set Focus Position (DAC Value).
void IMX708_ConfigCommon(cam_instance_t *cam)
Apply Common Configuration.
i2c_instance_t * inst
Pointer to I2C instance */.
I2C instance. Holds the software registers and hardware pointer.