From: dalon.zhang Date: Sat, 28 Feb 2015 11:09:34 +0000 (+0800) Subject: camera: X-Git-Tag: firefly_0821_release~4263^2~34 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=f6cc29031a9511ca5eb0db57f96e9b68b6db693c;p=firefly-linux-kernel-4.4.55.git camera: oneframe: v0.2.0 pingpong: v0.1.a --- diff --git a/arch/arm/mach-rockchip/rk_camera.c b/arch/arm/mach-rockchip/rk_camera.c old mode 100644 new mode 100755 index c79d50ebcbcb..8813d3982098 --- a/arch/arm/mach-rockchip/rk_camera.c +++ b/arch/arm/mach-rockchip/rk_camera.c @@ -5,7 +5,6 @@ #include #include #include -/**********yzm***********/ #include #include #include @@ -14,14 +13,12 @@ #include #include #include -/**********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 diff --git a/drivers/media/video/generic_sensor.c b/drivers/media/video/generic_sensor.c index 31e86adc9367..1e0ee693f5c1 100755 --- a/drivers/media/video/generic_sensor.c +++ b/drivers/media/video/generic_sensor.c @@ -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; icount; 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; diff --git a/drivers/media/video/generic_sensor.h b/drivers/media/video/generic_sensor.h index 4575ba69e55a..09043f55aa14 100755 --- a/drivers/media/video/generic_sensor.h +++ b/drivers/media/video/generic_sensor.h @@ -13,7 +13,7 @@ #include #include #include -#include "../../../arch/arm/mach-rockchip/rk30_camera.h"/*yzm*/ +#include "../../../arch/arm/mach-rockchip/rk30_camera.h" #include /* Camera Sensor driver */ diff --git a/drivers/media/video/rk30_camera_oneframe.c b/drivers/media/video/rk30_camera_oneframe.c index f7f081f74eb5..e6c499abb34b 100755 --- a/drivers/media/video/rk30_camera_oneframe.c +++ b/drivers/media/video/rk30_camera_oneframe.c @@ -28,19 +28,9 @@ #include #include "../../video/rockchip/rga/rga.h" -#include "../../../arch/arm/mach-rockchip/rk30_camera.h"/*yzm*/ +#include "../../../arch/arm/mach-rockchip/rk30_camera.h" #include -/*******yzm********* - -#include -#if (defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3026)) -#include -#include -#include -#define SOFT_RST_CIF1 (SOFT_RST_MAX+1) -#endif -*/ #include #include @@ -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) ((xy) ? 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) diff --git a/drivers/media/video/rk30_camera_pingpong.c b/drivers/media/video/rk30_camera_pingpong.c index 5b8a39b01e86..8fe805c0674e 100755 --- a/drivers/media/video/rk30_camera_pingpong.c +++ b/drivers/media/video/rk30_camera_pingpong.c @@ -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) ((xy) ? 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) diff --git a/include/linux/rockchip/cru.h b/include/linux/rockchip/cru.h index 871ba05175f8..ce14c128283b 100755 --- a/include/linux/rockchip/cru.h +++ b/include/linux/rockchip/cru.h @@ -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