#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
.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,
.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,
.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)
{
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");
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;
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;
return 0;
}
-/************yzm**************end*/
-
static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
{
int camera_power = res->gpio_power;
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__);
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 );
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;
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");
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;
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;
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)
{
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__);
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;;
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);
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;
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) {
((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__);
} 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
#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>
#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;
#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))*/
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);
#if CAMERA_VIDEOBUF_ARM_ACCESS
struct rk29_camera_vbinfo
{
- unsigned int phy_addr;
+ unsigned long phy_addr;
void __iomem *vir_addr;
unsigned int size;
};
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;
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();
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) {
*/
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;
}
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));
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__);
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);
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;
{
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;
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__);
}
//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);
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);
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;
}
* 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;
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 {
}
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;
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);
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__);
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);
}
}
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;
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;
}
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;
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;
}
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__);
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__);
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;
/* 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)
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;
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;
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,
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;
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;
}
}
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;
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;
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;
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*/
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__);
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,
}
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;
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 {
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;
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__);
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;
.num_controls = ARRAY_SIZE(rk_camera_controls)
};
-/**********yzm***********/
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*/
return 0;
}
-/***********yzm***********/
static int rk_camera_probe(struct platform_device *pdev)
{
struct rk_camera_dev *pcdev;
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__);
BUG();
}
-/***********yzm**********/
rk_camera_diffchips(((struct rk29camera_platform_data*)pdev->dev.platform_data)->rockchip_name);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
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;
}
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");
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)
#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))
#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)
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);
#if CAMERA_VIDEOBUF_ARM_ACCESS
struct rk29_camera_vbinfo
{
- unsigned int phy_addr;
+ unsigned long phy_addr;
void __iomem *vir_addr;
unsigned int size;
};
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;
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();
}
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);
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__);
}
//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);
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);
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);
}
}
/*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*/
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)
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);*/
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");
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");
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)