/* V4L2 API compliance debug ioctl tests. Copyright (C) 2008, 2010 Hans Verkuil This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "v4l2-compliance.h" int testRegister(struct node *node) { struct v4l2_dbg_register reg; struct v4l2_dbg_chip_info chip = { 0 }; int ret; int uid = getuid(); reg.match.type = V4L2_CHIP_MATCH_BRIDGE; reg.match.addr = 0; reg.reg = 0; ret = doioctl(node, VIDIOC_DBG_G_REGISTER, ®); if (ret == ENOTTY) return ret; // Not allowed to call VIDIOC_DBG_G_REGISTER unless root fail_on_test(uid && ret != EPERM); fail_on_test(uid == 0 && ret && ret != EINVAL); fail_on_test(uid == 0 && !ret && reg.size == 0); chip.match.type = V4L2_CHIP_MATCH_BRIDGE; chip.match.addr = 0; fail_on_test(doioctl(node, VIDIOC_DBG_G_CHIP_INFO, &chip)); if (uid) { // Don't test S_REGISTER as root, don't want to risk // messing with registers in the compliance test. reg.reg = reg.val = 0; ret = doioctl(node, VIDIOC_DBG_S_REGISTER, ®); fail_on_test(ret != ENOTTY && ret != EINVAL && ret != EPERM); } return 0; } int testLogStatus(struct node *node) { return doioctl(node, VIDIOC_LOG_STATUS, NULL); }