From 2a6dca2e2ce4d579a3038d0ab7f6ba6cf3b26fff Mon Sep 17 00:00:00 2001 From: ddl Date: Mon, 6 Dec 2010 19:31:21 +0800 Subject: [PATCH] debug ov2659 in rk29sdk, and add pixel format(YUV Sequence) control in sensor driver --- arch/arm/mach-rk29/board-rk29sdk.c | 38 +++++++++--- drivers/media/video/ov2655.c | 71 ++++++++++++++++------ drivers/media/video/ov2659.c | 58 +++++++++++++++--- drivers/media/video/ov5642.c | 51 ++++++++++++++-- drivers/media/video/rk29_camera_oneframe.c | 6 +- 5 files changed, 183 insertions(+), 41 deletions(-) mode change 100755 => 100644 arch/arm/mach-rk29/board-rk29sdk.c mode change 100755 => 100644 drivers/media/video/ov5642.c diff --git a/arch/arm/mach-rk29/board-rk29sdk.c b/arch/arm/mach-rk29/board-rk29sdk.c old mode 100755 new mode 100644 index df33a62d0b86..c8cdb65c7a82 --- a/arch/arm/mach-rk29/board-rk29sdk.c +++ b/arch/arm/mach-rk29/board-rk29sdk.c @@ -55,11 +55,13 @@ #define PMEM_GPU_SIZE SZ_32M #define PMEM_UI_SIZE SZ_16M #define PMEM_VPU_SIZE SZ_32M +#define PMEM_CAM_SIZE SZ_16M #define PMEM_GPU_BASE ((u32)RK29_SDRAM_PHYS + SDRAM_SIZE - PMEM_GPU_SIZE) #define PMEM_UI_BASE (PMEM_GPU_BASE - PMEM_UI_SIZE) #define PMEM_VPU_BASE (PMEM_UI_BASE - PMEM_VPU_SIZE) -#define LINUX_SIZE (PMEM_VPU_BASE - RK29_SDRAM_PHYS) +#define PMEM_CAM_BASE (PMEM_VPU_BASE - PMEM_CAM_SIZE) +#define LINUX_SIZE (PMEM_CAM_BASE - RK29_SDRAM_PHYS) extern struct sys_timer rk29_timer; @@ -211,6 +213,23 @@ static struct platform_device android_pmem_device = { }; +static struct android_pmem_platform_data android_pmem_cam_pdata = { + .name = "pmem_cam", + .start = PMEM_CAM_BASE, + .size = PMEM_CAM_SIZE, + .no_allocator = 0, + .cached = 1, +}; + +static struct platform_device android_pmem_cam_device = { + .name = "android_pmem", + .id = 1, + .dev = { + .platform_data = &android_pmem_cam_pdata, + }, +}; + + static struct vpu_mem_platform_data vpu_mem_pdata = { .name = "vpu_mem", .start = PMEM_VPU_BASE, @@ -440,11 +459,11 @@ static struct i2c_board_info __initdata board_i2c3_devices[] = { * author: ddl@rock-chips.com *****************************************************************************************/ #ifdef CONFIG_VIDEO_RK29 -#define SENSOR_NAME_0 RK29_CAM_SENSOR_NAME_OV2655 /* back camera sensor */ -#define SENSOR_IIC_ADDR_0 0x60 +#define SENSOR_NAME_0 RK29_CAM_SENSOR_NAME_OV5642 /* back camera sensor */ +#define SENSOR_IIC_ADDR_0 0x78 #define SENSOR_IIC_ADAPTER_ID_0 1 -#define SENSOR_POWER_PIN_0 INVALID_GPIO -#define SENSOR_RESET_PIN_0 RK29_PIN0_PA2 +#define SENSOR_POWER_PIN_0 RK29_PIN5_PD7 +#define SENSOR_RESET_PIN_0 INVALID_GPIO #define SENSOR_POWERACTIVE_LEVEL_0 RK29_CAM_POWERACTIVE_L #define SENSOR_RESETACTIVE_LEVEL_0 RK29_CAM_RESETACTIVE_L @@ -452,7 +471,7 @@ static struct i2c_board_info __initdata board_i2c3_devices[] = { #define SENSOR_NAME_1 RK29_CAM_SENSOR_NAME_OV2659 /* front camera sensor */ #define SENSOR_IIC_ADDR_1 0x60 #define SENSOR_IIC_ADAPTER_ID_1 1 -#define SENSOR_POWER_PIN_1 INVALID_GPIO +#define SENSOR_POWER_PIN_1 RK29_PIN5_PD7 #define SENSOR_RESET_PIN_1 INVALID_GPIO #define SENSOR_POWERACTIVE_LEVEL_1 RK29_CAM_POWERACTIVE_L #define SENSOR_RESETACTIVE_LEVEL_1 RK29_CAM_RESETACTIVE_L @@ -892,6 +911,7 @@ static struct platform_device *devices[] __initdata = { &rk29_device_camera, /* ddl@rock-chips.com : camera support */ &rk29_soc_camera_pdrv_0, &rk29_soc_camera_pdrv_1, + &android_pmem_cam_device, #endif &android_pmem_device, &rk29_vpu_mem_device, @@ -1102,10 +1122,14 @@ static void __init machine_rk29_init_irq(void) rk29_gpio_init(rk29_gpiobankinit, MAX_BANK); rk29_gpio_irq_setup(); } - +#define POWER_ON_PIN RK29_PIN4_PA4 static void __init machine_rk29_board_init(void) { rk29_board_iomux_init(); + + gpio_set_value(POWER_ON_PIN, 1); + gpio_direction_output(POWER_ON_PIN, 1); + platform_add_devices(devices, ARRAY_SIZE(devices)); #ifdef CONFIG_I2C0_RK29 i2c_register_board_info(default_i2c0_data.bus_num, board_i2c0_devices, diff --git a/drivers/media/video/ov2655.c b/drivers/media/video/ov2655.c index e73f4472cb80..3508eea4eb83 100644 --- a/drivers/media/video/ov2655.c +++ b/drivers/media/video/ov2655.c @@ -38,6 +38,7 @@ o* Driver for MT9M001 CMOS Image Sensor from Micron #define SENSOR_INIT_WIDTH 640 /* Sensor pixel size for sensor_init_data array */ #define SENSOR_INIT_HEIGHT 480 #define SENSOR_INIT_WINSEQADR sensor_vga +#define SENSOR_INIT_PIXFMT V4L2_PIX_FMT_UYVY #define CONFIG_SENSOR_WhiteBalance 1 #define CONFIG_SENSOR_Brightness 0 @@ -52,10 +53,10 @@ o* Driver for MT9M001 CMOS Image Sensor from Micron #define CONFIG_SENSOR_Mirror 0 #define CONFIG_SENSOR_Flip 0 -#define CONFIG_SENSOR_I2C_SPEED 100000 /* Hz */ +#define CONFIG_SENSOR_I2C_SPEED 400000 /* Hz */ #define CONFIG_SENSOR_TR 1 -#define CONFIG_SENSOR_DEBUG 0 +#define CONFIG_SENSOR_DEBUG 1 #define SENSOR_NAME_STRING(a) STR(CONS(SENSOR_NAME, a)) #define SENSOR_NAME_VARFUN(a) CONS(SENSOR_NAME, a) @@ -692,6 +693,18 @@ static struct reginfo ov2655_Sharpness5[] = }; #endif +static struct reginfo sensor_ClrFmt_YUYV[]= +{ + {0x3400, 0x00}, + {0x0000, 0x00} +}; + +static struct reginfo sensor_ClrFmt_UYVY[]= +{ + {0x3400, 0x02}, + {0x0000, 0x00} +}; + #if CONFIG_SENSOR_WhiteBalance static struct reginfo sensor_WhiteB_Auto[]= { @@ -1408,6 +1421,7 @@ typedef struct sensor_info_priv_s unsigned char mirror; /* HFLIP */ unsigned char flip; /* VFLIP */ unsigned int winseqe_cur_addr; + unsigned int pixfmt; } sensor_info_priv_t; @@ -1416,7 +1430,6 @@ struct sensor struct v4l2_subdev subdev; struct i2c_client *client; sensor_info_priv_t info_priv; - unsigned int pixfmt; int model; /* V4L2_IDENT_OV* codes from v4l2-chip-ident.h */ }; @@ -1493,7 +1506,7 @@ static int sensor_read(struct i2c_client *client, u16 reg, u8 *val) *val = buf[0]; return 0; } else { - SENSOR_TR("\n %s read reg failed, try to read again! reg:0x%x \n",SENSOR_NAME_STRING(),val); + SENSOR_TR("\n %s read reg failed, try to read again! reg:0x%x \n",SENSOR_NAME_STRING(),(unsigned int)val); udelay(10); } } @@ -1585,6 +1598,7 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) icd->user_width = SENSOR_INIT_WIDTH; icd->user_height = SENSOR_INIT_HEIGHT; sensor->info_priv.winseqe_cur_addr = (int)SENSOR_INIT_WINSEQADR; + sensor->info_priv.pixfmt = SENSOR_INIT_PIXFMT; /* sensor sensor information for initialization */ qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_DO_WHITE_BALANCE); @@ -1671,7 +1685,7 @@ static int sensor_suspend(struct soc_camera_device *icd, pm_message_t pm_msg) if (icl->power) { ret = icl->power(icd->pdev, 0); if (ret < 0) { - SENSOR_TR("\n %s suspend fail for turn on power!\n"); + SENSOR_TR("\n %s suspend fail for turn on power!\n", SENSOR_NAME_STRING()); return -EINVAL; } } @@ -1694,7 +1708,7 @@ static int sensor_resume(struct soc_camera_device *icd) if (icl->power) { ret = icl->power(icd->pdev, 1); if (ret < 0) { - SENSOR_TR("\n %s resume fail for turn on power!\n"); + SENSOR_TR("\n %s resume fail for turn on power!\n", SENSOR_NAME_STRING()); return -EINVAL; } } @@ -1729,7 +1743,7 @@ static int sensor_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) pix->width = icd->user_width; pix->height = icd->user_height; - pix->pixelformat = sensor->pixfmt; + pix->pixelformat = sensor->info_priv.pixfmt; pix->field = V4L2_FIELD_NONE; pix->colorspace = V4L2_COLORSPACE_JPEG; @@ -1740,9 +1754,35 @@ static int sensor_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) struct i2c_client *client = sd->priv; struct sensor *sensor = to_sensor(client); struct v4l2_pix_format *pix = &f->fmt.pix; - struct reginfo *winseqe_set_addr; + struct reginfo *winseqe_set_addr=NULL; int ret, set_w,set_h; + if (sensor->info_priv.pixfmt != pix->pixelformat) { + switch (pix->pixelformat) + { + case V4L2_PIX_FMT_YUYV: + { + winseqe_set_addr = sensor_ClrFmt_YUYV; + break; + } + case V4L2_PIX_FMT_UYVY: + { + winseqe_set_addr = sensor_ClrFmt_UYVY; + break; + } + default: + break; + } + if (winseqe_set_addr != NULL) { + sensor_write_array(client, winseqe_set_addr); + sensor->info_priv.pixfmt = pix->pixelformat; + + SENSOR_DG("%s Pixelformat(0x%x) set success!\n", SENSOR_NAME_STRING(),pix->pixelformat); + } else { + SENSOR_TR("%s Pixelformat(0x%x) is invalidate!\n", SENSOR_NAME_STRING(),pix->pixelformat); + } + } + set_w = pix->width; set_h = pix->height; @@ -1788,17 +1828,14 @@ static int sensor_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) set_w = 1600; set_h = 1200; } - else if (sensor_qvga[0].reg) + else { - winseqe_set_addr = sensor_qvga; /* ddl@rock-chips.com : Sensor output smallest size if isn't support app */ - set_w = 320; - set_h = 240; - } - else - { + winseqe_set_addr = SENSOR_INIT_WINSEQADR; /* ddl@rock-chips.com : Sensor output smallest size if isn't support app */ + set_w = SENSOR_INIT_WIDTH; + set_h = SENSOR_INIT_HEIGHT; + SENSOR_TR("\n %s..%s Format is Invalidate. pix->width = %d.. pix->height = %d\n",SENSOR_NAME_STRING(),__FUNCTION__,pix->width,pix->height); - return -EINVAL; - } + } if ((int)winseqe_set_addr != sensor->info_priv.winseqe_cur_addr) { diff --git a/drivers/media/video/ov2659.c b/drivers/media/video/ov2659.c index 7e2663f30ee5..d3350da431d8 100644 --- a/drivers/media/video/ov2659.c +++ b/drivers/media/video/ov2659.c @@ -30,7 +30,7 @@ o* Driver for MT9M001 CMOS Image Sensor from Micron /* Sensor Driver Configuration */ #define SENSOR_NAME ov2659 #define SENSOR_V4L2_IDENT V4L2_IDENT_OV2659 -#define SENSOR_ID 0x2659 +#define SENSOR_ID 0x2656 #define SENSOR_MIN_WIDTH 800 #define SENSOR_MIN_HEIGHT 600 #define SENSOR_MAX_WIDTH 1600 @@ -38,6 +38,7 @@ o* Driver for MT9M001 CMOS Image Sensor from Micron #define SENSOR_INIT_WIDTH 800 /* Sensor pixel size for sensor_init_data array */ #define SENSOR_INIT_HEIGHT 600 #define SENSOR_INIT_WINSEQADR sensor_svga +#define SENSOR_INIT_PIXFMT V4L2_PIX_FMT_YUYV #define CONFIG_SENSOR_WhiteBalance 1 #define CONFIG_SENSOR_Brightness 0 @@ -52,10 +53,10 @@ o* Driver for MT9M001 CMOS Image Sensor from Micron #define CONFIG_SENSOR_Mirror 0 #define CONFIG_SENSOR_Flip 0 -#define CONFIG_SENSOR_I2C_SPEED 100000 /* Hz */ +#define CONFIG_SENSOR_I2C_SPEED 400000 /* Hz */ #define CONFIG_SENSOR_TR 1 -#define CONFIG_SENSOR_DEBUG 0 +#define CONFIG_SENSOR_DEBUG 1 #define SENSOR_NAME_STRING(a) STR(CONS(SENSOR_NAME, a)) #define SENSOR_NAME_VARFUN(a) CONS(SENSOR_NAME, a) @@ -481,6 +482,18 @@ static struct reginfo ov2655_Sharpness5[] = }; #endif +static struct reginfo sensor_ClrFmt_YUYV[]= +{ + {0x4300, 0x30}, + {0x0000, 0x00} +}; + +static struct reginfo sensor_ClrFmt_UYVY[]= +{ + {0x4300, 0x32}, + {0x0000, 0x00} +}; + #if CONFIG_SENSOR_WhiteBalance static struct reginfo sensor_WhiteB_Auto[]= { @@ -1046,6 +1059,7 @@ typedef struct sensor_info_priv_s unsigned char mirror; /* HFLIP */ unsigned char flip; /* VFLIP */ unsigned int winseqe_cur_addr; + unsigned int pixfmt; } sensor_info_priv_t; @@ -1054,7 +1068,6 @@ struct sensor struct v4l2_subdev subdev; struct i2c_client *client; sensor_info_priv_t info_priv; - unsigned int pixfmt; int model; /* V4L2_IDENT_OV* codes from v4l2-chip-ident.h */ }; @@ -1131,7 +1144,7 @@ static int sensor_read(struct i2c_client *client, u16 reg, u8 *val) *val = buf[0]; return 0; } else { - SENSOR_TR("\n %s read reg failed, try to read again! reg:0x%x \n",SENSOR_NAME_STRING(),val); + SENSOR_TR("\n %s read reg failed, try to read again! reg:0x%x \n",SENSOR_NAME_STRING(),(unsigned int)val); udelay(10); } } @@ -1223,6 +1236,7 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) icd->user_width = SENSOR_INIT_WIDTH; icd->user_height = SENSOR_INIT_HEIGHT; sensor->info_priv.winseqe_cur_addr = (int)SENSOR_INIT_WINSEQADR; + sensor->info_priv.pixfmt = SENSOR_INIT_PIXFMT; /* sensor sensor information for initialization */ qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_DO_WHITE_BALANCE); @@ -1309,7 +1323,7 @@ static int sensor_suspend(struct soc_camera_device *icd, pm_message_t pm_msg) if (icl->power) { ret = icl->power(icd->pdev, 0); if (ret < 0) { - SENSOR_TR("\n %s suspend fail for turn on power!\n"); + SENSOR_TR("\n %s suspend fail for turn on power!\n", SENSOR_NAME_STRING()); return -EINVAL; } } @@ -1332,7 +1346,7 @@ static int sensor_resume(struct soc_camera_device *icd) if (icl->power) { ret = icl->power(icd->pdev, 1); if (ret < 0) { - SENSOR_TR("\n %s resume fail for turn on power!\n"); + SENSOR_TR("\n %s resume fail for turn on power!\n", SENSOR_NAME_STRING()); return -EINVAL; } } @@ -1367,7 +1381,7 @@ static int sensor_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) pix->width = icd->user_width; pix->height = icd->user_height; - pix->pixelformat = sensor->pixfmt; + pix->pixelformat = sensor->info_priv.pixfmt; pix->field = V4L2_FIELD_NONE; pix->colorspace = V4L2_COLORSPACE_JPEG; @@ -1378,9 +1392,35 @@ static int sensor_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) struct i2c_client *client = sd->priv; struct sensor *sensor = to_sensor(client); struct v4l2_pix_format *pix = &f->fmt.pix; - struct reginfo *winseqe_set_addr; + struct reginfo *winseqe_set_addr=NULL; int ret, set_w,set_h; + if (sensor->info_priv.pixfmt != pix->pixelformat) { + switch (pix->pixelformat) + { + case V4L2_PIX_FMT_YUYV: + { + winseqe_set_addr = sensor_ClrFmt_YUYV; + break; + } + case V4L2_PIX_FMT_UYVY: + { + winseqe_set_addr = sensor_ClrFmt_UYVY; + break; + } + default: + break; + } + if (winseqe_set_addr != NULL) { + sensor_write_array(client, winseqe_set_addr); + sensor->info_priv.pixfmt = pix->pixelformat; + + SENSOR_DG("%s Pixelformat(0x%x) set success!\n", SENSOR_NAME_STRING(),pix->pixelformat); + } else { + SENSOR_TR("%s Pixelformat(0x%x) is invalidate!\n", SENSOR_NAME_STRING(),pix->pixelformat); + } + } + set_w = pix->width; set_h = pix->height; diff --git a/drivers/media/video/ov5642.c b/drivers/media/video/ov5642.c old mode 100755 new mode 100644 index da7074ad4b1c..0230d6f1560d --- a/drivers/media/video/ov5642.c +++ b/drivers/media/video/ov5642.c @@ -38,6 +38,7 @@ o* Driver for MT9M001 CMOS Image Sensor from Micron #define SENSOR_INIT_WIDTH 640 /* Sensor pixel size for sensor_init_data array */ #define SENSOR_INIT_HEIGHT 480 #define SENSOR_INIT_WINSEQADR sensor_vga +#define SENSOR_INIT_PIXFMT V4L2_PIX_FMT_UYVY #define CONFIG_SENSOR_WhiteBalance 1 #define CONFIG_SENSOR_Brightness 0 @@ -57,10 +58,10 @@ o* Driver for MT9M001 CMOS Image Sensor from Micron #define CONFIG_SENSOR_Mirror 0 #define CONFIG_SENSOR_Flip 0 -#define CONFIG_SENSOR_I2C_SPEED 100000 /* Hz */ +#define CONFIG_SENSOR_I2C_SPEED 400000 /* Hz */ #define CONFIG_SENSOR_TR 1 -#define CONFIG_SENSOR_DEBUG 0 +#define CONFIG_SENSOR_DEBUG 1 #define SENSOR_NAME_STRING(a) STR(CONS(SENSOR_NAME, a)) #define SENSOR_NAME_VARFUN(a) CONS(SENSOR_NAME, a) @@ -938,6 +939,19 @@ static struct reginfo ov2655_Sharpness5[] = }; #endif +static struct reginfo sensor_ClrFmt_YUYV[]= +{ + {0x4300, 0x30}, + {0x0000, 0x00} +}; + +static struct reginfo sensor_ClrFmt_UYVY[]= +{ + {0x4300, 0x32}, + {0x0000, 0x00} +}; + + #if CONFIG_SENSOR_WhiteBalance static struct reginfo sensor_WhiteB_Auto[]= { @@ -1524,6 +1538,7 @@ typedef struct sensor_info_priv_s unsigned char mirror; /* HFLIP */ unsigned char flip; /* VFLIP */ unsigned int winseqe_cur_addr; + unsigned int pixfmt; unsigned int funmodule_state; } sensor_info_priv_t; @@ -1532,7 +1547,6 @@ struct sensor struct v4l2_subdev subdev; struct i2c_client *client; sensor_info_priv_t info_priv; - unsigned int pixfmt; int model; /* V4L2_IDENT_OV* codes from v4l2-chip-ident.h */ }; @@ -1835,6 +1849,7 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) icd->user_width = SENSOR_INIT_WIDTH; icd->user_height = SENSOR_INIT_HEIGHT; sensor->info_priv.winseqe_cur_addr = (int)SENSOR_INIT_WINSEQADR; + sensor->info_priv.pixfmt = SENSOR_INIT_PIXFMT; /* sensor sensor information for initialization */ qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_DO_WHITE_BALANCE); @@ -1979,7 +1994,7 @@ static int sensor_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) pix->width = icd->user_width; pix->height = icd->user_height; - pix->pixelformat = sensor->pixfmt; + pix->pixelformat = sensor->info_priv.pixfmt; pix->field = V4L2_FIELD_NONE; pix->colorspace = V4L2_COLORSPACE_JPEG; @@ -1990,9 +2005,35 @@ static int sensor_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) struct i2c_client *client = sd->priv; struct sensor *sensor = to_sensor(client); struct v4l2_pix_format *pix = &f->fmt.pix; - struct reginfo *winseqe_set_addr; + struct reginfo *winseqe_set_addr=NULL; int ret, set_w,set_h; + if (sensor->info_priv.pixfmt != pix->pixelformat) { + switch (pix->pixelformat) + { + case V4L2_PIX_FMT_YUYV: + { + winseqe_set_addr = sensor_ClrFmt_YUYV; + break; + } + case V4L2_PIX_FMT_UYVY: + { + winseqe_set_addr = sensor_ClrFmt_UYVY; + break; + } + default: + break; + } + if (winseqe_set_addr != NULL) { + sensor_write_array(client, winseqe_set_addr); + sensor->info_priv.pixfmt = pix->pixelformat; + + SENSOR_DG("%s Pixelformat(0x%x) set success!\n", SENSOR_NAME_STRING(),pix->pixelformat); + } else { + SENSOR_TR("%s Pixelformat(0x%x) is invalidate!\n", SENSOR_NAME_STRING(),pix->pixelformat); + } + } + set_w = pix->width; set_h = pix->height; diff --git a/drivers/media/video/rk29_camera_oneframe.c b/drivers/media/video/rk29_camera_oneframe.c index ede825058ae8..641ea2ff9345 100644 --- a/drivers/media/video/rk29_camera_oneframe.c +++ b/drivers/media/video/rk29_camera_oneframe.c @@ -117,7 +117,7 @@ //Configure Macro #define CONFIG_RK29CAMERA_TR 1 -#define CONFIG_RK29CAMERA_DEBUG 0 +#define CONFIG_RK29CAMERA_DEBUG 1 #if (CONFIG_RK29CAMERA_TR) #define RK29CAMERA_TR(format, ...) printk(format, ## __VA_ARGS__) #if (CONFIG_RK29CAMERA_DEBUG) @@ -500,8 +500,8 @@ static int rk29_camera_activate(struct rk29_camera_dev *pcdev, struct soc_camera //write_grf_reg(GRF_SOC_CON0_Reg, read_grf_reg(GRF_SOC_CON0_Reg)|VIP_AHBMASTER); //VIP Config to AHB write_grf_reg(GRF_SOC_CON0_Reg, read_grf_reg(GRF_SOC_CON0_Reg)&(~VIP_AHBMASTER)); //VIP Config to AXI - write_grf_reg(GRF_OS_REG0, read_grf_reg(GRF_OS_REG0)&(~VIP_ACLK_DIV_HCLK_2)); //aclk:hclk = 1:1 - //write_grf_reg(GRF_OS_REG0, read_grf_reg(GRF_OS_REG0)|VIP_ACLK_DIV_HCLK_2); //aclk:hclk = 2:1 + //write_grf_reg(GRF_OS_REG0, read_grf_reg(GRF_OS_REG0)&(~VIP_ACLK_DIV_HCLK_2)); //aclk:hclk = 1:1 + write_grf_reg(GRF_OS_REG0, read_grf_reg(GRF_OS_REG0)|VIP_ACLK_DIV_HCLK_2); //aclk:hclk = 2:1 write_vip_reg(RK29_VIP_RESET, 0x76543210); /* ddl@rock-chips.com : vip software reset */ udelay(10); -- 2.34.1