Merge remote-tracking branch 'spi/topic/core' into spi-next
[sfrench/cifs-2.6.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