Linux-libre 5.4.48-gnu
[librecmc/linux-libre.git] / drivers / media / i2c / et8ek8 / et8ek8_reg.h
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         u32 ext_clock;                  /* in Hz */
41         struct v4l2_fract timeperframe;
42         u32 max_exp;                    /* Maximum exposure value */
43         u32 bus_format;                 /* MEDIA_BUS_FMT_ */
44         u32 sensitivity;                /* 16.16 fixed point */
45 };
46
47 #define ET8EK8_REG_8BIT                 1
48 #define ET8EK8_REG_16BIT                2
49 #define ET8EK8_REG_DELAY                100
50 #define ET8EK8_REG_TERM                 0xff
51 struct et8ek8_reg {
52         u16 type;
53         u16 reg;                        /* 16-bit offset */
54         u32 val;                        /* 8/16/32-bit value */
55 };
56
57 /* Possible struct smia_reglist types. */
58 #define ET8EK8_REGLIST_STANDBY          0
59 #define ET8EK8_REGLIST_POWERON          1
60 #define ET8EK8_REGLIST_RESUME           2
61 #define ET8EK8_REGLIST_STREAMON         3
62 #define ET8EK8_REGLIST_STREAMOFF        4
63 #define ET8EK8_REGLIST_DISABLED         5
64
65 #define ET8EK8_REGLIST_MODE             10
66
67 #define ET8EK8_REGLIST_LSC_ENABLE       100
68 #define ET8EK8_REGLIST_LSC_DISABLE      101
69 #define ET8EK8_REGLIST_ANR_ENABLE       102
70 #define ET8EK8_REGLIST_ANR_DISABLE      103
71
72 struct et8ek8_reglist {
73         u32 type;
74         struct et8ek8_mode mode;
75         struct et8ek8_reg regs[];
76 };
77
78 #define ET8EK8_MAX_LEN                  32
79 struct et8ek8_meta_reglist {
80         char version[ET8EK8_MAX_LEN];
81         union {
82                 struct et8ek8_reglist *ptr;
83         } reglist[];
84 };
85
86 extern struct et8ek8_meta_reglist meta_reglist;
87
88 #endif /* ET8EK8REGS */