]> www.infradead.org Git - users/hch/misc.git/commitdiff
media: adv7180: Add missing lock in suspend callback
authorNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Thu, 28 Aug 2025 16:06:45 +0000 (18:06 +0200)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Thu, 4 Sep 2025 08:06:13 +0000 (10:06 +0200)
The adv7180_set_power() utilizes adv7180_write() which in turn requires
the state mutex to be held, take it before calling adv7180_set_power()
to avoid tripping a lockdep_assert_held().

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 ef63b0ee9b8d1c1e54d093b486af9c6102ed7bc2..b7f175650bd089aa6a73533aabe0d6be32c5f497 100644 (file)
@@ -813,6 +813,8 @@ static int adv7180_set_pad_format(struct v4l2_subdev *sd,
 
        if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
                if (state->field != format->format.field) {
+                       guard(mutex)(&state->mutex);
+
                        state->field = format->format.field;
                        adv7180_set_power(state, false);
                        adv7180_set_field_mode(state);
@@ -1549,6 +1551,8 @@ static int adv7180_suspend(struct device *dev)
        struct v4l2_subdev *sd = dev_get_drvdata(dev);
        struct adv7180_state *state = to_state(sd);
 
+       guard(mutex)(&state->mutex);
+
        return adv7180_set_power(state, false);
 }
 
@@ -1562,6 +1566,8 @@ static int adv7180_resume(struct device *dev)
        if (ret < 0)
                return ret;
 
+       guard(mutex)(&state->mutex);
+
        ret = adv7180_set_power(state, state->powered);
        if (ret)
                return ret;