camera:
authordalon.zhang <dalon.zhang@rock-chips.com>
Sat, 28 Feb 2015 11:09:34 +0000 (19:09 +0800)
committerdalon.zhang <dalon.zhang@rock-chips.com>
Sat, 28 Feb 2015 11:13:11 +0000 (19:13 +0800)
oneframe: v0.2.0
pingpong: v0.1.a

arch/arm/mach-rockchip/rk_camera.c [changed mode: 0644->0755]
drivers/media/video/generic_sensor.c
drivers/media/video/generic_sensor.h
drivers/media/video/rk30_camera_oneframe.c
drivers/media/video/rk30_camera_pingpong.c
include/linux/rockchip/cru.h

old mode 100644 (file)
new mode 100755 (executable)
index c79d50e..8813d39
@@ -5,7 +5,6 @@
 #include <linux/version.h>
 #include <linux/moduleparam.h>
 #include <linux/of_gpio.h>
-/**********yzm***********/
 #include <linux/of.h>
 #include <linux/of_irq.h>
 #include <linux/kernel.h>
 #include <linux/of_fdt.h>
 #include <linux/module.h>
 #include <linux/regulator/consumer.h>
-/**********yzm***********/
 
-//#define PMEM_CAM_NECESSARY    0x00000000    /*yzm*/
 
-static int camio_version = KERNEL_VERSION(0,1,9);/*yzm camio_version*/ 
+static int camio_version = KERNEL_VERSION(0,1,9); 
 module_param(camio_version, int, S_IRUGO);
 
-static int camera_debug = 0;/*yzm*/ 
+static int camera_debug = 0; 
 module_param(camera_debug, int, S_IRUGO|S_IWUSR);    
 
 #undef  CAMMODULE_NAME
@@ -81,7 +78,7 @@ static struct resource rk_camera_resource_host_1[2] = {};
        .name             = RK29_CAM_DRV_NAME,
        .id       = RK_CAM_PLATFORM_DEV_ID_0,                           /* This is used to put cameras on this interface*/ 
        .num_resources= 2,
-       .resource         = rk_camera_resource_host_0,/*yzm*/
+       .resource         = rk_camera_resource_host_0,
        .dev                    = {
                .dma_mask = &rockchip_device_camera_dmamask,
                .coherent_dma_mask = 0xffffffffUL,
@@ -95,7 +92,7 @@ static struct resource rk_camera_resource_host_1[2] = {};
        .name             = RK29_CAM_DRV_NAME,
        .id       = RK_CAM_PLATFORM_DEV_ID_1,                           /* This is used to put cameras on this interface */
        .num_resources    = ARRAY_SIZE(rk_camera_resource_host_1),
-       .resource         = rk_camera_resource_host_1,/*yzm*/
+       .resource         = rk_camera_resource_host_1,
        .dev                    = {
                .dma_mask = &rockchip_device_camera_dmamask,
                .coherent_dma_mask = 0xffffffffUL,
@@ -138,6 +135,8 @@ static struct platform_driver rk_sensor_driver =
     .remove            = rk_dts_sensor_remove,
 };
 
+unsigned long rk_cif_grf_base;
+unsigned long rk_cif_cru_base;
 
 static int rk_dts_sensor_remove(struct platform_device *pdev)
 {
@@ -250,9 +249,9 @@ static int  rk_dts_sensor_probe(struct platform_device *pdev)
                
                strcpy(new_camera->dev.i2c_cam_info.type, name);
                new_camera->dev.i2c_cam_info.addr = i2c_add>>1;
-               new_camera->dev.desc_info.host_desc.bus_id = RK29_CAM_PLATFORM_DEV_ID+cif_chl;/*yzm*/
-               new_camera->dev.desc_info.host_desc.i2c_adapter_id = i2c_chl;/*yzm*/
-               new_camera->dev.desc_info.host_desc.module_name = name;/*const*/
+               new_camera->dev.desc_info.host_desc.bus_id = RK29_CAM_PLATFORM_DEV_ID+cif_chl;
+               new_camera->dev.desc_info.host_desc.i2c_adapter_id = i2c_chl;
+               new_camera->dev.desc_info.host_desc.module_name = name;
                new_camera->dev.device_info.name = "soc-camera-pdrv";
                if(is_front)
                        sprintf(new_camera->dev_name,"%s_%s",name,"front");
@@ -323,13 +322,14 @@ static int rk_dts_cif_remove(struct platform_device *pdev)
         return 0;
 }
        
-static int rk_dts_cif_probe(struct platform_device *pdev) /*yzm*/
+static int rk_dts_cif_probe(struct platform_device *pdev)
 {
        int irq,err;
        struct device *dev = &pdev->dev;
        const char *compatible = NULL;  
        struct device_node * vpu_node =NULL;    
     int vpu_iommu_enabled = 0;
+
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
        
        rk_camera_platform_data.cif_dev = &pdev->dev;
@@ -356,8 +356,20 @@ static int rk_dts_cif_probe(struct platform_device *pdev) /*yzm*/
        of_node_put(vpu_node);
        }else{
                printk("get vpu_node failed,vpu_iommu_enabled == 0 !!!!!!\n");
-}
-
+       }
+       
+       if(strstr(rk_camera_platform_data.rockchip_name,"3368")){
+               //get cru base
+           vpu_node = of_parse_phandle(dev->of_node, "rockchip,cru", 0);
+           rk_cif_cru_base = (unsigned long)of_iomap(vpu_node, 0);
+               debug_printk(">>>>>>>rk_cif_cru_base=0x%lx",rk_cif_cru_base);
+               
+               //get grf base
+           vpu_node = of_parse_phandle(dev->of_node, "rockchip,grf", 0);
+           rk_cif_grf_base = (unsigned long)of_iomap(vpu_node, 0);
+               debug_printk(">>>>>>>rk_cif_grf_base=0x%lx",rk_cif_grf_base);
+       }
+       
        if (err < 0){
                printk(KERN_EMERG "Get rockchip compatible failed!!!!!!");
                return -ENODEV;
@@ -381,8 +393,6 @@ static int rk_cif_sensor_init(void)
        return 0;
 }
 
-/************yzm**************end*/
-
 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
 {
     int camera_power = res->gpio_power;
@@ -607,7 +617,7 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
     bool io_requested_in_camera;
        enum of_gpio_flags flags;
        
-       struct rkcamera_platform_data *new_camera;/*yzm*/
+       struct rkcamera_platform_data *new_camera;
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
 
 
@@ -622,8 +632,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
     if (camera_power != INVALID_GPIO) {
                debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_power  = %x\n", camera_power );
 
-               camera_power = of_get_named_gpio_flags(of_node,"rockchip,power",0,&flags);/*yzm*/
-               gpio_res->gpio_power = camera_power;/*yzm information back to the IO*/
+               camera_power = of_get_named_gpio_flags(of_node,"rockchip,power",0,&flags);
+               gpio_res->gpio_power = camera_power;/* information back to the IO*/
 
                debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_power  = %x\n", camera_power );  
 
@@ -664,8 +674,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
 
     if (camera_reset != INVALID_GPIO) {
                
-               camera_power = of_get_named_gpio_flags(of_node,"rockchip,reset",0,&flags);/*yzm*/
-               gpio_res->gpio_reset = camera_reset;/*yzm information back to the IO*/
+               camera_power = of_get_named_gpio_flags(of_node,"rockchip,reset",0,&flags);
+               gpio_res->gpio_reset = camera_reset;/* information back to the IO*/
         ret = gpio_request(camera_reset, "camera reset");
         if (ret) {
             io_requested_in_camera = false;
@@ -702,8 +712,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
        if (camera_powerdown != INVALID_GPIO) {
                debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_powerdown  = %x\n", camera_powerdown );
 
-               camera_powerdown = of_get_named_gpio_flags(of_node,"rockchip,powerdown",0,&flags);/*yzm*/
-               gpio_res->gpio_powerdown = camera_powerdown;/*yzm information back to the IO*/
+               camera_powerdown = of_get_named_gpio_flags(of_node,"rockchip,powerdown",0,&flags);
+               gpio_res->gpio_powerdown = camera_powerdown;/*information back to the IO*/
 
                debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_powerdown  = %x\n", camera_powerdown );  
                ret = gpio_request(camera_powerdown, "camera powerdown");
@@ -742,8 +752,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
 
        if (camera_flash != INVALID_GPIO) {
 
-               camera_flash = of_get_named_gpio_flags(of_node,"rockchip,flash",0,&flags);/*yzm*/
-               gpio_res->gpio_flash = camera_flash;/*yzm information back to the IO*/
+               camera_flash = of_get_named_gpio_flags(of_node,"rockchip,flash",0,&flags);
+               gpio_res->gpio_flash = camera_flash;/* information back to the IO*/
         ret = gpio_request(camera_flash, "camera flash");
         if (ret) {
             io_requested_in_camera = false;
@@ -780,8 +790,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
 
        if (camera_af != INVALID_GPIO) {
                
-               camera_af = of_get_named_gpio_flags(of_node,"rockchip,af",0,&flags);/*yzm*/
-               gpio_res->gpio_af = camera_af;/*yzm information back to the IO*/
+               camera_af = of_get_named_gpio_flags(of_node,"rockchip,af",0,&flags);
+               gpio_res->gpio_af = camera_af;/* information back to the IO*/
                ret = gpio_request(camera_af, "camera af");
                if (ret) {
                        io_requested_in_camera = false;
@@ -896,7 +906,6 @@ static int rk_sensor_io_init(void)
     if (sensor_ioctl_cb.sensor_af_cb == NULL)
         sensor_ioctl_cb.sensor_af_cb = sensor_afpower_default_cb;      
 
-       /**********yzm*********/
        new_camera = new_camera_head;
        while(new_camera != NULL)
        {
@@ -928,7 +937,7 @@ static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, i
     struct rkcamera_platform_data *new_cam_dev = NULL;
        struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;
     int ret = RK29_CAM_IO_SUCCESS,i = 0;
-       struct soc_camera_desc *dev_icl = NULL;/*yzm*/
+       struct soc_camera_desc *dev_icl = NULL;
        struct rkcamera_platform_data *new_camera;
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
 
@@ -939,7 +948,7 @@ static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, i
             if (strcmp(new_camera->dev_name, dev_name(dev)) == 0) {
                 res = (struct rk29camera_gpio_res *)&new_camera->io; 
                 new_cam_dev = &new_camera[i];
-                                dev_icl = &new_camera->dev.desc_info;/*yzm*/
+                                dev_icl = &new_camera->dev.desc_info;
                 break;
             }
             new_camera = new_camera->next_camera;;
@@ -1016,7 +1025,7 @@ static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, i
         case Cam_Mclk:
         {
             if (plat_data->sensor_mclk && dev_icl) {
-                               plat_data->sensor_mclk(dev_icl->host_desc.bus_id,(on!=0)?1:0,on);/*yzm*/
+                               plat_data->sensor_mclk(dev_icl->host_desc.bus_id,(on!=0)?1:0,on);
             } else { 
                 eprintk( "%s(%d): sensor_mclk(%p) or dev_icl(%p) is NULL",
                     __FUNCTION__,__LINE__,plat_data->sensor_mclk,dev_icl);
@@ -1114,7 +1123,7 @@ static int rk_sensor_pwrseq(struct device *dev,int powerup_sequence, int on, int
     return ret;
 }
 
-static int rk_sensor_power(struct device *dev, int on)   /*icd->pdev*/
+static int rk_sensor_power(struct device *dev, int on)
 {
     int powerup_sequence,mclk_rate;
     
@@ -1126,7 +1135,7 @@ static int rk_sensor_power(struct device *dev, int on)   /*icd->pdev*/
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
 
-    new_camera = plat_data->register_dev_new;    /*new_camera[]*/
+    new_camera = plat_data->register_dev_new;
     
        while (new_camera != NULL) {
 
@@ -1135,8 +1144,8 @@ static int rk_sensor_power(struct device *dev, int on)   /*icd->pdev*/
                 ((new_camera->io.gpio_flag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));            
         }
 
-               debug_printk( "new_camera->dev_name= %s \n", new_camera->dev_name);     /*yzm*/
-               debug_printk( "dev_name(dev)= %s \n", dev_name(dev));    /*yzm*/
+               debug_printk( "new_camera->dev_name= %s \n", new_camera->dev_name);
+               debug_printk( "dev_name(dev)= %s \n", dev_name(dev));
                
         if (strcmp(new_camera->dev_name,dev_name(dev))) {              
                        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);
@@ -1148,7 +1157,7 @@ static int rk_sensor_power(struct device *dev, int on)   /*icd->pdev*/
         } else {
             new_device = new_camera;
             dev_io = &new_camera->io;
-            debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);/*yzm*/
+            debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);
             if (!Sensor_Support_DirectResume(new_camera->pwdn_info))
                 real_pwroff = true;                    
             else
index 31e86adc93675c0179a3b1cc83a896ead92c6de6..1e0ee693f5c1828ca031ed03021091201f527999 100755 (executable)
@@ -116,8 +116,6 @@ int generic_sensor_write(struct i2c_client *client,struct rk_sensor_reg* sensor_
     struct generic_sensor *sensor = to_generic_sensor(client);
     
        i2c_speed = sensor->info_priv.gI2c_speed;
-       //debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
-       //debug_printk( "/~~~~~~~~~~~~/ %s:%i-------%s()client = %p\n", __FILE__, __LINE__,__FUNCTION__,client);
 
        err = 0;
        switch(sensor_reg->reg){
@@ -728,9 +726,8 @@ check_end:
 
 int generic_sensor_ioctrl(struct soc_camera_device *icd,enum rk29sensor_power_cmd cmd, int on)
 {
-       //struct soc_camera_link *icl = to_soc_camera_link(icd);
        struct soc_camera_desc *desc = to_soc_camera_desc(icd);
-    struct rk29camera_platform_data *pdata = desc->subdev_desc.drv_priv;/*yzm*/
+    struct rk29camera_platform_data *pdata = desc->subdev_desc.drv_priv;
     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
     struct generic_sensor *sensor = to_generic_sensor(client);
        int ret = 0;
@@ -741,8 +738,8 @@ int generic_sensor_ioctrl(struct soc_camera_device *icd,enum rk29sensor_power_cm
         case Sensor_Power:
         {
                        //if (icl->power) {
-                       if(desc->subdev_desc.power) {/*yzm*/
-                               ret = desc->subdev_desc.power(icd->pdev, on);/*yzm*/
+                       if(desc->subdev_desc.power) {
+                               ret = desc->subdev_desc.power(icd->pdev, on);
                        } else {
                            SENSOR_TR("haven't power callback");
                 ret = -EINVAL;
@@ -752,8 +749,8 @@ int generic_sensor_ioctrl(struct soc_camera_device *icd,enum rk29sensor_power_cm
                case Sensor_PowerDown:
                {
                        //if (icl->powerdown) {
-                       if(desc->subdev_desc.powerdown) {/*yzm*/
-                               ret = desc->subdev_desc.powerdown(icd->pdev, on);/*yzm*/
+                       if(desc->subdev_desc.powerdown) {
+                               ret = desc->subdev_desc.powerdown(icd->pdev, on);
                        } else {
                            SENSOR_TR("haven't power down callback");
                 ret = -EINVAL;
@@ -799,19 +796,16 @@ int generic_sensor_init(struct v4l2_subdev *sd, u32 val)
        struct generic_sensor *sensor = to_generic_sensor(client);
        int array_index = 0;
        int num = sensor->info_priv.num_series;    
-    //struct soc_camera_link *icl = to_soc_camera_link(icd);
-       struct soc_camera_desc *desc = to_soc_camera_desc(icd);/*yzm*/
-    struct rk29camera_platform_data *pdata = desc->subdev_desc.drv_priv;/*yzm*/
+       struct soc_camera_desc *desc = to_soc_camera_desc(icd);
+    struct rk29camera_platform_data *pdata = desc->subdev_desc.drv_priv;
     struct rkcamera_platform_data *sensor_device=NULL,*new_camera;
 
     new_camera = pdata->register_dev_new;
-    //while (strstr(new_camera->dev_name,"end")==NULL) {
     while(new_camera != NULL){
         if (strcmp(dev_name(icd->pdev), new_camera->dev_name) == 0) {
             sensor_device = new_camera;
             break;
         }
-        //new_camera++;
         new_camera = new_camera->next_camera;
     }
     
@@ -884,16 +878,13 @@ sensor_INIT_ERR:
 
 unsigned long generic_sensor_query_bus_param(struct soc_camera_device *icd)
 {
-       //struct soc_camera_link *icl = to_soc_camera_link(icd);
-       struct soc_camera_desc *desc = to_soc_camera_desc(icd);/*yzm*/
+       struct soc_camera_desc *desc = to_soc_camera_desc(icd);
        struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
        struct generic_sensor *sensor = to_generic_sensor(client);
-       /**************yzm************/
        struct v4l2_mbus_config cfg;    
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
        cfg.flags = sensor->info_priv.bus_parameter;
-       return soc_camera_apply_board_flags(&(desc->subdev_desc), &cfg);/*yzm*/
-       /**************yzm*************/
+       return soc_camera_apply_board_flags(&(desc->subdev_desc), &cfg);
 }
 
 int generic_sensor_g_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
@@ -1101,7 +1092,6 @@ int generic_sensor_s_ext_control(struct soc_camera_device *icd, struct v4l2_ext_
         struct i2c_client *client = v4l2_get_subdevdata(sd);
         struct soc_camera_subdev_desc *ssdd = client->dev.platform_data;
        struct soc_camera_device *icd = ssdd->socdev;
-     //struct generic_sensor *sensor = to_generic_sensor(client);
         int i, error_cnt=0, error_idx=-1;
  
         for (i=0; i<ext_ctrl->count; i++) {
@@ -1126,7 +1116,6 @@ int generic_sensor_s_ext_controls(struct v4l2_subdev *sd, struct v4l2_ext_contro
     struct i2c_client *client = v4l2_get_subdevdata(sd);
     struct soc_camera_subdev_desc *ssdd = client->dev.platform_data;
        struct soc_camera_device *icd = ssdd->socdev;
-    //struct generic_sensor*sensor = to_generic_sensor(client);
     int i, error_cnt=0, error_idx=-1;
 
 
@@ -1194,7 +1183,6 @@ long generic_sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
             }
 
             new_camera = sensor->sensor_io_request->register_dev_new;
-            //while (strstr(new_camera->dev_name,"end")==NULL) {
             while(new_camera != NULL){
                 if (strcmp(dev_name(icd->pdev), new_camera->dev_name) == 0) {
                     if (new_camera->flash){
@@ -1204,7 +1192,6 @@ long generic_sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
                     }
                     break;
                 }
-                //new_camera++;
                 new_camera = new_camera->next_camera;
             }
 
@@ -1282,7 +1269,6 @@ int generic_sensor_enum_fmt(struct v4l2_subdev *sd, unsigned int index,
     struct soc_camera_subdev_desc *ssdd = client->dev.platform_data;
        struct soc_camera_device *icd = ssdd->socdev;
        struct generic_sensor*sensor = to_generic_sensor(client);
-       //struct rk_sensor_focus_cmd_info cmdinfo;
        int zone_tm_pos[4];
        int ret = 0;
        
index 4575ba69e55a6259602a04d64f006138dec2435f..09043f55aa14eb1da17d68a9e9184d5627cfc526 100755 (executable)
@@ -13,7 +13,7 @@
 #include <media/soc_camera.h>\r
 #include <linux/vmalloc.h>\r
 #include <linux/module.h>\r
-#include "../../../arch/arm/mach-rockchip/rk30_camera.h"/*yzm*/\r
+#include "../../../arch/arm/mach-rockchip/rk30_camera.h"\r
 #include <linux/kernel.h>\r
 /* Camera Sensor driver */\r
 \r
index f7f081f74eb5f6e04d52dc913f6104efc9721e4f..e6c499abb34b776fbf4e2a74106459a26b53695c 100755 (executable)
 #include <linux/rockchip/iomap.h>
 
 #include "../../video/rockchip/rga/rga.h"
-#include "../../../arch/arm/mach-rockchip/rk30_camera.h"/*yzm*/
+#include "../../../arch/arm/mach-rockchip/rk30_camera.h"
 #include <linux/rockchip/cru.h>
 
-/*******yzm*********
-
-#include <plat/efuse.h>
-#if (defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3026))
-#include <mach/rk2928_camera.h>
-#include <mach/cru.h>
-#include <mach/pmu.h>
-#define SOFT_RST_CIF1 (SOFT_RST_MAX+1)
-#endif
-*/
 #include <asm/cacheflush.h>
 
 #include <linux/of_address.h>
@@ -157,40 +147,22 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
 #define ENABLE_32BIT_BYPASS                (0x01<<6)
 #define DISABLE_32BIT_BYPASS               (0x00<<6)
 
+extern unsigned long rk_cif_grf_base;
+extern unsigned long rk_cif_cru_base;
+
 
 #define MIN(x,y)   ((x<y) ? x: y)
 #define MAX(x,y)    ((x>y) ? x: y)
 #define RK_SENSOR_24MHZ      24*1000*1000          /* MHz */
 #define RK_SENSOR_48MHZ      48
 
-#define __raw_readl(p)           (*(unsigned long *)(p))
-#define __raw_writel(v,p)     (*(unsigned long *)(p) = (v))
+#define __raw_readl(p)           (*(unsigned int *)(p))
+#define __raw_writel(v,p)     (*(unsigned int *)(p) = (v))
 
 #define write_cif_reg(base,addr, val)  __raw_writel(val, addr+(base))
 #define read_cif_reg(base,addr) __raw_readl(addr+(base))
 #define mask_cif_reg(addr, msk, val)    write_cif_reg(addr, (val)|((~(msk))&read_cif_reg(addr)))
 
-/*
-#if defined(CONFIG_ARCH_RK30) || defined(CONFIG_ARCH_RK3188)
-//CRU,PIXCLOCK
-#define CRU_PCLK_REG30                     0xbc
-#define ENANABLE_INVERT_PCLK_CIF0          ((0x1<<24)|(0x1<<8))
-#define DISABLE_INVERT_PCLK_CIF0           ((0x1<<24)|(0x0<<8))
-#define ENANABLE_INVERT_PCLK_CIF1          ((0x1<<28)|(0x1<<12))
-#define DISABLE_INVERT_PCLK_CIF1           ((0x1<<28)|(0x0<<12))
-
-#define CRU_CIF_RST_REG30                  0x128
-#define MASK_RST_CIF0                      (0x01 << 30)
-#define MASK_RST_CIF1                      (0x01 << 31)
-#define RQUEST_RST_CIF0                    (0x01 << 14)
-#define RQUEST_RST_CIF1                    (0x01 << 15)
-
-#define write_cru_reg(addr, val)            __raw_writel(val, addr+RK30_CRU_BASE)
-#define read_cru_reg(addr)                  __raw_readl(addr+RK30_CRU_BASE)
-#define mask_cru_reg(addr, msk, val)        write_cru_reg(addr,(val)|((~(msk))&read_cru_reg(addr)))
-#endif
-*/
-/*********yzm**********/
 
 static u32 CRU_PCLK_REG30;
 static u32 CRU_CLK_OUT;
@@ -206,38 +178,11 @@ static u32 CHIP_NAME;
 #define write_cru_reg(addr, val)            __raw_writel(val, addr+RK_CRU_VIRT)
 #define read_cru_reg(addr)                  __raw_readl(addr+RK_CRU_VIRT)
 #define mask_cru_reg(addr, msk, val)        write_cru_reg(addr,(val)|((~(msk))&read_cru_reg(addr)))
-/*********yzm*********end*/
-/*
-#if defined(CONFIG_ARCH_RK2928)
-#define write_cru_reg(addr, val)  
-#define read_cru_reg(addr)                 0 
-#define mask_cru_reg(addr, msk, val)   
-#endif
-*/
 
-/*
-#if defined(CONFIG_ARCH_RK3066B) || defined(CONFIG_ARCH_RK3188)
-//GRF_IO_CON3                        0x100
-#define CIF_DRIVER_STRENGTH_2MA            (0x00 << 12)
-#define CIF_DRIVER_STRENGTH_4MA            (0x01 << 12)
-#define CIF_DRIVER_STRENGTH_8MA            (0x02 << 12)
-#define CIF_DRIVER_STRENGTH_12MA           (0x03 << 12)
-#define CIF_DRIVER_STRENGTH_MASK           (0x03 << 28)
-
-//GRF_IO_CON4                        0x104
-#define CIF_CLKOUT_AMP_3V3                 (0x00 << 10)
-#define CIF_CLKOUT_AMP_1V8                 (0x01 << 10)
-#define CIF_CLKOUT_AMP_MASK                (0x01 << 26)
-
-#define write_grf_reg(addr, val)           __raw_writel(val, addr+RK30_GRF_BASE)
-#define read_grf_reg(addr)                 __raw_readl(addr+RK30_GRF_BASE)
-#define mask_grf_reg(addr, msk, val)       write_grf_reg(addr,(val)|((~(msk))&read_grf_reg(addr)))
-#else
-#define write_grf_reg(addr, val)  
-#define read_grf_reg(addr)                 0
-#define mask_grf_reg(addr, msk, val)   
-#endif
-*/
+#define rk3368_write_cru_reg(addr, val)            __raw_writel(val, addr+rk_cif_cru_base)
+#define rk3368_read_cru_reg(addr)                  __raw_readl(addr+rk_cif_cru_base)
+#define rk3368_mask_cru_reg(addr, msk, val)        rk3368_write_cru_reg(addr,(val)|((~(msk))&rk3368_read_cru_reg(addr)))
+
 #define CAM_WORKQUEUE_IS_EN()   (true)
 #define CAM_IPPWORK_IS_EN()     (false)/*((pcdev->zoominfo.a.c.width != pcdev->icd->user_width) || (pcdev->zoominfo.a.c.height != pcdev->icd->user_height))*/
 
@@ -295,8 +240,10 @@ static u32 CHIP_NAME;
                 1. support focus mode.
 *v0.1.f:
          1. focus mode have some bug,fix it.
+*v0.2.0:
+               1. support rk3368.
 */
-#define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 1, 0xf)
+#define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 2, 0)
 static int version = RK_CAM_VERSION_CODE;
 module_param(version, int, S_IRUGO);
 
@@ -379,7 +326,7 @@ struct rk_camera_zoominfo
 #if CAMERA_VIDEOBUF_ARM_ACCESS
 struct rk29_camera_vbinfo
 {
-    unsigned int phy_addr;
+    unsigned long phy_addr;
     void __iomem *vir_addr;
     unsigned int size;
 };
@@ -437,7 +384,7 @@ struct rk_camera_dev
     unsigned long frame_interval;
     unsigned int pixfmt;
     /*for ipp  */
-    unsigned int vipmem_phybase;
+    unsigned long vipmem_phybase;
     void __iomem *vipmem_virbase;
     unsigned int vipmem_size;
     unsigned int vipmem_bsize;
@@ -535,17 +482,34 @@ static void rk_camera_diffchips(const char *rockchip_name)
                CRU_CLK_OUT = 0x16c;
                CHIP_NAME = 3288;
        }
+       else if(strstr(rockchip_name,"3368"))
+       {       
+               CRU_PCLK_REG30 = 0x154;
+               ENANABLE_INVERT_PCLK_CIF0 = ((0x1<<29)|(0x1<<13));
+               DISABLE_INVERT_PCLK_CIF0  = ((0x1<<29)|(0x0<<13));
+               ENANABLE_INVERT_PCLK_CIF1 = ENANABLE_INVERT_PCLK_CIF0;
+               DISABLE_INVERT_PCLK_CIF1  = DISABLE_INVERT_PCLK_CIF0;
 
-       
+               //CRU_CLK_OUT = 0x16c;
+               CHIP_NAME = 3368;
+       }
 }
 static inline void rk_cru_set_soft_reset(u32 idx, bool on , u32 RK_CRU_SOFTRST_CON)
 {
-       void __iomem *reg = RK_CRU_VIRT + RK_CRU_SOFTRST_CON;
        u32 val = 0;
+       void __iomem *reg;
+       
+       if(CHIP_NAME == 3368)
+               reg = (void*)(rk_cif_cru_base + RK_CRU_SOFTRST_CON);
+       else
+               reg = (void*)(RK_CRU_VIRT + RK_CRU_SOFTRST_CON);
+
        if(CHIP_NAME == 3126){
                val = on ? 0x10001U << 14 : 0x10000U << 14;
        }else if(CHIP_NAME == 3288){
                val = on ? 0x10001U << 8 : 0x10000U << 8;
+       }else if(CHIP_NAME == 3368){
+               val = on ? 0x10001U << 8 : 0x10000U << 8;
        }
        writel_relaxed(val, reg);
        dsb();
@@ -560,6 +524,8 @@ static void rk_camera_cif_reset(struct rk_camera_dev *pcdev, int only_rst)
                RK_CRU_SOFTRST_CON = RK312X_CRU_SOFTRSTS_CON(6);
        }else if(CHIP_NAME == 3288){
                RK_CRU_SOFTRST_CON = RK3288_CRU_SOFTRSTS_CON(6);
+       }else if(CHIP_NAME == 3368){
+               RK_CRU_SOFTRST_CON = RK3368_CRU_SOFTRSTS_CON(6);
        }
        
        if (only_rst == true) {
@@ -712,7 +678,6 @@ static void rk_videobuf_free(struct videobuf_queue *vq, struct rk_camera_buffer
         */
        videobuf_waiton(vq, &buf->vb, 0, 0);
     videobuf_dma_contig_free(vq, &buf->vb);
-    /*dev_dbg(&icd->dev, "%s freed\n", __func__);*/ /*yzm*/
     buf->vb.state = VIDEOBUF_NEEDS_INIT;
        return;
 }
@@ -731,9 +696,6 @@ static int rk_videobuf_prepare(struct videobuf_queue *vq, struct videobuf_buffer
 
     buf = container_of(vb, struct rk_camera_buffer, vb);
 
-    /*dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %zd\n", __func__,*/ /*yzm*/
-      /*      vb, vb->baddr, vb->bsize);*/ /*yzm*/
-    
     /* Added list head initialization on alloc */
     WARN_ON(!list_empty(&vb->queue));    
 
@@ -773,7 +735,7 @@ out:
 
 static inline void rk_videobuf_capture(struct videobuf_buffer *vb,struct rk_camera_dev *rk_pcdev)
 {
-       unsigned int y_addr,uv_addr;
+       unsigned long y_addr,uv_addr;
        struct rk_camera_dev *pcdev = rk_pcdev;
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
@@ -816,9 +778,6 @@ static void rk_videobuf_queue(struct videobuf_queue *vq,
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
 
-    /*dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %zd\n", __func__, 
-            vb, vb->baddr, vb->bsize); */ /*yzm*/
-
     vb->state = VIDEOBUF_QUEUED;
        if (list_empty(&pcdev->capture)) {
                list_add_tail(&vb->queue, &pcdev->capture);
@@ -955,7 +914,6 @@ static void rk_camera_capture_process(struct work_struct *work)
     struct rk_camera_work *camera_work = container_of(work, struct rk_camera_work, work);    
     struct videobuf_buffer *vb = camera_work->vb;    
     struct rk_camera_dev *pcdev = camera_work->pcdev;    
-    /*enum v4l2_mbus_pixelcode icd_code = pcdev->icd->current_fmt->code;    */
     unsigned long flags = 0;    
     int err = 0;    
 
@@ -1202,7 +1160,7 @@ static void rk_videobuf_release(struct videobuf_queue *vq,
 {
     struct rk_camera_buffer *buf = container_of(vb, struct rk_camera_buffer, vb);
     struct soc_camera_device *icd = vq->priv_data;
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
 #if CAMERA_VIDEOBUF_ARM_ACCESS    
     struct rk29_camera_vbinfo *vb_info =NULL;
@@ -1262,7 +1220,7 @@ static struct videobuf_queue_ops rk_videobuf_ops =
 static void rk_camera_init_videobuf(struct videobuf_queue *q,
                                       struct soc_camera_device *icd)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
@@ -1303,8 +1261,10 @@ static int rk_camera_mclk_ctrl(int cif_idx, int on, int clk_rate)
     }
    
     //spin_lock(&clk->lock);
-    if (on && !clk->on) {  
-        clk_prepare_enable(clk->pd_cif);    /*yzm*/
+    if (on && !clk->on) {
+               if(CHIP_NAME != 3368)
+               clk_prepare_enable(clk->pd_cif);
+
         clk_prepare_enable(clk->aclk_cif);
        clk_prepare_enable(clk->hclk_cif);
        clk_prepare_enable(clk->cif_clk_in);
@@ -1312,7 +1272,7 @@ static int rk_camera_mclk_ctrl(int cif_idx, int on, int clk_rate)
         clk_set_rate(clk->cif_clk_out,clk_rate);
         clk->on = true;
     } else if (!on && clk->on) {
-               clk_set_rate(clk->cif_clk_out,36000000);/*yzm :just for close clk which base on XIN24M */
+               clk_set_rate(clk->cif_clk_out,36000000);/*just for close clk which base on XIN24M */
         clk_disable_unprepare(clk->aclk_cif);
        clk_disable_unprepare(clk->hclk_cif);
        clk_disable_unprepare(clk->cif_clk_in);
@@ -1321,7 +1281,8 @@ static int rk_camera_mclk_ctrl(int cif_idx, int on, int clk_rate)
                        write_cru_reg(CRU_CLK_OUT, 0x00800080);
                }
        clk_disable_unprepare(clk->cif_clk_out);
-       clk_disable_unprepare(clk->pd_cif);
+               if(CHIP_NAME != 3368)
+               clk_disable_unprepare(clk->pd_cif);
                
                clk->on = false;
     }
@@ -1357,7 +1318,7 @@ static void rk_camera_deactivate(struct rk_camera_dev *pcdev)
  * there can be only one camera on RK28 quick capture interface */
 static int rk_camera_add_device(struct soc_camera_device *icd)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;    /*Initialize in rk_camra_prob*/
     struct device *control = to_soc_camera_control(icd);
     struct v4l2_subdev *sd;
@@ -1403,9 +1364,7 @@ static int rk_camera_add_device(struct soc_camera_device *icd)
         if (ret)
             goto ebusy;
         #endif
-               /* call generic_sensor_ioctl*/
         v4l2_subdev_call(sd, core, ioctl, RK29_CAM_SUBDEV_CB_REGISTER,(void*)(&pcdev->icd_cb));
-               /* call generic_sensor_cropcap*/
         if (v4l2_subdev_call(sd, video, cropcap, &cropcap) == 0) {
             memcpy(&pcdev->cropinfo.bounds ,&cropcap.bounds,sizeof(struct v4l2_rect));
         } else {
@@ -1455,9 +1414,8 @@ ebusy:
 }
 static void rk_camera_remove_device(struct soc_camera_device *icd)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
-       /*struct v4l2_subdev *sd = soc_camera_to_subdev(icd);*/
 #if CAMERA_VIDEOBUF_ARM_ACCESS    
     struct rk29_camera_vbinfo *vb_info;
     unsigned int i;
@@ -1478,7 +1436,7 @@ static void rk_camera_remove_device(struct soc_camera_device *icd)
                rk_camera_s_stream(icd,0);
        } 
        /* move DEACTIVATE into generic_sensor_s_power*/
-    /* v4l2_subdev_call(sd, core, ioctl, RK29_CAM_SUBDEV_DEACTIVATE,NULL);*/ /*yzm*/
+    /* v4l2_subdev_call(sd, core, ioctl, RK29_CAM_SUBDEV_DEACTIVATE,NULL);*/
     /* if stream off is not been executed,timer is running.*/
     if(pcdev->fps_timer.istarted){
          hrtimer_cancel(&pcdev->fps_timer.timer);
@@ -1529,7 +1487,7 @@ static int rk_camera_set_bus_param(struct soc_camera_device *icd, __u32 pixfmt)
     unsigned int cif_for = 0;
        const struct soc_mbus_pixelfmt *fmt;
        int ret = 0;
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent); /*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
        struct rk_camera_dev *pcdev = ici->priv;
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
@@ -1582,15 +1540,27 @@ static int rk_camera_set_bus_param(struct soc_camera_device *icd, __u32 pixfmt)
     
     if (common_flags & V4L2_MBUS_PCLK_SAMPLE_FALLING) {
                if(IS_CIF0()) {
-               write_cru_reg(CRU_PCLK_REG30, read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF0);
+                       if(CHIP_NAME == 3368)
+                       rk3368_write_cru_reg(CRU_PCLK_REG30, rk3368_read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF0);
+                       else
+                               write_cru_reg(CRU_PCLK_REG30, read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF0);
         } else {
-               write_cru_reg(CRU_PCLK_REG30, read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF1);
+               if(CHIP_NAME == 3368)
+                       rk3368_write_cru_reg(CRU_PCLK_REG30, rk3368_read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF1);
+                       else
+                               write_cru_reg(CRU_PCLK_REG30, read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF1);
         }
     } else {
                if(IS_CIF0()){
-                       write_cru_reg(CRU_PCLK_REG30, (read_cru_reg(CRU_PCLK_REG30) & 0xFFFFFF7F ) | DISABLE_INVERT_PCLK_CIF0);
+                       if(CHIP_NAME == 3368)
+                               rk3368_write_cru_reg(CRU_PCLK_REG30, (rk3368_read_cru_reg(CRU_PCLK_REG30) & 0xFFFFFF7F ) | DISABLE_INVERT_PCLK_CIF0);
+                       else
+                               write_cru_reg(CRU_PCLK_REG30, (read_cru_reg(CRU_PCLK_REG30) & 0xFFFFFF7F ) | DISABLE_INVERT_PCLK_CIF0);
         } else {
-                       write_cru_reg(CRU_PCLK_REG30, (read_cru_reg(CRU_PCLK_REG30) & 0xFFFEFFF) | DISABLE_INVERT_PCLK_CIF1);
+               if(CHIP_NAME == 3368)
+                               rk3368_write_cru_reg(CRU_PCLK_REG30, (rk3368_read_cru_reg(CRU_PCLK_REG30) & 0xFFFEFFF) | DISABLE_INVERT_PCLK_CIF1);
+                       else
+                               write_cru_reg(CRU_PCLK_REG30, (read_cru_reg(CRU_PCLK_REG30) & 0xFFFEFFF) | DISABLE_INVERT_PCLK_CIF1);
         }
     }
     
@@ -1686,7 +1656,7 @@ static const struct soc_mbus_pixelfmt rk_camera_formats[] = {
 
 static void rk_camera_setup_format(struct soc_camera_device *icd, __u32 host_pixfmt, enum v4l2_mbus_pixelcode icd_code, struct v4l2_rect *rect)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
     unsigned int cif_fs = 0,cif_crop = 0;
     unsigned int cif_fmt_val = read_cif_reg(pcdev->base,CIF_CIF_FOR) | INPUT_MODE_YUV|YUV_INPUT_422|INPUT_420_ORDER_EVEN|OUTPUT_420_ORDER_EVEN;
@@ -1731,7 +1701,7 @@ static void rk_camera_setup_format(struct soc_camera_device *icd, __u32 host_pix
                        pcdev->frame_inval = RK_CAM_FRAME_INVAL_INIT;
                pcdev->pixfmt = host_pixfmt;
                break;
-            default:                                                                                /* ddl@rock-chips.com : vip output format is hold when pixfmt is invalidate */
+            default:   /* ddl@rock-chips.com : vip output format is hold when pixfmt is invalidate */
                        cif_fmt_val |= YUV_OUTPUT_422;
                 break;
     }
@@ -1786,7 +1756,7 @@ static int rk_camera_get_formats(struct soc_camera_device *icd, unsigned int idx
                                  struct soc_camera_format_xlate *xlate)
 {
     struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
-       struct device *dev = icd->parent;/*yzm*/
+       struct device *dev = icd->parent;
     int formats = 0, ret;
        enum v4l2_mbus_pixelcode code;
        const struct soc_mbus_pixelfmt *fmt;
@@ -1794,7 +1764,7 @@ static int rk_camera_get_formats(struct soc_camera_device *icd, unsigned int idx
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
 
 
-       ret = v4l2_subdev_call(sd, video, enum_mbus_fmt, idx, &code);  /*call generic_sensor_enum_fmt()*/
+       ret = v4l2_subdev_call(sd, video, enum_mbus_fmt, idx, &code);
        if (ret < 0)
                /* No more formats */
                return 0;
@@ -1904,7 +1874,7 @@ end:
 }
 static int rk_camera_get_crop(struct soc_camera_device *icd,struct v4l2_crop *crop)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
@@ -1919,7 +1889,7 @@ static int rk_camera_get_crop(struct soc_camera_device *icd,struct v4l2_crop *cr
 static int rk_camera_set_crop(struct soc_camera_device *icd,
                               const struct v4l2_crop *crop)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
@@ -1962,10 +1932,10 @@ static bool rk_camera_fmt_capturechk(struct v4l2_format *f)
 static int rk_camera_set_fmt(struct soc_camera_device *icd,
                              struct v4l2_format *f)
 {
-       struct device *dev = icd->parent;/*yzm*/
+       struct device *dev = icd->parent;
     struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
     const struct soc_camera_format_xlate *xlate = NULL;
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
     struct v4l2_pix_format *pix = &f->fmt.pix;
     struct v4l2_mbus_framefmt mf;
@@ -1990,9 +1960,9 @@ static int rk_camera_set_fmt(struct soc_camera_device *icd,
     
     /* ddl@rock-chips.com: sensor init code transmit in here after open */
     if (pcdev->icd_init == 0) {
-        v4l2_subdev_call(sd,core, init, 0);  /*call generic_sensor_init()*/
+        v4l2_subdev_call(sd,core, init, 0);
         pcdev->icd_init = 1;
-        return 0;                                                      /*directly return !!!!!!*/
+        return 0;
     }
     stream_on = read_cif_reg(pcdev->base,CIF_CIF_CTRL);
     if (stream_on & ENABLE_CAPTURE)
@@ -2006,7 +1976,7 @@ static int rk_camera_set_fmt(struct soc_camera_device *icd,
     mf.reserved[0] = pix->priv;              /* ddl@rock-chips.com : v0.3.3 */
     mf.reserved[1] = 0;
 
-    ret = v4l2_subdev_call(sd, video, s_mbus_fmt, &mf);  /*generic_sensor_s_fmt*/
+    ret = v4l2_subdev_call(sd, video, s_mbus_fmt, &mf);
     if (mf.code != xlate->code)
                return -EINVAL;                 
 
@@ -2201,7 +2171,7 @@ RK_CAMERA_SET_FMT_END:
 static int rk_camera_try_fmt(struct soc_camera_device *icd,
                                    struct v4l2_format *f)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
        struct rk_camera_dev *pcdev = ici->priv;
     struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
     const struct soc_camera_format_xlate *xlate;
@@ -2221,7 +2191,7 @@ static int rk_camera_try_fmt(struct soc_camera_device *icd,
     xlate = soc_camera_xlate_by_fourcc(icd, pixfmt);  
     if (!xlate) {
         /*dev_err(icd->dev.parent, "Format (%c%c%c%c) not found\n", pixfmt & 0xFF, (pixfmt >> 8) & 0xFF,*/
-               dev_err(icd->parent, "Format (%c%c%c%c) not found\n", pixfmt & 0xFF, (pixfmt >> 8) & 0xFF,/*yzm*/
+               dev_err(icd->parent, "Format (%c%c%c%c) not found\n", pixfmt & 0xFF, (pixfmt >> 8) & 0xFF,
                        (pixfmt >> 16) & 0xFF, (pixfmt >> 24) & 0xFF);
         ret = -EINVAL;
         RKCAMERA_TR("%s(version:%c%c%c) support format:\n",rk_cam_driver_description,(RK_CAM_VERSION_CODE&0xff0000)>>16,
@@ -2254,7 +2224,6 @@ static int rk_camera_try_fmt(struct soc_camera_device *icd,
     if ((usr_w == 10000) && (usr_h == 10000)) {
         mf.reserved[6] = 0xfefe5a5a;
     }
-       /* call generic_sensor_try_fmt()*/
        ret = v4l2_subdev_call(sd, video, try_mbus_fmt, &mf);
        if (ret < 0)
                goto RK_CAMERA_TRY_FMT_END;
@@ -2281,7 +2250,7 @@ static int rk_camera_try_fmt(struct soc_camera_device *icd,
                        pix->width = usr_w;
                        pix->height = usr_h;
                } else {
-                       /*RKCAMERA_TR("vipmem for IPP is overflow, This resolution(%dx%d -> %dx%d) is invalidate!\n",mf.width,mf.height,usr_w,usr_h);*/ /*yzm*/
+                       /*RKCAMERA_TR("vipmem for IPP is overflow, This resolution(%dx%d -> %dx%d) is invalidate!\n",mf.width,mf.height,usr_w,usr_h);*/
             pix->width = mf.width;
             pix->height = mf.height;            
                }
@@ -2408,7 +2377,7 @@ static int rk_camera_querycap(struct soc_camera_host *ici,
 }
 static int rk_camera_suspend(struct soc_camera_device *icd, pm_message_t state)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
        struct v4l2_subdev *sd;
     int ret = 0;
@@ -2444,7 +2413,7 @@ static int rk_camera_suspend(struct soc_camera_device *icd, pm_message_t state)
 
 static int rk_camera_resume(struct soc_camera_device *icd)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
        struct v4l2_subdev *sd;
     int ret = 0;
@@ -2490,7 +2459,6 @@ static void rk_camera_reinit_work(struct work_struct *work)
     struct v4l2_subdev *sd;
        struct rk_camera_work *camera_work = container_of(work, struct rk_camera_work, work);
        struct rk_camera_dev *pcdev = camera_work->pcdev;
-    /*struct soc_camera_link *tmp_soc_cam_link;*/
     struct v4l2_mbus_framefmt mf;
     int index = 0;
        unsigned long flags = 0;
@@ -2502,28 +2470,30 @@ static void rk_camera_reinit_work(struct work_struct *work)
     if(pcdev->icd == NULL)
         return;
     sd = soc_camera_to_subdev(pcdev->icd);
-    /*tmp_soc_cam_desc = to_soc_camera_link(pcdev->icd);*/ /*yzm*/
        /*dump regs*/
        {
-               RKCAMERA_TR("CIF_CIF_CTRL = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_CTRL));
-               RKCAMERA_TR("CIF_CIF_INTEN = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_INTEN));
-               RKCAMERA_TR("CIF_CIF_INTSTAT = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_INTSTAT));
-               RKCAMERA_TR("CIF_CIF_FOR = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_FOR));
-               RKCAMERA_TR("CIF_CIF_CROP = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_CROP));
-               RKCAMERA_TR("CIF_CIF_SET_SIZE = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_SET_SIZE));
-               RKCAMERA_TR("CIF_CIF_SCL_CTRL = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_CTRL));
-               RKCAMERA_TR("CRU_PCLK_REG30 = 0X%lx\n",read_cru_reg(CRU_PCLK_REG30));
-               RKCAMERA_TR("CIF_CIF_LAST_LINE = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_LINE));
+               RKCAMERA_TR("CIF_CIF_CTRL = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_CTRL));
+               RKCAMERA_TR("CIF_CIF_INTEN = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_INTEN));
+               RKCAMERA_TR("CIF_CIF_INTSTAT = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_INTSTAT));
+               RKCAMERA_TR("CIF_CIF_FOR = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_FOR));
+               RKCAMERA_TR("CIF_CIF_CROP = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_CROP));
+               RKCAMERA_TR("CIF_CIF_SET_SIZE = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_SET_SIZE));
+               RKCAMERA_TR("CIF_CIF_SCL_CTRL = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_CTRL));
+               if(CHIP_NAME == 3368)
+                       RKCAMERA_TR("CRU_PCLK_REG30 = 0X%x\n",rk3368_read_cru_reg(CRU_PCLK_REG30));
+               else
+                       RKCAMERA_TR("CRU_PCLK_REG30 = 0X%x\n",read_cru_reg(CRU_PCLK_REG30));
+               RKCAMERA_TR("CIF_CIF_LAST_LINE = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_LINE));
                
-               RKCAMERA_TR("CIF_CIF_LAST_PIX = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_PIX));
-               RKCAMERA_TR("CIF_CIF_VIR_LINE_WIDTH = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_VIR_LINE_WIDTH));
-       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
-       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_Y = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_Y));
-       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_UV = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_UV));
-       RKCAMERA_TR("CIF_CIF_FRAME_STATUS = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_FRAME_STATUS));
-       RKCAMERA_TR("CIF_CIF_SCL_VALID_NUM = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_VALID_NUM));
-       RKCAMERA_TR("CIF_CIF_CUR_DST = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_CUR_DST));
-       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
+               RKCAMERA_TR("CIF_CIF_LAST_PIX = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_PIX));
+               RKCAMERA_TR("CIF_CIF_VIR_LINE_WIDTH = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_VIR_LINE_WIDTH));
+       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
+       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_Y = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_Y));
+       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_UV = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_UV));
+       RKCAMERA_TR("CIF_CIF_FRAME_STATUS = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRAME_STATUS));
+       RKCAMERA_TR("CIF_CIF_SCL_VALID_NUM = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_VALID_NUM));
+       RKCAMERA_TR("CIF_CIF_CUR_DST = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_CUR_DST));
+       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
        }
        
     ctrl = read_cif_reg(pcdev->base,CIF_CIF_CTRL);          /*ddl@rock-chips.com v0.3.0x13*/
@@ -2585,9 +2555,6 @@ static enum hrtimer_restart rk_camera_fps_func(struct hrtimer *timer)
        struct rk_camera_timer *fps_timer = container_of(timer, struct rk_camera_timer, timer);
        struct rk_camera_dev *pcdev = fps_timer->pcdev;
     int rec_flag,i;
-       /*static unsigned int last_fps = 0;*/
-       /*struct soc_camera_link *tmp_soc_cam_link;*/ /*yzm*/
-       /*tmp_soc_cam_link = to_soc_camera_link(pcdev->icd);*/ /*yzm*/
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
 
@@ -2611,7 +2578,7 @@ static enum hrtimer_restart rk_camera_fps_func(struct hrtimer *timer)
         fival_pre = fival_nxt;
         while (fival_nxt != NULL) {
 
-            RKCAMERA_DG1("%s %c%c%c%c %dx%d framerate : %d/%d\n", dev_name(pcdev->icd->control), /*yzm*/
+            RKCAMERA_DG1("%s %c%c%c%c %dx%d framerate : %d/%d\n", dev_name(pcdev->icd->control),
                 fival_nxt->fival.pixel_format & 0xFF, (fival_nxt->fival.pixel_format >> 8) & 0xFF,
                            (fival_nxt->fival.pixel_format >> 16) & 0xFF, (fival_nxt->fival.pixel_format >> 24),
                            fival_nxt->fival.width, fival_nxt->fival.height, fival_nxt->fival.discrete.denominator,
@@ -2673,7 +2640,7 @@ static enum hrtimer_restart rk_camera_fps_func(struct hrtimer *timer)
 }
 static int rk_camera_s_stream(struct soc_camera_device *icd, int enable)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
     int cif_ctrl_val;
        int ret;
@@ -2705,7 +2672,7 @@ static int rk_camera_s_stream(struct soc_camera_device *icd, int enable)
                cif_ctrl_val |= ENABLE_CAPTURE;
         write_cif_reg(pcdev->base,CIF_CIF_CTRL, cif_ctrl_val);
         spin_unlock_irqrestore(&pcdev->lock,flags);
-        printk("%s:stream enable CIF_CIF_CTRL 0x%lx\n",__func__,read_cif_reg(pcdev->base,CIF_CIF_CTRL));
+        printk("%s:stream enable CIF_CIF_CTRL 0x%x\n",__func__,read_cif_reg(pcdev->base,CIF_CIF_CTRL));
                hrtimer_start(&(pcdev->fps_timer.timer),ktime_set(3, 0),HRTIMER_MODE_REL);
         pcdev->fps_timer.istarted = true;
        } else {
@@ -2735,12 +2702,12 @@ static int rk_camera_s_stream(struct soc_camera_device *icd, int enable)
         pcdev->active = NULL;
         INIT_LIST_HEAD(&pcdev->capture);
     }
-       RKCAMERA_DG1("s_stream: enable : 0x%x , CIF_CIF_CTRL = 0x%lx\n",enable,read_cif_reg(pcdev->base,CIF_CIF_CTRL));
+       RKCAMERA_DG1("s_stream: enable : 0x%x , CIF_CIF_CTRL = 0x%x\n",enable,read_cif_reg(pcdev->base,CIF_CIF_CTRL));
        return 0;
 }
 int rk_camera_enum_frameintervals(struct soc_camera_device *icd, struct v4l2_frmivalenum *fival)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
     struct rk_camera_dev *pcdev = ici->priv;
     struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
     struct rk_camera_frmivalenum *fival_list = NULL;
@@ -2874,7 +2841,7 @@ static int rk_camera_set_digit_zoom(struct soc_camera_device *icd,
                                                                const struct v4l2_queryctrl *qctrl, int zoom_rate)
 {
        struct v4l2_crop a;
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
        struct rk_camera_dev *pcdev = ici->priv;
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
@@ -2962,7 +2929,7 @@ static inline struct v4l2_queryctrl const *rk_camera_soc_camera_find_qctrl(
 static int rk_camera_set_ctrl(struct soc_camera_device *icd,
                                                                struct v4l2_control *sctrl)
 {
-       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);/*yzm*/
+       struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
        const struct v4l2_queryctrl *qctrl;
     struct rk_camera_dev *pcdev = ici->priv;
 
@@ -3026,7 +2993,6 @@ static struct soc_camera_host_ops rk_soc_camera_host_ops =
     .num_controls = ARRAY_SIZE(rk_camera_controls)
 };
 
-/**********yzm***********/
 static int rk_camera_cif_iomux(struct device *dev)
 {
 
@@ -3040,6 +3006,9 @@ static int rk_camera_cif_iomux(struct device *dev)
 
        if(CHIP_NAME == 3288){
                __raw_writel(((1<<1)|(1<<(1+16))),RK_GRF_VIRT+0x0380);
+       }else if(CHIP_NAME == 3368){
+               //__raw_writel(((1<<1)|(1<<(1+16))),RK_GRF_VIRT+0x0900);
+               __raw_writel(((1<<1)|(1<<(1+16))),rk_cif_grf_base+0x0900);
        }
 
     /*mux CIF0_CLKOUT*/
@@ -3068,7 +3037,6 @@ static int rk_camera_cif_iomux(struct device *dev)
     return 0;
             
 }
-/***********yzm***********/
 static int rk_camera_probe(struct platform_device *pdev)
 {
     struct rk_camera_dev *pcdev;
@@ -3077,7 +3045,7 @@ static int rk_camera_probe(struct platform_device *pdev)
     int irq,i;
     int err = 0;
     struct rk_cif_clk *clk=NULL;
-       struct device *dev_cif = ((struct rk29camera_platform_data*)pdev->dev.platform_data)->cif_dev;/*yzm*/
+       struct device *dev_cif = ((struct rk29camera_platform_data*)pdev->dev.platform_data)->cif_dev;
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
 
@@ -3094,7 +3062,6 @@ static int rk_camera_probe(struct platform_device *pdev)
         BUG();
     }
 
-/***********yzm**********/
        rk_camera_diffchips(((struct rk29camera_platform_data*)pdev->dev.platform_data)->rockchip_name);
 
     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -3123,40 +3090,41 @@ static int rk_camera_probe(struct platform_device *pdev)
     pcdev->chip_id = -1;
     #endif
 
-       /***********yzm***********/
        if (IS_CIF0()) {
                debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/is_cif0\n");
         clk = &cif_clk[0];
-        cif_clk[0].pd_cif = devm_clk_get(dev_cif, "pd_cif0");
+               if(CHIP_NAME != 3368)
+               cif_clk[0].pd_cif = devm_clk_get(dev_cif, "pd_cif0");
+
         cif_clk[0].aclk_cif = devm_clk_get(dev_cif, "aclk_cif0");
         cif_clk[0].hclk_cif = devm_clk_get(dev_cif, "hclk_cif0");
         cif_clk[0].cif_clk_in = devm_clk_get(dev_cif, "cif0_in");
         cif_clk[0].cif_clk_out = devm_clk_get(dev_cif, "cif0_out");
         //spin_lock_init(&cif_clk[0].lock);
         cif_clk[0].on = false;
-        rk_camera_cif_iomux(dev_cif);/*yzm*/
+        rk_camera_cif_iomux(dev_cif);
     } else {
        clk = &cif_clk[1];
-        cif_clk[1].pd_cif = devm_clk_get(dev_cif, "pd_cif0");/*cif0  only yzm*/
+               if(CHIP_NAME != 3368)
+               cif_clk[1].pd_cif = devm_clk_get(dev_cif, "pd_cif0");/*cif0  only */
+
         cif_clk[1].aclk_cif = devm_clk_get(dev_cif, "aclk_cif0");
         cif_clk[1].hclk_cif = devm_clk_get(dev_cif, "hclk_cif0");
         cif_clk[1].cif_clk_in = devm_clk_get(dev_cif, "cif0_in");
         cif_clk[1].cif_clk_out = devm_clk_get(dev_cif, "cif0_out");
         //spin_lock_init(&cif_clk[1].lock);
         cif_clk[1].on = false;
-        rk_camera_cif_iomux(dev_cif);/*yzm*/
+        rk_camera_cif_iomux(dev_cif);
     }
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
 
-       /***********yzm**********/
     dev_set_drvdata(&pdev->dev, pcdev);
     pcdev->res = res;
     pcdev->pdata = pdev->dev.platform_data;             /* ddl@rock-chips.com : Request IO in init function */
-                                       /*= rk_camera_platform_data */
        if (pcdev->pdata && pcdev->pdata->io_init) {
                
-        pcdev->pdata->io_init();/* call rk_sensor_io_init()*/
+        pcdev->pdata->io_init();
 
         if (pcdev->pdata->sensor_mclk == NULL)
             pcdev->pdata->sensor_mclk = rk_camera_mclk_ctrl;
@@ -3222,7 +3190,7 @@ static int rk_camera_probe(struct platform_device *pdev)
     }
     pcdev->soc_host.drv_name   = RK29_CAM_DRV_NAME;
     pcdev->soc_host.ops                = &rk_soc_camera_host_ops;
-    pcdev->soc_host.priv               = pcdev;        /*to itself,csll in rk_camera_add_device*/
+    pcdev->soc_host.priv               = pcdev;
     pcdev->soc_host.v4l2_dev.dev       = &pdev->dev;
     pcdev->soc_host.nr         = pdev->id;
        debug_printk("/$$$$$$$$$$$$$$$$$$$$$$/next soc_camera_host_register\n");
@@ -3272,8 +3240,10 @@ exit_ioremap_vip:
     release_mem_region(res->start, res->end - res->start + 1);
 exit_reqmem_vip:
     if (clk) {
-        if (clk->pd_cif)
-            clk_put(clk->pd_cif);
+               if(CHIP_NAME != 3368){
+                       if (clk->pd_cif)
+                           clk_put(clk->pd_cif);
+               }
         if (clk->aclk_cif)
             clk_put(clk->aclk_cif);
         if (clk->hclk_cif)
index 5b8a39b01e865116976744fe45d34f2fa8b33dc0..8fe805c0674e7fbc6213fe55667eff3daf3124d9 100755 (executable)
@@ -161,13 +161,16 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
 #define CIF_F0_READY (0x01<<0)
 #define CIF_F1_READY (0x01<<1)
 
+extern unsigned long rk_cif_grf_base;
+extern unsigned long rk_cif_cru_base;
+
 #define MIN(x,y)   ((x<y) ? x: y)
 #define MAX(x,y)    ((x>y) ? x: y)
 #define RK_SENSOR_24MHZ      24*1000*1000          /* MHz */
 #define RK_SENSOR_48MHZ      48
 
-#define __raw_readl(p)           (*(unsigned long *)(p))
-#define __raw_writel(v,p)     (*(unsigned long *)(p) = (v))
+#define __raw_readl(p)           (*(unsigned int *)(p))
+#define __raw_writel(v,p)     (*(unsigned int *)(p) = (v))
 
 #define write_cif_reg(base,addr, val)  __raw_writel(val, addr+(base))
 #define read_cif_reg(base,addr) __raw_readl(addr+(base))
@@ -207,6 +210,11 @@ static u32 CHIP_NAME;
 #define write_cru_reg(addr, val)            __raw_writel(val, addr+RK_CRU_VIRT)
 #define read_cru_reg(addr)                  __raw_readl(addr+RK_CRU_VIRT)
 #define mask_cru_reg(addr, msk, val)        write_cru_reg(addr,(val)|((~(msk))&read_cru_reg(addr)))
+
+#define rk3368_write_cru_reg(addr, val)            __raw_writel(val, addr+rk_cif_cru_base)
+#define rk3368_read_cru_reg(addr)                  __raw_readl(addr+rk_cif_cru_base)
+#define rk3368_mask_cru_reg(addr, msk, val)        rk3368_write_cru_reg(addr,(val)|((~(msk))&rk3368_read_cru_reg(addr)))
+
 /*********yzm*********end*/
 /*
 #if defined(CONFIG_ARCH_RK2928)
@@ -282,8 +290,10 @@ static u32 CHIP_NAME;
                 1. Support pingpong mode.
                 2. Fix cif_clk_out cannot close which base on XIN24M and cannot turn to 0.
                 3. Move Camera Sensor Macro from rk_camera.h to rk_camera_sensor_info.h
+*v0.1.a:
+               1. Support rk3368.
 */
-#define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 1, 0x9)
+#define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 1, 0xa)
 static int version = RK_CAM_VERSION_CODE;
 module_param(version, int, S_IRUGO);
 
@@ -366,7 +376,7 @@ struct rk_camera_zoominfo
 #if CAMERA_VIDEOBUF_ARM_ACCESS
 struct rk29_camera_vbinfo
 {
-    unsigned int phy_addr;
+    unsigned long phy_addr;
     void __iomem *vir_addr;
     unsigned int size;
 };
@@ -424,7 +434,7 @@ struct rk_camera_dev
     unsigned long frame_interval;
     unsigned int pixfmt;
     /*for ipp  */
-    unsigned int vipmem_phybase;
+    unsigned long vipmem_phybase;
     void __iomem *vipmem_virbase;
     unsigned int vipmem_size;
     unsigned int vipmem_bsize;
@@ -508,12 +518,33 @@ static void rk_camera_diffchips(const char *rockchip_name)
                CRU_CLKSEL29_CON = 0xb8;
 
                CHIP_NAME = 3126;
+       }else if(strstr(rockchip_name,"3368"))
+       {       
+               CRU_PCLK_REG30 = 0x154;
+               ENANABLE_INVERT_PCLK_CIF0 = ((0x1<<29)|(0x1<<13));
+               DISABLE_INVERT_PCLK_CIF0  = ((0x1<<29)|(0x0<<13));
+               ENANABLE_INVERT_PCLK_CIF1 = ENANABLE_INVERT_PCLK_CIF0;
+               DISABLE_INVERT_PCLK_CIF1  = DISABLE_INVERT_PCLK_CIF0;
+
+               //CRU_CLK_OUT = 0x16c;
+               CHIP_NAME = 3368;
        }
 }
 static inline void rk_cru_set_soft_reset(u32 idx, bool on , u32 RK_CRU_SOFTRST_CON)
 {
-       void __iomem *reg = RK_CRU_VIRT + RK_CRU_SOFTRST_CON;
-       u32 val = on ? 0x10001U << 14 : 0x10000U << 14;
+       u32 val = 0;
+       void __iomem *reg;
+       
+       if(CHIP_NAME == 3368)
+               reg = (void*)(rk_cif_cru_base + RK_CRU_SOFTRST_CON);
+       else
+               reg = (void*)(RK_CRU_VIRT + RK_CRU_SOFTRST_CON);
+
+       if(CHIP_NAME == 3126){
+               val = on ? 0x10001U << 14 : 0x10000U << 14;
+       }else if(CHIP_NAME == 3368){
+               val = on ? 0x10001U << 8 : 0x10000U << 8;
+       }
        writel_relaxed(val, reg);
        dsb();
 }
@@ -525,6 +556,8 @@ static void rk_camera_cif_reset(struct rk_camera_dev *pcdev, int only_rst)
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
        if(strstr(pcdev->pdata->rockchip_name,"3128")||strstr(pcdev->pdata->rockchip_name,"3126"))
                RK_CRU_SOFTRST_CON = RK312X_CRU_SOFTRSTS_CON(6);
+       else if(strstr(pcdev->pdata->rockchip_name,"3368"))
+               RK_CRU_SOFTRST_CON = RK3368_CRU_SOFTRSTS_CON(6);
        
        if (only_rst == true) {
         rk_cru_set_soft_reset(0, true ,RK_CRU_SOFTRST_CON);
@@ -737,7 +770,7 @@ out:
 
 static inline void rk_videobuf_capture(struct videobuf_buffer *vb,struct rk_camera_dev *rk_pcdev, int fmt_ready)
 {
-       unsigned int y_addr,uv_addr;
+       unsigned long y_addr,uv_addr;
        struct rk_camera_dev *pcdev = rk_pcdev;
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
@@ -1302,8 +1335,9 @@ static int rk_camera_mclk_ctrl(int cif_idx, int on, int clk_rate)
     }
    
     //spin_lock(&clk->lock);
-    if (on && !clk->on) {  
-        clk_prepare_enable(clk->pd_cif);    /*yzm*/
+    if (on && !clk->on) {
+               if(CHIP_NAME != 3368)
+               clk_prepare_enable(clk->pd_cif);    /*yzm*/
         clk_prepare_enable(clk->aclk_cif);
        clk_prepare_enable(clk->hclk_cif);
        clk_prepare_enable(clk->cif_clk_in);
@@ -1321,7 +1355,8 @@ static int rk_camera_mclk_ctrl(int cif_idx, int on, int clk_rate)
                        write_cru_reg(CRU_CLK_OUT, 0x00800080);
                }
        clk_disable_unprepare(clk->cif_clk_out);
-       clk_disable_unprepare(clk->pd_cif);
+               if(CHIP_NAME != 3368)
+               clk_disable_unprepare(clk->pd_cif);
         clk->on = false;
     }
     //spin_unlock(&clk->lock);
@@ -1587,15 +1622,27 @@ static int rk_camera_set_bus_param(struct soc_camera_device *icd, __u32 pixfmt)
     
     if (common_flags & V4L2_MBUS_PCLK_SAMPLE_FALLING) {
                if(IS_CIF0()) {
-               write_cru_reg(CRU_PCLK_REG30, read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF0);
+                       if(CHIP_NAME == 3368)
+                       rk3368_write_cru_reg(CRU_PCLK_REG30, rk3368_read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF0);
+                       else
+                               write_cru_reg(CRU_PCLK_REG30, read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF0);
         } else {
-               write_cru_reg(CRU_PCLK_REG30, read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF1);
+               if(CHIP_NAME == 3368)
+                       rk3368_write_cru_reg(CRU_PCLK_REG30, rk3368_read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF1);
+                       else
+                               write_cru_reg(CRU_PCLK_REG30, read_cru_reg(CRU_PCLK_REG30) | ENANABLE_INVERT_PCLK_CIF1);
         }
     } else {
                if(IS_CIF0()){
-                       write_cru_reg(CRU_PCLK_REG30, (read_cru_reg(CRU_PCLK_REG30) & 0xFFFFEFF ) | DISABLE_INVERT_PCLK_CIF0);
+                       if(CHIP_NAME == 3368)
+                               rk3368_write_cru_reg(CRU_PCLK_REG30, (rk3368_read_cru_reg(CRU_PCLK_REG30) & 0xFFFFEFF ) | DISABLE_INVERT_PCLK_CIF0);
+                       else
+                               write_cru_reg(CRU_PCLK_REG30, (read_cru_reg(CRU_PCLK_REG30) & 0xFFFFEFF ) | DISABLE_INVERT_PCLK_CIF0);
         } else {
-                       write_cru_reg(CRU_PCLK_REG30, (read_cru_reg(CRU_PCLK_REG30) & 0xFFFEFFF) | DISABLE_INVERT_PCLK_CIF1);
+               if(CHIP_NAME == 3368)
+                               rk3368_write_cru_reg(CRU_PCLK_REG30, (rk3368_read_cru_reg(CRU_PCLK_REG30) & 0xFFFEFFF) | DISABLE_INVERT_PCLK_CIF1);
+                       else
+                               write_cru_reg(CRU_PCLK_REG30, (read_cru_reg(CRU_PCLK_REG30) & 0xFFFEFFF) | DISABLE_INVERT_PCLK_CIF1);
         }
     }
     
@@ -2511,25 +2558,28 @@ static void rk_camera_reinit_work(struct work_struct *work)
     /*tmp_soc_cam_desc = to_soc_camera_link(pcdev->icd);*/ /*yzm*/
        /*dump regs*/
        {
-               RKCAMERA_TR("CIF_CIF_CTRL = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_CTRL));
-               RKCAMERA_TR("CIF_CIF_INTEN = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_INTEN));
-               RKCAMERA_TR("CIF_CIF_INTSTAT = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_INTSTAT));
-               RKCAMERA_TR("CIF_CIF_FOR = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_FOR));
-               RKCAMERA_TR("CIF_CIF_CROP = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_CROP));
-               RKCAMERA_TR("CIF_CIF_SET_SIZE = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_SET_SIZE));
-               RKCAMERA_TR("CIF_CIF_SCL_CTRL = 0x%lx\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_CTRL));
-               RKCAMERA_TR("CRU_PCLK_REG30 = 0X%lx\n",read_cru_reg(CRU_PCLK_REG30));
-               RKCAMERA_TR("CIF_CIF_LAST_LINE = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_LINE));
+               RKCAMERA_TR("CIF_CIF_CTRL = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_CTRL));
+               RKCAMERA_TR("CIF_CIF_INTEN = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_INTEN));
+               RKCAMERA_TR("CIF_CIF_INTSTAT = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_INTSTAT));
+               RKCAMERA_TR("CIF_CIF_FOR = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_FOR));
+               RKCAMERA_TR("CIF_CIF_CROP = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_CROP));
+               RKCAMERA_TR("CIF_CIF_SET_SIZE = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_SET_SIZE));
+               RKCAMERA_TR("CIF_CIF_SCL_CTRL = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_CTRL));
+               if(CHIP_NAME == 3368)
+                       RKCAMERA_TR("CRU_PCLK_REG30 = 0X%x\n",rk3368_read_cru_reg(CRU_PCLK_REG30));
+               else
+                       RKCAMERA_TR("CRU_PCLK_REG30 = 0X%x\n",read_cru_reg(CRU_PCLK_REG30));
+               RKCAMERA_TR("CIF_CIF_LAST_LINE = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_LINE));
                
-               RKCAMERA_TR("CIF_CIF_LAST_PIX = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_PIX));
-               RKCAMERA_TR("CIF_CIF_VIR_LINE_WIDTH = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_VIR_LINE_WIDTH));
-       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
-       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_Y = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_Y));
-       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_UV = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_UV));
-       RKCAMERA_TR("CIF_CIF_FRAME_STATUS = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_FRAME_STATUS));
-       RKCAMERA_TR("CIF_CIF_SCL_VALID_NUM = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_VALID_NUM));
-       RKCAMERA_TR("CIF_CIF_CUR_DST = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_CUR_DST));
-       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%lx\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
+               RKCAMERA_TR("CIF_CIF_LAST_PIX = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_PIX));
+               RKCAMERA_TR("CIF_CIF_VIR_LINE_WIDTH = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_VIR_LINE_WIDTH));
+       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
+       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_Y = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_Y));
+       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_UV = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_UV));
+       RKCAMERA_TR("CIF_CIF_FRAME_STATUS = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRAME_STATUS));
+       RKCAMERA_TR("CIF_CIF_SCL_VALID_NUM = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_VALID_NUM));
+       RKCAMERA_TR("CIF_CIF_CUR_DST = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_CUR_DST));
+       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
        }
        
     ctrl = read_cif_reg(pcdev->base,CIF_CIF_CTRL);          /*ddl@rock-chips.com v0.3.0x13*/
@@ -2736,7 +2786,7 @@ static int rk_camera_s_stream(struct soc_camera_device *icd, int enable)
                pcdev->active_buf = 0;
         INIT_LIST_HEAD(&pcdev->capture);
     }
-       RKCAMERA_DG1("s_stream: enable : 0x%x , CIF_CIF_CTRL = 0x%lx\n",enable,read_cif_reg(pcdev->base,CIF_CIF_CTRL));
+       RKCAMERA_DG1("s_stream: enable : 0x%x , CIF_CIF_CTRL = 0x%x\n",enable,read_cif_reg(pcdev->base,CIF_CIF_CTRL));
        return 0;
 }
 int rk_camera_enum_frameintervals(struct soc_camera_device *icd, struct v4l2_frmivalenum *fival)
@@ -3041,7 +3091,10 @@ static int rk_camera_cif_iomux(struct device *dev)
     char state_str[20] = {0};
 
        debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
-    strcpy(state_str,"cif_pin_jpe");
+       if(CHIP_NAME == 3368)
+               strcpy(state_str,"cif_pin_all");
+       else
+           strcpy(state_str,"cif_pin_jpe");
 
        /*__raw_writel(((1<<1)|(1<<(1+16))),RK_GRF_VIRT+0x0380);*/
 
@@ -3131,7 +3184,8 @@ static int rk_camera_probe(struct platform_device *pdev)
        if (IS_CIF0()) {
                debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/is_cif0\n");
         clk = &cif_clk[0];
-        cif_clk[0].pd_cif = devm_clk_get(dev_cif, "pd_cif0");
+               if(CHIP_NAME != 3368)
+               cif_clk[0].pd_cif = devm_clk_get(dev_cif, "pd_cif0");
         cif_clk[0].aclk_cif = devm_clk_get(dev_cif, "aclk_cif0");
         cif_clk[0].hclk_cif = devm_clk_get(dev_cif, "hclk_cif0");
         cif_clk[0].cif_clk_in = devm_clk_get(dev_cif, "cif0_in");
@@ -3141,7 +3195,8 @@ static int rk_camera_probe(struct platform_device *pdev)
         rk_camera_cif_iomux(dev_cif);/*yzm*/
     } else {
        clk = &cif_clk[1];
-        cif_clk[1].pd_cif = devm_clk_get(dev_cif, "pd_cif0");/*cif0  only yzm*/
+               if(CHIP_NAME != 3368)
+               cif_clk[1].pd_cif = devm_clk_get(dev_cif, "pd_cif0");/*cif0  only yzm*/
         cif_clk[1].aclk_cif = devm_clk_get(dev_cif, "aclk_cif0");
         cif_clk[1].hclk_cif = devm_clk_get(dev_cif, "hclk_cif0");
         cif_clk[1].cif_clk_in = devm_clk_get(dev_cif, "cif0_in");
@@ -3276,8 +3331,10 @@ exit_ioremap_vip:
     release_mem_region(res->start, res->end - res->start + 1);
 exit_reqmem_vip:
     if (clk) {
-        if (clk->pd_cif)
-            clk_put(clk->pd_cif);
+               if(CHIP_NAME != 3368){
+               if (clk->pd_cif)
+                   clk_put(clk->pd_cif);
+               }
         if (clk->aclk_cif)
             clk_put(clk->aclk_cif);
         if (clk->hclk_cif)
index 871ba05175f825cf22d9f5b838caeae052401b37..ce14c128283bdc8abb7f6c38849f6b1cf6beda3b 100755 (executable)
@@ -241,4 +241,19 @@ enum rk312x_cru_clk_gate {
        RK312X_CLKGATE_PCLK_UART1,
        RK312X_CLKGATE_PCLK_UART2,
 };
+
+/*************************RK3368********************************/
+
+/*******************CRU OFFSET*********************/
+#define RK3368_CRU_CLKSEL_CON          0x100
+#define RK3368_CRU_CLKGATE_CON         0x200
+
+#define RK3368_PLL_CONS(id, i)         ((id) * 0x10 + ((i) * 4))
+#define RK3368_CRU_CLKSELS_CON(i)      (RK3368_CRU_CLKSEL_CON + ((i) * 4))
+#define RK3368_CRU_CLKGATES_CON(i)     (RK3368_CRU_CLKGATE_CON + ((i) * 4))
+
+#define RK3368_CRU_SOFTRSTS_CON_CNT    (15)
+#define RK3368_CRU_SOFTRST_CON          0x300
+#define RK3368_CRU_SOFTRSTS_CON(i)     (RK3368_CRU_SOFTRST_CON + ((i) * 4))
+
 #endif