From: Hans de Goede <hansg@kernel.org>
To: Bingbu Cao <bingbu.cao@intel.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: Hans de Goede <hansg@kernel.org>, linux-media@vger.kernel.org
Subject: [PATCH 10/25] media: i2c: ov01a10: Store dev pointer in struct ov01a10
Date: Tue, 14 Oct 2025 19:40:18 +0200 [thread overview]
Message-ID: <20251014174033.20534-11-hansg@kernel.org> (raw)
In-Reply-To: <20251014174033.20534-1-hansg@kernel.org>
Now that the cci_* register access helpers are used we no longer need
the i2c_client in various functions.
Some code is still getting the client just to be able to get to the device
pointer. Directly store a struct device *dev pointing to &client->dev
inside struct ov01a10 to make the code simpler.
This also fixes a mismatch of using dev vs &client->dev in the
runtime_pm_*() calls in probe().
Signed-off-by: Hans de Goede <hansg@kernel.org>
---
drivers/media/i2c/ov01a10.c | 35 ++++++++++++++++-------------------
1 file changed, 16 insertions(+), 19 deletions(-)
diff --git a/drivers/media/i2c/ov01a10.c b/drivers/media/i2c/ov01a10.c
index 52e1f3e0e4e5..de293e2431e9 100644
--- a/drivers/media/i2c/ov01a10.c
+++ b/drivers/media/i2c/ov01a10.c
@@ -280,6 +280,7 @@ static const struct ov01a10_mode supported_modes[] = {
};
struct ov01a10 {
+ struct device *dev;
struct regmap *regmap;
struct v4l2_subdev sd;
struct media_pad pad;
@@ -357,7 +358,6 @@ static int ov01a10_set_ctrl(struct v4l2_ctrl *ctrl)
{
struct ov01a10 *ov01a10 = container_of(ctrl->handler,
struct ov01a10, ctrl_handler);
- struct i2c_client *client = v4l2_get_subdevdata(&ov01a10->sd);
s64 exposure_max;
int ret = 0;
@@ -370,7 +370,7 @@ static int ov01a10_set_ctrl(struct v4l2_ctrl *ctrl)
exposure_max);
}
- if (!pm_runtime_get_if_in_use(&client->dev))
+ if (!pm_runtime_get_if_in_use(ov01a10->dev))
return 0;
switch (ctrl->id) {
@@ -410,7 +410,7 @@ static int ov01a10_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
- pm_runtime_put(&client->dev);
+ pm_runtime_put(ov01a10->dev);
return ret;
}
@@ -421,7 +421,6 @@ static const struct v4l2_ctrl_ops ov01a10_ctrl_ops = {
static int ov01a10_init_controls(struct ov01a10 *ov01a10)
{
- struct i2c_client *client = v4l2_get_subdevdata(&ov01a10->sd);
struct v4l2_fwnode_device_properties props;
u32 vblank_min, vblank_max, vblank_default;
struct v4l2_ctrl_handler *ctrl_hdlr;
@@ -430,7 +429,7 @@ static int ov01a10_init_controls(struct ov01a10 *ov01a10)
int ret = 0;
int size;
- ret = v4l2_fwnode_device_parse(&client->dev, &props);
+ ret = v4l2_fwnode_device_parse(ov01a10->dev, &props);
if (ret)
return ret;
@@ -524,7 +523,6 @@ static void ov01a10_update_pad_format(const struct ov01a10_mode *mode,
static int ov01a10_start_streaming(struct ov01a10 *ov01a10)
{
- struct i2c_client *client = v4l2_get_subdevdata(&ov01a10->sd);
const struct ov01a10_reg_list *reg_list;
int link_freq_index;
int ret = 0;
@@ -534,7 +532,7 @@ static int ov01a10_start_streaming(struct ov01a10 *ov01a10)
ret = regmap_multi_reg_write(ov01a10->regmap, reg_list->regs,
reg_list->num_of_regs);
if (ret) {
- dev_err(&client->dev, "failed to set plls\n");
+ dev_err(ov01a10->dev, "failed to set plls\n");
return ret;
}
@@ -542,7 +540,7 @@ static int ov01a10_start_streaming(struct ov01a10 *ov01a10)
ret = regmap_multi_reg_write(ov01a10->regmap, reg_list->regs,
reg_list->num_of_regs);
if (ret) {
- dev_err(&client->dev, "failed to set mode\n");
+ dev_err(ov01a10->dev, "failed to set mode\n");
return ret;
}
@@ -563,25 +561,24 @@ static void ov01a10_stop_streaming(struct ov01a10 *ov01a10)
static int ov01a10_set_stream(struct v4l2_subdev *sd, int enable)
{
struct ov01a10 *ov01a10 = to_ov01a10(sd);
- struct i2c_client *client = v4l2_get_subdevdata(sd);
struct v4l2_subdev_state *state;
int ret = 0;
state = v4l2_subdev_lock_and_get_active_state(sd);
if (enable) {
- ret = pm_runtime_resume_and_get(&client->dev);
+ ret = pm_runtime_resume_and_get(ov01a10->dev);
if (ret < 0)
goto unlock;
ret = ov01a10_start_streaming(ov01a10);
if (ret) {
- pm_runtime_put(&client->dev);
+ pm_runtime_put(ov01a10->dev);
goto unlock;
}
} else {
ov01a10_stop_streaming(ov01a10);
- pm_runtime_put(&client->dev);
+ pm_runtime_put(ov01a10->dev);
}
unlock:
@@ -733,7 +730,6 @@ static const struct media_entity_operations ov01a10_subdev_entity_ops = {
static int ov01a10_identify_module(struct ov01a10 *ov01a10)
{
- struct i2c_client *client = v4l2_get_subdevdata(&ov01a10->sd);
int ret;
u64 val;
@@ -742,7 +738,7 @@ static int ov01a10_identify_module(struct ov01a10 *ov01a10)
return ret;
if (val != OV01A10_CHIP_ID) {
- dev_err(&client->dev, "chip id mismatch: %x!=%llx\n",
+ dev_err(ov01a10->dev, "chip id mismatch: %x!=%llx\n",
OV01A10_CHIP_ID, val);
return -EIO;
}
@@ -765,14 +761,15 @@ static void ov01a10_remove(struct i2c_client *client)
static int ov01a10_probe(struct i2c_client *client)
{
- struct device *dev = &client->dev;
struct ov01a10 *ov01a10;
int ret = 0;
- ov01a10 = devm_kzalloc(dev, sizeof(*ov01a10), GFP_KERNEL);
+ ov01a10 = devm_kzalloc(&client->dev, sizeof(*ov01a10), GFP_KERNEL);
if (!ov01a10)
return -ENOMEM;
+ ov01a10->dev = &client->dev;
+
ov01a10->regmap = devm_cci_regmap_init_i2c(client, 16);
if (IS_ERR(ov01a10->regmap))
return PTR_ERR(ov01a10->regmap);
@@ -809,8 +806,8 @@ static int ov01a10_probe(struct i2c_client *client)
* Enable runtime PM and turn off the device.
*/
pm_runtime_set_active(&client->dev);
- pm_runtime_enable(dev);
- pm_runtime_idle(dev);
+ pm_runtime_enable(&client->dev);
+ pm_runtime_idle(&client->dev);
ret = v4l2_async_register_subdev_sensor(&ov01a10->sd);
if (ret)
@@ -819,7 +816,7 @@ static int ov01a10_probe(struct i2c_client *client)
return 0;
err_pm_disable:
- pm_runtime_disable(dev);
+ pm_runtime_disable(&client->dev);
pm_runtime_set_suspended(&client->dev);
v4l2_subdev_cleanup(&ov01a10->sd);
--
2.51.0
next prev parent reply other threads:[~2025-10-14 17:40 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-14 17:40 [PATCH 00/25] media: i2c: ov01a10: Add crop, ov01a1b and ov01a1s support Hans de Goede
2025-10-14 17:40 ` [PATCH 01/25] media: i2c: ov01a10: Fix the horizontal flip control Hans de Goede
2025-10-27 19:00 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 02/25] media: i2c: ov01a10: Fix reported pixel-rate value Hans de Goede
2025-10-27 19:03 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 03/25] media: i2c: ov01a10: Fix gain range Hans de Goede
2025-10-27 19:14 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 04/25] media: i2c: ov01a10: Add missing v4l2_subdev_cleanup() calls Hans de Goede
2025-10-15 2:37 ` Bingbu Cao
2025-10-15 2:46 ` Bingbu Cao
2025-10-28 11:24 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 05/25] media: i2c: ov01a10: Fix passing stream instead of pad to v4l2_subdev_state_get_format() Hans de Goede
2025-10-28 11:40 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 06/25] media: i2c: ov01a10: Fix test-pattern disabling Hans de Goede
2025-10-15 2:34 ` Bingbu Cao
2025-10-28 12:08 ` Mehdi Djait
2025-10-28 14:38 ` Hans de Goede
2025-10-28 15:38 ` Mehdi Djait
2025-10-28 15:52 ` Hans de Goede
2025-10-29 17:44 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 07/25] media: i2c: ov01a10: Change default vblank value to a vblank resulting in 30 fps Hans de Goede
2025-10-28 16:57 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 08/25] media: i2c: ov01a10: Convert to new CCI register access helpers Hans de Goede
2025-10-28 17:01 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 09/25] media: i2c: ov01a10: Remove overly verbose probe() error reporting Hans de Goede
2025-10-28 17:02 ` Mehdi Djait
2025-10-14 17:40 ` Hans de Goede [this message]
2025-10-28 17:18 ` [PATCH 10/25] media: i2c: ov01a10: Store dev pointer in struct ov01a10 Mehdi Djait
2025-10-14 17:40 ` [PATCH 11/25] media: i2c: ov01a10: Add ov01a10_check_hwcfg() function Hans de Goede
2025-10-28 17:29 ` Mehdi Djait
2025-10-28 20:09 ` Hans de Goede
2025-10-29 17:30 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 12/25] media: i2c: ov01a10: Add power on/off sequencing support Hans de Goede
2025-10-28 18:06 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 13/25] media: i2c: ov01a10: Don't update pixel_rate and link_freq from set_fmt Hans de Goede
2025-10-28 18:15 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 14/25] media: i2c: ov01a10: Move setting of ctrl->flags to after checking ctrl_hdlr->error Hans de Goede
2025-10-28 18:18 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 15/25] media: i2c: ov01a10: Use native and default for pixel-array size names Hans de Goede
2025-10-28 19:01 ` Mehdi Djait
2025-10-28 20:19 ` Hans de Goede
2025-10-14 17:40 ` [PATCH 16/25] media: i2c: ov01a10: Add cropping support / allow arbitrary sizes Hans de Goede
2025-11-06 15:28 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 17/25] media: i2c: ov01a10: Remove struct ov01a10_reg_list Hans de Goede
2025-10-28 19:13 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 18/25] media: i2c: ov01a10: Replace exposure->min/step with direct define use Hans de Goede
2025-10-28 19:19 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 19/25] media: i2c: ov01a10: Only set register 0x0305 once Hans de Goede
2025-10-28 19:25 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 20/25] media: i2c: ov01a10: Remove values set by controls from global_setting[] Hans de Goede
2025-10-29 17:50 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 21/25] media: i2c: ov01a10: Add ov01a10_sensor_cfg struct Hans de Goede
2025-11-06 15:33 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 22/25] media: i2c: ov01a10: Optimize setting h/vflip values Hans de Goede
2025-11-06 15:54 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 23/25] media: i2c: ov01a10: Add ov01a1b support Hans de Goede
2025-11-06 16:16 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 24/25] media: i2c: ov01a10: Add ov01a1s support Hans de Goede
2025-11-06 16:17 ` Mehdi Djait
2025-10-14 17:40 ` [PATCH 25/25] media: i2c: ov01a10: Register tweaks for ov01a1s model Hans de Goede
2025-10-15 10:45 ` kernel test robot
2025-11-07 9:17 ` Mehdi Djait
2025-11-13 9:54 ` Hans de Goede
2025-11-17 8:17 ` Mehdi Djait
2025-10-28 20:06 ` [PATCH 00/25] media: i2c: ov01a10: Add crop, ov01a1b and ov01a1s support Hans de Goede
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=20251014174033.20534-11-hansg@kernel.org \
--to=hansg@kernel.org \
--cc=bingbu.cao@intel.com \
--cc=linux-media@vger.kernel.org \
--cc=sakari.ailus@linux.intel.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;
as well as URLs for NNTP newsgroup(s).