ARM64: DTS: Add rk3399-firefly uart4 device, node as /dev/ttyS1
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / rk_camsys / camsys_cif.c
index fb75953b3fb5849c5cb8f8b101caf89b2306e83f..22753b3f50f4c728ee46d523c00aab51218f3c21 100755 (executable)
@@ -3,24 +3,24 @@
 static const char miscdev_cif0_name[] = CAMSYS_CIF0_DEVNAME;
 static const char miscdev_cif1_name[] = CAMSYS_CIF1_DEVNAME;
 
-static int camsys_cif_iomux_cb(camsys_extdev_t *extdev,void *ptr)
+static int camsys_cif_iomux_cb(camsys_extdev_t *extdev, void *ptr)
 {
-    unsigned int cif_vol_sel;
-#if 0    
+       unsigned int cif_vol_sel;
+#if 0
     if (extdev->dev_cfg & CAMSYS_DEVCFG_FLASHLIGHT) {
-        iomux_set(ISP_FLASH_TRIG);  
-        if (extdev->fl.fl.io != 0xffffffff) {
-            iomux_set(ISP_FL_TRIG);
-        }
-    } 
+               iomux_set(ISP_FLASH_TRIG);
+               if (extdev->fl.fl.io != 0xffffffff) {
+                       iomux_set(ISP_FL_TRIG);
+               }
+       }
 
     if (extdev->dev_cfg & CAMSYS_DEVCFG_PREFLASHLIGHT) {
-        iomux_set(ISP_PRELIGHT_TRIG);
+               iomux_set(ISP_PRELIGHT_TRIG);
     }
-    
+
     if (extdev->dev_cfg & CAMSYS_DEVCFG_SHUTTER) {
-        iomux_set(ISP_SHUTTER_OPEN);
-        iomux_set(ISP_SHUTTER_TRIG);
+               iomux_set(ISP_SHUTTER_OPEN);
+               iomux_set(ISP_SHUTTER_TRIG);
     }
 
     iomux_set(CIF0_CLKOUT);
@@ -32,323 +32,353 @@ static int camsys_cif_iomux_cb(camsys_extdev_t *extdev,void *ptr)
     char state_str[20] = {0};
 
     struct device *dev = &(extdev->pdev->dev);
-    
+
     if (extdev->phy.type == CamSys_Phy_Cif) {
-        if ((extdev->phy.info.cif.fmt >= CamSys_Fmt_Raw_8b)&& (extdev->phy.info.cif.fmt <= CamSys_Fmt_Raw_12b)) {
+               if ((extdev->phy.info.cif.fmt >= CamSys_Fmt_Raw_8b) &&
+                       (extdev->phy.info.cif.fmt <= CamSys_Fmt_Raw_12b)) {
 
-           strcpy(state_str,"isp_dvp8bit");
+                       strcpy(state_str, "isp_dvp8bit");
 
-        }
+               }
 
-        if ((extdev->phy.info.cif.fmt >= CamSys_Fmt_Raw_10b)&& (extdev->phy.info.cif.fmt <= CamSys_Fmt_Raw_12b)) {
-           strcpy(state_str,"isp_dvp10bit");
-        }
+               if ((extdev->phy.info.cif.fmt >= CamSys_Fmt_Raw_10b) &&
+                       (extdev->phy.info.cif.fmt <= CamSys_Fmt_Raw_12b)) {
+                       strcpy(state_str, "isp_dvp10bit");
+               }
 
-        if (extdev->phy.info.cif.fmt == CamSys_Fmt_Raw_12b) {
-           strcpy(state_str,"isp_dvp12bit");
+               if (extdev->phy.info.cif.fmt == CamSys_Fmt_Raw_12b) {
+                       strcpy(state_str, "isp_dvp12bit");
 
-        }
-    }else{
-           strcpy(state_str,"default");
+               }
+       } else {
+               strcpy(state_str, "default");
     }
 
-    //mux CIF0_CLKOUT
+    /*mux CIF0_CLKOUT*/
 
     pinctrl = devm_pinctrl_get(dev);
     if (IS_ERR(pinctrl)) {
-        camsys_err("%s:Get pinctrl failed!\n",__func__);
-        return -1;
+               camsys_err("%s:Get pinctrl failed!\n", __func__);
+               return -1;
     }
     state = pinctrl_lookup_state(pinctrl,
-                         state_str);
-    if (IS_ERR(state)){
-        dev_err(dev, "%s:could not get %s pinstate\n",__func__,state_str);
-        return -1;
-        }
+                                                               state_str);
+       if (IS_ERR(state)) {
+               dev_err(dev,
+                       "%s:could not get %s pinstate\n",
+                       __func__, state_str);
+               return -1;
+       }
 
     if (!IS_ERR(state)) {
-        retval = pinctrl_select_state(pinctrl, state);
-        if (retval){
-            dev_err(dev,
-                "%s:could not set %s pins\n",__func__,state_str);
-                return -1;
-
-                }
+               retval = pinctrl_select_state(pinctrl, state);
+               if (retval) {
+                       dev_err(dev,
+                               "%s:could not set %s pins\n",
+                               __func__, state_str);
+                               return -1;
+
+                       }
     }
 
-    //set 1.8v vol domain for rk32
-    __raw_writel(((1<<1)|(1<<(1+16))),RK_GRF_VIRT+0x0380);
-   __raw_writel(0xffffffff, RK_GRF_VIRT+0x01d4);   
+    /*set 1.8v vol domain for rk32*/
+       __raw_writel(((1<<1)|(1<<(1+16))), RK_GRF_VIRT+0x0380);
+       __raw_writel(0xffffffff,  RK_GRF_VIRT+0x01d4);
 
-    //set cif vol domain
+    /*set cif vol domain*/
     if (extdev->phy.type == CamSys_Phy_Cif) {
 
-        #if 0
-        if (!IS_ERR_OR_NULL(extdev->dovdd.ldo)) {
-            if (extdev->dovdd.max_uv >= 25000000) {
-                __raw_writel(((1<<1)|(1<<(1+16))),RK30_GRF_BASE+0x018c);
-            } else {
-                __raw_writel((1<<(1+16)),RK30_GRF_BASE+0x018c);
-            }
-        } else {
-            __raw_writel(((1<<1)|(1<<(1+16))),RK30_GRF_BASE+0x018c);
-        }
-        #else
-
-        //set 1.8v vol domain
-        __raw_writel(((1<<1)|(1<<(1+16))),RK_GRF_VIRT+0x0380);
-        #endif
-        
-        //set driver strength
-      //  __raw_writel(0xffffffff, RK_GRF_VIRT+0x01dc);   
-    }
-    
-                
+               #if 0
+               if (!IS_ERR_OR_NULL(extdev->dovdd.ldo)) {
+                       if (extdev->dovdd.max_uv >= 25000000) {
+                               __raw_writel(((1<<1)|(1<<(1+16))),
+                                       RK30_GRF_BASE+0x018c);
+                       } else {
+                               __raw_writel((1<<(1+16)), RK30_GRF_BASE+0x018c);
+                       }
+               } else {
+                        __raw_writel(((1<<1)|(1<<(1+16))),
+                                       RK30_GRF_BASE+0x018c);
+               }
+               #else
+
+               /*set 1.8v vol domain*/
+               __raw_writel(((1<<1)|(1<<(1+16))), RK_GRF_VIRT+0x0380);
+               #endif
+
+               /*set driver strength*/
+               /*  __raw_writel(0xffffffff,  RK_GRF_VIRT+0x01dc);*/
+       }
+
     return 0;
 }
-static int camsys_cif_clkin_cb(void *ptr, unsigned int on)
+static int camsys_cif_clkin_cb(void *ptr,  unsigned int on)
 {
-    camsys_dev_t *camsys_dev = (camsys_dev_t*)ptr;
-    camsys_cif_clk_t *clk = (camsys_cif_clk_t*)camsys_dev->clk;
-    
+       camsys_dev_t *camsys_dev = (camsys_dev_t *)ptr;
+       camsys_cif_clk_t *clk = (camsys_cif_clk_t *)camsys_dev->clk;
+
     spin_lock(&clk->lock);
-    if (on && !clk->in_on) {        
-        clk_prepare_enable(clk->aclk_cif);
-       clk_prepare_enable(clk->hclk_cif);
-       clk_prepare_enable(clk->cif_clk_in);
-       
-        clk->in_on = true;
-        camsys_trace(1, "%s clock in turn on",dev_name(camsys_dev->miscdev.this_device));
+       if (on && !clk->in_on) {
+               clk_prepare_enable(clk->aclk_cif);
+               clk_prepare_enable(clk->hclk_cif);
+               clk_prepare_enable(clk->cif_clk_in);
+
+               clk->in_on = true;
+               camsys_trace(1,  "%s clock in turn on",
+                       dev_name(camsys_dev->miscdev.this_device));
     } else if (!on && clk->in_on) {
-       clk_disable_unprepare(clk->hclk_cif);
-       clk_disable_unprepare(clk->cif_clk_in);         
-       clk_disable_unprepare(clk->pd_cif);
-        clk->in_on = false;
-        camsys_trace(1, "%s clock in turn off",dev_name(camsys_dev->miscdev.this_device));
-    }
-    spin_unlock(&clk->lock);
-    return 0;
+               clk_disable_unprepare(clk->hclk_cif);
+               clk_disable_unprepare(clk->cif_clk_in);
+               clk_disable_unprepare(clk->pd_cif);
+               clk->in_on = false;
+               camsys_trace(1,  "%s clock in turn off",
+                       dev_name(camsys_dev->miscdev.this_device));
+       }
+       spin_unlock(&clk->lock);
+       return 0;
 }
 
-static int camsys_cif_clkout_cb(void *ptr, unsigned int on,unsigned int clkin)
+static int camsys_cif_clkout_cb(void *ptr, unsigned int on, unsigned int clkin)
 {
-    camsys_dev_t *camsys_dev = (camsys_dev_t*)ptr;
-    camsys_cif_clk_t *clk = (camsys_cif_clk_t*)camsys_dev->clk;
+       camsys_dev_t *camsys_dev = (camsys_dev_t *)ptr;
+       camsys_cif_clk_t *clk = (camsys_cif_clk_t *)camsys_dev->clk;
     struct clk *cif_clk_out_div;
-    
-    
-    spin_lock(&clk->lock);
-    if (on && (clk->out_on != on)) {        
-        clk_prepare_enable(clk->cif_clk_out);
-        clk_set_rate(clk->cif_clk_out,clkin);
-       
-        clk->out_on = on;
-        camsys_trace(1, "%s clock out(rate: %dHz) turn on",dev_name(camsys_dev->miscdev.this_device),
-                    clk->out_on);
-    } else if (!on && clk->out_on) {
-        if (strcmp(dev_name(camsys_dev->miscdev.this_device),miscdev_cif1_name)==0) {
-            cif_clk_out_div =  clk_get(NULL, "cif1_out_div");
-        } else{
-            cif_clk_out_div =  clk_get(NULL, "cif0_out_div");
-            if(IS_ERR_OR_NULL(cif_clk_out_div)) {
-                cif_clk_out_div =  clk_get(NULL, "cif_out_div");
-            }
-        }
-
-        if(!IS_ERR_OR_NULL(cif_clk_out_div)) {
-            clk_set_parent(clk->cif_clk_out, cif_clk_out_div);
-            clk_put(cif_clk_out_div);
-        } else {
-            camsys_warn("%s clock out may be not off!", dev_name(camsys_dev->miscdev.this_device));
-        }
-        clk_disable_unprepare(clk->cif_clk_out);
-        clk->out_on = 0;
-
-        camsys_trace(1, "%s clock out turn off",dev_name(camsys_dev->miscdev.this_device));
-    }
-    spin_unlock(&clk->lock);
-
-    {
-  //  __raw_writel(0x00, CRU_PCLK_REG30+RK30_CRU_BASE);
-    }
 
-    return 0;
+       spin_lock(&clk->lock);
+       if (on && (clk->out_on != on)) {
+               clk_prepare_enable(clk->cif_clk_out);
+               clk_set_rate(clk->cif_clk_out, clkin);
+
+               clk->out_on = on;
+               camsys_trace(1,  "%s clock out(rate: %dHz) turn on",
+                       dev_name(camsys_dev->miscdev.this_device),
+                                       clk->out_on);
+       } else if (!on && clk->out_on) {
+               if (strcmp(dev_name(camsys_dev->miscdev.this_device),
+                       miscdev_cif1_name) == 0) {
+                       cif_clk_out_div =  clk_get(NULL,  "cif1_out_div");
+               } else{
+                       cif_clk_out_div =  clk_get(NULL,  "cif0_out_div");
+                       if (IS_ERR_OR_NULL(cif_clk_out_div)) {
+                               cif_clk_out_div =
+                                       clk_get(NULL,  "cif_out_div");
+                       }
+               }
+
+               if (!IS_ERR_OR_NULL(cif_clk_out_div)) {
+                       clk_set_parent(clk->cif_clk_out,  cif_clk_out_div);
+                       clk_put(cif_clk_out_div);
+               } else {
+                       camsys_warn("%s clock out may be not off!",
+                               dev_name(camsys_dev->miscdev.this_device));
+               }
+               clk_disable_unprepare(clk->cif_clk_out);
+               clk->out_on = 0;
+
+               camsys_trace(1,  "%s clock out turn off",
+                       dev_name(camsys_dev->miscdev.this_device));
+       }
+       spin_unlock(&clk->lock);
+
+       /*  __raw_writel(0x00,  CRU_PCLK_REG30+RK30_CRU_BASE);*/
+
+       return 0;
 }
 
-static irqreturn_t camsys_cif_irq(int irq, void *data)
+static irqreturn_t camsys_cif_irq(int irq,  void *data)
 {
-    camsys_dev_t *camsys_dev = (camsys_dev_t*)data;
+    camsys_dev_t *camsys_dev = (camsys_dev_t *)data;
     camsys_irqstas_t *irqsta;
     camsys_irqpool_t *irqpool;
-    unsigned int intsta,frmsta;
+    unsigned int intsta, frmsta;
 
-    intsta = __raw_readl(camsys_dev->devmems.registermem->vir_base + CIF_INITSTA);
-    frmsta = __raw_readl(camsys_dev->devmems.registermem->vir_base + CIF_FRAME_STATUS);
-   printk("get oneframe,intsta = 0x%x \n",intsta);
-    if (intsta & 0x200) {
-        __raw_writel(0x200,camsys_dev->devmems.registermem->vir_base + CIF_INITSTA);
-        __raw_writel(0xf000,camsys_dev->devmems.registermem->vir_base + CIF_CTRL);
-    }
+    intsta = __raw_readl(camsys_dev->devmems.registermem->vir_base +
+               CIF_INITSTA);
+    frmsta = __raw_readl(camsys_dev->devmems.registermem->vir_base +
+               CIF_FRAME_STATUS);
+   printk("get oneframe, intsta = 0x%x \n", intsta);
 
-    if (intsta &0x01) {
-        __raw_writel(0x01,camsys_dev->devmems.registermem->vir_base + CIF_INITSTA);
-        __raw_writel(0x02,camsys_dev->devmems.registermem->vir_base + CIF_FRAME_STATUS);
-        __raw_writel(0xf001,camsys_dev->devmems.registermem->vir_base + CIF_CTRL);
-    }    
-    
-    spin_lock(&camsys_dev->irq.lock);
-    list_for_each_entry(irqpool, &camsys_dev->irq.irq_pool, list) {
-        spin_lock(&irqpool->lock);
-        if (!list_empty(&irqpool->deactive)) {
-            irqsta = list_first_entry(&irqpool->deactive, camsys_irqstas_t, list);
-            irqsta->sta.mis = intsta;
-            irqsta->sta.ris = intsta;
-            list_del_init(&irqsta->list);            
-            list_add_tail(&irqsta->list,&irqpool->active);
-            irqsta = list_first_entry(&irqpool->active, camsys_irqstas_t, list);
-            //wake_up_all(&camsys_dev->irq.irq_done);
-            wake_up(&irqpool->done);
-        }
-        spin_unlock(&irqpool->lock);
-    }
-    spin_unlock(&camsys_dev->irq.lock);
-   
-    return IRQ_HANDLED;
+    if (intsta & 0x200) {
+               __raw_writel(0x200,
+                       camsys_dev->devmems.registermem->vir_base +
+                       CIF_INITSTA);
+               __raw_writel(0xf000,
+                       camsys_dev->devmems.registermem->vir_base +
+                       CIF_CTRL);
+       }
+
+       if (intsta &0x01) {
+               __raw_writel(0x01,
+                       camsys_dev->devmems.registermem->vir_base +
+                       CIF_INITSTA);
+               __raw_writel(0x02,
+                       camsys_dev->devmems.registermem->vir_base +
+                       CIF_FRAME_STATUS);
+               __raw_writel(0xf001,
+                       camsys_dev->devmems.registermem->vir_base +
+                       CIF_CTRL);
+       }
+
+       spin_lock(&camsys_dev->irq.lock);
+       list_for_each_entry(irqpool,  &camsys_dev->irq.irq_pool,  list) {
+               spin_lock(&irqpool->lock);
+               if (!list_empty(&irqpool->deactive)) {
+                       irqsta = list_first_entry
+                               (&irqpool->deactive,  camsys_irqstas_t,  list);
+                       irqsta->sta.mis = intsta;
+                       irqsta->sta.ris = intsta;
+                       list_del_init(&irqsta->list);
+                       list_add_tail(&irqsta->list, &irqpool->active);
+                       irqsta = list_first_entry
+                               (&irqpool->active,  camsys_irqstas_t,  list);
+                       /*wake_up_all(&camsys_dev->irq.irq_done);*/
+                       wake_up(&irqpool->done);
+               }
+               spin_unlock(&irqpool->lock);
+       }
+       spin_unlock(&camsys_dev->irq.lock);
+
+       return IRQ_HANDLED;
 }
 
 static int camsys_cif_remove(struct platform_device *pdev)
 {
-    camsys_dev_t *camsys_dev = platform_get_drvdata(pdev);
-    camsys_cif_clk_t *cif_clk;
-    
-    if (camsys_dev->clk != NULL) {
-        cif_clk = (camsys_cif_clk_t*)camsys_dev->clk;
-        if (cif_clk->out_on) 
-            camsys_cif_clkout_cb(camsys_dev->clk, 0,0);
-        if (cif_clk->in_on)
-            camsys_cif_clkin_cb(camsys_dev->clk, 0);
-
-        if (cif_clk->pd_cif)
-            clk_put(cif_clk->pd_cif);
-        if (cif_clk->aclk_cif)
-            clk_put(cif_clk->aclk_cif);
-        if (cif_clk->hclk_cif)
-            clk_put(cif_clk->hclk_cif);
-        if (cif_clk->cif_clk_in)
-            clk_put(cif_clk->cif_clk_in);
-        if (cif_clk->cif_clk_out)
-            clk_put(cif_clk->cif_clk_out);
-    
-        kfree(cif_clk);
-        cif_clk = NULL;
-    }
-
-    return 0;
+       camsys_dev_t *camsys_dev = platform_get_drvdata(pdev);
+       camsys_cif_clk_t *cif_clk;
+
+       if (camsys_dev->clk != NULL) {
+               cif_clk = (camsys_cif_clk_t *)camsys_dev->clk;
+               if (cif_clk->out_on)
+                       camsys_cif_clkout_cb(camsys_dev->clk, 0, 0);
+               if (cif_clk->in_on)
+                       camsys_cif_clkin_cb(camsys_dev->clk, 0);
+
+               if (cif_clk->pd_cif)
+                       clk_put(cif_clk->pd_cif);
+               if (cif_clk->aclk_cif)
+                       clk_put(cif_clk->aclk_cif);
+               if (cif_clk->hclk_cif)
+                       clk_put(cif_clk->hclk_cif);
+               if (cif_clk->cif_clk_in)
+                       clk_put(cif_clk->cif_clk_in);
+               if (cif_clk->cif_clk_out)
+                       clk_put(cif_clk->cif_clk_out);
+
+               kfree(cif_clk);
+               cif_clk = NULL;
+       }
+
+       return 0;
 }
 
 int camsys_cif_probe_cb(struct platform_device *pdev, camsys_dev_t *camsys_dev)
 {
-    int err = 0;   
-    camsys_cif_clk_t *cif_clk;
-
-    //Irq init
-    err = request_irq(camsys_dev->irq.irq_id, camsys_cif_irq, 0, CAMSYS_CIF_IRQNAME,camsys_dev);
-    if (err) {
-        camsys_err("request irq for %s failed",CAMSYS_CIF_IRQNAME);
-        goto end;
-    }
-
-    //Clk and Iomux init
-    cif_clk = kzalloc(sizeof(camsys_cif_clk_t),GFP_KERNEL);
-    if (cif_clk == NULL) {
-        camsys_err("Allocate camsys_cif_clk_t failed!");
-        err = -EINVAL;
-        goto end;
-    }
-    
-    if (strcmp(dev_name(&pdev->dev),CAMSYS_PLATFORM_CIF1_NAME) == 0) {
-        cif_clk->aclk_cif = devm_clk_get(&pdev->dev, "g_aclk_vip");
-        cif_clk->hclk_cif = devm_clk_get(&pdev->dev, "g_hclk_vip");
-        cif_clk->cif_clk_in = devm_clk_get(&pdev->dev, "g_pclkin_cif");
-        cif_clk->cif_clk_out = devm_clk_get(&pdev->dev, "clk_cif_out");
-        spin_lock_init(&cif_clk->lock);
-        cif_clk->in_on = false;
-        cif_clk->out_on = false;
-    } else {           
-        cif_clk->aclk_cif = devm_clk_get(&pdev->dev, "g_aclk_vip");
-        cif_clk->hclk_cif = devm_clk_get(&pdev->dev, "g_hclk_vip");
-        cif_clk->cif_clk_in = devm_clk_get(&pdev->dev, "g_pclkin_ci");
-        cif_clk->cif_clk_out = devm_clk_get(&pdev->dev, "clk_cif_out");
-        spin_lock_init(&cif_clk->lock);
-        cif_clk->in_on = false;
-        cif_clk->out_on = false;
-    }
-
- //   clk_prepare_enable(cif_clk->aclk_cif);
- //   clk_prepare_enable(cif_clk->hclk_cif);
- //   clk_prepare_enable(cif_clk->cif_clk_in);
- //   clk_prepare_enable(cif_clk->cif_clk_out);
-
-
-    
-    camsys_dev->clk = (void*)cif_clk;
-    camsys_dev->clkin_cb = camsys_cif_clkin_cb;
-    camsys_dev->clkout_cb = camsys_cif_clkout_cb;
-    camsys_dev->iomux = camsys_cif_iomux_cb;
-    
-    //Misc device init
-    camsys_dev->miscdev.minor = MISC_DYNAMIC_MINOR;
-    if (strcmp(dev_name(&pdev->dev),CAMSYS_PLATFORM_CIF1_NAME) == 0) {
-        camsys_dev->miscdev.name = miscdev_cif1_name;
-        camsys_dev->miscdev.nodename = miscdev_cif1_name;        
-    } else {
-        camsys_dev->miscdev.name = miscdev_cif0_name;
-        camsys_dev->miscdev.nodename = miscdev_cif0_name;
-    }
-    camsys_dev->miscdev.fops = &camsys_fops;
-    err = misc_register(&camsys_dev->miscdev);
-    if (err < 0) {
-        camsys_trace(1,"Register /dev/%s misc device failed",camsys_dev->miscdev.name);
-        goto misc_register_failed;
-    } else {
-        camsys_trace(1,"Register /dev/%s misc device success",camsys_dev->miscdev.name);
-    }
-
-    //Variable init
-    if (strcmp(dev_name(&pdev->dev),CAMSYS_PLATFORM_CIF1_NAME) == 0) {
-        camsys_dev->dev_id = CAMSYS_DEVID_CIF_1;
-    } else {
-        camsys_dev->dev_id = CAMSYS_DEVID_CIF_0;
-    }
-    camsys_dev->platform_remove = camsys_cif_remove;
-
-    return 0;
+       int err = 0;
+       camsys_cif_clk_t *cif_clk;
+
+    /*Irq init*/
+       err = request_irq(camsys_dev->irq.irq_id,
+               camsys_cif_irq,  0,  CAMSYS_CIF_IRQNAME,
+               camsys_dev);
+       if (err) {
+               camsys_err("request irq for %s failed", CAMSYS_CIF_IRQNAME);
+               goto end;
+       }
+
+    /*Clk and Iomux init*/
+       cif_clk = kzalloc(sizeof(camsys_cif_clk_t), GFP_KERNEL);
+       if (cif_clk == NULL) {
+               camsys_err("Allocate camsys_cif_clk_t failed!");
+               err = -EINVAL;
+               goto end;
+       }
+
+       if (strcmp(dev_name(&pdev->dev), CAMSYS_PLATFORM_CIF1_NAME) == 0) {
+               cif_clk->aclk_cif = devm_clk_get(&pdev->dev,  "g_aclk_vip");
+               cif_clk->hclk_cif = devm_clk_get(&pdev->dev,  "g_hclk_vip");
+               cif_clk->cif_clk_in = devm_clk_get(&pdev->dev,  "g_pclkin_cif");
+               cif_clk->cif_clk_out = devm_clk_get(&pdev->dev,  "clk_cif_out");
+               spin_lock_init(&cif_clk->lock);
+               cif_clk->in_on = false;
+               cif_clk->out_on = false;
+       } else {
+               cif_clk->aclk_cif = devm_clk_get(&pdev->dev,  "g_aclk_vip");
+               cif_clk->hclk_cif = devm_clk_get(&pdev->dev,  "g_hclk_vip");
+               cif_clk->cif_clk_in = devm_clk_get(&pdev->dev,  "g_pclkin_ci");
+               cif_clk->cif_clk_out = devm_clk_get(&pdev->dev,  "clk_cif_out");
+               spin_lock_init(&cif_clk->lock);
+               cif_clk->in_on = false;
+               cif_clk->out_on = false;
+       }
+
+       /*
+       *clk_prepare_enable(cif_clk->aclk_cif);
+       clk_prepare_enable(cif_clk->hclk_cif);
+       clk_prepare_enable(cif_clk->cif_clk_in);
+       clk_prepare_enable(cif_clk->cif_clk_out);
+       */
+
+       camsys_dev->clk = (void *)cif_clk;
+       camsys_dev->clkin_cb = camsys_cif_clkin_cb;
+       camsys_dev->clkout_cb = camsys_cif_clkout_cb;
+       camsys_dev->iomux = camsys_cif_iomux_cb;
+
+    /*Misc device init*/
+       camsys_dev->miscdev.minor = MISC_DYNAMIC_MINOR;
+       if (strcmp(dev_name(&pdev->dev), CAMSYS_PLATFORM_CIF1_NAME) == 0) {
+           camsys_dev->miscdev.name = miscdev_cif1_name;
+           camsys_dev->miscdev.nodename = miscdev_cif1_name;
+       } else {
+           camsys_dev->miscdev.name = miscdev_cif0_name;
+           camsys_dev->miscdev.nodename = miscdev_cif0_name;
+       }
+       camsys_dev->miscdev.fops = &camsys_fops;
+       err = misc_register(&camsys_dev->miscdev);
+       if (err < 0) {
+           camsys_trace(1,
+                       "Register /dev/%s misc device failed",
+                       camsys_dev->miscdev.name);
+           goto misc_register_failed;
+       } else {
+           camsys_trace(1,
+                       "Register /dev/%s misc device success",
+                       camsys_dev->miscdev.name);
+       }
+
+       /*Variable init*/
+       if (strcmp(dev_name(&pdev->dev), CAMSYS_PLATFORM_CIF1_NAME) == 0) {
+               camsys_dev->dev_id = CAMSYS_DEVID_CIF_1;
+       } else {
+           camsys_dev->dev_id = CAMSYS_DEVID_CIF_0;
+       }
+       camsys_dev->platform_remove = camsys_cif_remove;
+
+       return 0;
 
 misc_register_failed:
-    if (!IS_ERR(camsys_dev->miscdev.this_device)) {
-        misc_deregister(&camsys_dev->miscdev);
-    }
+       if (!IS_ERR(camsys_dev->miscdev.this_device)) {
+               misc_deregister(&camsys_dev->miscdev);
+       }
+
+       if (cif_clk) {
+
+               if (cif_clk->pd_cif)
+                       clk_put(cif_clk->pd_cif);
+               if (cif_clk->aclk_cif)
+                       clk_put(cif_clk->aclk_cif);
+               if (cif_clk->hclk_cif)
+                       clk_put(cif_clk->hclk_cif);
+               if (cif_clk->cif_clk_in)
+                       clk_put(cif_clk->cif_clk_in);
+               if (cif_clk->cif_clk_out)
+                       clk_put(cif_clk->cif_clk_out);
+
+               kfree(cif_clk);
+               cif_clk = NULL;
+       }
 
-    if (cif_clk) {
-
-        if (cif_clk->pd_cif)
-            clk_put(cif_clk->pd_cif);
-        if (cif_clk->aclk_cif)
-            clk_put(cif_clk->aclk_cif);
-        if (cif_clk->hclk_cif)
-            clk_put(cif_clk->hclk_cif);
-        if (cif_clk->cif_clk_in)
-            clk_put(cif_clk->cif_clk_in);
-        if (cif_clk->cif_clk_out)
-            clk_put(cif_clk->cif_clk_out);
-    
-        kfree(cif_clk);
-        cif_clk = NULL;
-    }
-    
 end:
-    return err;
+       return err;
 }
 EXPORT_SYMBOL_GPL(camsys_cif_probe_cb);