return v4l2_subdev_call(sd, core, g_register, p);
                return -EINVAL;
        }
-       if (ops->vidioc_g_register)
+       if (ops->vidioc_g_register && p->match.type == V4L2_CHIP_MATCH_BRIDGE &&
+           (ops->vidioc_g_chip_info || p->match.addr == 0))
                return ops->vidioc_g_register(file, fh, p);
        return -EINVAL;
 #else
                                return v4l2_subdev_call(sd, core, s_register, p);
                return -EINVAL;
        }
-       if (ops->vidioc_s_register)
+       if (ops->vidioc_s_register && p->match.type == V4L2_CHIP_MATCH_BRIDGE &&
+           (ops->vidioc_g_chip_info || p->match.addr == 0))
                return ops->vidioc_s_register(file, fh, p);
        return -EINVAL;
 #else