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