From d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 02:45:28 +0000 Subject: [PATCH] add boot partition size --- kernel/drivers/media/i2c/fp5510.c | 32 +++++++++++++++++++++----------- 1 files changed, 21 insertions(+), 11 deletions(-) diff --git a/kernel/drivers/media/i2c/fp5510.c b/kernel/drivers/media/i2c/fp5510.c index 3bf3189..5411a3e 100644 --- a/kernel/drivers/media/i2c/fp5510.c +++ b/kernel/drivers/media/i2c/fp5510.c @@ -15,11 +15,12 @@ #include <media/v4l2-device.h> #include <linux/rk_vcm_head.h> #include <linux/gpio/consumer.h> +#include <linux/compat.h> #define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x0) #define FP5510_NAME "fp5510" -#define FP5510_MAX_CURRENT 100U +#define FP5510_MAX_CURRENT 120U #define FP5510_MAX_REG 1023U #define FP5510_DEFAULT_START_CURRENT 0 @@ -48,8 +49,8 @@ unsigned int t_src; unsigned int mclk; - struct timeval start_move_tv; - struct timeval end_move_tv; + struct __kernel_old_timeval start_move_tv; + struct __kernel_old_timeval end_move_tv; unsigned long move_ms; u32 module_index; @@ -383,6 +384,8 @@ if (position > FP5510_MAX_REG) position = FP5510_MAX_REG; + dev_info(&client->dev, "%s: set dest_pos %d, position %d\n", __func__, dest_pos, position); + dev_vcm->current_lens_pos = position; dev_vcm->current_related_pos = dest_pos; msb = (0x00U | ((dev_vcm->current_lens_pos & 0x3F0U) >> 4U)); @@ -437,7 +440,7 @@ (uint32_t)move_pos) / VCMDRV_MAX_LOG); - dev_vcm->start_move_tv = ns_to_timeval(ktime_get_ns()); + dev_vcm->start_move_tv = ns_to_kernel_old_timeval(ktime_get_ns()); mv_us = dev_vcm->start_move_tv.tv_usec + dev_vcm->move_ms * 1000; if (mv_us >= 1000000) { @@ -503,7 +506,7 @@ VCMDRV_MAX_LOG * dev_vcm->step; dev_vcm->step_mode = dev_vcm->vcm_cfg.step_mode; - dev_dbg(&client->dev, + dev_info(&client->dev, "vcm_cfg: %d, %d, %d, max_ma %d\n", dev_vcm->vcm_cfg.start_ma, dev_vcm->vcm_cfg.rated_ma, @@ -560,13 +563,15 @@ unsigned int cmd, unsigned long arg) { struct i2c_client *client = v4l2_get_subdevdata(sd); - struct rk_cam_compat_vcm_tim __user *p32 = compat_ptr(arg); + void __user *up = compat_ptr(arg); struct rk_cam_compat_vcm_tim compat_vcm_tim; struct rk_cam_vcm_tim vcm_tim; struct rk_cam_vcm_cfg vcm_cfg; long ret; if (cmd == RK_VIDIOC_COMPAT_VCM_TIMEINFO) { + struct rk_cam_compat_vcm_tim __user *p32 = up; + ret = fp5510_ioctl(sd, RK_VIDIOC_VCM_TIMEINFO, &vcm_tim); compat_vcm_tim.vcm_start_t.tv_sec = vcm_tim.vcm_start_t.tv_sec; compat_vcm_tim.vcm_start_t.tv_usec = @@ -584,12 +589,17 @@ &p32->vcm_end_t.tv_usec); } else if (cmd == RK_VIDIOC_GET_VCM_CFG) { ret = fp5510_ioctl(sd, RK_VIDIOC_GET_VCM_CFG, &vcm_cfg); - if (!ret) + if (!ret) { ret = copy_to_user(up, &vcm_cfg, sizeof(vcm_cfg)); + if (ret) + ret = -EFAULT; + } } else if (cmd == RK_VIDIOC_SET_VCM_CFG) { ret = copy_from_user(&vcm_cfg, up, sizeof(vcm_cfg)); if (!ret) ret = fp5510_ioctl(sd, cmd, &vcm_cfg); + else + ret = -EFAULT; } else { dev_err(&client->dev, "cmd 0x%x not supported\n", cmd); @@ -742,8 +752,8 @@ fp5510_update_vcm_cfg(fp5510_dev); fp5510_dev->move_ms = 0; fp5510_dev->current_related_pos = VCMDRV_MAX_LOG; - fp5510_dev->start_move_tv = ns_to_timeval(ktime_get_ns()); - fp5510_dev->end_move_tv = ns_to_timeval(ktime_get_ns()); + fp5510_dev->start_move_tv = ns_to_kernel_old_timeval(ktime_get_ns()); + fp5510_dev->end_move_tv = ns_to_kernel_old_timeval(ktime_get_ns()); /* * Note: * 1. At ESC mode, ESC code=1 and TSC must be equal 0. @@ -808,7 +818,7 @@ return 0; } -static int fp5510_vcm_resume(struct device *dev) +static int __maybe_unused fp5510_vcm_resume(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct v4l2_subdev *sd = i2c_get_clientdata(client); @@ -820,7 +830,7 @@ return 0; } -static int fp5510_vcm_suspend(struct device *dev) +static int __maybe_unused fp5510_vcm_suspend(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct v4l2_subdev *sd = i2c_get_clientdata(client); -- Gitblit v1.6.2