mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 22:52:35 +02:00
camera:
oneframe: v0.2.0 pingpong: v0.1.a
This commit is contained in:
parent
91b464e2f9
commit
f6cc29031a
79
arch/arm/mach-rockchip/rk_camera.c
Normal file → Executable file
79
arch/arm/mach-rockchip/rk_camera.c
Normal file → Executable file
|
|
@ -5,7 +5,6 @@
|
|||
#include <linux/version.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/of_gpio.h>
|
||||
/**********yzm***********/
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/kernel.h>
|
||||
|
|
@ -14,14 +13,12 @@
|
|||
#include <linux/of_fdt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
/**********yzm***********/
|
||||
|
||||
//#define PMEM_CAM_NECESSARY 0x00000000 /*yzm*/
|
||||
|
||||
static int camio_version = KERNEL_VERSION(0,1,9);/*yzm camio_version*/
|
||||
static int camio_version = KERNEL_VERSION(0,1,9);
|
||||
module_param(camio_version, int, S_IRUGO);
|
||||
|
||||
static int camera_debug = 0;/*yzm*/
|
||||
static int camera_debug = 0;
|
||||
module_param(camera_debug, int, S_IRUGO|S_IWUSR);
|
||||
|
||||
#undef CAMMODULE_NAME
|
||||
|
|
@ -81,7 +78,7 @@ static struct resource rk_camera_resource_host_1[2] = {};
|
|||
.name = RK29_CAM_DRV_NAME,
|
||||
.id = RK_CAM_PLATFORM_DEV_ID_0, /* This is used to put cameras on this interface*/
|
||||
.num_resources= 2,
|
||||
.resource = rk_camera_resource_host_0,/*yzm*/
|
||||
.resource = rk_camera_resource_host_0,
|
||||
.dev = {
|
||||
.dma_mask = &rockchip_device_camera_dmamask,
|
||||
.coherent_dma_mask = 0xffffffffUL,
|
||||
|
|
@ -95,7 +92,7 @@ static struct resource rk_camera_resource_host_1[2] = {};
|
|||
.name = RK29_CAM_DRV_NAME,
|
||||
.id = RK_CAM_PLATFORM_DEV_ID_1, /* This is used to put cameras on this interface */
|
||||
.num_resources = ARRAY_SIZE(rk_camera_resource_host_1),
|
||||
.resource = rk_camera_resource_host_1,/*yzm*/
|
||||
.resource = rk_camera_resource_host_1,
|
||||
.dev = {
|
||||
.dma_mask = &rockchip_device_camera_dmamask,
|
||||
.coherent_dma_mask = 0xffffffffUL,
|
||||
|
|
@ -138,6 +135,8 @@ static struct platform_driver rk_sensor_driver =
|
|||
.remove = rk_dts_sensor_remove,
|
||||
};
|
||||
|
||||
unsigned long rk_cif_grf_base;
|
||||
unsigned long rk_cif_cru_base;
|
||||
|
||||
static int rk_dts_sensor_remove(struct platform_device *pdev)
|
||||
{
|
||||
|
|
@ -250,9 +249,9 @@ static int rk_dts_sensor_probe(struct platform_device *pdev)
|
|||
|
||||
strcpy(new_camera->dev.i2c_cam_info.type, name);
|
||||
new_camera->dev.i2c_cam_info.addr = i2c_add>>1;
|
||||
new_camera->dev.desc_info.host_desc.bus_id = RK29_CAM_PLATFORM_DEV_ID+cif_chl;/*yzm*/
|
||||
new_camera->dev.desc_info.host_desc.i2c_adapter_id = i2c_chl;/*yzm*/
|
||||
new_camera->dev.desc_info.host_desc.module_name = name;/*const*/
|
||||
new_camera->dev.desc_info.host_desc.bus_id = RK29_CAM_PLATFORM_DEV_ID+cif_chl;
|
||||
new_camera->dev.desc_info.host_desc.i2c_adapter_id = i2c_chl;
|
||||
new_camera->dev.desc_info.host_desc.module_name = name;
|
||||
new_camera->dev.device_info.name = "soc-camera-pdrv";
|
||||
if(is_front)
|
||||
sprintf(new_camera->dev_name,"%s_%s",name,"front");
|
||||
|
|
@ -323,13 +322,14 @@ static int rk_dts_cif_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int rk_dts_cif_probe(struct platform_device *pdev) /*yzm*/
|
||||
static int rk_dts_cif_probe(struct platform_device *pdev)
|
||||
{
|
||||
int irq,err;
|
||||
struct device *dev = &pdev->dev;
|
||||
const char *compatible = NULL;
|
||||
struct device_node * vpu_node =NULL;
|
||||
int vpu_iommu_enabled = 0;
|
||||
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
|
||||
|
||||
rk_camera_platform_data.cif_dev = &pdev->dev;
|
||||
|
|
@ -356,8 +356,20 @@ static int rk_dts_cif_probe(struct platform_device *pdev) /*yzm*/
|
|||
of_node_put(vpu_node);
|
||||
}else{
|
||||
printk("get vpu_node failed,vpu_iommu_enabled == 0 !!!!!!\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(strstr(rk_camera_platform_data.rockchip_name,"3368")){
|
||||
//get cru base
|
||||
vpu_node = of_parse_phandle(dev->of_node, "rockchip,cru", 0);
|
||||
rk_cif_cru_base = (unsigned long)of_iomap(vpu_node, 0);
|
||||
debug_printk(">>>>>>>rk_cif_cru_base=0x%lx",rk_cif_cru_base);
|
||||
|
||||
//get grf base
|
||||
vpu_node = of_parse_phandle(dev->of_node, "rockchip,grf", 0);
|
||||
rk_cif_grf_base = (unsigned long)of_iomap(vpu_node, 0);
|
||||
debug_printk(">>>>>>>rk_cif_grf_base=0x%lx",rk_cif_grf_base);
|
||||
}
|
||||
|
||||
if (err < 0){
|
||||
printk(KERN_EMERG "Get rockchip compatible failed!!!!!!");
|
||||
return -ENODEV;
|
||||
|
|
@ -381,8 +393,6 @@ static int rk_cif_sensor_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/************yzm**************end*/
|
||||
|
||||
static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
|
||||
{
|
||||
int camera_power = res->gpio_power;
|
||||
|
|
@ -607,7 +617,7 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
|
|||
bool io_requested_in_camera;
|
||||
enum of_gpio_flags flags;
|
||||
|
||||
struct rkcamera_platform_data *new_camera;/*yzm*/
|
||||
struct rkcamera_platform_data *new_camera;
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
|
||||
|
||||
|
||||
|
|
@ -622,8 +632,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
|
|||
if (camera_power != INVALID_GPIO) {
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_power = %x\n", camera_power );
|
||||
|
||||
camera_power = of_get_named_gpio_flags(of_node,"rockchip,power",0,&flags);/*yzm*/
|
||||
gpio_res->gpio_power = camera_power;/*yzm information back to the IO*/
|
||||
camera_power = of_get_named_gpio_flags(of_node,"rockchip,power",0,&flags);
|
||||
gpio_res->gpio_power = camera_power;/* information back to the IO*/
|
||||
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_power = %x\n", camera_power );
|
||||
|
||||
|
|
@ -664,8 +674,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
|
|||
|
||||
if (camera_reset != INVALID_GPIO) {
|
||||
|
||||
camera_power = of_get_named_gpio_flags(of_node,"rockchip,reset",0,&flags);/*yzm*/
|
||||
gpio_res->gpio_reset = camera_reset;/*yzm information back to the IO*/
|
||||
camera_power = of_get_named_gpio_flags(of_node,"rockchip,reset",0,&flags);
|
||||
gpio_res->gpio_reset = camera_reset;/* information back to the IO*/
|
||||
ret = gpio_request(camera_reset, "camera reset");
|
||||
if (ret) {
|
||||
io_requested_in_camera = false;
|
||||
|
|
@ -702,8 +712,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
|
|||
if (camera_powerdown != INVALID_GPIO) {
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_powerdown = %x\n", camera_powerdown );
|
||||
|
||||
camera_powerdown = of_get_named_gpio_flags(of_node,"rockchip,powerdown",0,&flags);/*yzm*/
|
||||
gpio_res->gpio_powerdown = camera_powerdown;/*yzm information back to the IO*/
|
||||
camera_powerdown = of_get_named_gpio_flags(of_node,"rockchip,powerdown",0,&flags);
|
||||
gpio_res->gpio_powerdown = camera_powerdown;/*information back to the IO*/
|
||||
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$/ camera_powerdown = %x\n", camera_powerdown );
|
||||
ret = gpio_request(camera_powerdown, "camera powerdown");
|
||||
|
|
@ -742,8 +752,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
|
|||
|
||||
if (camera_flash != INVALID_GPIO) {
|
||||
|
||||
camera_flash = of_get_named_gpio_flags(of_node,"rockchip,flash",0,&flags);/*yzm*/
|
||||
gpio_res->gpio_flash = camera_flash;/*yzm information back to the IO*/
|
||||
camera_flash = of_get_named_gpio_flags(of_node,"rockchip,flash",0,&flags);
|
||||
gpio_res->gpio_flash = camera_flash;/* information back to the IO*/
|
||||
ret = gpio_request(camera_flash, "camera flash");
|
||||
if (ret) {
|
||||
io_requested_in_camera = false;
|
||||
|
|
@ -780,8 +790,8 @@ static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res,struct devic
|
|||
|
||||
if (camera_af != INVALID_GPIO) {
|
||||
|
||||
camera_af = of_get_named_gpio_flags(of_node,"rockchip,af",0,&flags);/*yzm*/
|
||||
gpio_res->gpio_af = camera_af;/*yzm information back to the IO*/
|
||||
camera_af = of_get_named_gpio_flags(of_node,"rockchip,af",0,&flags);
|
||||
gpio_res->gpio_af = camera_af;/* information back to the IO*/
|
||||
ret = gpio_request(camera_af, "camera af");
|
||||
if (ret) {
|
||||
io_requested_in_camera = false;
|
||||
|
|
@ -896,7 +906,6 @@ static int rk_sensor_io_init(void)
|
|||
if (sensor_ioctl_cb.sensor_af_cb == NULL)
|
||||
sensor_ioctl_cb.sensor_af_cb = sensor_afpower_default_cb;
|
||||
|
||||
/**********yzm*********/
|
||||
new_camera = new_camera_head;
|
||||
while(new_camera != NULL)
|
||||
{
|
||||
|
|
@ -928,7 +937,7 @@ static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, i
|
|||
struct rkcamera_platform_data *new_cam_dev = NULL;
|
||||
struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;
|
||||
int ret = RK29_CAM_IO_SUCCESS,i = 0;
|
||||
struct soc_camera_desc *dev_icl = NULL;/*yzm*/
|
||||
struct soc_camera_desc *dev_icl = NULL;
|
||||
struct rkcamera_platform_data *new_camera;
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()/n", __FILE__, __LINE__,__FUNCTION__);
|
||||
|
||||
|
|
@ -939,7 +948,7 @@ static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, i
|
|||
if (strcmp(new_camera->dev_name, dev_name(dev)) == 0) {
|
||||
res = (struct rk29camera_gpio_res *)&new_camera->io;
|
||||
new_cam_dev = &new_camera[i];
|
||||
dev_icl = &new_camera->dev.desc_info;/*yzm*/
|
||||
dev_icl = &new_camera->dev.desc_info;
|
||||
break;
|
||||
}
|
||||
new_camera = new_camera->next_camera;;
|
||||
|
|
@ -1016,7 +1025,7 @@ static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, i
|
|||
case Cam_Mclk:
|
||||
{
|
||||
if (plat_data->sensor_mclk && dev_icl) {
|
||||
plat_data->sensor_mclk(dev_icl->host_desc.bus_id,(on!=0)?1:0,on);/*yzm*/
|
||||
plat_data->sensor_mclk(dev_icl->host_desc.bus_id,(on!=0)?1:0,on);
|
||||
} else {
|
||||
eprintk( "%s(%d): sensor_mclk(%p) or dev_icl(%p) is NULL",
|
||||
__FUNCTION__,__LINE__,plat_data->sensor_mclk,dev_icl);
|
||||
|
|
@ -1114,7 +1123,7 @@ static int rk_sensor_pwrseq(struct device *dev,int powerup_sequence, int on, int
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int rk_sensor_power(struct device *dev, int on) /*icd->pdev*/
|
||||
static int rk_sensor_power(struct device *dev, int on)
|
||||
{
|
||||
int powerup_sequence,mclk_rate;
|
||||
|
||||
|
|
@ -1126,7 +1135,7 @@ static int rk_sensor_power(struct device *dev, int on) /*icd->pdev*/
|
|||
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
|
||||
|
||||
new_camera = plat_data->register_dev_new; /*new_camera[]*/
|
||||
new_camera = plat_data->register_dev_new;
|
||||
|
||||
while (new_camera != NULL) {
|
||||
|
||||
|
|
@ -1135,8 +1144,8 @@ static int rk_sensor_power(struct device *dev, int on) /*icd->pdev*/
|
|||
((new_camera->io.gpio_flag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
|
||||
}
|
||||
|
||||
debug_printk( "new_camera->dev_name= %s \n", new_camera->dev_name); /*yzm*/
|
||||
debug_printk( "dev_name(dev)= %s \n", dev_name(dev)); /*yzm*/
|
||||
debug_printk( "new_camera->dev_name= %s \n", new_camera->dev_name);
|
||||
debug_printk( "dev_name(dev)= %s \n", dev_name(dev));
|
||||
|
||||
if (strcmp(new_camera->dev_name,dev_name(dev))) {
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);
|
||||
|
|
@ -1148,7 +1157,7 @@ static int rk_sensor_power(struct device *dev, int on) /*icd->pdev*/
|
|||
} else {
|
||||
new_device = new_camera;
|
||||
dev_io = &new_camera->io;
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);/*yzm*/
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i\n", __FILE__, __LINE__);
|
||||
if (!Sensor_Support_DirectResume(new_camera->pwdn_info))
|
||||
real_pwroff = true;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -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 @@ int generic_sensor_check_id(struct i2c_client *client, struct rk_sensor_reg *ser
|
|||
|
||||
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 @@ int generic_sensor_init(struct v4l2_subdev *sd, u32 val)
|
|||
|
||||
unsigned long generic_sensor_query_bus_param(struct soc_camera_device *icd)
|
||||
{
|
||||
//struct soc_camera_link *icl = to_soc_camera_link(icd);
|
||||
struct soc_camera_desc *desc = to_soc_camera_desc(icd);/*yzm*/
|
||||
struct soc_camera_desc *desc = to_soc_camera_desc(icd);
|
||||
struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
|
||||
struct generic_sensor *sensor = to_generic_sensor(client);
|
||||
/**************yzm************/
|
||||
struct v4l2_mbus_config cfg;
|
||||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
|
||||
cfg.flags = sensor->info_priv.bus_parameter;
|
||||
return soc_camera_apply_board_flags(&(desc->subdev_desc), &cfg);/*yzm*/
|
||||
/**************yzm*************/
|
||||
return soc_camera_apply_board_flags(&(desc->subdev_desc), &cfg);
|
||||
}
|
||||
|
||||
int generic_sensor_g_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
|
||||
|
|
@ -1101,7 +1092,6 @@ int generic_sensor_s_ext_control(struct soc_camera_device *icd, struct v4l2_ext_
|
|||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
struct soc_camera_subdev_desc *ssdd = client->dev.platform_data;
|
||||
struct soc_camera_device *icd = ssdd->socdev;
|
||||
//struct generic_sensor *sensor = to_generic_sensor(client);
|
||||
int i, error_cnt=0, error_idx=-1;
|
||||
|
||||
for (i=0; i<ext_ctrl->count; i++) {
|
||||
|
|
@ -1126,7 +1116,6 @@ int generic_sensor_s_ext_controls(struct v4l2_subdev *sd, struct v4l2_ext_contro
|
|||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
struct soc_camera_subdev_desc *ssdd = client->dev.platform_data;
|
||||
struct soc_camera_device *icd = ssdd->socdev;
|
||||
//struct generic_sensor*sensor = to_generic_sensor(client);
|
||||
int i, error_cnt=0, error_idx=-1;
|
||||
|
||||
|
||||
|
|
@ -1194,7 +1183,6 @@ long generic_sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
|||
}
|
||||
|
||||
new_camera = sensor->sensor_io_request->register_dev_new;
|
||||
//while (strstr(new_camera->dev_name,"end")==NULL) {
|
||||
while(new_camera != NULL){
|
||||
if (strcmp(dev_name(icd->pdev), new_camera->dev_name) == 0) {
|
||||
if (new_camera->flash){
|
||||
|
|
@ -1204,7 +1192,6 @@ long generic_sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
|||
}
|
||||
break;
|
||||
}
|
||||
//new_camera++;
|
||||
new_camera = new_camera->next_camera;
|
||||
}
|
||||
|
||||
|
|
@ -1282,7 +1269,6 @@ int generic_sensor_enum_fmt(struct v4l2_subdev *sd, unsigned int index,
|
|||
struct soc_camera_subdev_desc *ssdd = client->dev.platform_data;
|
||||
struct soc_camera_device *icd = ssdd->socdev;
|
||||
struct generic_sensor*sensor = to_generic_sensor(client);
|
||||
//struct rk_sensor_focus_cmd_info cmdinfo;
|
||||
int zone_tm_pos[4];
|
||||
int ret = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
#include <media/soc_camera.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/module.h>
|
||||
#include "../../../arch/arm/mach-rockchip/rk30_camera.h"/*yzm*/
|
||||
#include "../../../arch/arm/mach-rockchip/rk30_camera.h"
|
||||
#include <linux/kernel.h>
|
||||
/* Camera Sensor driver */
|
||||
|
||||
|
|
|
|||
|
|
@ -28,19 +28,9 @@
|
|||
#include <linux/rockchip/iomap.h>
|
||||
|
||||
#include "../../video/rockchip/rga/rga.h"
|
||||
#include "../../../arch/arm/mach-rockchip/rk30_camera.h"/*yzm*/
|
||||
#include "../../../arch/arm/mach-rockchip/rk30_camera.h"
|
||||
#include <linux/rockchip/cru.h>
|
||||
|
||||
/*******yzm*********
|
||||
|
||||
#include <plat/efuse.h>
|
||||
#if (defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3026))
|
||||
#include <mach/rk2928_camera.h>
|
||||
#include <mach/cru.h>
|
||||
#include <mach/pmu.h>
|
||||
#define SOFT_RST_CIF1 (SOFT_RST_MAX+1)
|
||||
#endif
|
||||
*/
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
#include <linux/of_address.h>
|
||||
|
|
@ -157,40 +147,22 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
|
|||
#define ENABLE_32BIT_BYPASS (0x01<<6)
|
||||
#define DISABLE_32BIT_BYPASS (0x00<<6)
|
||||
|
||||
extern unsigned long rk_cif_grf_base;
|
||||
extern unsigned long rk_cif_cru_base;
|
||||
|
||||
|
||||
#define MIN(x,y) ((x<y) ? x: y)
|
||||
#define MAX(x,y) ((x>y) ? x: y)
|
||||
#define RK_SENSOR_24MHZ 24*1000*1000 /* MHz */
|
||||
#define RK_SENSOR_48MHZ 48
|
||||
|
||||
#define __raw_readl(p) (*(unsigned long *)(p))
|
||||
#define __raw_writel(v,p) (*(unsigned long *)(p) = (v))
|
||||
#define __raw_readl(p) (*(unsigned int *)(p))
|
||||
#define __raw_writel(v,p) (*(unsigned int *)(p) = (v))
|
||||
|
||||
#define write_cif_reg(base,addr, val) __raw_writel(val, addr+(base))
|
||||
#define read_cif_reg(base,addr) __raw_readl(addr+(base))
|
||||
#define mask_cif_reg(addr, msk, val) write_cif_reg(addr, (val)|((~(msk))&read_cif_reg(addr)))
|
||||
|
||||
/*
|
||||
#if defined(CONFIG_ARCH_RK30) || defined(CONFIG_ARCH_RK3188)
|
||||
//CRU,PIXCLOCK
|
||||
#define CRU_PCLK_REG30 0xbc
|
||||
#define ENANABLE_INVERT_PCLK_CIF0 ((0x1<<24)|(0x1<<8))
|
||||
#define DISABLE_INVERT_PCLK_CIF0 ((0x1<<24)|(0x0<<8))
|
||||
#define ENANABLE_INVERT_PCLK_CIF1 ((0x1<<28)|(0x1<<12))
|
||||
#define DISABLE_INVERT_PCLK_CIF1 ((0x1<<28)|(0x0<<12))
|
||||
|
||||
#define CRU_CIF_RST_REG30 0x128
|
||||
#define MASK_RST_CIF0 (0x01 << 30)
|
||||
#define MASK_RST_CIF1 (0x01 << 31)
|
||||
#define RQUEST_RST_CIF0 (0x01 << 14)
|
||||
#define RQUEST_RST_CIF1 (0x01 << 15)
|
||||
|
||||
#define write_cru_reg(addr, val) __raw_writel(val, addr+RK30_CRU_BASE)
|
||||
#define read_cru_reg(addr) __raw_readl(addr+RK30_CRU_BASE)
|
||||
#define mask_cru_reg(addr, msk, val) write_cru_reg(addr,(val)|((~(msk))&read_cru_reg(addr)))
|
||||
#endif
|
||||
*/
|
||||
/*********yzm**********/
|
||||
|
||||
static u32 CRU_PCLK_REG30;
|
||||
static u32 CRU_CLK_OUT;
|
||||
|
|
@ -206,38 +178,11 @@ static u32 CHIP_NAME;
|
|||
#define write_cru_reg(addr, val) __raw_writel(val, addr+RK_CRU_VIRT)
|
||||
#define read_cru_reg(addr) __raw_readl(addr+RK_CRU_VIRT)
|
||||
#define mask_cru_reg(addr, msk, val) write_cru_reg(addr,(val)|((~(msk))&read_cru_reg(addr)))
|
||||
/*********yzm*********end*/
|
||||
/*
|
||||
#if defined(CONFIG_ARCH_RK2928)
|
||||
#define write_cru_reg(addr, val)
|
||||
#define read_cru_reg(addr) 0
|
||||
#define mask_cru_reg(addr, msk, val)
|
||||
#endif
|
||||
*/
|
||||
|
||||
/*
|
||||
#if defined(CONFIG_ARCH_RK3066B) || defined(CONFIG_ARCH_RK3188)
|
||||
//GRF_IO_CON3 0x100
|
||||
#define CIF_DRIVER_STRENGTH_2MA (0x00 << 12)
|
||||
#define CIF_DRIVER_STRENGTH_4MA (0x01 << 12)
|
||||
#define CIF_DRIVER_STRENGTH_8MA (0x02 << 12)
|
||||
#define CIF_DRIVER_STRENGTH_12MA (0x03 << 12)
|
||||
#define CIF_DRIVER_STRENGTH_MASK (0x03 << 28)
|
||||
#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)))
|
||||
|
||||
//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 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 @@ static int rk_videobuf_prepare(struct videobuf_queue *vq, struct videobuf_buffer
|
|||
|
||||
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 @@ static int rk_camera_add_device(struct soc_camera_device *icd)
|
|||
}
|
||||
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 @@ static int rk_camera_cropcap(struct soc_camera_device *icd, struct v4l2_cropcap
|
|||
}
|
||||
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 @@ static int rk_camera_set_fmt(struct soc_camera_device *icd,
|
|||
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 @@ static int rk_camera_probe(struct platform_device *pdev)
|
|||
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)
|
||||
|
|
|
|||
|
|
@ -161,13 +161,16 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
|
|||
#define CIF_F0_READY (0x01<<0)
|
||||
#define CIF_F1_READY (0x01<<1)
|
||||
|
||||
extern unsigned long rk_cif_grf_base;
|
||||
extern unsigned long rk_cif_cru_base;
|
||||
|
||||
#define MIN(x,y) ((x<y) ? x: y)
|
||||
#define MAX(x,y) ((x>y) ? x: y)
|
||||
#define RK_SENSOR_24MHZ 24*1000*1000 /* MHz */
|
||||
#define RK_SENSOR_48MHZ 48
|
||||
|
||||
#define __raw_readl(p) (*(unsigned long *)(p))
|
||||
#define __raw_writel(v,p) (*(unsigned long *)(p) = (v))
|
||||
#define __raw_readl(p) (*(unsigned int *)(p))
|
||||
#define __raw_writel(v,p) (*(unsigned int *)(p) = (v))
|
||||
|
||||
#define write_cif_reg(base,addr, val) __raw_writel(val, addr+(base))
|
||||
#define read_cif_reg(base,addr) __raw_readl(addr+(base))
|
||||
|
|
@ -207,6 +210,11 @@ static u32 CHIP_NAME;
|
|||
#define write_cru_reg(addr, val) __raw_writel(val, addr+RK_CRU_VIRT)
|
||||
#define read_cru_reg(addr) __raw_readl(addr+RK_CRU_VIRT)
|
||||
#define mask_cru_reg(addr, msk, val) write_cru_reg(addr,(val)|((~(msk))&read_cru_reg(addr)))
|
||||
|
||||
#define rk3368_write_cru_reg(addr, val) __raw_writel(val, addr+rk_cif_cru_base)
|
||||
#define rk3368_read_cru_reg(addr) __raw_readl(addr+rk_cif_cru_base)
|
||||
#define rk3368_mask_cru_reg(addr, msk, val) rk3368_write_cru_reg(addr,(val)|((~(msk))&rk3368_read_cru_reg(addr)))
|
||||
|
||||
/*********yzm*********end*/
|
||||
/*
|
||||
#if defined(CONFIG_ARCH_RK2928)
|
||||
|
|
@ -282,8 +290,10 @@ static u32 CHIP_NAME;
|
|||
1. Support pingpong mode.
|
||||
2. Fix cif_clk_out cannot close which base on XIN24M and cannot turn to 0.
|
||||
3. Move Camera Sensor Macro from rk_camera.h to rk_camera_sensor_info.h
|
||||
*v0.1.a:
|
||||
1. Support rk3368.
|
||||
*/
|
||||
#define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 1, 0x9)
|
||||
#define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 1, 0xa)
|
||||
static int version = RK_CAM_VERSION_CODE;
|
||||
module_param(version, int, S_IRUGO);
|
||||
|
||||
|
|
@ -366,7 +376,7 @@ struct rk_camera_zoominfo
|
|||
#if CAMERA_VIDEOBUF_ARM_ACCESS
|
||||
struct rk29_camera_vbinfo
|
||||
{
|
||||
unsigned int phy_addr;
|
||||
unsigned long phy_addr;
|
||||
void __iomem *vir_addr;
|
||||
unsigned int size;
|
||||
};
|
||||
|
|
@ -424,7 +434,7 @@ struct rk_camera_dev
|
|||
unsigned long frame_interval;
|
||||
unsigned int pixfmt;
|
||||
/*for ipp */
|
||||
unsigned int vipmem_phybase;
|
||||
unsigned long vipmem_phybase;
|
||||
void __iomem *vipmem_virbase;
|
||||
unsigned int vipmem_size;
|
||||
unsigned int vipmem_bsize;
|
||||
|
|
@ -508,12 +518,33 @@ static void rk_camera_diffchips(const char *rockchip_name)
|
|||
CRU_CLKSEL29_CON = 0xb8;
|
||||
|
||||
CHIP_NAME = 3126;
|
||||
}else if(strstr(rockchip_name,"3368"))
|
||||
{
|
||||
CRU_PCLK_REG30 = 0x154;
|
||||
ENANABLE_INVERT_PCLK_CIF0 = ((0x1<<29)|(0x1<<13));
|
||||
DISABLE_INVERT_PCLK_CIF0 = ((0x1<<29)|(0x0<<13));
|
||||
ENANABLE_INVERT_PCLK_CIF1 = ENANABLE_INVERT_PCLK_CIF0;
|
||||
DISABLE_INVERT_PCLK_CIF1 = DISABLE_INVERT_PCLK_CIF0;
|
||||
|
||||
//CRU_CLK_OUT = 0x16c;
|
||||
CHIP_NAME = 3368;
|
||||
}
|
||||
}
|
||||
static inline void rk_cru_set_soft_reset(u32 idx, bool on , u32 RK_CRU_SOFTRST_CON)
|
||||
{
|
||||
void __iomem *reg = RK_CRU_VIRT + RK_CRU_SOFTRST_CON;
|
||||
u32 val = on ? 0x10001U << 14 : 0x10000U << 14;
|
||||
u32 val = 0;
|
||||
void __iomem *reg;
|
||||
|
||||
if(CHIP_NAME == 3368)
|
||||
reg = (void*)(rk_cif_cru_base + RK_CRU_SOFTRST_CON);
|
||||
else
|
||||
reg = (void*)(RK_CRU_VIRT + RK_CRU_SOFTRST_CON);
|
||||
|
||||
if(CHIP_NAME == 3126){
|
||||
val = on ? 0x10001U << 14 : 0x10000U << 14;
|
||||
}else if(CHIP_NAME == 3368){
|
||||
val = on ? 0x10001U << 8 : 0x10000U << 8;
|
||||
}
|
||||
writel_relaxed(val, reg);
|
||||
dsb();
|
||||
}
|
||||
|
|
@ -525,6 +556,8 @@ static void rk_camera_cif_reset(struct rk_camera_dev *pcdev, int only_rst)
|
|||
debug_printk( "/$$$$$$$$$$$$$$$$$$$$$$//n Here I am: %s:%i-------%s()\n", __FILE__, __LINE__,__FUNCTION__);
|
||||
if(strstr(pcdev->pdata->rockchip_name,"3128")||strstr(pcdev->pdata->rockchip_name,"3126"))
|
||||
RK_CRU_SOFTRST_CON = RK312X_CRU_SOFTRSTS_CON(6);
|
||||
else if(strstr(pcdev->pdata->rockchip_name,"3368"))
|
||||
RK_CRU_SOFTRST_CON = RK3368_CRU_SOFTRSTS_CON(6);
|
||||
|
||||
if (only_rst == true) {
|
||||
rk_cru_set_soft_reset(0, true ,RK_CRU_SOFTRST_CON);
|
||||
|
|
@ -737,7 +770,7 @@ static int rk_videobuf_prepare(struct videobuf_queue *vq, struct videobuf_buffer
|
|||
|
||||
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 @@ static int rk_camera_probe(struct platform_device *pdev)
|
|||
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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user