66 lines
1.6 KiB
C
66 lines
1.6 KiB
C
#ifndef __COMMON_H__
|
|
#define __COMMON_H__
|
|
|
|
#define MAX_FPS_OPTIONS_SUPPORTED 3
|
|
#define I2C_MSG_LENGTH 0x2
|
|
#define E2PROM_2ADDR 0x80000000
|
|
#define E2PROM_ADDR_MASK 0x7fffffff
|
|
|
|
/* Defines for register writes and register array processing */
|
|
#define IMX_BYTE_MAX 32
|
|
#define IMX_SHORT_MAX 16
|
|
#define I2C_RETRY_COUNT 5
|
|
#define IMX_TOK_MASK 0xfff0
|
|
|
|
enum imx_tok_type {
|
|
IMX_8BIT = 0x0001,
|
|
IMX_16BIT = 0x0002,
|
|
IMX_TOK_TERM = 0xf000, /* terminating token for reg list */
|
|
IMX_TOK_DELAY = 0xfe00 /* delay token for reg list */
|
|
};
|
|
|
|
/**
|
|
* struct imx_reg - MI sensor register format
|
|
* @type: type of the register
|
|
* @reg: 16-bit offset to register
|
|
* @val: 8/16/32-bit register value
|
|
*
|
|
* Define a structure for sensor register initialization values
|
|
*/
|
|
struct imx_reg {
|
|
enum imx_tok_type type;
|
|
u16 sreg;
|
|
u32 val; /* @set value for read/mod/write, @mask */
|
|
};
|
|
|
|
struct imx_fps_setting {
|
|
int fps;
|
|
unsigned short pixels_per_line;
|
|
unsigned short lines_per_frame;
|
|
int mipi_freq; /* MIPI lane frequency in kHz */
|
|
const struct imx_reg *regs; /* regs that the fps setting needs */
|
|
};
|
|
|
|
struct imx_resolution {
|
|
const struct imx_fps_setting fps_options[MAX_FPS_OPTIONS_SUPPORTED];
|
|
u8 *desc;
|
|
const struct imx_reg *regs;
|
|
int res;
|
|
int width;
|
|
int height;
|
|
int fps;
|
|
unsigned short pixels_per_line;
|
|
unsigned short lines_per_frame;
|
|
int mipi_freq; /* MIPI lane frequency in kHz */
|
|
unsigned short skip_frames;
|
|
u8 bin_factor_x;
|
|
u8 bin_factor_y;
|
|
bool used;
|
|
};
|
|
|
|
#define GROUPED_PARAMETER_HOLD_ENABLE {IMX_8BIT, 0x0104, 0x1}
|
|
#define GROUPED_PARAMETER_HOLD_DISABLE {IMX_8BIT, 0x0104, 0x0}
|
|
|
|
int imx_write_reg(struct i2c_client *client, u16 data_length, u16 reg, u16 val);
|
|
#endif
|