media: video: tegra: ar0832: Make focuser range, slew rate tunable
[linux-3.10.git] / include / media / ar0832_main.h
1 /*
2 * ar0832_main.h
3 *
4 * Copyright (c) 2011, NVIDIA, All Rights Reserved.
5 *
6 * This file is licensed under the terms of the GNU General Public License
7 * version 2. This program is licensed "as is" without any warranty of any
8 * kind, whether express or implied.
9 */
10
11 #ifndef __AR0832_MAIN_H__
12 #define __AR0832_MAIN_H__
13
14 #include <linux/ioctl.h> /* For IOCTL macros */
15 #include <media/nvc_focus.h>
16
17 #define AR0832_IOCTL_SET_MODE                   _IOW('o', 0x01, struct ar0832_mode)
18 #define AR0832_IOCTL_SET_FRAME_LENGTH           _IOW('o', 0x02, __u32)
19 #define AR0832_IOCTL_SET_COARSE_TIME            _IOW('o', 0x03, __u32)
20 #define AR0832_IOCTL_SET_GAIN                   _IOW('o', 0x04, __u16)
21 #define AR0832_IOCTL_GET_STATUS                 _IOR('o', 0x05, __u8)
22 #define AR0832_IOCTL_GET_OTP                    _IOR('o', 0x06, struct ar0832_otp_data)
23 #define AR0832_IOCTL_TEST_PATTERN               _IOW('o', 0x07, enum ar0832_test_pattern)
24 #define AR0832_IOCTL_SET_POWER_ON               _IOW('o', 0x08, struct ar0832_mode)
25 #define AR0832_IOCTL_SET_SENSOR_REGION          _IOW('o', 0x09, struct ar0832_stereo_region)
26
27 #define AR0832_FOCUSER_IOCTL_GET_CONFIG         _IOR('o', 0x10, struct nv_focuser_config)
28 #define AR0832_FOCUSER_IOCTL_SET_POSITION       _IOW('o', 0x11, __u32)
29
30 #define AR0832_IOCTL_GET_SENSOR_ID              _IOR('o', 0x12, __u16)
31 #define AR0832_FOCUSER_IOCTL_SET_CONFIG         _IOW('o', 0x13, struct nv_focuser_config)
32
33 #define AR0832_SENSOR_ID_8141                   0x1006
34 #define AR0832_SENSOR_ID_8140                   0x3006
35
36 enum ar0832_test_pattern {
37         TEST_PATTERN_NONE,
38         TEST_PATTERN_COLORBARS,
39         TEST_PATTERN_CHECKERBOARD
40 };
41
42 struct ar0832_otp_data {
43         /* Only the first 5 bytes are actually used. */
44         __u8 sensor_serial_num[6];
45         __u8 part_num[8];
46         __u8 lens_id[1];
47         __u8 manufacture_id[2];
48         __u8 factory_id[2];
49         __u8 manufacture_date[9];
50         __u8 manufacture_line[2];
51
52         __u32 module_serial_num;
53         __u8 focuser_liftoff[2];
54         __u8 focuser_macro[2];
55         __u8 reserved1[12];
56         __u8 shutter_cal[16];
57         __u8 reserved2[183];
58
59         /* Big-endian. CRC16 over 0x00-0x41 (inclusive) */
60         __u16 crc;
61         __u8 reserved3[3];
62         __u8 auto_load[2];
63 } __attribute__ ((packed));
64
65 struct ar0832_mode {
66         int xres;
67         int yres;
68         __u32 frame_length;
69         __u32 coarse_time;
70         __u16 gain;
71         int stereo;
72 };
73
74 struct ar0832_point{
75         int x;
76         int y;
77 };
78
79 struct ar0832_reg {
80         __u16 addr;
81         __u16 val;
82 };
83
84 struct ar0832_stereo_region {
85         int camera_index;
86         struct ar0832_point image_start;
87         struct ar0832_point image_end;
88 };
89
90
91 #ifdef __KERNEL__
92 struct ar0832_platform_data {
93         int (*power_on)(int is_stereo);
94         int (*power_off)(int is_stereo);
95         char *id;
96 };
97 #endif /* __KERNEL__ */
98
99 #endif