From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 06 Nov 2023 03:04:41 +0000 Subject: [PATCH] rk3568 rt init --- kernel/drivers/media/i2c/gc2145.c | 22 +++++++++++++++------- 1 files changed, 15 insertions(+), 7 deletions(-) diff --git a/kernel/drivers/media/i2c/gc2145.c b/kernel/drivers/media/i2c/gc2145.c index bb7388e..0ea0b91 100644 --- a/kernel/drivers/media/i2c/gc2145.c +++ b/kernel/drivers/media/i2c/gc2145.c @@ -2583,8 +2583,11 @@ } ret = gc2145_ioctl(sd, cmd, inf); - if (!ret) + if (!ret) { ret = copy_to_user(up, inf, sizeof(*inf)); + if (ret) + ret = -EFAULT; + } kfree(inf); break; case RKMODULE_AWB_CFG: @@ -2597,12 +2600,16 @@ ret = copy_from_user(cfg, up, sizeof(*cfg)); if (!ret) ret = gc2145_ioctl(sd, cmd, cfg); + else + ret = -EFAULT; kfree(cfg); break; case RKMODULE_SET_QUICK_STREAM: ret = copy_from_user(&stream, up, sizeof(u32)); if (!ret) ret = gc2145_ioctl(sd, cmd, &stream); + else + ret = -EFAULT; break; default: ret = -ENOIOCTLCMD; @@ -2871,7 +2878,7 @@ if (ret) dev_info(dev, "Failed to get power regulators\n"); - return __gc2145_power_on(gc2145); + return ret; } static int gc2145_probe(struct i2c_client *client, @@ -2915,11 +2922,6 @@ ret = gc2145_parse_of(gc2145); if (ret != 0) - return -EINVAL; - - gc2145->xvclk_frequency = clk_get_rate(gc2145->xvclk); - if (gc2145->xvclk_frequency < 6000000 || - gc2145->xvclk_frequency > 27000000) return -EINVAL; v4l2_ctrl_handler_init(&gc2145->ctrls, 3); @@ -2972,6 +2974,12 @@ gc2145->fps = DIV_ROUND_CLOSEST(gc2145->framesize_cfg[0].max_fps.denominator, gc2145->framesize_cfg[0].max_fps.numerator); + __gc2145_power_on(gc2145); + gc2145->xvclk_frequency = clk_get_rate(gc2145->xvclk); + if (gc2145->xvclk_frequency < 6000000 || + gc2145->xvclk_frequency > 27000000) + goto error; + ret = gc2145_detect(gc2145); if (ret < 0) { dev_info(&client->dev, "Check id failed:\n" -- Gitblit v1.6.2