From 18cef09e17b2adb0e5701997e94a7d125f0e59e2 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Mon, 8 Apr 2013 21:04:23 +0200 Subject: [PATCH] v4l2-compliance: really fix the RDS and V4L2_CAP_READWRITE tests Signed-off-by: Hans Verkuil --- utils/v4l2-compliance/v4l2-compliance.cpp | 11 ++++++++--- utils/v4l2-compliance/v4l2-test-input-output.cpp | 6 ++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp index 799b624..0d0d65e 100644 --- a/utils/v4l2-compliance/v4l2-compliance.cpp +++ b/utils/v4l2-compliance/v4l2-compliance.cpp @@ -317,10 +317,15 @@ static int testCap(struct node *node) 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)); diff --git a/utils/v4l2-compliance/v4l2-test-input-output.cpp b/utils/v4l2-compliance/v4l2-test-input-output.cpp index ed5acff..7528a81 100644 --- a/utils/v4l2-compliance/v4l2-test-input-output.cpp +++ b/utils/v4l2-compliance/v4l2-test-input-output.cpp @@ -120,6 +120,9 @@ static int checkTuner(struct node *node, const struct v4l2_tuner &tuner, 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) @@ -565,6 +568,9 @@ static int checkModulator(struct node *node, const struct v4l2_modulator &mod, u 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); } -- 2.7.4