]> rtime.felk.cvut.cz Git - vajnamar/linux-xlnx.git/blobdiff - drivers/media/platform/xilinx/xilinx-sdirxss.c
v4l: xilinx: sdirxss: Add V4L control for Active streams
[vajnamar/linux-xlnx.git] / drivers / media / platform / xilinx / xilinx-sdirxss.c
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,
        }
 };