}
doioctl(&node, VIDIOC_QUERYCAP, &vcap);
- node.caps = vcap.capabilities;
+ if (vcap.capabilities & V4L2_CAP_DEVICE_CAPS)
+ node.caps = vcap.device_caps;
+ else
+ node.caps = vcap.capabilities;
if (node.caps & (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VBI_CAPTURE |
V4L2_CAP_SLICED_VBI_CAPTURE | V4L2_CAP_RDS_CAPTURE |
V4L2_CAP_RADIO | V4L2_CAP_TUNER))
}
ctrl.id = 0;
ret = doioctl(node, VIDIOC_G_CTRL, &ctrl);
- if (ret != EINVAL)
+ if (ret != EINVAL && ret != ENOTTY)
return fail("g_ctrl accepted invalid control ID\n");
ctrl.id = 0;
ctrl.value = 0;
ret = doioctl(node, VIDIOC_S_CTRL, &ctrl);
- if (ret != EINVAL)
+ if (ret != EINVAL && ret != ENOTTY)
return fail("s_ctrl accepted invalid control ID\n");
+ if (ret == ENOTTY && node->controls.empty())
+ return ENOTTY;
return 0;
}
if (ret)
return fail("unsubscribe event for control '%s' failed\n", iter->name);
}
+ if (node->controls.empty())
+ return ENOTTY;
return 0;
}
return fail("did not expect to see V4L2_TUNER_CAP_LOW set for a tv tuner\n");
if (!tv && !(tuner.capability & V4L2_TUNER_CAP_LOW))
return fail("V4L2_TUNER_CAP_LOW was not set for a radio tuner\n");
- if (tv && std == V4L2_STD_NTSC_M && (tuner.capability & V4L2_TUNER_CAP_LANG1))
- return fail("LANG1 capability, but NTSC-M standard\n");
if (tuner.rangelow >= tuner.rangehigh)
return fail("rangelow >= rangehigh\n");
if (tuner.rangelow == 0 || tuner.rangehigh == 0xffffffff)