* [PATCH 2/2] media: i2c: dw9719: Add DW9714VA support
2026-10-16 9:09 [PATCH 1/2] dt-bindings: media: i2c: dongwoon,dw9719: Document DW9714VA wyibo6109
@ 2026-10-16 9:09 ` wyibo6109
2026-10-16 13:03 ` [PATCH 1/2] dt-bindings: media: i2c: dongwoon,dw9719: Document DW9714VA Rob Herring (Arm)
2026-10-16 13:11 ` David Heidelberg
2 siblings, 0 replies; 5+ messages in thread
From: wyibo6109 @ 2026-10-16 9:09 UTC (permalink / raw)
To: Mauro Carvalho Chehab, linux-media
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Daniel Scally,
Sakari Ailus, devicetree, linux-kernel, Yibo Wang,
David Heidelberg
From: Yibo Wang <wyibo6109@gmail.com>
The dongwoon,dw9714va compatible names the DW9714V revision found on
the OnePlus Pad 4 ("iceland") rear camera module. DW9714VA is a
coined name, not an official part number; the revision shares its
IC INFO id (0xFE) with the other DW9714V revisions.
The part answers the DW9719 register interface in its register-mapped
("advanced") mode: the chip responds to register-addressed transfers,
IC INFO returns manufacturer 0xF / model 0xE (0xFE), and the reset
value of the VCM_FREQ register (0x60) matches the DW9719/DW9800
prescaler-in-[7:6] / SACT-in-[5:0] layout. The SAC mode field in
MODE is shifted by 6, like on the DW9800K.
Both the register layout and the power-on behaviour differ from the
currently available DW9714V datasheet (Rev. 0.03G). The datasheet
documents an advanced mode with SAC_MODE in [3:0] of SAC_CFG and
separate PRESC (0x07, [1:0], reset 0x03) and SACT (0x08, [6:0],
reset 0x7F) registers, and a power-on into the normal (direct DAC)
mode that enters the advanced mode only through an explicit
0xED 0xAB command sequence. The observed part follows the DW9719
layout instead and is in the advanced mode at the first host
access; given the revision variance it gets its own coined
compatible, dongwoon,dw9714va.
Operation was verified on the device by sweeping the focus position
across the full range while observing the lens: the motion is
smooth with no ringing noise, so SAC works through the DW9800K
write path.
Detect the chip through INFO and drive it through the DW9800K write
path.
The SAC parameters are module-specific: they have to match the
mechanical resonance (tVIB) of the lens module. For the iceland rear
module they were recovered from the vendor module firmware
(com.qti.sensormodule.icelandmain.bin, which embeds the actuator init
on this CamX generation): MODE 0x80 (SAC mode field 2) and FREQ 0x79
(prescaler 1, SACT 0x39). They were verified on hardware by register
readback (CONTROL 0x02, MODE 0x80, FREQ 0x79) and a three-frame
capture at focus position 450 with no I2C errors. No such data
exists for any other module with this part, so the driver carries no
DW9714VA-specific defaults: it starts from the family defaults and
boards are expected to provide the tuning through the existing
dongwoon,sac-mode and dongwoon,vcm-prescale DT properties.
The datasheet-conformant DW9714V and DW9714A in normal (direct DAC)
mode are covered by the dw9714 driver; a series documenting them in
the dongwoon,dw9714 binding by David Heidelberg is in flight:
https://lore.kernel.org/linux-media/20260729-dw9714v-v1-0-3c479b3cf8c0@ixit.cz/
Tested on the OnePlus Pad 4 (iceland) rear camera module on a
v7.2-based downstream tree.
Tested-by: Yibo Wang <wyibo6109@gmail.com>
Cc: David Heidelberg <david@ixit.cz>
Signed-off-by: Yibo Wang <wyibo6109@gmail.com>
---
drivers/media/i2c/dw9719.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/media/i2c/dw9719.c b/drivers/media/i2c/dw9719.c
index 3b7ba88fd..2afe37361 100644
--- a/drivers/media/i2c/dw9719.c
+++ b/drivers/media/i2c/dw9719.c
@@ -45,6 +45,15 @@
#define DW9719_INFO CCI_REG8(0)
#define DW9719_ID 0xF1
#define DW9761_ID 0xF4
+/*
+ * DW9714V family id, shared by the revisions. The DW9714VA model
+ * names the revision found on the OnePlus Pad 4 (iceland) camera
+ * modules, always in its register-mapped ("advanced") mode: IC INFO
+ * reads manufacturer 0xF / model 0xE and the CONTROL/VCM/STATUS/MODE/
+ * FREQ registers follow the DW9719 layout, not the layout the DW9714V
+ * datasheet documents for its advanced mode.
+ */
+#define DW9714V_ID 0xFE
#define DW9719_CONTROL CCI_REG8(2)
#define DW9719_STANDBY 0x00
@@ -75,6 +84,7 @@
#define to_dw9719_device(x) container_of(x, struct dw9719_device, sd)
enum dw9719_model {
+ DW9714VA,
DW9718S,
DW9719,
DW9761,
@@ -153,6 +163,16 @@ static int dw9719_power_up(struct dw9719_device *dw9719, bool detect)
return ret;
switch (val) {
+ case DW9714V_ID:
+ dw9719->model = DW9714VA;
+ /*
+ * No SAC tuning data exists for DW9714VA modules in
+ * general; start from the family defaults and let DT
+ * provide the module-specific values.
+ */
+ dw9719->sac_mode = DW9719_DEFAULT_SAC;
+ dw9719->vcm_freq = DW9719_DEFAULT_VCM_FREQ;
+ break;
case DW9719_ID:
dw9719->model = DW9719;
dw9719->mode_low_bits = 0x00;
@@ -188,6 +208,7 @@ static int dw9719_power_up(struct dw9719_device *dw9719, bool detect)
}
switch (dw9719->model) {
+ case DW9714VA:
case DW9800K:
cci_write(dw9719->regmap, DW9719_CONTROL, DW9719_ENABLE_RINGING, &ret);
cci_write(dw9719->regmap, DW9719_MODE,
@@ -440,6 +461,7 @@ static void dw9719_remove(struct i2c_client *client)
}
static const struct i2c_device_id dw9719_id_table[] = {
+ { .name = "dw9714va", .driver_data = (kernel_ulong_t)DW9714VA },
{ .name = "dw9718s", .driver_data = (kernel_ulong_t)DW9718S },
{ .name = "dw9719", .driver_data = (kernel_ulong_t)DW9719 },
{ .name = "dw9761", .driver_data = (kernel_ulong_t)DW9761 },
@@ -449,6 +471,7 @@ static const struct i2c_device_id dw9719_id_table[] = {
MODULE_DEVICE_TABLE(i2c, dw9719_id_table);
static const struct of_device_id dw9719_of_table[] = {
+ { .compatible = "dongwoon,dw9714va", .data = (const void *)DW9714VA },
{ .compatible = "dongwoon,dw9718s", .data = (const void *)DW9718S },
{ .compatible = "dongwoon,dw9719", .data = (const void *)DW9719 },
{ .compatible = "dongwoon,dw9761", .data = (const void *)DW9761 },
--
2.53.0
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 1/2] dt-bindings: media: i2c: dongwoon,dw9719: Document DW9714VA
2026-10-16 9:09 [PATCH 1/2] dt-bindings: media: i2c: dongwoon,dw9719: Document DW9714VA wyibo6109
2026-10-16 9:09 ` [PATCH 2/2] media: i2c: dw9719: Add DW9714VA support wyibo6109
@ 2026-10-16 13:03 ` Rob Herring (Arm)
2026-10-16 13:11 ` David Heidelberg
2 siblings, 0 replies; 5+ messages in thread
From: Rob Herring (Arm) @ 2026-10-16 13:03 UTC (permalink / raw)
To: wyibo6109
Cc: Sakari Ailus, linux-kernel, David Heidelberg,
Krzysztof Kozlowski, Daniel Scally, devicetree,
Mauro Carvalho Chehab, linux-media, Conor Dooley
On Fri, 16 Oct 2026 04:09:29 -0500, wyibo6109@gmail.com wrote:
> From: Yibo Wang <wyibo6109@gmail.com>
>
> The dongwoon,dw9714va compatible names the DW9714V silicon revision
> found on the OnePlus Pad 4 (iceland) camera modules. DW9714VA is not
> an official part number: it is coined to distinguish this revision,
> which shares its IC INFO id (0xFE) with the other DW9714V revisions.
>
> In its register-mapped ("advanced") mode it exposes the DW9719
> register interface, with the SAC mode field in MODE shifted by 6 like
> on the DW9800K. This differs from the advanced-mode layout of the
> currently available DW9714V datasheet (Rev. 0.03G), which puts
> SAC_MODE in [3:0] of SAC_CFG and splits the prescaler and SACT into
> separate registers.
>
> The datasheet-conformant DW9714V and DW9714A, used in their normal
> (direct DAC) mode, are covered by the dongwoon,dw9714 binding
> instead; see the in-flight series by David Heidelberg documenting
> them:
>
> https://lore.kernel.org/linux-media/20260729-dw9714v-v1-0-3c479b3cf8c0@ixit.cz/
>
> The module-specific SAC tuning is carried by the already-documented
> dongwoon,sac-mode and dongwoon,vcm-prescale properties.
>
> Cc: David Heidelberg <david@ixit.cz>
> Signed-off-by: Yibo Wang <wyibo6109@gmail.com>
> ---
> .../devicetree/bindings/media/i2c/dongwoon,dw9719.yaml | 7 +++++++
> 1 file changed, 7 insertions(+)
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
./Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml:21:23: [error] syntax error: mapping values are not allowed here (syntax)
dtschema/dtc warnings/errors:
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml: ignoring, error parsing file
./Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml: error loading YAML: mapping values are not allowed here
in "./Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml", line 21, column 23
./Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml:21:23: mapping values are not allowed here
make[2]: *** Deleting file 'Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.example.dts'
Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml:21:23: mapping values are not allowed here
make[2]: *** [Documentation/devicetree/bindings/Makefile:26: Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.example.dts] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/builds/robherring/linux-dt-review/Makefile:1725: dt_binding_check] Error 2
make: *** [Makefile:248: __sub-make] Error 2
doc reference errors (make refcheckdocs):
See https://patchwork.kernel.org/project/devicetree/patch/20261016090930.947830-1-wyibo6109@gmail.com
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 1/2] dt-bindings: media: i2c: dongwoon,dw9719: Document DW9714VA
2026-10-16 9:09 [PATCH 1/2] dt-bindings: media: i2c: dongwoon,dw9719: Document DW9714VA wyibo6109
2026-10-16 9:09 ` [PATCH 2/2] media: i2c: dw9719: Add DW9714VA support wyibo6109
2026-10-16 13:03 ` [PATCH 1/2] dt-bindings: media: i2c: dongwoon,dw9719: Document DW9714VA Rob Herring (Arm)
@ 2026-10-16 13:11 ` David Heidelberg
2026-10-16 16:04 ` Yibo Wang
2 siblings, 1 reply; 5+ messages in thread
From: David Heidelberg @ 2026-10-16 13:11 UTC (permalink / raw)
To: wyibo6109, Mauro Carvalho Chehab, linux-media
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Daniel Scally,
Sakari Ailus, devicetree, linux-kernel
On 16/10/2026 11:09, wyibo6109@gmail.com wrote:
> From: Yibo Wang <wyibo6109@gmail.com>
>
> The dongwoon,dw9714va compatible names the DW9714V silicon revision
> found on the OnePlus Pad 4 (iceland) camera modules. DW9714VA is not
> an official part number: it is coined to distinguish this revision,
> which shares its IC INFO id (0xFE) with the other DW9714V revisions.
>
> In its register-mapped ("advanced") mode it exposes the DW9719
> register interface, with the SAC mode field in MODE shifted by 6 like
> on the DW9800K. This differs from the advanced-mode layout of the
> currently available DW9714V datasheet (Rev. 0.03G), which puts
> SAC_MODE in [3:0] of SAC_CFG and splits the prescaler and SACT into
> separate registers.
>
> The datasheet-conformant DW9714V and DW9714A, used in their normal
> (direct DAC) mode, are covered by the dongwoon,dw9714 binding
> instead; see the in-flight series by David Heidelberg documenting
> them:
>
> https://lore.kernel.org/linux-media/20260729-dw9714v-v1-0-3c479b3cf8c0@ixit.cz/
>
> The module-specific SAC tuning is carried by the already-documented
> dongwoon,sac-mode and dongwoon,vcm-prescale properties.
>
> Cc: David Heidelberg <david@ixit.cz>
> Signed-off-by: Yibo Wang <wyibo6109@gmail.com>
> ---
> .../devicetree/bindings/media/i2c/dongwoon,dw9719.yaml | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml b/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml
> index 8e8d62436..f415f2369 100644
> --- a/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml
> +++ b/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9719.yaml
> @@ -14,10 +14,17 @@ description:
> with 100 mA output current sink capability, designed for linear control of
> voice coil motors (VCM) in camera lenses. This chip provides a Smart Actuator
> Control (SAC) mode intended for driving voice coil lenses in camera modules.
> + The DW9714V revision found on the OnePlus Pad 4 (iceland) camera
> + modules exposes this register interface in its register-mapped
> + ("advanced") mode, with a register layout following the DW9719
> + rather than the DW9714V datasheet. dongwoon,dw9714va is not an
> + official part number: it is coined to name this revision, which
> + shares its IC INFO id with the other DW9714V revisions.
Hello Yibo,
few things to improve.
1. you should disclose usage of LLM (e.g. Assisted-by: tag) - I assume you used it
2. No need to describe which device contains this piece of HW.
The binding doesn't care where it's used, only describes the actual HW.
You may mention the device using it in the series description, but doesn't make
sense to do it in the binding/driver.
David
[...]
^ permalink raw reply [flat|nested] 5+ messages in thread