diff --git a/kernels_j7/hwa/capture/vx_capture_target.c b/kernels_j7/hwa/capture/vx_capture_target.c
index c66404e..e31173b 100755
--- a/kernels_j7/hwa/capture/vx_capture_target.c
+++ b/kernels_j7/hwa/capture/vx_capture_target.c
@@ -78,6 +78,8 @@
 #include <vx_reference.h>
 #include <vx_internal.h>
 
+#include <ti/drv/sciclient/sciclient.h>
+
 #define CAPTURE_FRAME_DROP_LEN                          (4096U*4U)
 
 #define CAPTURE_INST_ID_INVALID                         (0xFFFFU)
@@ -186,6 +188,8 @@ static tivx_target_kernel vx_capture_target_kernel6 = NULL;
 static tivx_target_kernel vx_capture_target_kernel7 = NULL;
 static tivx_target_kernel vx_capture_target_kernel8 = NULL;
 
+static uint32_t gCaptInstNumOpen[CSIRX_INSTANCE_ID_MAX] = {0};
+
 static vx_status captDrvCallback(Fvid2_Handle handle, void *appData, void *reserved);
 static uint32_t tivxCaptureExtractInCsiDataType(uint32_t format);
 static uint32_t tivxCaptureExtractCcsFormat(uint32_t format);
@@ -241,6 +245,8 @@ static uint32_t tivxCaptureIsAllChFrameAvailable(tivxCaptureParams *prms,
         uint16_t *recv_obj_desc_id[TIVX_CAPTURE_MAX_CH],
         uint8_t timeoutExceeded);
 
+static int32_t tivxCaptResetInstance(uint32_t instId);
+
 /**
  *******************************************************************************
  *
@@ -1141,6 +1147,15 @@ static vx_status VX_CALLBACK tivxCaptureCreate(
             }
         }
 
+        /* Instance Reset */
+        if ((vx_status)VX_SUCCESS == status)
+        {
+            for (instIdx = 0U ; instIdx < prms->numOfInstUsed ; instIdx++)
+            {
+                instParams = &prms->instParams[instIdx];
+                status = tivxCaptResetInstance(instParams->instId);
+            }
+        }
         /* Creating FVID2 handle */
         if ((vx_status)VX_SUCCESS == status)
         {
@@ -1167,6 +1182,7 @@ static vx_status VX_CALLBACK tivxCaptureCreate(
                 }
                 else
                 {
+                    gCaptInstNumOpen[instParams->instId] ++;
                     fvid2_status = Fvid2_control(
                         instParams->drvHandle, IOCTL_CSIRX_SET_DPHY_CONFIG,
                         &instParams->dphyCfg, NULL);
@@ -1315,6 +1331,11 @@ static vx_status VX_CALLBACK tivxCaptureCreate(
                         VX_PRINT(VX_ZONE_ERROR, ": Capture Event Unregister failed!!!\r\n");
                     }
                     Fvid2_delete(instParams->drvHandle, NULL);
+
+                    if (gCaptInstNumOpen[instParams->instId] > 0)
+                    {
+                        gCaptInstNumOpen[instParams->instId] --;
+                    }
                     instParams->drvHandle = NULL;
                 }
 
@@ -1505,6 +1526,10 @@ static vx_status VX_CALLBACK tivxCaptureDelete(
                 /* Free-ing kernel instance params */
                 if ( (vx_status)VX_SUCCESS == status)
                 {
+                    if (gCaptInstNumOpen[instParams->instId] > 0)
+                    {
+                        gCaptInstNumOpen[instParams->instId] --;
+                    }
                     instParams->drvHandle = NULL;
                 }
             }
@@ -2122,3 +2147,87 @@ static uint32_t tivxCaptureGetDrvInstIndex(const tivxCaptureParams *prms,
 
     return instIdx;
 }
+
+static int32_t tivxCaptResetInstance(uint32_t instId)
+{
+    int32_t status = 0;
+    uint32_t module;
+    uint32_t moduleState, resetState, contextLossState;
+    uint32_t iterCnt = 0u;
+
+    if ((instId < CSIRX_INSTANCE_ID_MAX) && (0u == gCaptInstNumOpen[instId]))
+    {
+        if (CSIRX_INSTANCE_ID_0 == instId)
+        {
+            module = TISCI_DEV_CSI_RX_IF0;
+        }
+        else if (CSIRX_INSTANCE_ID_0 == instId)
+        {
+            module = TISCI_DEV_CSI_RX_IF1;
+        }
+        else
+        {
+            VX_PRINT(VX_ZONE_ERROR, "Invalid Instance Id\n");
+            status = -1;
+        }
+
+        if (0 == status)
+        {
+            status = Sciclient_pmSetModuleState(module,
+                TISCI_MSG_VALUE_DEVICE_SW_STATE_AUTO_OFF,
+                TISCI_MSG_FLAG_AOP,
+                SCICLIENT_SERVICE_WAIT_FOREVER);
+            if (0 != status)
+            {
+                VX_PRINT(VX_ZONE_ERROR, "Could not turn off CSIRX IF\n");
+            }
+            else
+            {
+                /* Wait for module state to become off */
+                status = Sciclient_pmGetModuleState(module,
+                                     &moduleState,
+                                     &resetState,
+                                     &contextLossState,
+                                     SCICLIENT_SERVICE_WAIT_FOREVER);
+                while (moduleState != 0U)
+                {
+                    status = Sciclient_pmGetModuleState(module,
+                                         &moduleState,
+                                         &resetState,
+                                         &contextLossState,
+                                         SCICLIENT_SERVICE_WAIT_FOREVER);
+                    if (0 != status)
+                    {
+                        VX_PRINT(VX_ZONE_ERROR, "Failed to get Module State\n");
+                        break;
+                    }
+
+                    iterCnt ++;
+
+                    if (iterCnt >= 1000)
+                    {
+                        VX_PRINT(VX_ZONE_ERROR, "CSIRX module turnoff failed\n");
+                        status = -1;
+                        break;
+                    }
+                }
+
+                if (0 == status)
+                {
+                    /* turn on the module back */
+                    status = Sciclient_pmSetModuleState(module,
+                           TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
+                           TISCI_MSG_FLAG_AOP,
+                           SCICLIENT_SERVICE_WAIT_FOREVER);
+                    if (0 != status)
+                    {
+                        VX_PRINT(VX_ZONE_ERROR, "Failed to turn on CSIRX IF\n");
+                    }
+                }
+            }
+        }
+    }
+
+    return (status);
+}
+
