camsys: v0.0x10.0
authordalon.zhang <dalon.zhang@rock-chips.com>
Mon, 21 Jul 2014 01:56:45 +0000 (09:56 +0800)
committerdalon.zhang <dalon.zhang@rock-chips.com>
Mon, 21 Jul 2014 01:56:45 +0000 (09:56 +0800)
drivers/media/video/rk_camsys/camsys_drv.c
drivers/media/video/rk_camsys/camsys_internal.h
drivers/media/video/rk_camsys/camsys_marvin.c

index c5262861d581d9d5f66a633625db5d2823acb454..d8ffa4688bba70d93cb37d19801e1ad4cb58d83f 100755 (executable)
@@ -181,7 +181,7 @@ static int camsys_extdev_register(camsys_devio_name_t *devio, camsys_dev_t *cams
     }
     
     extdev->dev_cfg = devio->dev_cfg;
-    
+    extdev->fl.fl.active = devio->fl.fl.active;
     regulator_info = &devio->avdd;
     regulator = &extdev->avdd;
     for (i=(CamSys_Vdd_Start_Tag+1); i<CamSys_Vdd_End_Tag; i++) {
index 17ded0c17e02b7cbe11cceb4ed2ffb41e503fd9a..f0a1455f9c582ff404e6a4c62e855a775edadcbc 100755 (executable)
 *        1) isp_clk 208.8M for 1lane, isp_clk 416.6M for 2lane;
 *v0.f.0:
                 1) mi_mis register may read erro, this may cause mistaken mi frame_end irqs.  
+*v0.0x10.0:
+                1) add flash_prelight control.          
 */
-#define CAMSYS_DRIVER_VERSION                   KERNEL_VERSION(0,0xe,0)
+#define CAMSYS_DRIVER_VERSION                   KERNEL_VERSION(0,0x10,0)
 
 
 #define CAMSYS_PLATFORM_DRV_NAME                "RockChip-CamSys"
index 1a95ec56dc707c8d312115e393379e3d63a19614..1df03a554248a8eb7b8a4855af0a6a23ec83f910 100755 (executable)
@@ -68,6 +68,18 @@ static int camsys_mrv_iomux_cb(camsys_extdev_t *extdev,void *ptr)
             } else {
                 strcpy(state_str,"isp_mipi_fl");
             }
+            {
+                //mux triggerout as gpio
+            //get gpio index
+                int flash_trigger_io ;
+                enum of_gpio_flags flags;
+                flash_trigger_io = of_get_named_gpio_flags(camsys_dev->pdev->dev.of_node, "rockchip,gpios", 0, &flags);
+                if(gpio_is_valid(flash_trigger_io)){
+                    flash_trigger_io = of_get_named_gpio_flags(camsys_dev->pdev->dev.of_node, "rockchip,gpios", 0, &flags);
+                    gpio_request(flash_trigger_io,"camsys_gpio");
+                    gpio_direction_output(flash_trigger_io, (~(extdev->fl.fl.active) & 0x1));
+                }
+            }                  
         } else {
             strcpy(state_str,"default");
         }
@@ -122,7 +134,8 @@ static int camsys_mrv_flash_trigger_cb(void *ptr,unsigned int on)
     char state_str[20] = {0};
     int retval = 0;
     enum of_gpio_flags flags;
-
+    camsys_extdev_t *extdev = NULL;
+       
     if(!on){
         strcpy(state_str,"isp_flash_as_gpio");
         pinctrl = devm_pinctrl_get(dev);
@@ -148,9 +161,15 @@ static int camsys_mrv_flash_trigger_cb(void *ptr,unsigned int on)
         if(gpio_is_valid(flash_trigger_io)){
             flash_trigger_io = of_get_named_gpio_flags(camsys_dev->pdev->dev.of_node, "rockchip,gpios", 0, &flags);
             gpio_request(flash_trigger_io,"camsys_gpio");
-            gpio_direction_output(flash_trigger_io, 1);
-            }
-
+            //get flash io active pol
+            if (!list_empty(&camsys_dev->extdevs.list)) {
+                list_for_each_entry(extdev, &camsys_dev->extdevs.list, list) {
+                    if (extdev->dev_cfg & CAMSYS_DEVCFG_FLASHLIGHT) {
+                        gpio_direction_output(flash_trigger_io, (~(extdev->fl.fl.active) & 0x1));
+                    }
+                }
+            }    
+        }
     }else{
         strcpy(state_str,"isp_flash_as_trigger_out");
         pinctrl = devm_pinctrl_get(dev);