if (dcaps & output_caps)
fail_on_test(dcaps & input_caps);
}
- if (node->can_capture || node->can_output)
- fail_on_test(!(dcaps & io_caps));
- else
+ if (node->can_capture || node->can_output) {
+ // whether io_caps need to be set for RDS capture/output is
+ // checked elsewhere as that depends on the tuner/modulator
+ // capabilities.
+ if (!(dcaps & (V4L2_CAP_RDS_CAPTURE | V4L2_CAP_RDS_OUTPUT)))
+ fail_on_test(!(dcaps & io_caps));
+ } else {
fail_on_test(dcaps & io_caps);
+ }
// having both mplane and splane caps is not allowed (at least for now)
fail_on_test((dcaps & mplane_caps) && (dcaps & splane_caps));
if ((tuner.capability & V4L2_TUNER_CAP_RDS_BLOCK_IO) &&
!(node->caps & V4L2_CAP_READWRITE))
return fail("V4L2_TUNER_CAP_RDS_BLOCK_IO is set, but not V4L2_CAP_READWRITE\n");
+ if (!tv && !(tuner.capability & V4L2_TUNER_CAP_RDS_BLOCK_IO) &&
+ (node->caps & V4L2_CAP_READWRITE))
+ return fail("V4L2_TUNER_CAP_RDS_BLOCK_IO is not set, but V4L2_CAP_READWRITE is\n");
if (std == V4L2_STD_NTSC_M && (tuner.rxsubchans & V4L2_TUNER_SUB_LANG1))
return fail("LANG1 subchan, but NTSC-M standard\n");
if (tuner.audmode > V4L2_TUNER_MODE_LANG1_LANG2)
if ((mod.capability & V4L2_TUNER_CAP_RDS_BLOCK_IO) &&
!(node->caps & V4L2_CAP_READWRITE))
return fail("V4L2_TUNER_CAP_RDS_BLOCK_IO is set, but not V4L2_CAP_READWRITE\n");
+ if (!(mod.capability & V4L2_TUNER_CAP_RDS_BLOCK_IO) &&
+ (node->caps & V4L2_CAP_READWRITE))
+ return fail("V4L2_TUNER_CAP_RDS_BLOCK_IO is not set, but V4L2_CAP_READWRITE is\n");
return checkEnumFreqBands(node, mod.index, V4L2_TUNER_RADIO, mod.capability);
}