1 #ifdef CONFIG_VIDEO_RK29
2 #include <plat/rk_camera.h>
5 Simple camera device registration:
7 new_camera_device(sensor_name,\ // sensor name, it is equal to CONFIG_SENSOR_X
8 face,\ // sensor face information, it can be back or front
9 pwdn_io,\ // power down gpio configuration, it is equal to CONFIG_SENSOR_POWERDN_PIN_XX
10 flash_attach,\ // sensor is attach flash or not
11 mir,\ // sensor image mirror and flip control information
12 i2c_chl,\ // i2c channel which the sensor attached in hardware, it is equal to CONFIG_SENSOR_IIC_ADAPTER_ID_X
13 cif_chl) \ // cif channel which the sensor attached in hardware, it is equal to CONFIG_SENSOR_CIF_INDEX_X
15 Comprehensive camera device registration:
17 new_camera_device_ex(sensor_name,\
19 ori,\ // sensor orientation, it is equal to CONFIG_SENSOR_ORIENTATION_X
20 pwr_io,\ // sensor power gpio configuration, it is equal to CONFIG_SENSOR_POWER_PIN_XX
21 pwr_active,\ // sensor power active level, is equal to CONFIG_SENSOR_RESETACTIVE_LEVEL_X
22 rst_io,\ // sensor reset gpio configuration, it is equal to CONFIG_SENSOR_RESET_PIN_XX
23 rst_active,\ // sensor reset active level, is equal to CONFIG_SENSOR_RESETACTIVE_LEVEL_X
25 pwdn_active,\ // sensor power down active level, is equal to CONFIG_SENSOR_POWERDNACTIVE_LEVEL_X
27 res,\ // sensor resolution, this is real resolution or resoltuion after interpolate
30 i2c_spd,\ // i2c speed , 100000 = 100KHz
31 i2c_addr,\ // the i2c slave device address for sensor
33 mclk)\ // sensor input clock rate, 24 or 48
36 static struct rkcamera_platform_data new_camera[] = {
38 new_camera_device(RK29_CAM_SENSOR_NT99340,
45 new_camera_device(RK29_CAM_SENSOR_NT99252,
55 #endif //#ifdef CONFIG_VIDEO_RK29
56 /*---------------- Camera Sensor Configuration Macro End------------------------*/
57 #include "../../../drivers/media/video/rk30_camera.c"
58 /*---------------- Camera Sensor Macro Define End ---------*/
60 #define PMEM_CAM_SIZE PMEM_CAM_NECESSARY
61 /*****************************************************************************************
63 * author: ddl@rock-chips.com
64 *****************************************************************************************/
65 #ifdef CONFIG_VIDEO_RK29
66 #define CONFIG_SENSOR_POWER_IOCTL_USR 1 //define this refer to your board layout
67 #define CONFIG_SENSOR_RESET_IOCTL_USR 0
68 #define CONFIG_SENSOR_POWERDOWN_IOCTL_USR 0
69 #define CONFIG_SENSOR_FLASH_IOCTL_USR 0
71 static void rk_cif_power(struct rk29camera_gpio_res *res,int on)
73 struct regulator *ldo_18,*ldo_28;
74 int camera_power = res->gpio_power;
75 int camera_ioflag = res->gpio_flag;
76 int camera_io_init = res->gpio_init;
78 ldo_28 = regulator_get(NULL, "ricoh_ldo4"); // vcc28_cif
79 ldo_18 = regulator_get(NULL, "ricoh_ldo5"); // vcc18_cif
80 if (ldo_28 == NULL || IS_ERR(ldo_28) || ldo_18 == NULL || IS_ERR(ldo_18)){
81 printk("get cif ldo failed!\n");
85 while(regulator_is_enabled(ldo_28)>0)
86 regulator_disable(ldo_28);
87 regulator_put(ldo_28);
88 while(regulator_is_enabled(ldo_18)>0)
89 regulator_disable(ldo_18);
90 regulator_put(ldo_18);
92 if (camera_power != INVALID_GPIO) {
93 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
94 gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
95 // dprintk("%s..%s..PowerPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
100 regulator_set_voltage(ldo_28, 2800000, 2800000);
101 regulator_enable(ldo_28);
102 printk("%s set vcc28_cif=%dmV end\n", __func__, regulator_get_voltage(ldo_28));
103 regulator_put(ldo_28);
105 regulator_set_voltage(ldo_18, 1800000, 1800000);
106 // regulator_set_suspend_voltage(ldo, 1800000);
107 regulator_enable(ldo_18);
108 printk("%s set vcc18_cif=%dmV end\n", __func__, regulator_get_voltage(ldo_18));
109 regulator_put(ldo_18);
110 if (camera_power != INVALID_GPIO) {
111 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
112 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
113 //dprintk("%s..%s..PowerPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
121 #if CONFIG_SENSOR_POWER_IOCTL_USR
122 static int sensor_power_usr_cb (struct rk29camera_gpio_res *res,int on)
124 //#error "CONFIG_SENSOR_POWER_IOCTL_USR is 1, sensor_power_usr_cb function must be writed!!";
125 rk_cif_power(res,on);
130 #if CONFIG_SENSOR_FLASH_IOCTL_USR
131 static int sensor_flash_usr_cb (struct rk29camera_gpio_res *res,int on)
133 #error "CONFIG_SENSOR_FLASH_IOCTL_USR is 1, sensor_flash_usr_cb function must be writed!!";
137 static struct rk29camera_platform_ioctl_cb sensor_ioctl_cb = {
138 #if CONFIG_SENSOR_POWER_IOCTL_USR
139 .sensor_power_cb = sensor_power_usr_cb,
141 .sensor_power_cb = NULL,
144 #if CONFIG_SENSOR_RESET_IOCTL_USR
145 .sensor_reset_cb = sensor_reset_usr_cb,
147 .sensor_reset_cb = NULL,
150 #if CONFIG_SENSOR_POWERDOWN_IOCTL_USR
151 .sensor_powerdown_cb = sensor_powerdown_usr_cb,
153 .sensor_powerdown_cb = NULL,
156 #if CONFIG_SENSOR_FLASH_IOCTL_USR
157 .sensor_flash_cb = sensor_flash_usr_cb,
159 .sensor_flash_cb = NULL,
164 static rk_sensor_user_init_data_s rk_init_data_sensor[RK_CAM_NUM] =
166 #if CONFIG_SENSOR_IIC_ADDR_0
168 .rk_sensor_init_width = INVALID_VALUE,
169 .rk_sensor_init_height = INVALID_VALUE,
170 .rk_sensor_init_bus_param = INVALID_VALUE,
171 .rk_sensor_init_pixelcode = INVALID_VALUE,
172 .rk_sensor_init_data = rk_init_data_sensor_reg_0,
173 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_0,
174 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_0) / sizeof(struct reginfo_t),
175 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_0) / sizeof(struct reginfo_t),
179 .rk_sensor_init_width = INVALID_VALUE,
180 .rk_sensor_init_height = INVALID_VALUE,
181 .rk_sensor_init_bus_param = INVALID_VALUE,
182 .rk_sensor_init_pixelcode = INVALID_VALUE,
183 .rk_sensor_init_data = NULL,
184 .rk_sensor_init_winseq = NULL,
185 .rk_sensor_winseq_size = 0,
186 .rk_sensor_init_data_size = 0,
189 #if CONFIG_SENSOR_IIC_ADDR_1
191 .rk_sensor_init_width = INVALID_VALUE,
192 .rk_sensor_init_height = INVALID_VALUE,
193 .rk_sensor_init_bus_param = INVALID_VALUE,
194 .rk_sensor_init_pixelcode = INVALID_VALUE,
195 .rk_sensor_init_data = rk_init_data_sensor_reg_1,
196 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_1,
197 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
198 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_1) / sizeof(struct reginfo_t),
202 .rk_sensor_init_width = INVALID_VALUE,
203 .rk_sensor_init_height = INVALID_VALUE,
204 .rk_sensor_init_bus_param = INVALID_VALUE,
205 .rk_sensor_init_pixelcode = INVALID_VALUE,
206 .rk_sensor_init_data = NULL,
207 .rk_sensor_init_winseq = NULL,
208 .rk_sensor_winseq_size = 0,
209 .rk_sensor_init_data_size = 0,
212 #if CONFIG_SENSOR_IIC_ADDR_01
214 .rk_sensor_init_width = INVALID_VALUE,
215 .rk_sensor_init_height = INVALID_VALUE,
216 .rk_sensor_init_bus_param = INVALID_VALUE,
217 .rk_sensor_init_pixelcode = INVALID_VALUE,
218 .rk_sensor_init_data = rk_init_data_sensor_reg_01,
219 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_01,
220 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_01) / sizeof(struct reginfo_t),
221 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_01) / sizeof(struct reginfo_t),
225 .rk_sensor_init_width = INVALID_VALUE,
226 .rk_sensor_init_height = INVALID_VALUE,
227 .rk_sensor_init_bus_param = INVALID_VALUE,
228 .rk_sensor_init_pixelcode = INVALID_VALUE,
229 .rk_sensor_init_data = NULL,
230 .rk_sensor_init_winseq = NULL,
231 .rk_sensor_winseq_size = 0,
232 .rk_sensor_init_data_size = 0,
235 #if CONFIG_SENSOR_IIC_ADDR_02
237 .rk_sensor_init_width = INVALID_VALUE,
238 .rk_sensor_init_height = INVALID_VALUE,
239 .rk_sensor_init_bus_param = INVALID_VALUE,
240 .rk_sensor_init_pixelcode = INVALID_VALUE,
241 .rk_sensor_init_data = rk_init_data_sensor_reg_02,
242 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_02,
243 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_02) / sizeof(struct reginfo_t),
244 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_02) / sizeof(struct reginfo_t),
248 .rk_sensor_init_width = INVALID_VALUE,
249 .rk_sensor_init_height = INVALID_VALUE,
250 .rk_sensor_init_bus_param = INVALID_VALUE,
251 .rk_sensor_init_pixelcode = INVALID_VALUE,
252 .rk_sensor_init_data = NULL,
253 .rk_sensor_init_winseq = NULL,
254 .rk_sensor_winseq_size = 0,
255 .rk_sensor_init_data_size = 0,
258 #if CONFIG_SENSOR_IIC_ADDR_11
260 .rk_sensor_init_width = INVALID_VALUE,
261 .rk_sensor_init_height = INVALID_VALUE,
262 .rk_sensor_init_bus_param = INVALID_VALUE,
263 .rk_sensor_init_pixelcode = INVALID_VALUE,
264 .rk_sensor_init_data = rk_init_data_sensor_reg_11,
265 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_11,
266 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_11) / sizeof(struct reginfo_t),
267 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_11) / sizeof(struct reginfo_t),
271 .rk_sensor_init_width = INVALID_VALUE,
272 .rk_sensor_init_height = INVALID_VALUE,
273 .rk_sensor_init_bus_param = INVALID_VALUE,
274 .rk_sensor_init_pixelcode = INVALID_VALUE,
275 .rk_sensor_init_data = NULL,
276 .rk_sensor_init_winseq = NULL,
277 .rk_sensor_winseq_size = 0,
278 .rk_sensor_init_data_size = 0,
281 #if CONFIG_SENSOR_IIC_ADDR_12
283 .rk_sensor_init_width = INVALID_VALUE,
284 .rk_sensor_init_height = INVALID_VALUE,
285 .rk_sensor_init_bus_param = INVALID_VALUE,
286 .rk_sensor_init_pixelcode = INVALID_VALUE,
287 .rk_sensor_init_data = rk_init_data_sensor_reg_12,
288 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_12,
289 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_12) / sizeof(struct reginfo_t),
290 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_12) / sizeof(struct reginfo_t),
294 .rk_sensor_init_width = INVALID_VALUE,
295 .rk_sensor_init_height = INVALID_VALUE,
296 .rk_sensor_init_bus_param = INVALID_VALUE,
297 .rk_sensor_init_pixelcode = INVALID_VALUE,
298 .rk_sensor_init_data = NULL,
299 .rk_sensor_init_winseq = NULL,
300 .rk_sensor_winseq_size = 0,
301 .rk_sensor_init_data_size = 0,
306 #include "../../../drivers/media/video/rk30_camera.c"
308 #endif /* CONFIG_VIDEO_RK29 */