if (cmd == VIDIOCGMBUF) {
                struct video_mbuf *p = arg;
 
-               memset(p, 0, sizeof(*p));
-
                if (!ops->vidiocgmbuf)
                        return ret;
                ret = ops->vidiocgmbuf(file, fh, p);
        case VIDIOC_QUERYCAP:
        {
                struct v4l2_capability *cap = (struct v4l2_capability *)arg;
-               memset(cap, 0, sizeof(*cap));
 
                if (!ops->vidioc_querycap)
                        break;
                if (!ops->vidioc_g_audio)
                        break;
 
-               memset(p, 0, sizeof(*p));
                ret = ops->vidioc_g_audio(file, fh, p);
                if (!ret)
                        dbgarg(cmd, "index=%d, name=%s, capability=0x%x, "
 
                if (!ops->vidioc_g_audout)
                        break;
-               dbgarg(cmd, "Enum for index=%d\n", p->index);
+
                ret = ops->vidioc_g_audout(file, fh, p);
                if (!ret)
                        dbgarg2("index=%d, name=%s, capability=%d, "
                if (!ops->vidioc_g_jpegcomp)
                        break;
 
-               memset(p, 0, sizeof(*p));
-
                ret = ops->vidioc_g_jpegcomp(file, fh, p);
                if (!ret)
                        dbgarg(cmd, "quality=%d, APPn=%d, "
                       cmd == VIDIOC_TRY_EXT_CTRLS);
 
        /*  Copy arguments into temp kernel buffer  */
-       switch (_IOC_DIR(cmd)) {
-       case _IOC_NONE:
-               parg = NULL;
-               break;
-       case _IOC_READ:
-       case _IOC_WRITE:
-       case (_IOC_WRITE | _IOC_READ):
+       if (_IOC_DIR(cmd) != _IOC_NONE) {
                if (_IOC_SIZE(cmd) <= sizeof(sbuf)) {
                        parg = sbuf;
                } else {
                        /* zero out anything we don't copy from userspace */
                        if (n < _IOC_SIZE(cmd))
                                memset((u8 *)parg + n, 0, _IOC_SIZE(cmd) - n);
+               } else {
+                       /* read-only ioctl */
+                       memset(parg, 0, _IOC_SIZE(cmd));
                }
-               break;
        }
 
        if (is_ext_ctrl) {