Most ioctls do not have to write back the contents of the argument
if an error is returned. But VIDIOC_S_EDID is an exception together
with the EXT_CTRLS ioctls (already handled correctly).
Add this exception to v4l2-compat-ioctl32.
This fixes a compliance error when using compat32 and trying to
set a new EDID with more blocks than the hardware supports. In
that case the driver will return -E2BIG and set edid.blocks to the
actual maximum number of blocks. This field was never copied back
to userspace due to this bug.
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
                if (put_v4l2_ext_controls32(&karg.v2ecs, up))
                        err = -EFAULT;
                break;
+       case VIDIOC_S_EDID:
+               if (put_v4l2_edid32(&karg.v2edid, up))
+                       err = -EFAULT;
+               break;
        }
        if (err)
                return err;
                break;
 
        case VIDIOC_G_EDID:
-       case VIDIOC_S_EDID:
                err = put_v4l2_edid32(&karg.v2edid, up);
                break;