Hi Daniel, On Tue, Feb 15, 2022 at 11:07:36PM +0000, Daniel Scally wrote: > The .s_power() callback is deprecated, and now that we have pm_runtime > functionality in the driver there's no further use for it. Delete the > function. > > Signed-off-by: Daniel Scally <djrscally@xxxxxxxxx> > --- > drivers/media/i2c/ov7251.c | 44 +------------------------------------- > 1 file changed, 1 insertion(+), 43 deletions(-) > > diff --git a/drivers/media/i2c/ov7251.c b/drivers/media/i2c/ov7251.c > index d620ed6a4e42..5e7422ca4ab9 100644 > --- a/drivers/media/i2c/ov7251.c > +++ b/drivers/media/i2c/ov7251.c > @@ -903,43 +903,6 @@ static int __maybe_unused ov7251_sensor_resume(struct device *dev) > return ov7251_set_power_on(ov7251); > } > > -static int ov7251_s_power(struct v4l2_subdev *sd, int on) > -{ > - struct ov7251 *ov7251 = to_ov7251(sd); > - int ret = 0; > - > - mutex_lock(&ov7251->lock); > - > - /* If the power state is not modified - no work to do. */ > - if (ov7251->power_on == !!on) > - goto exit; > - > - if (on) { > - ret = ov7251_set_power_on(ov7251); > - if (ret < 0) > - goto exit; > - > - ret = ov7251_set_register_array(ov7251, > - ov7251_global_init_setting, > - ARRAY_SIZE(ov7251_global_init_setting)); Could this be written as part of the power-on sequence after identifying the sensor? Likewise in probe() if it's possible the device won't be powered down before it gets used --- I guess nothing rules that out? > - if (ret < 0) { > - dev_err(ov7251->dev, "could not set init registers\n"); > - ov7251_set_power_off(ov7251); > - goto exit; > - } > - > - ov7251->power_on = true; > - } else { > - ov7251_set_power_off(ov7251); > - ov7251->power_on = false; > - } > - > -exit: > - mutex_unlock(&ov7251->lock); > - > - return ret; > -} > - > static int ov7251_set_hflip(struct ov7251 *ov7251, s32 value) > { > u8 val = ov7251->timing_format2; > @@ -1384,10 +1347,6 @@ static int ov7251_set_frame_interval(struct v4l2_subdev *subdev, > return ret; > } > > -static const struct v4l2_subdev_core_ops ov7251_core_ops = { > - .s_power = ov7251_s_power, > -}; > - > static const struct v4l2_subdev_video_ops ov7251_video_ops = { > .s_stream = ov7251_s_stream, > .g_frame_interval = ov7251_get_frame_interval, > @@ -1405,7 +1364,6 @@ static const struct v4l2_subdev_pad_ops ov7251_subdev_pad_ops = { > }; > > static const struct v4l2_subdev_ops ov7251_subdev_ops = { > - .core = &ov7251_core_ops, > .video = &ov7251_video_ops, > .pad = &ov7251_subdev_pad_ops, > }; > @@ -1690,7 +1648,7 @@ static int ov7251_probe(struct i2c_client *client) > pm_runtime_disable(ov7251->dev); > pm_runtime_put_noidle(ov7251->dev); > power_down: > - ov7251_s_power(&ov7251->sd, false); > + ov7251_set_power_off(ov7251); > free_entity: > media_entity_cleanup(&ov7251->sd.entity); > free_ctrl: -- Kind regards, Sakari Ailus