]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: vivid: don't set HDMI TX controls if there are no HDMI outputs
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Mon, 24 Jun 2024 09:52:59 +0000 (12:52 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 Sep 2024 09:06:46 +0000 (11:06 +0200)
[ Upstream commit 17763960b1784578e8fe915304b330922f646209 ]

When setting the EDID it would attempt to update two controls
that are only present if there is an HDMI output configured.

If there isn't any (e.g. when the vivid module is loaded with
node_types=1), then calling VIDIOC_S_EDID would crash.

Fix this by first checking if outputs are present.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/test-drivers/vivid/vivid-vid-cap.c

index 907781c2e6137b86e21719ab7fe6789f84d6b84c..2ce7f5567f512d61b48f9bfec5339b90e4a6158d 100644 (file)
@@ -1802,8 +1802,10 @@ int vidioc_s_edid(struct file *file, void *_fh,
                return -EINVAL;
        if (edid->blocks == 0) {
                dev->edid_blocks = 0;
-               v4l2_ctrl_s_ctrl(dev->ctrl_tx_edid_present, 0);
-               v4l2_ctrl_s_ctrl(dev->ctrl_tx_hotplug, 0);
+               if (dev->num_outputs) {
+                       v4l2_ctrl_s_ctrl(dev->ctrl_tx_edid_present, 0);
+                       v4l2_ctrl_s_ctrl(dev->ctrl_tx_hotplug, 0);
+               }
                phys_addr = CEC_PHYS_ADDR_INVALID;
                goto set_phys_addr;
        }
@@ -1827,8 +1829,10 @@ int vidioc_s_edid(struct file *file, void *_fh,
                        display_present |=
                                dev->display_present[i] << j++;
 
-       v4l2_ctrl_s_ctrl(dev->ctrl_tx_edid_present, display_present);
-       v4l2_ctrl_s_ctrl(dev->ctrl_tx_hotplug, display_present);
+       if (dev->num_outputs) {
+               v4l2_ctrl_s_ctrl(dev->ctrl_tx_edid_present, display_present);
+               v4l2_ctrl_s_ctrl(dev->ctrl_tx_hotplug, display_present);
+       }
 
 set_phys_addr:
        /* TODO: a proper hotplug detect cycle should be emulated here */