]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: adv7180: Split device initialization and reset
authorNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Thu, 28 Aug 2025 16:06:50 +0000 (18:06 +0200)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Thu, 4 Sep 2025 08:06:13 +0000 (10:06 +0200)
The two different tasks of resetting and initializing the devices, and
configured the video formats are grouped lumped together in a single
function. These two tasks are then only performed at probe time, or when
resuming from suspend. Configuration of formats are then done directly
by the IOCTL callbacks, such as .set_fmt.

Prepare for reworking the driver to only reset the device at probe and
resume, and configuring all video formats in .s_stream instead of in
each IOCTL callback by splitting the two tasks in two different
functions.

At this point there is no functional change.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/i2c/adv7180.c

index bb94b9a7b3c7fda7bdb61e30564cbb2e28e4d0f7..998cc56217b3be5106982b08d6c7a9605b364ff0 100644 (file)
@@ -878,6 +878,23 @@ static int init_device(struct adv7180_state *state)
 
        lockdep_assert_held(&state->mutex);
 
+       ret = adv7180_program_std(state);
+       if (ret)
+               return ret;
+
+       adv7180_set_field_mode(state);
+
+       __v4l2_ctrl_handler_setup(&state->ctrl_hdl);
+
+       return ret;
+}
+
+static int adv7180_reset_device(struct adv7180_state *state)
+{
+       int ret;
+
+       lockdep_assert_held(&state->mutex);
+
        adv7180_set_power_pin(state, true);
        adv7180_set_reset_pin(state, false);
 
@@ -895,14 +912,10 @@ static int init_device(struct adv7180_state *state)
        if (ret)
                return ret;
 
-       ret = adv7180_program_std(state);
+       ret = init_device(state);
        if (ret)
                return ret;
 
-       adv7180_set_field_mode(state);
-
-       __v4l2_ctrl_handler_setup(&state->ctrl_hdl);
-
        /* register for interrupts */
        if (state->irq > 0) {
                /* config the Interrupt pin to be active low */
@@ -1487,7 +1500,7 @@ static int adv7180_probe(struct i2c_client *client)
                goto err_free_ctrl;
 
        mutex_lock(&state->mutex);
-       ret = init_device(state);
+       ret = adv7180_reset_device(state);
        mutex_unlock(&state->mutex);
        if (ret)
                goto err_media_entity_cleanup;
@@ -1573,7 +1586,7 @@ static int adv7180_resume(struct device *dev)
 
        guard(mutex)(&state->mutex);
 
-       ret = init_device(state);
+       ret = adv7180_reset_device(state);
        if (ret < 0)
                return ret;