#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
