]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - drivers/staging/media/atomisp/i2c/imx/common.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[mirror_ubuntu-bionic-kernel.git] / drivers / staging / media / atomisp / i2c / imx / common.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __COMMON_H__
3 #define __COMMON_H__
4
5 #define MAX_FPS_OPTIONS_SUPPORTED 3
6 #define I2C_MSG_LENGTH 0x2
7 #define E2PROM_2ADDR 0x80000000
8 #define E2PROM_ADDR_MASK 0x7fffffff
9
10 /* Defines for register writes and register array processing */
11 #define IMX_BYTE_MAX 32
12 #define IMX_SHORT_MAX 16
13 #define I2C_RETRY_COUNT 5
14 #define IMX_TOK_MASK 0xfff0
15
16 enum imx_tok_type {
17 IMX_8BIT = 0x0001,
18 IMX_16BIT = 0x0002,
19 IMX_TOK_TERM = 0xf000, /* terminating token for reg list */
20 IMX_TOK_DELAY = 0xfe00 /* delay token for reg list */
21 };
22
23 /**
24 * struct imx_reg - MI sensor register format
25 * @type: type of the register
26 * @reg: 16-bit offset to register
27 * @val: 8/16/32-bit register value
28 *
29 * Define a structure for sensor register initialization values
30 */
31 struct imx_reg {
32 enum imx_tok_type type;
33 u16 sreg;
34 u32 val; /* @set value for read/mod/write, @mask */
35 };
36
37 struct imx_fps_setting {
38 int fps;
39 unsigned short pixels_per_line;
40 unsigned short lines_per_frame;
41 int mipi_freq; /* MIPI lane frequency in kHz */
42 const struct imx_reg *regs; /* regs that the fps setting needs */
43 };
44
45 struct imx_resolution {
46 const struct imx_fps_setting fps_options[MAX_FPS_OPTIONS_SUPPORTED];
47 u8 *desc;
48 const struct imx_reg *regs;
49 int res;
50 int width;
51 int height;
52 int fps;
53 unsigned short pixels_per_line;
54 unsigned short lines_per_frame;
55 int mipi_freq; /* MIPI lane frequency in kHz */
56 unsigned short skip_frames;
57 u8 bin_factor_x;
58 u8 bin_factor_y;
59 bool used;
60 };
61
62 #define GROUPED_PARAMETER_HOLD_ENABLE {IMX_8BIT, 0x0104, 0x1}
63 #define GROUPED_PARAMETER_HOLD_DISABLE {IMX_8BIT, 0x0104, 0x0}
64
65 int imx_write_reg(struct i2c_client *client, u16 data_length, u16 reg, u16 val);
66 #endif