19ca16b0692d29948c86077d79ed31284ea6fc8d
[firefly-linux-kernel-4.4.55.git] / arch / arm / plat-rk / include / plat / rk_camera.h
1 /*
2     camera.h - PXA camera driver header file
3
4     Copyright (C) 2003, Intel Corporation
5     Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
6
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.
16
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22 #ifndef __ASM_ARCH_CAMERA_RK_H_
23 #define __ASM_ARCH_CAMERA_RK_H_
24
25 #include <linux/videodev2.h>
26 #include <media/soc_camera.h>
27
28
29 #define RK29_CAM_PLATFORM_DEV_ID 33
30 #define RK_CAM_PLATFORM_DEV_ID_0 RK29_CAM_PLATFORM_DEV_ID
31 #define RK_CAM_PLATFORM_DEV_ID_1 (RK_CAM_PLATFORM_DEV_ID_0+1)
32 #define INVALID_GPIO -1
33 #define INVALID_VALUE -1
34 #define RK29_CAM_IO_SUCCESS 0
35 #define RK29_CAM_EIO_INVALID -1
36 #define RK29_CAM_EIO_REQUESTFAIL -2
37
38 #define RK_CAM_NUM 6
39 #define RK29_CAM_SUPPORT_NUMS  RK_CAM_NUM
40 #define RK_CAM_SUPPORT_RESOLUTION 0x500000
41 /*---------------- Camera Sensor Must Define Macro Begin  ------------------------*/
42 #define RK29_CAM_SENSOR_OV7675 ov7675
43 #define RK29_CAM_SENSOR_OV9650 ov9650
44 #define RK29_CAM_SENSOR_OV2640 ov2640
45 #define RK29_CAM_SENSOR_OV2655 ov2655
46 #define RK29_CAM_SENSOR_OV2659 ov2659
47 #define RK29_CAM_SENSOR_OV7690 ov7690
48 #define RK29_CAM_SENSOR_OV3640 ov3640
49 #define RK29_CAM_SENSOR_OV3660 ov3660
50 #define RK29_CAM_SENSOR_OV5640 ov5640
51 #define RK29_CAM_SENSOR_OV5642 ov5642
52 #define RK29_CAM_SENSOR_S5K6AA s5k6aa
53 #define RK29_CAM_SENSOR_MT9D112 mt9d112
54 #define RK29_CAM_SENSOR_MT9D113 mt9d113
55 #define RK29_CAM_SENSOR_MT9P111 mt9p111
56 #define RK29_CAM_SENSOR_MT9T111 mt9t111
57 #define RK29_CAM_SENSOR_GT2005  gt2005
58 #define RK29_CAM_SENSOR_GC0307  gc0307
59 #define RK29_CAM_SENSOR_GC0308  gc0308
60 #define RK29_CAM_SENSOR_GC0309  gc0309
61 #define RK29_CAM_SENSOR_GC2015  gc2015
62 #define RK29_CAM_SENSOR_SIV120B  siv120b
63 #define RK29_CAM_SENSOR_SID130B  sid130B
64 #define RK29_CAM_SENSOR_HI253  hi253
65 #define RK29_CAM_SENSOR_HI704  hi704
66 #define RK29_CAM_SENSOR_NT99250 nt99250
67 #define RK29_CAM_SENSOR_SP0838  sp0838
68 #define RK29_CAM_SENSOR_GC0329  gc0329
69 #define RK29_CAM_SENSOR_S5K5CA  s5k5ca
70
71
72 #define RK29_CAM_SENSOR_NAME_OV7675 "ov7675"
73 #define RK29_CAM_SENSOR_NAME_OV9650 "ov9650"
74 #define RK29_CAM_SENSOR_NAME_OV2640 "ov2640"
75 #define RK29_CAM_SENSOR_NAME_OV2655 "ov2655"
76 #define RK29_CAM_SENSOR_NAME_OV2659 "ov2659"
77 #define RK29_CAM_SENSOR_NAME_OV7690 "ov7690"
78 #define RK29_CAM_SENSOR_NAME_OV3640 "ov3640"
79 #define RK29_CAM_SENSOR_NAME_OV3660 "ov3660"
80 #define RK29_CAM_SENSOR_NAME_OV5640 "ov5640"
81 #define RK29_CAM_SENSOR_NAME_OV5642 "ov5642"
82 #define RK29_CAM_SENSOR_NAME_S5K6AA "s5k6aa"
83 #define RK29_CAM_SENSOR_NAME_MT9D112 "mt9d112"
84 #define RK29_CAM_SENSOR_NAME_MT9D113 "mt9d113"
85 #define RK29_CAM_SENSOR_NAME_MT9P111 "mt9p111"
86 #define RK29_CAM_SENSOR_NAME_MT9T111 "mt9t111"
87 #define RK29_CAM_SENSOR_NAME_GT2005  "gt2005"
88 #define RK29_CAM_SENSOR_NAME_GC0307  "gc0307"
89 #define RK29_CAM_SENSOR_NAME_GC0308  "gc0308"
90 #define RK29_CAM_SENSOR_NAME_GC0309  "gc0309"
91 #define RK29_CAM_SENSOR_NAME_GC2015  "gc2015"
92 #define RK29_CAM_SENSOR_NAME_SIV120B "siv120b"
93 #define RK29_CAM_SENSOR_NAME_SID130B "sid130B"
94 #define RK29_CAM_SENSOR_NAME_HI253  "hi253"
95 #define RK29_CAM_SENSOR_NAME_HI704  "hi704"
96 #define RK29_CAM_SENSOR_NAME_NT99250 "nt99250"
97 #define RK29_CAM_SENSOR_NAME_SP0838  "sp0838"
98 #define RK29_CAM_SENSOR_NAME_GC0329  "gc0329"
99 #define RK29_CAM_SENSOR_NAME_S5K5CA  "s5k5ca"
100
101 #define ov7675_FULL_RESOLUTION     0x30000            // 0.3 megapixel
102 #define ov9650_FULL_RESOLUTION     0x130000           // 1.3 megapixel   
103 #define ov2640_FULL_RESOLUTION     0x200000           // 2 megapixel
104 #define ov2655_FULL_RESOLUTION     0x200000           // 2 megapixel
105 #define ov2659_FULL_RESOLUTION     0x200000           // 2 megapixel
106 #define ov7690_FULL_RESOLUTION     0x300000           // 2 megapixel
107 #define ov3640_FULL_RESOLUTION     0x300000           // 3 megapixel
108 #define ov3660_FULL_RESOLUTION     0x300000           // 3 megapixel
109 #define ov5640_FULL_RESOLUTION     0x500000           // 5 megapixel
110 #define ov5642_FULL_RESOLUTION     0x500000           // 5 megapixel
111 #define s5k6aa_FULL_RESOLUTION     0x130000           // 1.3 megapixel
112 #define mt9d112_FULL_RESOLUTION    0x200000           // 2 megapixel
113 #define mt9d113_FULL_RESOLUTION    0x200000           // 2 megapixel
114 #define mt9t111_FULL_RESOLUTION    0x300000           // 3 megapixel
115 #define mt9p111_FULL_RESOLUTION    0x500000           // 5 megapixel
116 #define gt2005_FULL_RESOLUTION     0x200000           // 2 megapixel
117 #define gc0308_FULL_RESOLUTION     0x30000            // 0.3 megapixel
118 #define gc0309_FULL_RESOLUTION     0x30000            // 0.3 megapixel
119 #define gc2015_FULL_RESOLUTION     0x200000           // 2 megapixel
120 #define siv120b_FULL_RESOLUTION     0x30000            // 0.3 megapixel
121 #define sid130B_FULL_RESOLUTION     0x200000           // 2 megapixel    
122 #define hi253_FULL_RESOLUTION       0x200000           // 2 megapixel
123 #define hi704_FULL_RESOLUTION       0x30000            // 0.3 megapixel
124 #define nt99250_FULL_RESOLUTION     0x200000           // 2 megapixel
125 #define sp0838_FULL_RESOLUTION      0x30000            // 0.3 megapixel
126 #define gc0329_FULL_RESOLUTION      0x30000            // 0.3 megapixel
127 #define s5k5ca_FULL_RESOLUTION      0x300000            // 3 megapixel
128 /*---------------- Camera Sensor Must Define Macro End  ------------------------*/
129
130
131 #define RK29_CAM_POWERACTIVE_BITPOS     0x00
132 #define RK29_CAM_POWERACTIVE_MASK       (1<<RK29_CAM_POWERACTIVE_BITPOS)
133 #define RK29_CAM_POWERACTIVE_H  (0x01<<RK29_CAM_POWERACTIVE_BITPOS)
134 #define RK29_CAM_POWERACTIVE_L  (0x00<<RK29_CAM_POWERACTIVE_BITPOS)
135
136 #define RK29_CAM_RESETACTIVE_BITPOS     0x01
137 #define RK29_CAM_RESETACTIVE_MASK       (1<<RK29_CAM_RESETACTIVE_BITPOS)
138 #define RK29_CAM_RESETACTIVE_H  (0x01<<RK29_CAM_RESETACTIVE_BITPOS)
139 #define RK29_CAM_RESETACTIVE_L  (0x00<<RK29_CAM_RESETACTIVE_BITPOS)
140
141 #define RK29_CAM_POWERDNACTIVE_BITPOS   0x02
142 #define RK29_CAM_POWERDNACTIVE_MASK     (1<<RK29_CAM_POWERDNACTIVE_BITPOS)
143 #define RK29_CAM_POWERDNACTIVE_H        (0x01<<RK29_CAM_POWERDNACTIVE_BITPOS)
144 #define RK29_CAM_POWERDNACTIVE_L        (0x00<<RK29_CAM_POWERDNACTIVE_BITPOS)
145
146 #define RK29_CAM_FLASHACTIVE_BITPOS     0x03
147 #define RK29_CAM_FLASHACTIVE_MASK       (1<<RK29_CAM_FLASHACTIVE_BITPOS)
148 #define RK29_CAM_FLASHACTIVE_H  (0x01<<RK29_CAM_FLASHACTIVE_BITPOS)
149 #define RK29_CAM_FLASHACTIVE_L  (0x00<<RK29_CAM_FLASHACTIVE_BITPOS)
150
151 /* v4l2_subdev_core_ops.ioctl  ioctl_cmd macro */
152 #define RK29_CAM_SUBDEV_ACTIVATE            0x00
153 #define RK29_CAM_SUBDEV_DEACTIVATE          0x01
154 #define RK29_CAM_SUBDEV_IOREQUEST                       0x02
155 #define RK29_CAM_SUBDEV_CB_REGISTER         0x03
156
157 enum rk29camera_ioctrl_cmd
158 {
159         Cam_Power,
160         Cam_Reset,
161         Cam_PowerDown,
162         Cam_Flash
163 };
164
165 enum rk29sensor_power_cmd
166 {
167         Sensor_Reset,
168         Sensor_PowerDown,
169         Sensor_Flash
170 };
171
172 enum rk29camera_flash_cmd
173 {
174     Flash_Off,
175     Flash_On,
176     Flash_Torch
177 };
178
179 struct rk29camera_gpio_res {
180     unsigned int gpio_reset;
181     unsigned int gpio_power;
182         unsigned int gpio_powerdown;
183         unsigned int gpio_flash;
184         unsigned int gpio_flag;
185         unsigned int gpio_init;
186         const char *dev_name;
187 };
188
189 struct rk29camera_mem_res {
190         const char *name;
191         unsigned int start;
192         unsigned int size;
193 };
194 struct rk29camera_info {
195     const char *dev_name;
196     unsigned int orientation;
197     struct v4l2_frmivalenum fival[10];
198 };
199
200 struct reginfo_t
201 {
202         u16 reg;
203         u16 val;
204         u16 reg_len;
205         u16 rev;
206 };
207 typedef struct rk_sensor_user_init_data{
208         int rk_sensor_init_width;
209         int rk_sensor_init_height;
210         unsigned long rk_sensor_init_bus_param;
211         enum v4l2_mbus_pixelcode rk_sensor_init_pixelcode;
212         struct reginfo_t * rk_sensor_init_data;
213         int rk_sensor_winseq_size;
214         struct reginfo_t * rk_sensor_init_winseq;
215         int rk_sensor_init_data_size;
216 }rk_sensor_user_init_data_s;
217
218 typedef struct rk_camera_device_register_info {
219     struct i2c_board_info i2c_cam_info;
220     struct soc_camera_link link_info;
221     struct platform_device device_info;
222 }rk_camera_device_register_info_t;
223
224 struct rk29camera_platform_data {
225     int (*io_init)(void);
226     int (*io_deinit)(int sensor);
227     int (*iomux)(int pin);
228         int (*sensor_ioctrl)(struct device *dev,enum rk29camera_ioctrl_cmd cmd,int on);
229         rk_sensor_user_init_data_s* sensor_init_data[RK_CAM_NUM];
230         struct rk29camera_gpio_res gpio_res[RK_CAM_NUM];
231         struct rk29camera_mem_res meminfo;
232         struct rk29camera_mem_res meminfo_cif1;
233         struct rk29camera_info info[RK_CAM_NUM];
234     rk_camera_device_register_info_t register_dev[RK_CAM_NUM];
235 };
236
237 struct rk29camera_platform_ioctl_cb {
238     int (*sensor_power_cb)(struct rk29camera_gpio_res *res, int on);
239     int (*sensor_reset_cb)(struct rk29camera_gpio_res *res, int on);
240     int (*sensor_powerdown_cb)(struct rk29camera_gpio_res *res, int on);
241     int (*sensor_flash_cb)(struct rk29camera_gpio_res *res, int on);    
242 };
243
244 typedef struct rk29_camera_sensor_cb {
245     int (*sensor_cb)(void *arg); 
246 }rk29_camera_sensor_cb_s;
247 #endif /* __ASM_ARCH_CAMERA_H_ */
248