media: video: tegra: sh532u focuser driver
[linux-3.10.git] / include / media / nvc.h
1 /* Copyright (C) 2011 NVIDIA Corporation.
2  *
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 as
5  * published by the Free Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
15  * 02111-1307, USA
16  */
17
18 #ifndef __NVC_H__
19 #define __NVC_H__
20
21 #include <linux/ioctl.h>
22
23 struct nvc_param {
24         int param;
25         __u32 sizeofvalue;
26         void *p_value;
27 } __packed;
28
29 #define NVC_PARAM_EXPOSURE              0
30 #define NVC_PARAM_GAIN                  1
31 #define NVC_PARAM_FRAMERATE             2
32 #define NVC_PARAM_MAX_FRAMERATE         3
33 #define NVC_PARAM_INPUT_CLOCK           4
34 #define NVC_PARAM_LOCUS                 5
35 #define NVC_PARAM_FLASH_CAPS            6
36 #define NVC_PARAM_FLASH_LEVEL           7
37 #define NVC_PARAM_FLASH_PIN_STATE       8
38 #define NVC_PARAM_TORCH_CAPS            9
39 #define NVC_PARAM_TORCH_LEVEL           10
40 #define NVC_PARAM_FOCAL_LEN             11
41 #define NVC_PARAM_MAX_APERTURE          12
42 #define NVC_PARAM_FNUMBER               13
43 #define NVC_PARAM_EXPOSURE_LIMITS       14
44 #define NVC_PARAM_GAIN_LIMITS           15
45 #define NVC_PARAM_FRAMERATE_LIMITS      16
46 #define NVC_PARAM_FRAME_RATES           17
47 #define NVC_PARAM_EXP_LATCH_TIME        19
48 #define NVC_PARAM_REGION_USED           20
49 #define NVC_PARAM_SELF_TEST             23
50 #define NVC_PARAM_STS                   24
51 #define NVC_PARAM_TESTMODE              25
52 #define NVC_PARAM_EXPECTED_VALUES       26
53 #define NVC_PARAM_RESET                 27
54 #define NVC_PARAM_OPTIMIZE_RES          28
55 #define NVC_PARAM_LINES_PER_SEC         30
56 #define NVC_PARAM_CAPS                  31
57 #define NVC_PARAM_STEREO_CAP            33
58 #define NVC_PARAM_FOCUS_STEREO          34
59 #define NVC_PARAM_STEREO                35
60 #define NVC_PARAM_INHERENT_GAIN         36
61 #define NVC_PARAM_VIEW_ANGLE_H          37
62 #define NVC_PARAM_VIEW_ANGLE_V          38
63 #define NVC_PARAM_DEV_ID                46
64 #define NVC_PARAM_TEST_PATTERN          0x10000002
65 #define NVC_PARAM_SENSOR_TYPE           0x10000006
66 #define NVC_PARAM_I2C                   1001
67
68 /* sync off */
69 #define NVC_SYNC_OFF                    0
70 /* use only this device (the one receiving the call) */
71 #define NVC_SYNC_MASTER                 1
72 /* use only the synced device (the "other" device) */
73 #define NVC_SYNC_SLAVE                  2
74 /* use both synced devices at the same time */
75 #define NVC_SYNC_STEREO                 3
76
77 #define NVC_RESET_HARD                  0
78 #define NVC_RESET_SOFT                  1
79
80 #define NVC_IOCTL_PWR_WR                _IOW('o', 102, int)
81 #define NVC_IOCTL_PWR_RD                _IOW('o', 103, int)
82 #define NVC_IOCTL_PARAM_WR              _IOW('o', 104, struct nvc_param)
83 #define NVC_IOCTL_PARAM_RD              _IOWR('o', 105, struct nvc_param)
84
85
86 #ifdef __KERNEL__
87
88 #include <linux/regulator/consumer.h>
89
90 /* The NVC_CFG_ defines are for the .cfg entry in the
91  * platform data structure.
92  */
93 /* Device not registered if not found */
94 #define NVC_CFG_NODEV                   (1 << 0)
95 /* Don't return errors */
96 #define NVC_CFG_NOERR                   (1 << 1)
97 /* Always go to _PWR_STDBY instead of _PWR_OFF */
98 #define NVC_CFG_OFF2STDBY               (1 << 2)
99 /* Init device at sys boot */
100 #define NVC_CFG_BOOT_INIT               (1 << 3)
101 /* Sync mode uses an I2C MUX to send at same time */
102 #define NVC_CFG_SYNC_I2C_MUX            (1 << 4)
103
104 /* Expected higher level power calls are:
105  * 1 = OFF
106  * 2 = STANDBY
107  * 3 = ON
108  * These will be multiplied by 2 before given to the driver's PM code that
109  * uses the _PWR_ defines. This allows us to insert defines to give more power
110  * granularity and still remain linear with regards to the power usage and
111  * full power state transition latency for easy implementation of PM
112  * algorithms.
113  * The PM actions:
114  * _PWR_ERR = Non-valid state.
115  * _PWR_OFF_DELAYED = _PWR_OFF is called after a period of time.
116  * _PWR_OFF = Device, regulators, clocks, etc is turned off.  The longest
117  *            transition time to _PWR_ON is from this state.
118  * _PWR_STDBY_OFF = Device is useless but powered.  No communication possible.
119  *                  Device does not retain programming.  Main purpose is for
120  *                  faster return to _PWR_ON without regulator delays.
121  * _PWR_STDBY = Device is in standby.  Device retains programming.
122  * _PWR_COMM = Device is powered enough to communicate with the device.
123  * _PWR_ON = Device is at full power with active output.
124  *
125  * The kernel drivers treat these calls as guaranteed level of service.
126  */
127
128 #define NVC_PWR_ERR                     0
129 #define NVC_PWR_OFF_DELAYED             1 /* obsolete - never used */
130 #define NVC_PWR_OFF_FORCE               1
131 #define NVC_PWR_OFF                     2
132 #define NVC_PWR_STDBY_OFF               3
133 #define NVC_PWR_STDBY                   4
134 #define NVC_PWR_COMM                    5
135 #define NVC_PWR_ON                      6
136
137 struct nvc_regulator {
138         bool vreg_flag;
139         struct regulator *vreg;
140         const char *vreg_name;
141 };
142
143 #endif /* __KERNEL__ */
144
145 #endif /* __NVC_H__ */
146