]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:12 +0000 (15:37 -0500)
[ Upstream commit 878c496ac5080f94a93a9216a8f70cfd67ace8c9 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/i2c/adv7180.c

index 5d90b8ab9b6df1191b9ee9dba837132d3fade4d0..84600fa75ae8a8b44d7860d8d7f5cec29cb6d07b 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;