diff options
| author | Hans de Goede <hansg@kernel.org> | 2025-10-14 19:40:18 +0200 |
|---|---|---|
| committer | Hans Verkuil <hverkuil+cisco@kernel.org> | 2026-01-13 12:28:48 +0100 |
| commit | ad134ffad2efcb490a75fa1720f9aa43d0f84fe0 (patch) | |
| tree | 0b2f37ec6da2427b469a759a0c62500252f95f93 | |
| parent | f60e94ed1aa110e48c7798a2fc99022e3b03239b (diff) | |
media: i2c: ov01a10: Store dev pointer in struct ov01a10
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>
Tested-by: Mehdi Djait <mehdi.djait@linux.intel.com> # Dell XPS 9315
Reviewed-by: Mehdi Djait <mehdi.djait@linux.intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
| -rw-r--r-- | drivers/media/i2c/ov01a10.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/drivers/media/i2c/ov01a10.c b/drivers/media/i2c/ov01a10.c index f7aea9740a53..7677860c28ef 100644 --- a/drivers/media/i2c/ov01a10.c +++ b/drivers/media/i2c/ov01a10.c @@ -279,6 +279,7 @@ static const struct ov01a10_mode supported_modes[] = { }; struct ov01a10 { + struct device *dev; struct regmap *regmap; struct v4l2_subdev sd; struct media_pad pad; @@ -356,7 +357,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; @@ -369,7 +369,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) { @@ -409,7 +409,7 @@ static int ov01a10_set_ctrl(struct v4l2_ctrl *ctrl) break; } - pm_runtime_put(&client->dev); + pm_runtime_put(ov01a10->dev); return ret; } @@ -420,7 +420,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; @@ -429,7 +428,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; @@ -523,7 +522,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; @@ -533,7 +531,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; } @@ -541,7 +539,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; } @@ -562,25 +560,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: @@ -732,7 +729,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; @@ -741,7 +737,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; } @@ -764,14 +760,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); @@ -808,8 +805,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) @@ -818,7 +815,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); |
