]> rtime.felk.cvut.cz Git - vajnamar/linux-xlnx.git/commitdiff
v4l: xilinx: sdirxss: Add V4L control for Active streams
authorVishal Sagar <vishal.sagar@xilinx.com>
Mon, 16 Oct 2017 06:43:01 +0000 (12:13 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 17 Oct 2017 09:01:38 +0000 (11:01 +0200)
Add support to get the number of Active streams using a
v4l control.

Signed-off-by: Vishal Sagar <vsagar@xilinx.com>
Reviewed-by: Hyun Kwon <hyun.kwon@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/media/platform/xilinx/xilinx-sdirxss.c
include/uapi/linux/xilinx-v4l2-controls.h

index 71390a6da49bd43c38a18f128e6545571013f7f9..063193fa037b6535bbf527659679c3d3cabbb3fd 100644 (file)
 #define XSDIRX_MODE_DET_STAT_RX_MODE_MASK      GENMASK(2, 0)
 #define XSDIRX_MODE_DET_STAT_MODE_LOCK_MASK    BIT(3)
 #define XSDIRX_MODE_DET_STAT_ACT_STREAM_MASK   GENMASK(6, 4)
+#define XSDIRX_MODE_DET_STAT_ACT_STREAM_OFFSET 4
 #define XSDIRX_MODE_DET_STAT_LVLB_3G_MASK      BIT(7)
 
 #define XSDIRX_ACTIVE_STREAMS_1                0x0
@@ -1101,6 +1102,16 @@ static int xsdirxss_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
                }
                ctrl->val = xsdirxss->ts_is_interlaced;
                break;
+       case V4L2_CID_XILINX_SDIRX_ACTIVE_STREAMS:
+               if (!xsdirxss->vidlocked) {
+                       dev_err(core->dev, "Can't get values when video not locked!\n");
+                       return -EINVAL;
+               }
+               val = xsdirxss_read(core, XSDIRX_MODE_DET_STAT_REG);
+               val &= XSDIRX_MODE_DET_STAT_ACT_STREAM_MASK;
+               val >>= XSDIRX_MODE_DET_STAT_ACT_STREAM_OFFSET;
+               ctrl->val = 1 << val;
+               break;
        default:
                dev_err(core->dev, "Get Invalid control id 0x%0x\n", ctrl->id);
                return -EINVAL;
@@ -1435,6 +1446,16 @@ static struct v4l2_ctrl_config xsdirxss_ctrls[] = {
                .def    = false,
                .step   = 1,
                .flags  = V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY,
+       }, {
+               .ops    = &xsdirxss_ctrl_ops,
+               .id     = V4L2_CID_XILINX_SDIRX_ACTIVE_STREAMS,
+               .name   = "SDI Rx : Active Streams",
+               .type   = V4L2_CTRL_TYPE_INTEGER,
+               .min    = 1,
+               .max    = 16,
+               .def    = 1,
+               .step   = 1,
+               .flags  = V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY,
        }
 };
 
index 8fd30b0790d589b266311e66e4233bafbb145dfc..000ee5ea8aece89962ae8c11f589106b75f6ca85 100644 (file)
 #define V4L2_CID_XILINX_SDIRX_EDH_STATUS       (V4L2_CID_XILINX_SDIRX + 8)
 /* Get Transport Interlaced status */
 #define V4L2_CID_XILINX_SDIRX_TS_IS_INTERLACED (V4L2_CID_XILINX_SDIRX + 9)
+/* Get Active Streams count */
+#define V4L2_CID_XILINX_SDIRX_ACTIVE_STREAMS   (V4L2_CID_XILINX_SDIRX + 10)
 #endif /* __UAPI_XILINX_V4L2_CONTROLS_H__ */