lede/target/linux/bcm27xx/patches-6.12/950-0302-media-dw9807-vcm-Smooth-the-first-user-movement-of-t.patch
=?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= d81c03f05e bcm27xx: add 6.12 patches from RPi repo
These patches were generated from:
https://github.com/raspberrypi/linux/commits/rpi-6.12.y
With the following command:
git format-patch -N v6.12.27..HEAD
(HEAD -> 8d3206ee456a5ecdf9ddbfd8e5e231e4f0cd716e)

Exceptions:
- (def)configs patches
- github workflows patches
- applied & reverted patches
- readme patches
- wireless patches

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2025-06-20 17:01:06 +08:00

49 lines
1.5 KiB
Diff

From 35ed3470decc60fc4f326ccb643ede93f7563e9d Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Tue, 3 Jan 2023 16:53:37 +0000
Subject: [PATCH] media: dw9807-vcm: Smooth the first user movement of the lens
The power up/down sequence is already ramped. Extend this to
the first user movement as well, as this will generally avoid
the "tick" noises due to rapid movements and overshooting.
Subsequent movements are generally smaller and so don't cause
issues.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/media/i2c/dw9807-vcm.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
--- a/drivers/media/i2c/dw9807-vcm.c
+++ b/drivers/media/i2c/dw9807-vcm.c
@@ -62,6 +62,7 @@ struct dw9807_device {
u16 idle_pos;
struct regulator *vdd;
struct notifier_block notifier;
+ bool first;
};
static inline struct dw9807_device *sd_to_dw9807_vcm(
@@ -176,6 +177,8 @@ static int dw9807_active(struct dw9807_d
return ret;
}
+ dw9807_dev->first = true;
+
return dw9807_ramp(client, dw9807_dev->idle_pos, dw9807_dev->current_val);
}
@@ -230,9 +233,11 @@ static int dw9807_set_ctrl(struct v4l2_c
if (ctrl->id == V4L2_CID_FOCUS_ABSOLUTE) {
struct i2c_client *client = v4l2_get_subdevdata(&dev_vcm->sd);
+ int start = (dev_vcm->first) ? dev_vcm->current_val : ctrl->val;
+ dev_vcm->first = false;
dev_vcm->current_val = ctrl->val;
- return dw9807_ramp(client, ctrl->val, ctrl->val);
+ return dw9807_ramp(client, start, ctrl->val);
}
return -EINVAL;