1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
|
/* Copyright (c) 2012-2019, NVIDIA CORPORATION. All rights reserved.
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __UAPI_NVC_H__
#define __UAPI_NVC_H__
#include <linux/ioctl.h>
#include <linux/types.h>
#define NVC_INT2FLOAT_DIVISOR_1K 1000
#define NVC_INT2FLOAT_DIVISOR_1M 1000000
#define NVC_INT2FLOAT_DIVISOR 1000
struct nvc_param_32 {
__u32 param;
__u32 sizeofvalue;
__u32 variant;
__u32 p_value;
} __packed;
struct nvc_param {
__u32 param;
__u32 sizeofvalue;
__u32 variant;
unsigned long p_value;
} __packed;
enum nvc_params {
NVC_PARAM_EXPOSURE = 0,
NVC_PARAM_GAIN,
NVC_PARAM_FRAMERATE,
NVC_PARAM_MAX_FRAMERATE,
NVC_PARAM_INPUT_CLOCK,
NVC_PARAM_LOCUS,
NVC_PARAM_FLASH_CAPS,
NVC_PARAM_FLASH_LEVEL,
NVC_PARAM_FLASH_PIN_STATE,
NVC_PARAM_TORCH_CAPS,
NVC_PARAM_TORCH_LEVEL,
NVC_PARAM_FOCAL_LEN,
NVC_PARAM_MAX_APERTURE,
NVC_PARAM_FNUMBER,
NVC_PARAM_EXPOSURE_LIMITS,
NVC_PARAM_GAIN_LIMITS,
NVC_PARAM_FRAMERATE_LIMITS,
NVC_PARAM_FRAME_RATES,
NVC_PARAM_CLOCK_LIMITS,
NVC_PARAM_EXP_LATCH_TIME,
NVC_PARAM_REGION_USED,
NVC_PARAM_CALIBRATION_DATA,
NVC_PARAM_CALIBRATION_OVERRIDES,
NVC_PARAM_SELF_TEST,
NVC_PARAM_STS,
NVC_PARAM_TESTMODE,
NVC_PARAM_EXPECTED_VALUES,
NVC_PARAM_RESET,
NVC_PARAM_OPTIMIZE_RES,
NVC_PARAM_DETECT_COLOR_TEMP,
NVC_PARAM_LINES_PER_SEC,
NVC_PARAM_CAPS,
NVC_PARAM_CUSTOM_BLOCK_INFO,
NVC_PARAM_STEREO_CAP,
NVC_PARAM_FOCUS_STEREO,
NVC_PARAM_STEREO,
NVC_PARAM_INHERENT_GAIN,
NVC_PARAM_VIEW_ANGLE_H,
NVC_PARAM_VIEW_ANGLE_V,
NVC_PARAM_ISP_SETTING,
NVC_PARAM_OPERATION_MODE,
NVC_PARAM_SUPPORT_ISP,
NVC_PARAM_AWB_LOCK,
NVC_PARAM_AE_LOCK,
NVC_PARAM_RES_CHANGE_WAIT_TIME,
NVC_PARAM_FACTORY_CALIBRATION_DATA,
NVC_PARAM_DEV_ID,
NVC_PARAM_GROUP_HOLD,
NVC_PARAM_SET_SENSOR_FLASH_MODE,
NVC_PARAM_TORCH_QUERY,
NVC_PARAM_FLASH_EXT_CAPS,
NVC_PARAM_TORCH_EXT_CAPS,
NVC_PARAM_BEGIN_VENDOR_EXTENSIONS = 0x10000000,
NVC_PARAM_CALIBRATION_STATUS,
NVC_PARAM_TEST_PATTERN,
NVC_PARAM_MODULE_INFO,
NVC_PARAM_FLASH_MAX_POWER,
NVC_PARAM_DIRECTION,
NVC_PARAM_SENSOR_TYPE,
NVC_PARAM_DLI_CHECK,
NVC_PARAM_PARALLEL_DLI_CHECK,
NVC_PARAM_BRACKET_CAPS,
NVC_PARAM_NUM,
NVC_PARAM_I2C,
NVC_PARAM_FEATURES,
NVC_PARAM_FORCE32 = 0x7FFFFFFF
};
/* sync off */
#define NVC_SYNC_OFF 0
/* use only this device (the one receiving the call) */
#define NVC_SYNC_MASTER 1
/* use only the synced device (the "other" device) */
#define NVC_SYNC_SLAVE 2
/* use both synced devices at the same time */
#define NVC_SYNC_STEREO 3
#define NVC_RESET_HARD 0
#define NVC_RESET_SOFT 1
struct nvc_param_isp {
int attr;
void *p_data;
__u32 data_size;
} __packed;
struct nvc_isp_focus_param {
__s32 min_pos;
__s32 max_pos;
__s32 hyperfocal;
__s32 macro;
__s32 powersave;
} __packed;
struct nvc_isp_focus_pos {
__u32 is_auto;
__s32 value;
} __packed;
struct nvc_isp_focus_region {
__u32 num_region;
__s32 value;
} __packed;
enum nvc_params_isp {
NVC_PARAM_ISP_FOCUS_CAF = 16389,
NVC_PARAM_ISP_FOCUS_CAF_PAUSE,
NVC_PARAM_ISP_FOCUS_CAF_STS,
NVC_PARAM_ISP_FOCUS_POS = 16407,
NVC_PARAM_ISP_FOCUS_RANGE,
NVC_PARAM_ISP_FOCUS_AF_RGN = 16413,
NVC_PARAM_ISP_FOCUS_AF_RGN_MASK,
NVC_PARAM_ISP_FOCUS_AF_RGN_STS,
NVC_PARAM_ISP_FOCUS_CTRL = 16424,
NVC_PARAM_ISP_FOCUS_TRGR,
NVC_PARAM_ISP_FOCUS_STS,
};
#define NVC_PARAM_ISP_FOCUS_STS_BUSY 0
#define NVC_PARAM_ISP_FOCUS_STS_LOCKD 1
#define NVC_PARAM_ISP_FOCUS_STS_FAILD 2
#define NVC_PARAM_ISP_FOCUS_STS_ERR 3
#define NVC_PARAM_ISP_FOCUS_CTRL_ON 0
#define NVC_PARAM_ISP_FOCUS_CTRL_OFF 1
#define NVC_PARAM_ISP_FOCUS_CTRL_AUTO 2
#define NVC_PARAM_ISP_FOCUS_CTRL_ALOCK 3
#define NVC_PARAM_ISP_FOCUS_CAF_CONVRG 1
#define NVC_PARAM_ISP_FOCUS_CAF_SEARCH 2
#define NVC_PARAM_ISP_FOCUS_POS_INF 0
#define NVC_IOCTL_PWR_WR _IOW('o', 102, int)
#define NVC_IOCTL_PWR_RD _IOW('o', 103, int)
#define NVC_IOCTL_PARAM_WR _IOW('o', 104, struct nvc_param)
#define NVC_IOCTL32_PARAM_WR _IOW('o', 104, struct nvc_param_32)
#define NVC_IOCTL_PARAM_RD _IOWR('o', 105, struct nvc_param)
#define NVC_IOCTL32_PARAM_RD _IOWR('o', 105, struct nvc_param_32)
#define NVC_IOCTL_PARAM_ISP_RD _IOWR('o', 200, struct nvc_param_isp)
#define NVC_IOCTL_PARAM_ISP_WR _IOWR('o', 201, struct nvc_param_isp)
#define NVC_IOCTL_FUSE_ID _IOWR('o', 202, struct nvc_fuseid)
#define NVC_IOCTL_SET_EEPROM_DATA _IOWR('o', 254, __u8 *)
#define NVC_IOCTL_GET_EEPROM_DATA _IOWR('o', 255, __u8 *)
/* Expected higher level power calls are:
* 1 = OFF
* 2 = STANDBY
* 3 = ON
* These will be multiplied by 2 before given to the driver's PM code that
* uses the _PWR_ defines. This allows us to insert defines to give more power
* granularity and still remain linear with regards to the power usage and
* full power state transition latency for easy implementation of PM
* algorithms.
* The PM actions:
* _PWR_ERR = Non-valid state.
* _PWR_OFF_FORCE = _PWR_OFF is forced regardless of standby mechanisms.
* _PWR_OFF = Device, regulators, clocks, etc is turned off. The longest
* transition time to _PWR_ON is from this state.
* _PWR_STDBY_OFF = Device is useless but powered. No communication possible.
* Device does not retain programming. Main purpose is for
* faster return to _PWR_ON without regulator delays.
* _PWR_STDBY = Device is in standby. Device retains programming.
* _PWR_COMM = Device is powered enough to communicate with the device.
* _PWR_ON = Device is at full power with active output.
*
* The kernel drivers treat these calls as Guaranteed Level Of Service.
*/
#define NVC_PWR_ERR 0
#define NVC_PWR_OFF_FORCE 1
#define NVC_PWR_OFF 2
#define NVC_PWR_STDBY_OFF 3
#define NVC_PWR_STDBY 4
#define NVC_PWR_COMM 5
#define NVC_PWR_ON 6
struct nvc_fuseid {
__u32 size;
__u8 data[16];
};
#endif /* __UAPI_NVC_H__ */
|