2 #include "rk30_camera.h"
3 #include <linux/gpio.h>
4 #include <linux/delay.h>
5 #include <linux/version.h>
6 #include <linux/moduleparam.h>
7 #include <linux/of_gpio.h>
8 /**********yzm***********/
10 #include <linux/of_irq.h>
11 #include <linux/kernel.h>
12 #include <linux/of_address.h>
13 #include <linux/of_platform.h>
14 #include <linux/of_fdt.h>
15 #include <linux/module.h>
16 #include <linux/regulator/consumer.h>
17 /**********yzm***********/
19 //#define PMEM_CAM_NECESSARY 0x00000000 /*yzm*/
21 static int camio_version = KERNEL_VERSION(0,1,9);/*yzm camio_version*/
22 module_param(camio_version, int, S_IRUGO);
24 static int camera_debug = 0;/*yzm*/
25 module_param(camera_debug, int, S_IRUGO|S_IWUSR);
28 #define CAMMODULE_NAME "rk_cam_io"
30 #define ddprintk(level, fmt, arg...) do { \
31 if (camera_debug >= level) \
32 printk(KERN_WARNING"%s(%d):" fmt"\n", CAMMODULE_NAME,__LINE__,## arg); } while (0)
34 #define dprintk(format, ...) ddprintk(1, format, ## __VA_ARGS__)
35 #define eprintk(format, ...) printk(KERN_ERR "%s(%d):" format"\n",CAMMODULE_NAME,__LINE__,## __VA_ARGS__)
36 #define debug_printk(format, ...) ddprintk(3, format, ## __VA_ARGS__)
38 static int rk_sensor_io_init(void);
39 static int rk_sensor_io_deinit(int sensor);
40 static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on);
41 static int rk_sensor_power(struct device *dev, int on);
42 static int rk_sensor_register(void);
43 /*static int rk_sensor_reset(struct device *dev);*/
45 static int rk_dts_sensor_probe(struct platform_device *pdev);
46 static int rk_dts_sensor_remove(struct platform_device *pdev);
47 static int rk_dts_cif_probe(struct platform_device *pdev);
48 static int rk_dts_cif_remove(struct platform_device *pdev);
50 static int rk_sensor_powerdown(struct device *dev, int on);
52 static struct rkcamera_platform_data *new_camera_head;
54 static struct rk29camera_platform_data rk_camera_platform_data = {
55 .io_init = rk_sensor_io_init,
56 .io_deinit = rk_sensor_io_deinit,
57 .sensor_ioctrl = rk_sensor_ioctrl,
58 .sensor_register = rk_sensor_register,
62 struct rk29camera_platform_ioctl_cb sensor_ioctl_cb = {
63 .sensor_power_cb = NULL,
64 .sensor_reset_cb = NULL,
65 .sensor_powerdown_cb = NULL,
66 .sensor_flash_cb = NULL,
71 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
73 static struct resource rk_camera_resource_host_0[2] = {};
76 static struct resource rk_camera_resource_host_1[2] = {};
80 struct platform_device rk_device_camera_host_0 = {
81 .name = RK29_CAM_DRV_NAME,
82 .id = RK_CAM_PLATFORM_DEV_ID_0, /* This is used to put cameras on this interface*/
84 .resource = rk_camera_resource_host_0,/*yzm*/
86 .dma_mask = &rockchip_device_camera_dmamask,
87 .coherent_dma_mask = 0xffffffffUL,
88 .platform_data = &rk_camera_platform_data,
94 struct platform_device rk_device_camera_host_1 = {
95 .name = RK29_CAM_DRV_NAME,
96 .id = RK_CAM_PLATFORM_DEV_ID_1, /* This is used to put cameras on this interface */
97 .num_resources = ARRAY_SIZE(rk_camera_resource_host_1),
98 .resource = rk_camera_resource_host_1,/*yzm*/
100 .dma_mask = &rockchip_device_camera_dmamask,
101 .coherent_dma_mask = 0xffffffffUL,
102 .platform_data = &rk_camera_platform_data,
109 static const struct of_device_id of_match_cif[] = {
110 { .compatible = "rockchip,cif" },
114 MODULE_DEVICE_TABLE(of,of_match_cif);
115 static struct platform_driver rk_cif_driver =
119 .owner = THIS_MODULE,
120 .of_match_table = of_match_ptr(of_match_cif),
122 .probe = rk_dts_cif_probe,
123 .remove = rk_dts_cif_remove,
126 static const struct of_device_id of_match_sensor[] = {
127 { .compatible = "rockchip,sensor" },
129 MODULE_DEVICE_TABLE(of,of_match_sensor);
130 static struct platform_driver rk_sensor_driver =
133 .name = RK_SENSOR_NAME,
134 .owner = THIS_MODULE,
135 .of_match_table = of_match_ptr(of_match_sensor),
137 .probe = rk_dts_sensor_probe,
138 .remove = rk_dts_sensor_remove,
142 static int rk_dts_sensor_remove(struct platform_device *pdev)
146 static int rk_dts_sensor_probe(struct platform_device *pdev)
148 struct device_node *np, *cp;
149 int sensor_num = 0,err;
150 struct device *dev = &pdev->dev;
151 struct rkcamera_platform_data *new_camera_list;
153 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
158 for_each_child_of_node(np, cp) {
159 u32 flash_attach = 0,mir = 0,i2c_rata = 0,i2c_chl = 0,i2c_add = 0;
160 u32 cif_chl = 0, mclk_rate = 0, is_front = 0;
161 u32 resolution = 0, powerup_sequence = 0;
163 u32 powerdown = INVALID_GPIO,power = INVALID_GPIO,reset = INVALID_GPIO;
164 u32 af = INVALID_GPIO,flash = INVALID_GPIO;
166 int pwr_active = 0, rst_active = 0, pwdn_active = 0,flash_active = 0;
168 struct rkcamera_platform_data *new_camera;
170 char sensor_name[20] = {0};
173 strcpy(sensor_name,cp->name);
175 if(strstr(sensor_name,"_") != NULL){
176 name = strsep(&name,"_");
179 new_camera = kzalloc(sizeof(struct rkcamera_platform_data),GFP_KERNEL);
182 new_camera_head = new_camera;
183 rk_camera_platform_data.register_dev_new = new_camera_head;
184 new_camera_list = new_camera;
187 new_camera_list->next_camera = new_camera;
188 new_camera_list = new_camera;
190 if (of_property_read_u32(cp, "flash_attach", &flash_attach)) {
191 dprintk("%s:Get %s rockchip,flash_attach failed!\n",__func__, cp->name);
193 if (of_property_read_u32(cp, "mir", &mir)) {
194 dprintk("%s:Get %s rockchip,mir failed!\n",__func__, cp->name);
196 if (of_property_read_u32(cp, "i2c_rata", &i2c_rata)) {
197 dprintk("%s:Get %s rockchip,i2c_rata failed!\n",__func__, cp->name);
199 if (of_property_read_u32(cp, "i2c_chl", &i2c_chl)) {
200 dprintk("%s:Get %s rockchip,i2c_chl failed!\n",__func__, cp->name);
202 if (of_property_read_u32(cp, "cif_chl", &cif_chl)) {
203 dprintk("%s:Get %s rockchip,cif_chl failed!\n",__func__, cp->name);
205 if (of_property_read_u32(cp, "mclk_rate", &mclk_rate)) {
206 dprintk("%s:Get %s rockchip,mclk_rate failed!\n",__func__, cp->name);
208 if (of_property_read_u32(cp, "is_front", &is_front)) {
209 dprintk("%s:Get %s rockchip,is_front failed!\n",__func__, cp->name);
211 if (of_property_read_u32(cp, "rockchip,powerdown", &powerdown)) {
212 printk("%s:Get %s rockchip,powerdown failed!\n",__func__, cp->name);
214 if (of_property_read_u32(cp, "pwdn_active", &pwdn_active)) {
215 dprintk("%s:Get %s pwdn_active failed!\n",__func__, cp->name);
217 if (of_property_read_u32(cp, "rockchip,power", &power)) {
218 printk("%s:Get %s rockchip,power failed!\n",__func__, cp->name);
220 if (of_property_read_u32(cp, "pwr_active", &pwr_active)) {
221 dprintk("%s:Get %s pwr_active failed!\n",__func__, cp->name);
223 if (of_property_read_u32(cp, "rockchip,reset", &reset)) {
224 dprintk("%s:Get %s rockchip,reset failed!\n",__func__, cp->name);
226 if (of_property_read_u32(cp, "rst_active", &rst_active)) {
227 dprintk("%s:Get %s rst_active failed!\n",__func__, cp->name);
229 if (of_property_read_u32(cp, "rockchip,af", &af)) {
230 dprintk("%s:Get %s rockchip,af failed!\n",__func__, cp->name);
232 if (of_property_read_u32(cp, "rockchip,flash", &flash)) {
233 dprintk("%s:Get %s rockchip,flash failed!\n",__func__, cp->name);
235 if (of_property_read_u32(cp, "flash_active", &flash_active)) {
236 dprintk("%s:Get %s flash_active failed!\n",__func__, cp->name);
238 if (of_property_read_u32(cp, "i2c_add", &i2c_add)) {
239 printk("%s:Get %s rockchip,i2c_add failed!\n",__func__, cp->name);
241 if (of_property_read_u32(cp, "resolution", &resolution)) {
242 printk("%s:Get %s rockchip,resolution failed!\n",__func__, cp->name);
244 if (of_property_read_u32(cp, "powerup_sequence", &powerup_sequence)) {
245 printk("%s:Get %s rockchip,powerup_sequence failed!\n",__func__, cp->name);
247 if (of_property_read_u32(cp, "orientation", &orientation)) {
248 printk("%s:Get %s rockchip,orientation failed!\n",__func__, cp->name);
251 strcpy(new_camera->dev.i2c_cam_info.type, name);
252 new_camera->dev.i2c_cam_info.addr = i2c_add>>1;
253 new_camera->dev.desc_info.host_desc.bus_id = RK29_CAM_PLATFORM_DEV_ID+cif_chl;/*yzm*/
254 new_camera->dev.desc_info.host_desc.i2c_adapter_id = i2c_chl;/*yzm*/
255 new_camera->dev.desc_info.host_desc.module_name = name;/*const*/
256 new_camera->dev.device_info.name = "soc-camera-pdrv";
258 sprintf(new_camera->dev_name,"%s_%s",name,"front");
260 sprintf(new_camera->dev_name,"%s_%s",name,"back");
261 new_camera->dev.device_info.dev.init_name =(const char*)&new_camera->dev_name[0];
262 new_camera->io.gpio_reset = reset;
263 new_camera->io.gpio_powerdown = powerdown;
264 new_camera->io.gpio_power = power;
265 new_camera->io.gpio_af = af;
266 new_camera->io.gpio_flash = flash;
267 new_camera->io.gpio_flag = ((pwr_active&0x01)<<RK29_CAM_POWERACTIVE_BITPOS)
268 |((rst_active&0x01)<<RK29_CAM_RESETACTIVE_BITPOS)
269 |((pwdn_active&0x01)<<RK29_CAM_POWERDNACTIVE_BITPOS)
270 |((flash_active&0x01)<<RK29_CAM_FLASHACTIVE_BITPOS);
271 new_camera->orientation = orientation;
272 new_camera->resolution = resolution;
273 new_camera->mirror = mir;
274 new_camera->i2c_rate = i2c_rata;
275 new_camera->flash = flash_attach;
276 new_camera->pwdn_info = ((pwdn_active&0x10)|0x01);
277 new_camera->powerup_sequence = powerup_sequence;
278 new_camera->mclk_rate = mclk_rate;
279 new_camera->of_node = cp;
281 new_camera->powerdown_pmu_name = NULL;
282 new_camera->power_pmu_name1 = NULL;
283 new_camera->power_pmu_name2 = NULL;
284 new_camera->powerdown_pmu_voltage = 0;
285 new_camera->power_pmu_name1 = 0;
286 new_camera->power_pmu_name2 = 0;
287 err = of_property_read_string(cp,"rockchip,powerdown_pmu",&(new_camera->powerdown_pmu_name));
289 dprintk("Get rockchip,powerdown_pmu failed\n");
291 err = of_property_read_string(cp,"rockchip,power_pmu_name1",&(new_camera->power_pmu_name1));
293 dprintk("Get rockchip,power_pmu_name1 failed\n");
295 err = of_property_read_string(cp,"rockchip,power_pmu_name2",&(new_camera->power_pmu_name2));
297 dprintk("rockchip,power_pmu_name2 failed\n");
300 if (of_property_read_u32(cp, "rockchip,powerdown_pmu_voltage", &(new_camera->powerdown_pmu_voltage))) {
301 dprintk("%s:Get %s rockchip,resolution failed!\n",__func__, cp->name);
303 if (of_property_read_u32(cp, "rockchip,power_pmu_voltage1", &(new_camera->power_pmu_voltage1))) {
304 dprintk("%s:Get %s rockchip,resolution failed!\n",__func__, cp->name);
306 if (of_property_read_u32(cp, "rockchip,power_pmu_voltage2", &(new_camera->power_pmu_voltage2))) {
307 dprintk("%s:Get %s rockchip,resolution failed!\n",__func__, cp->name);
309 debug_printk( "******************* /n power = %x\n", power);
310 debug_printk( "******************* /n powerdown = %x\n", powerdown);
311 debug_printk( "******************* /n i2c_add = %x\n", new_camera->dev.i2c_cam_info.addr << 1);
312 debug_printk( "******************* /n i2c_chl = %d\n", new_camera->dev.desc_info.host_desc.i2c_adapter_id);
313 debug_printk( "******************* /n init_name = %s\n", new_camera->dev.device_info.dev.init_name);
314 debug_printk( "******************* /n dev_name = %s\n", new_camera->dev_name);
315 debug_printk( "******************* /n module_name = %s\n", new_camera->dev.desc_info.host_desc.module_name);
317 new_camera_list->next_camera = NULL;
321 static int rk_dts_cif_remove(struct platform_device *pdev)
326 static int rk_dts_cif_probe(struct platform_device *pdev) /*yzm*/
329 struct device *dev = &pdev->dev;
330 const char *compatible = NULL;
331 struct device_node * vpu_node =NULL;
332 int vpu_iommu_enabled = 0;
333 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
335 rk_camera_platform_data.cif_dev = &pdev->dev;
337 err = of_address_to_resource(dev->of_node, 0, &rk_camera_resource_host_0[0]);
339 printk(KERN_EMERG "Get register resource from %s platform device failed!",pdev->name);
342 rk_camera_resource_host_0[0].flags = IORESOURCE_MEM;
344 irq = irq_of_parse_and_map(dev->of_node, 0);
346 printk(KERN_EMERG "Get irq resource from %s platform device failed!",pdev->name);
349 err = of_property_read_string(dev->of_node->parent,"compatible",&compatible);
350 rk_camera_platform_data.rockchip_name = compatible;
352 vpu_node = of_find_compatible_node(NULL,NULL, "vpu_service");
354 err = of_property_read_u32(vpu_node, "iommu_enabled", &vpu_iommu_enabled);
355 rk_camera_platform_data.iommu_enabled = vpu_iommu_enabled;
359 printk(KERN_EMERG "Get rockchip compatible failed!!!!!!");
363 //printk(KERN_ERR "***************%s*************\n", rk_camera_platform_data.rockchip_name);
364 rk_camera_resource_host_0[1].start = irq;
365 rk_camera_resource_host_0[1].end = irq;
366 rk_camera_resource_host_0[1].flags = IORESOURCE_IRQ;
370 static int rk_cif_sensor_init(void)
373 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
374 platform_driver_register(&rk_cif_driver);
376 platform_driver_register(&rk_sensor_driver);
381 /************yzm**************end*/
383 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
385 int camera_power = res->gpio_power;
386 int camera_ioflag = res->gpio_flag;
387 int camera_io_init = res->gpio_init;
390 struct regulator *ldo_18,*ldo_28;
391 struct rkcamera_platform_data *dev = container_of(res,struct rkcamera_platform_data,io);
393 int power_pmu_voltage1 = dev->power_pmu_voltage1;
394 int power_pmu_voltage2 = dev->power_pmu_voltage2;
395 const char *camera_power_pmu_name1 = dev->power_pmu_name1;
396 const char *camera_power_pmu_name2 = dev->power_pmu_name2;;
398 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
400 if(camera_power_pmu_name1 != NULL) {
401 ldo_28 = regulator_get(NULL, camera_power_pmu_name1); // vcc28_cif
403 regulator_set_voltage(ldo_28, power_pmu_voltage1, power_pmu_voltage1);
404 ret = regulator_enable(ldo_28);
405 //printk("%s set ldo7 vcc28_cif=%dmV end\n", __func__, regulator_get_voltage(ldo_28));
406 regulator_put(ldo_28);
410 while(regulator_is_enabled(ldo_28)>0)
411 regulator_disable(ldo_28);
412 regulator_put(ldo_28);
416 if(camera_power_pmu_name2 != NULL) {
417 ldo_18 = regulator_get(NULL, camera_power_pmu_name2); // vcc18_cif
419 regulator_set_voltage(ldo_18, power_pmu_voltage2, power_pmu_voltage2);
420 //regulator_set_suspend_voltage(ldo, 1800000);
421 ret = regulator_enable(ldo_18);
422 //printk("%s set ldo1 vcc18_cif=%dmV end\n", __func__, regulator_get_voltage(ldo_18));
423 regulator_put(ldo_18);
427 while(regulator_is_enabled(ldo_18)>0)
428 regulator_disable(ldo_18);
429 regulator_put(ldo_18);
433 if (camera_power != INVALID_GPIO) {
434 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
436 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
437 dprintk("%s PowerPin=%d ..PinLevel = %x",res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
440 gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
441 dprintk("%s PowerPin=%d ..PinLevel = %x",res->dev_name, camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
444 ret = RK29_CAM_EIO_REQUESTFAIL;
445 eprintk("%s PowerPin=%d request failed!", res->dev_name,camera_power);
449 ret = RK29_CAM_EIO_INVALID;
455 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)
457 int camera_reset = res->gpio_reset;
458 int camera_ioflag = res->gpio_flag;
459 int camera_io_init = res->gpio_init;
462 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
465 if (camera_reset != INVALID_GPIO) {
466 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {
468 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
469 dprintk("%s ResetPin=%d ..PinLevel = %x",res->dev_name,camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
471 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
472 dprintk("%s ResetPin= %d..PinLevel = %x",res->dev_name, camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
475 ret = RK29_CAM_EIO_REQUESTFAIL;
476 eprintk("%s ResetPin=%d request failed!", res->dev_name,camera_reset);
479 ret = RK29_CAM_EIO_INVALID;
485 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)
487 int camera_powerdown = res->gpio_powerdown;
488 int camera_ioflag = res->gpio_flag;
489 int camera_io_init = res->gpio_init;
492 struct regulator *powerdown_pmu;
493 struct rkcamera_platform_data *dev = container_of(res,struct rkcamera_platform_data,io);
494 int powerdown_pmu_voltage = dev->powerdown_pmu_voltage;
495 const char *powerdown_pmu_name = dev->powerdown_pmu_name;
497 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
499 if(powerdown_pmu_name != NULL) {
500 powerdown_pmu = regulator_get(NULL, powerdown_pmu_name);
502 regulator_set_voltage(powerdown_pmu, powerdown_pmu_voltage, powerdown_pmu_voltage);
503 ret = regulator_enable(powerdown_pmu);
504 regulator_put(powerdown_pmu);
506 while(regulator_is_enabled(powerdown_pmu)>0)
507 regulator_disable(powerdown_pmu);
508 regulator_put(powerdown_pmu);
512 if (camera_powerdown != INVALID_GPIO) {
513 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {
515 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
516 dprintk("%s PowerDownPin=%d ..PinLevel = %x" ,res->dev_name,camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
518 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
519 dprintk("%s PowerDownPin= %d..PinLevel = %x" ,res->dev_name, camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
522 ret = RK29_CAM_EIO_REQUESTFAIL;
523 dprintk("%s PowerDownPin=%d request failed!", res->dev_name,camera_powerdown);
526 ret = RK29_CAM_EIO_INVALID;
532 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)
534 int camera_flash = res->gpio_flash;
535 int camera_ioflag = res->gpio_flag;
536 int camera_io_init = res->gpio_init;
539 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
541 if (camera_flash != INVALID_GPIO) {
542 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {
547 gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
548 dprintk("%s FlashPin= %d..PinLevel = %x", res->dev_name, camera_flash, (((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
554 gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
555 dprintk("%s FlashPin=%d ..PinLevel = %x", res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
561 gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
562 dprintk("%s FlashPin=%d ..PinLevel = %x", res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
568 eprintk("%s Flash command(%d) is invalidate", res->dev_name,on);
573 ret = RK29_CAM_EIO_REQUESTFAIL;
574 eprintk("%s FlashPin=%d request failed!", res->dev_name,camera_flash);
577 ret = RK29_CAM_EIO_INVALID;
582 static int sensor_afpower_default_cb (struct rk29camera_gpio_res *res, int on)
585 int camera_af = res->gpio_af;
587 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
590 if (camera_af != INVALID_GPIO) {
591 gpio_set_value(camera_af, on);
597 static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct device_node *of_node)
600 unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
601 unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
602 unsigned int camera_af = INVALID_GPIO,camera_ioflag;
603 struct rk29camera_gpio_res *io_res;
604 bool io_requested_in_camera;
605 enum of_gpio_flags flags;
607 struct rkcamera_platform_data *new_camera;/*yzm*/
608 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
611 camera_reset = gpio_res->gpio_reset;
612 camera_power = gpio_res->gpio_power;
613 camera_powerdown = gpio_res->gpio_powerdown;
614 camera_flash = gpio_res->gpio_flash;
615 camera_af = gpio_res->gpio_af;
616 camera_ioflag = gpio_res->gpio_flag;
617 gpio_res->gpio_init = 0;
619 if (camera_power != INVALID_GPIO) {
620 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_power = %x\n", camera_power );
622 camera_power = of_get_named_gpio_flags(of_node,"rockchip,power",0,&flags);/*yzm*/
623 gpio_res->gpio_power = camera_power;/*yzm information back to the IO*/
625 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_power = %x\n", camera_power );
627 ret = gpio_request(camera_power, "camera power");
630 io_requested_in_camera = false;
632 if (io_requested_in_camera==false) {
634 new_camera = new_camera_head;
635 while (new_camera != NULL) {
636 io_res = &new_camera->io;
637 if (io_res->gpio_init & RK29_CAM_POWERACTIVE_MASK) {
638 if (io_res->gpio_power == camera_power)
639 io_requested_in_camera = true;
641 new_camera = new_camera->next_camera;
646 if (io_requested_in_camera==false) {
647 printk( "%s power pin(%d) init failed\n", gpio_res->dev_name,camera_power);
648 goto _rk_sensor_io_init_end_;
654 gpio_res->gpio_init |= RK29_CAM_POWERACTIVE_MASK;
655 gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
656 gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
658 dprintk("%s power pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
662 if (camera_reset != INVALID_GPIO) {
664 camera_power = of_get_named_gpio_flags(of_node,"rockchip,reset",0,&flags);/*yzm*/
665 gpio_res->gpio_reset = camera_reset;/*yzm information back to the IO*/
666 ret = gpio_request(camera_reset, "camera reset");
668 io_requested_in_camera = false;
670 if (io_requested_in_camera==false) {
672 new_camera = new_camera_head;
673 while (new_camera != NULL) {
674 io_res = &new_camera->io;
675 if (io_res->gpio_init & RK29_CAM_RESETACTIVE_MASK) {
676 if (io_res->gpio_reset == camera_reset)
677 io_requested_in_camera = true;
679 new_camera = new_camera->next_camera;
683 if (io_requested_in_camera==false) {
684 eprintk("%s reset pin(%d) init failed" ,gpio_res->dev_name,camera_reset);
685 goto _rk_sensor_io_init_end_;
691 gpio_res->gpio_init |= RK29_CAM_RESETACTIVE_MASK;
692 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
693 gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
695 dprintk("%s reset pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
699 if (camera_powerdown != INVALID_GPIO) {
700 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_powerdown = %x\n", camera_powerdown );
702 camera_powerdown = of_get_named_gpio_flags(of_node,"rockchip,powerdown",0,&flags);/*yzm*/
703 gpio_res->gpio_powerdown = camera_powerdown;/*yzm information back to the IO*/
705 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_powerdown = %x\n", camera_powerdown );
706 ret = gpio_request(camera_powerdown, "camera powerdown");
708 io_requested_in_camera = false;
710 if (io_requested_in_camera==false) {
712 new_camera = new_camera_head;
713 while (new_camera != NULL) {
714 io_res = &new_camera->io;
715 if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
716 if (io_res->gpio_powerdown == camera_powerdown)
717 io_requested_in_camera = true;
719 new_camera = new_camera->next_camera;
723 if (io_requested_in_camera==false) {
724 eprintk("%s powerdown pin(%d) init failed",gpio_res->dev_name,camera_powerdown);
725 goto _rk_sensor_io_init_end_;
730 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s(),iomux is ok\n", __FILE__, __LINE__,__FUNCTION__);
732 gpio_res->gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;
733 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
734 gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
736 dprintk("%s powerdown pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));
740 if (camera_flash != INVALID_GPIO) {
742 camera_flash = of_get_named_gpio_flags(of_node,"rockchip,flash",0,&flags);/*yzm*/
743 gpio_res->gpio_flash = camera_flash;/*yzm information back to the IO*/
744 ret = gpio_request(camera_flash, "camera flash");
746 io_requested_in_camera = false;
748 if (io_requested_in_camera==false) {
750 new_camera = new_camera_head;
751 while (new_camera != NULL) {
752 io_res = &new_camera->io;
753 if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
754 if (io_res->gpio_powerdown == camera_powerdown)
755 io_requested_in_camera = true;
757 new_camera = new_camera->next_camera;
761 ret = 0; //ddl@rock-chips.com : flash is only a function, sensor is also run;
762 if (io_requested_in_camera==false) {
763 eprintk("%s flash pin(%d) init failed",gpio_res->dev_name,camera_flash);
764 goto _rk_sensor_io_init_end_;
770 gpio_res->gpio_init |= RK29_CAM_FLASHACTIVE_MASK;
771 gpio_set_value(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS)); // falsh off
772 gpio_direction_output(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
774 dprintk("%s flash pin(%d) init success(0x%x)",gpio_res->dev_name, camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
778 if (camera_af != INVALID_GPIO) {
780 camera_af = of_get_named_gpio_flags(of_node,"rockchip,af",0,&flags);/*yzm*/
781 gpio_res->gpio_af = camera_af;/*yzm information back to the IO*/
782 ret = gpio_request(camera_af, "camera af");
784 io_requested_in_camera = false;
786 if (io_requested_in_camera==false) {
788 new_camera = new_camera_head;
789 while (new_camera != NULL) {
790 io_res = &new_camera->io;
791 if (io_res->gpio_init & RK29_CAM_AFACTIVE_MASK) {
792 if (io_res->gpio_af == camera_af)
793 io_requested_in_camera = true;
795 new_camera = new_camera->next_camera;
799 if (io_requested_in_camera==false) {
800 eprintk("%s af pin(%d) init failed",gpio_res->dev_name,camera_af);
801 goto _rk_sensor_io_init_end_;
808 gpio_res->gpio_init |= RK29_CAM_AFACTIVE_MASK;
809 //gpio_direction_output(camera_af, ((camera_ioflag&RK29_CAM_AFACTIVE_MASK)>>RK29_CAM_AFACTIVE_BITPOS));
810 dprintk("%s af pin(%d) init success",gpio_res->dev_name, camera_af);
815 _rk_sensor_io_init_end_:
820 static int _rk_sensor_io_deinit_(struct rk29camera_gpio_res *gpio_res)
822 unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
823 unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO,camera_af = INVALID_GPIO;
825 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
828 camera_reset = gpio_res->gpio_reset;
829 camera_power = gpio_res->gpio_power;
830 camera_powerdown = gpio_res->gpio_powerdown;
831 camera_flash = gpio_res->gpio_flash;
832 camera_af = gpio_res->gpio_af;
834 if (gpio_res->gpio_init & RK29_CAM_POWERACTIVE_MASK) {
835 if (camera_power != INVALID_GPIO) {
836 gpio_direction_input(camera_power);
837 gpio_free(camera_power);
841 if (gpio_res->gpio_init & RK29_CAM_RESETACTIVE_MASK) {
842 if (camera_reset != INVALID_GPIO) {
843 gpio_direction_input(camera_reset);
844 gpio_free(camera_reset);
848 if (gpio_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
849 if (camera_powerdown != INVALID_GPIO) {
850 gpio_direction_input(camera_powerdown);
851 gpio_free(camera_powerdown);
855 if (gpio_res->gpio_init & RK29_CAM_FLASHACTIVE_MASK) {
856 if (camera_flash != INVALID_GPIO) {
857 gpio_direction_input(camera_flash);
858 gpio_free(camera_flash);
861 if (gpio_res->gpio_init & RK29_CAM_AFACTIVE_MASK) {
862 if (camera_af != INVALID_GPIO) {
863 /* gpio_direction_input(camera_af);*/
864 gpio_free(camera_af);
867 gpio_res->gpio_init = 0;
872 static int rk_sensor_io_init(void)
874 static bool is_init = false;
876 struct rkcamera_platform_data *new_camera;
877 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
885 if (sensor_ioctl_cb.sensor_power_cb == NULL)
886 sensor_ioctl_cb.sensor_power_cb = sensor_power_default_cb;
887 if (sensor_ioctl_cb.sensor_reset_cb == NULL)
888 sensor_ioctl_cb.sensor_reset_cb = sensor_reset_default_cb;
889 if (sensor_ioctl_cb.sensor_powerdown_cb == NULL)
890 sensor_ioctl_cb.sensor_powerdown_cb = sensor_powerdown_default_cb;
891 if (sensor_ioctl_cb.sensor_flash_cb == NULL)
892 sensor_ioctl_cb.sensor_flash_cb = sensor_flash_default_cb;
893 if (sensor_ioctl_cb.sensor_af_cb == NULL)
894 sensor_ioctl_cb.sensor_af_cb = sensor_afpower_default_cb;
896 /**********yzm*********/
897 new_camera = new_camera_head;
898 while(new_camera != NULL)
900 if (_rk_sensor_io_init_(&new_camera->io,new_camera->of_node)<0)
901 _rk_sensor_io_deinit_(&new_camera->io);
902 new_camera = new_camera->next_camera;
907 static int rk_sensor_io_deinit(int sensor)
909 struct rkcamera_platform_data *new_camera;
911 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
913 new_camera = new_camera_head;
914 while(new_camera != NULL)
916 _rk_sensor_io_deinit_(&new_camera->io);
917 new_camera = new_camera->next_camera;
922 static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)
924 struct rk29camera_gpio_res *res = NULL;
925 struct rkcamera_platform_data *new_cam_dev = NULL;
926 struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;
927 int ret = RK29_CAM_IO_SUCCESS,i = 0;
928 struct soc_camera_desc *dev_icl = NULL;/*yzm*/
929 struct rkcamera_platform_data *new_camera;
930 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
933 new_camera = new_camera_head;
934 while(new_camera != NULL)
936 if (strcmp(new_camera->dev_name, dev_name(dev)) == 0) {
937 res = (struct rk29camera_gpio_res *)&new_camera->io;
938 new_cam_dev = &new_camera[i];
939 dev_icl = &new_camera->dev.desc_info;/*yzm*/
942 new_camera = new_camera->next_camera;;
947 eprintk("%s is not regisiterd in rk29_camera_platform_data!!",dev_name(dev));
948 ret = RK29_CAM_EIO_INVALID;
949 goto rk_sensor_ioctrl_end;
956 if (sensor_ioctl_cb.sensor_power_cb) {
957 ret = sensor_ioctl_cb.sensor_power_cb(res, on);
958 ret = (ret != RK29_CAM_EIO_INVALID)?ret:0; /* ddl@rock-chips.com: v0.1.1 */
960 eprintk("sensor_ioctl_cb.sensor_power_cb is NULL");
964 printk("ret: %d\n",ret);
969 if (sensor_ioctl_cb.sensor_reset_cb) {
970 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);
972 ret = (ret != RK29_CAM_EIO_INVALID)?ret:0;
974 eprintk( "sensor_ioctl_cb.sensor_reset_cb is NULL");
982 if (sensor_ioctl_cb.sensor_powerdown_cb) {
983 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);
985 eprintk( "sensor_ioctl_cb.sensor_powerdown_cb is NULL");
993 if (sensor_ioctl_cb.sensor_flash_cb) {
994 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);
996 eprintk( "sensor_ioctl_cb.sensor_flash_cb is NULL!");
1004 if (sensor_ioctl_cb.sensor_af_cb) {
1005 ret = sensor_ioctl_cb.sensor_af_cb(res, on);
1007 eprintk( "sensor_ioctl_cb.sensor_af_cb is NULL!");
1015 if (plat_data->sensor_mclk && dev_icl) {
1016 plat_data->sensor_mclk(dev_icl->host_desc.bus_id,(on!=0)?1:0,on);/*yzm*/
1018 eprintk( "%s(%d): sensor_mclk(%p) or dev_icl(%p) is NULL",
1019 __FUNCTION__,__LINE__,plat_data->sensor_mclk,dev_icl);
1026 eprintk("%s cmd(0x%x) is unknown!",__FUNCTION__, cmd);
1030 rk_sensor_ioctrl_end:
1034 static int rk_sensor_pwrseq(struct device *dev,int powerup_sequence, int on, int mclk_rate)
1039 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
1042 for (i=0; i<8; i++) {
1045 powerup_type = SENSOR_PWRSEQ_GET(powerup_sequence,i);
1047 powerup_type = SENSOR_PWRSEQ_GET(powerup_sequence,(7-i));
1049 switch (powerup_type)
1051 case SENSOR_PWRSEQ_AVDD:
1052 case SENSOR_PWRSEQ_DOVDD:
1053 case SENSOR_PWRSEQ_DVDD:
1054 case SENSOR_PWRSEQ_PWR:
1056 ret = rk_sensor_ioctrl(dev,Cam_Power, on);
1058 eprintk("SENSOR_PWRSEQ_PWR failed");
1061 dprintk("SensorPwrSeq-power: %d",on);
1066 case SENSOR_PWRSEQ_HWRST:
1069 rk_sensor_ioctrl(dev,Cam_Reset, 1);
1071 ret = rk_sensor_ioctrl(dev,Cam_Reset, 1);
1073 ret |= rk_sensor_ioctrl(dev,Cam_Reset, 0);
1076 eprintk("SENSOR_PWRSEQ_HWRST failed");
1078 dprintk("SensorPwrSeq-reset: %d",on);
1083 case SENSOR_PWRSEQ_PWRDN:
1085 ret = rk_sensor_ioctrl(dev,Cam_PowerDown, !on);
1087 eprintk("SENSOR_PWRSEQ_PWRDN failed");
1089 dprintk("SensorPwrSeq-power down: %d",!on);
1094 case SENSOR_PWRSEQ_CLKIN:
1096 ret = rk_sensor_ioctrl(dev,Cam_Mclk, (on?mclk_rate:on));
1098 eprintk("SENSOR_PWRSEQ_CLKIN failed");
1100 dprintk("SensorPwrSeq-clock: %d",on);
1114 static int rk_sensor_power(struct device *dev, int on) /*icd->pdev*/
1116 int powerup_sequence,mclk_rate;
1118 struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;
1119 struct rk29camera_gpio_res *dev_io = NULL;
1120 struct rkcamera_platform_data *new_camera=NULL, *new_device=NULL;
1121 bool real_pwroff = true;
1124 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
1126 new_camera = plat_data->register_dev_new; /*new_camera[]*/
1128 while (new_camera != NULL) {
1130 if (new_camera->io.gpio_powerdown != INVALID_GPIO) {
1131 gpio_direction_output(new_camera->io.gpio_powerdown,
1132 ((new_camera->io.gpio_flag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
1135 debug_printk( "new_camera->dev_name= %s \n", new_camera->dev_name); /*yzm*/
1136 debug_printk( "dev_name(dev)= %s \n", dev_name(dev)); /*yzm*/
1138 if (strcmp(new_camera->dev_name,dev_name(dev))) {
1139 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);
1140 if (sensor_ioctl_cb.sensor_powerdown_cb && on)
1142 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);
1143 sensor_ioctl_cb.sensor_powerdown_cb(&new_camera->io,1);
1146 new_device = new_camera;
1147 dev_io = &new_camera->io;
1148 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);/*yzm*/
1149 if (!Sensor_Support_DirectResume(new_camera->pwdn_info))
1152 real_pwroff = false;
1154 new_camera = new_camera->next_camera;
1157 if (new_device != NULL) {
1158 powerup_sequence = new_device->powerup_sequence;
1159 if ((new_device->mclk_rate == 24) || (new_device->mclk_rate == 48))
1160 mclk_rate = new_device->mclk_rate*1000000;
1162 mclk_rate = 24000000;
1164 powerup_sequence = sensor_PWRSEQ_DEFAULT;
1165 mclk_rate = 24000000;
1169 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);
1170 rk_sensor_pwrseq(dev, powerup_sequence, on,mclk_rate);
1173 if (rk_sensor_pwrseq(dev, powerup_sequence, on,mclk_rate)<0) /* ddl@rock-chips.com: v0.1.5 */
1176 /*ddl@rock-chips.com: all power down switch to Hi-Z after power off*/
1177 new_camera = plat_data->register_dev_new;
1178 while (new_camera != NULL) {
1179 if (new_camera->io.gpio_powerdown != INVALID_GPIO) {
1180 gpio_direction_input(new_camera->io.gpio_powerdown);
1182 new_camera->pwdn_info |= 0x01;
1183 new_camera = new_camera->next_camera;
1187 rk_sensor_ioctrl(dev,Cam_PowerDown, !on);
1189 rk_sensor_ioctrl(dev,Cam_Mclk, 0);
1192 mdelay(10);/* ddl@rock-chips.com: v0.1.3 */
1197 static int rk_sensor_reset(struct device *dev)
1200 rk_sensor_ioctrl(dev,Cam_Reset,1);
1202 rk_sensor_ioctrl(dev,Cam_Reset,0);
1205 *ddl@rock-chips.com : the rest function invalidate, because this operate is put together in rk_sensor_power;
1211 static int rk_sensor_powerdown(struct device *dev, int on)
1214 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
1216 return rk_sensor_ioctrl(dev,Cam_PowerDown,on);
1219 int rk_sensor_register(void)
1222 struct rkcamera_platform_data *new_camera;
1225 debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
1227 new_camera = new_camera_head;
1229 while (new_camera != NULL) {
1230 if (new_camera->dev.i2c_cam_info.addr == INVALID_VALUE) {
1232 KERN_ERR "%s(%d): new_camera[%d] i2c addr is invalidate!",
1233 __FUNCTION__,__LINE__,i);
1236 sprintf(new_camera->dev_name,"%s_%d",new_camera->dev.device_info.dev.init_name,i+3);
1237 new_camera->dev.device_info.dev.init_name =(const char*)&new_camera->dev_name[0];
1238 new_camera->io.dev_name =(const char*)&new_camera->dev_name[0];
1239 if (new_camera->orientation == INVALID_VALUE) {
1240 if (strstr(new_camera->dev_name,"back")) {
1241 new_camera->orientation = 90;
1243 new_camera->orientation = 270;
1246 /* ddl@rock-chips.com: v0.1.3 */
1247 if ((new_camera->fov_h <= 0) || (new_camera->fov_h>360))
1248 new_camera->fov_h = 100;
1250 if ((new_camera->fov_v <= 0) || (new_camera->fov_v>360))
1251 new_camera->fov_v = 100;
1253 new_camera->dev.desc_info.subdev_desc.power = rk_sensor_power;
1254 new_camera->dev.desc_info.subdev_desc.powerdown = rk_sensor_powerdown;
1255 new_camera->dev.desc_info.host_desc.board_info =&new_camera->dev.i2c_cam_info;
1257 new_camera->dev.device_info.id = i+6;
1258 new_camera->dev.device_info.dev.platform_data = &new_camera->dev.desc_info;
1259 new_camera->dev.desc_info.subdev_desc.drv_priv = &rk_camera_platform_data;
1261 platform_device_register(&(new_camera->dev.device_info));
1263 new_camera = new_camera->next_camera;
1268 #include "../../../drivers/media/video/rk30_camera.c"