From: johannes.goede@oss.qualcomm.com
To: Xiaolei Wang <xiaolei.wang@windriver.com>,
tarang.raval@siliconsignals.io,
laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com,
dave.stevenson@raspberrypi.com, jacopo@jmondi.org,
mchehab@kernel.org, prabhakar.mahadev-lad.rj@bp.renesas.com,
hverkuil+cisco@kernel.org, hverkuil-cisco@xs4all.nl,
jai.luthra@ideasonboard.com
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/3] media: i2c: ov5647: Convert to CCI register access helpers
Date: Wed, 31 Dec 2025 13:12:56 +0100 [thread overview]
Message-ID: <636403b7-cb5f-4997-b24c-e697626e17bc@oss.qualcomm.com> (raw)
In-Reply-To: <20251231083924.2657165-2-xiaolei.wang@windriver.com>
Hi Xiaolei,
Thank you for the new version and thank you for
addressing my comments about the register lists.
A few more comments inline, sorry for not catching these
in my earlier review.
On 31-Dec-25 09:39, Xiaolei Wang wrote:
> Use the new common CCI register access helpers to replace the private
> register access helpers in the ov5647 driver. This simplifies the driver
> by reducing the amount of code.
>
> Signed-off-by: Xiaolei Wang <xiaolei.wang@windriver.com>
> ---
...
> diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c
> index e193fef4fced..cbcb760ba5cd 100644
> --- a/drivers/media/i2c/ov5647.c
> +++ b/drivers/media/i2c/ov5647.c
...
> static int ov5647_set_virtual_channel(struct v4l2_subdev *sd, int channel)
> {
> - u8 channel_id;
> + struct ov5647 *sensor = to_sensor(sd);
> + u64 channel_id;
> int ret;
>
> - ret = ov5647_read(sd, OV5647_REG_MIPI_CTRL14, &channel_id);
> + ret = cci_read(sensor->regmap, OV5647_REG_MIPI_CTRL14, &channel_id, NULL);
> if (ret < 0)
> return ret;
>
> channel_id &= ~(3 << 6);
>
> - return ov5647_write(sd, OV5647_REG_MIPI_CTRL14,
> - channel_id | (channel << 6));
> + return cci_write(sensor->regmap, OV5647_REG_MIPI_CTRL14,
> + channel_id | (channel << 6), NULL);
> }
This can be replaced with:
At the top below:
#define OV5647_REG_MIPI_CTRL14 CCI_REG8(0x4814)
add:
#define OV5647_REG_MIPI_CTRL14_CHANNEL_MASK GENMASK(7, 6)
#define OV5647_REG_MIPI_CTRL14_CHANNEL_SHIFT 6
And then replace ov5647_set_virtual_channel() with:
static int ov5647_set_virtual_channel(struct v4l2_subdev *sd, int channel)
{
struct ov5647 *sensor = to_sensor(sd);
return cci_update_bits(sensor->regmap, OV5647_REG_MIPI_CTRL14,
OV5647_REG_MIPI_CTRL14_CHANNEL_MASK,
channel << OV5647_REG_MIPI_CTRL14_CHANNEL_SHIFT,
NULL);
}
...
> @@ -815,23 +726,23 @@ static int ov5647_power_on(struct device *dev)
> static int ov5647_power_off(struct device *dev)
> {
> struct ov5647 *sensor = dev_get_drvdata(dev);
> - u8 rdval;
> + u64 rdval;
> int ret;
>
> dev_dbg(dev, "OV5647 power off\n");
>
> - ret = ov5647_write_array(&sensor->sd, sensor_oe_disable_regs,
> - ARRAY_SIZE(sensor_oe_disable_regs));
> + ret = regmap_multi_reg_write(sensor->regmap, sensor_oe_disable_regs,
> + ARRAY_SIZE(sensor_oe_disable_regs));
> if (ret < 0)
> dev_dbg(dev, "disable oe failed\n");
And here replace this read + write:
>
> /* Enter software standby */
> - ret = ov5647_read(&sensor->sd, OV5647_SW_STANDBY, &rdval);
> + ret = cci_read(sensor->regmap, OV5647_SW_STANDBY, &rdval, NULL);
> if (ret < 0)
> dev_dbg(dev, "software standby failed\n");
>
> rdval &= ~0x01;
> - ret = ov5647_write(&sensor->sd, OV5647_SW_STANDBY, rdval);
> + ret = cci_write(sensor->regmap, OV5647_SW_STANDBY, rdval, NULL);
> if (ret < 0)
> dev_dbg(dev, "software standby failed\n");
With:
ret = cci_update_bits(sensor->regmap, OV5647_SW_STANDBY, 0x01, 0x00, NULL);
if (ret < 0)
dev_dbg(dev, "software standby failed\n");
...
> static int ov5647_s_autogain(struct v4l2_subdev *sd, u32 val)
> {
> + struct ov5647 *sensor = to_sensor(sd);
> int ret;
> - u8 reg;
> + u64 reg;
>
> /* Non-zero turns on AGC by clearing bit 1.*/
> - ret = ov5647_read(sd, OV5647_REG_AEC_AGC, ®);
> + ret = cci_read(sensor->regmap, OV5647_REG_AEC_AGC, ®, NULL);
> if (ret)
> return ret;
>
> - return ov5647_write(sd, OV5647_REG_AEC_AGC, val ? reg & ~BIT(1)
> - : reg | BIT(1));
> + return cci_write(sensor->regmap, OV5647_REG_AEC_AGC, val ? reg & ~BIT(1)
> + : reg | BIT(1), NULL);
> }
And this is another opportunity to use cci_update_bits():
return cci_update_bits(sensor->regmap, OV5647_REG_AEC_AGC, BIT(1),
val ? 0 : BIT(1), NULL);
> static int ov5647_s_exposure_auto(struct v4l2_subdev *sd, u32 val)
> {
> + struct ov5647 *sensor = to_sensor(sd);
> int ret;
> - u8 reg;
> + u64 reg;
>
> /*
> * Everything except V4L2_EXPOSURE_MANUAL turns on AEC by
> * clearing bit 0.
> */
> - ret = ov5647_read(sd, OV5647_REG_AEC_AGC, ®);
> + ret = cci_read(sensor->regmap, OV5647_REG_AEC_AGC, ®, NULL);
> if (ret)
> return ret;
>
> - return ov5647_write(sd, OV5647_REG_AEC_AGC,
> + return cci_write(sensor->regmap, OV5647_REG_AEC_AGC,
> val == V4L2_EXPOSURE_MANUAL ? reg | BIT(0)
> - : reg & ~BIT(0));
> + : reg & ~BIT(0), NULL);
> }
Same here, please switch this to use cci_update_bits()
Regards,
Hans
next prev parent reply other threads:[~2025-12-31 12:13 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-31 8:39 [PATCH v3 0/3] media: i2c: ov5647: Modernize driver with CCI and new stream APIs Xiaolei Wang
2025-12-31 8:39 ` [PATCH v3 1/3] media: i2c: ov5647: Convert to CCI register access helpers Xiaolei Wang
2025-12-31 10:26 ` Tarang Raval
2026-01-01 1:31 ` xiaolei wang
2025-12-31 12:12 ` johannes.goede [this message]
2025-12-31 8:39 ` [PATCH v3 2/3] media: i2c: ov5647: Switch to using the sub-device state lock Xiaolei Wang
2025-12-31 10:54 ` Tarang Raval
2026-01-01 2:03 ` xiaolei wang
2025-12-31 8:39 ` [PATCH v3 3/3] media: i2c: ov5647: switch to {enable,disable}_streams Xiaolei Wang
2025-12-31 11:03 ` Tarang Raval
2026-01-01 2:04 ` xiaolei wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=636403b7-cb5f-4997-b24c-e697626e17bc@oss.qualcomm.com \
--to=johannes.goede@oss.qualcomm.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=hverkuil+cisco@kernel.org \
--cc=hverkuil-cisco@xs4all.nl \
--cc=jacopo@jmondi.org \
--cc=jai.luthra@ideasonboard.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=sakari.ailus@linux.intel.com \
--cc=tarang.raval@siliconsignals.io \
--cc=xiaolei.wang@windriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®