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 */ |
89 | |