From 5e0cb7287bce4ec3cc4c827fd843929bdb15a66a Mon Sep 17 00:00:00 2001 From: Wang Panzhenzhuan Date: Fri, 18 Sep 2020 17:40:10 +0800 Subject: [PATCH] media: i2c: gc2145: reduce rkisp1: CIF_ISP_PIC_SIZE_ERROR 0x00000001 Add delay to enable oneframe signal complete, when gc2145 stream off. For uncompleted frame signal may cause rkisp1: CIF_ISP_PIC_SIZE_ERROR, when gc2145 switch to new resolutions. Signed-off-by: Wang Panzhenzhuan Change-Id: I6be22471fabfba5da2cac9806d634837d6a08fb9 --- drivers/media/i2c/gc2145.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/gc2145.c b/drivers/media/i2c/gc2145.c index 2139439dbd1c..283618ce3397 100644 --- a/drivers/media/i2c/gc2145.c +++ b/drivers/media/i2c/gc2145.c @@ -9,6 +9,7 @@ * V0.0X01.0X02 fix mclk issue when probe multiple camera. * V0.0X01.0X03 fix gc2145 exposure issues. * V0.0X01.0X04 add enum_frame_interval function. + * V0.0X01.0X05 reduce rkisp1: CIF_ISP_PIC_SIZE_ERROR 0x00000001. */ #include @@ -40,7 +41,7 @@ #include #include -#define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x4) +#define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x5) #define DRIVER_NAME "gc2145" #define GC2145_PIXEL_RATE (120 * 1000 * 1000) @@ -2364,6 +2365,11 @@ static int gc2145_s_stream(struct v4l2_subdev *sd, int on) struct i2c_client *client = v4l2_get_subdevdata(sd); struct gc2145 *gc2145 = to_gc2145(sd); int ret = 0; + unsigned int fps; + unsigned int delay_us; + + fps = DIV_ROUND_CLOSEST(gc2145->frame_size->max_fps.denominator, + gc2145->frame_size->max_fps.numerator); dev_info(&client->dev, "%s: on: %d, %dx%d@%d\n", __func__, on, gc2145->frame_size->width, @@ -2382,6 +2388,11 @@ static int gc2145_s_stream(struct v4l2_subdev *sd, int on) /* Stop Streaming Sequence */ gc2145_set_streaming(gc2145, on); gc2145->streaming = on; + /* delay to enable oneframe complete */ + delay_us = 1000 * 1000 / fps; + usleep_range(delay_us, delay_us+10); + dev_info(&client->dev, "%s: on: %d, sleep(%dus)\n", + __func__, on, delay_us); goto unlock; } if (ret)