| /* SPDX-License-Identifier: GPL-2.0 */ |
| #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 |