xref: /linux/drivers/media/i2c/et8ek8/et8ek8_reg.h (revision 55a42f78ffd386e01a5404419f8c5ded7db70a21)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * et8ek8_reg.h
4  *
5  * Copyright (C) 2008 Nokia Corporation
6  *
7  * Contact: Sakari Ailus <sakari.ailus@iki.fi>
8  *          Tuukka Toivonen <tuukkat76@gmail.com>
9  */
10 
11 #ifndef ET8EK8REGS_H
12 #define ET8EK8REGS_H
13 
14 #include <linux/i2c.h>
15 #include <linux/types.h>
16 #include <linux/videodev2.h>
17 #include <linux/v4l2-subdev.h>
18 
19 struct v4l2_mbus_framefmt;
20 struct v4l2_subdev_pad_mbus_code_enum;
21 
22 struct et8ek8_mode {
23 	/* Physical sensor resolution and current image window */
24 	u16 sensor_width;
25 	u16 sensor_height;
26 	u16 sensor_window_origin_x;
27 	u16 sensor_window_origin_y;
28 	u16 sensor_window_width;
29 	u16 sensor_window_height;
30 
31 	/* Image data coming from sensor (after scaling) */
32 	u16 width;
33 	u16 height;
34 	u16 window_origin_x;
35 	u16 window_origin_y;
36 	u16 window_width;
37 	u16 window_height;
38 
39 	u32 pixel_clock;		/* in Hz */
40 	struct v4l2_fract timeperframe;
41 	u32 max_exp;			/* Maximum exposure value */
42 	u32 bus_format;			/* MEDIA_BUS_FMT_ */
43 	u32 sensitivity;		/* 16.16 fixed point */
44 };
45 
46 #define ET8EK8_REG_8BIT			1
47 #define ET8EK8_REG_16BIT		2
48 #define ET8EK8_REG_DELAY		100
49 #define ET8EK8_REG_TERM			0xff
50 struct et8ek8_reg {
51 	u16 type;
52 	u16 reg;			/* 16-bit offset */
53 	u32 val;			/* 8/16/32-bit value */
54 };
55 
56 /* Possible struct smia_reglist types. */
57 #define ET8EK8_REGLIST_STANDBY		0
58 #define ET8EK8_REGLIST_POWERON		1
59 #define ET8EK8_REGLIST_RESUME		2
60 #define ET8EK8_REGLIST_STREAMON		3
61 #define ET8EK8_REGLIST_STREAMOFF	4
62 #define ET8EK8_REGLIST_DISABLED		5
63 
64 #define ET8EK8_REGLIST_MODE		10
65 
66 #define ET8EK8_REGLIST_LSC_ENABLE	100
67 #define ET8EK8_REGLIST_LSC_DISABLE	101
68 #define ET8EK8_REGLIST_ANR_ENABLE	102
69 #define ET8EK8_REGLIST_ANR_DISABLE	103
70 
71 struct et8ek8_reglist {
72 	u32 type;
73 	struct et8ek8_mode mode;
74 	struct et8ek8_reg regs[];
75 };
76 
77 #define ET8EK8_MAX_LEN			32
78 struct et8ek8_meta_reglist {
79 	char version[ET8EK8_MAX_LEN];
80 	union {
81 		struct et8ek8_reglist *ptr;
82 	} reglist[];
83 };
84 
85 extern struct et8ek8_meta_reglist meta_reglist;
86 
87 #endif /* ET8EK8REGS */
88