/* psp functions */
 enum mod_hdcp_status mod_hdcp_add_display_to_topology(
-               struct mod_hdcp *hdcp, uint8_t index);
+               struct mod_hdcp *hdcp, struct mod_hdcp_display *display);
 enum mod_hdcp_status mod_hdcp_remove_display_from_topology(
                struct mod_hdcp *hdcp, uint8_t index);
 enum mod_hdcp_status mod_hdcp_hdcp1_create_session(struct mod_hdcp *hdcp);
        return display->state >= MOD_HDCP_DISPLAY_ACTIVE;
 }
 
-static inline uint8_t is_display_added(struct mod_hdcp_display *display)
-{
-       return display->state >= MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED;
-}
-
 static inline uint8_t is_display_encryption_enabled(struct mod_hdcp_display *display)
 {
        return display->state >= MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED;
 
 static inline uint8_t get_active_display_count(struct mod_hdcp *hdcp)
 {
-       uint8_t added_count = 0;
+       uint8_t active_count = 0;
        uint8_t i;
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
                if (is_display_active(&hdcp->displays[i]))
-                       added_count++;
-       return added_count;
-}
-
-static inline uint8_t get_added_display_count(struct mod_hdcp *hdcp)
-{
-       uint8_t added_count = 0;
-       uint8_t i;
-
-       for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
-               if (is_display_added(&hdcp->displays[i]))
-                       added_count++;
-       return added_count;
+                       active_count++;
+       return active_count;
 }
 
-static inline struct mod_hdcp_display *get_first_added_display(
+static inline struct mod_hdcp_display *get_first_active_display(
                struct mod_hdcp *hdcp)
 {
        uint8_t i;
        struct mod_hdcp_display *display = NULL;
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
-               if (is_display_added(&hdcp->displays[i])) {
+               if (is_display_active(&hdcp->displays[i])) {
                        display = &hdcp->displays[i];
                        break;
                }
 
 
        dtm_cmd = (struct ta_dtm_shared_memory *)psp->dtm_context.dtm_shared_buf;
 
-       if (!display || !is_display_added(display))
+       if (!display || !is_display_active(display))
                return MOD_HDCP_STATUS_DISPLAY_NOT_FOUND;
 
        mutex_lock(&psp->dtm_context.mutex);
        return status;
 }
 enum mod_hdcp_status mod_hdcp_add_display_to_topology(struct mod_hdcp *hdcp,
-                                                     uint8_t index)
+                                              struct mod_hdcp_display *display)
 {
        struct psp_context *psp = hdcp->config.psp.handle;
        struct ta_dtm_shared_memory *dtm_cmd;
-       struct mod_hdcp_display *display =
-                       get_active_display_at_index(hdcp, index);
        struct mod_hdcp_link *link = &hdcp->connection.link;
        enum mod_hdcp_status status = MOD_HDCP_STATUS_SUCCESS;
 
        if (!psp->dtm_context.dtm_initialized) {
                DRM_ERROR("Failed to add display topology, DTM TA is not initialized.");
+               display->state = MOD_HDCP_DISPLAY_INACTIVE;
                return MOD_HDCP_STATUS_FAILURE;
        }
 
-       if (!display || is_display_added(display))
-               return MOD_HDCP_STATUS_UPDATE_TOPOLOGY_FAILURE;
-
        dtm_cmd = (struct ta_dtm_shared_memory *)psp->dtm_context.dtm_shared_buf;
 
        mutex_lock(&psp->dtm_context.mutex);
        psp_dtm_invoke(psp, dtm_cmd->cmd_id);
 
        if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) {
+               display->state = MOD_HDCP_DISPLAY_INACTIVE;
                status = MOD_HDCP_STATUS_UPDATE_TOPOLOGY_FAILURE;
        } else {
-               display->state = MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED;
                HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index);
        }
 
 {
 
        struct psp_context *psp = hdcp->config.psp.handle;
-       struct mod_hdcp_display *display = get_first_added_display(hdcp);
+       struct mod_hdcp_display *display = get_first_active_display(hdcp);
        struct ta_hdcp_shared_memory *hdcp_cmd;
        enum mod_hdcp_status status = MOD_HDCP_STATUS_SUCCESS;
 
                for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
                        if (is_display_encryption_enabled(&hdcp->displays[i])) {
                                hdcp->displays[i].state =
-                                       MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED;
+                                                       MOD_HDCP_DISPLAY_ACTIVE;
                                HDCP_HDCP1_DISABLED_TRACE(
                                        hdcp, hdcp->displays[i].index);
                        }
 {
        struct psp_context *psp = hdcp->config.psp.handle;
        struct ta_hdcp_shared_memory *hdcp_cmd;
-       struct mod_hdcp_display *display = get_first_added_display(hdcp);
+       struct mod_hdcp_display *display = get_first_active_display(hdcp);
        enum mod_hdcp_status status = MOD_HDCP_STATUS_SUCCESS;
 
        mutex_lock(&psp->hdcp_context.mutex);
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++) {
 
-               if (hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED ||
-                   hdcp->displays[i].adjust.disable)
-                       continue;
+               if (hdcp->displays[i].adjust.disable || hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE)
+                               continue;
 
                memset(hdcp_cmd, 0, sizeof(struct ta_hdcp_shared_memory));
 
 {
        struct psp_context *psp = hdcp->config.psp.handle;
        struct ta_hdcp_shared_memory *hdcp_cmd;
-       struct mod_hdcp_display *display = get_first_added_display(hdcp);
+       struct mod_hdcp_display *display = get_first_active_display(hdcp);
        enum mod_hdcp_status status = MOD_HDCP_STATUS_SUCCESS;
 
 
                for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
                        if (is_display_encryption_enabled(&hdcp->displays[i])) {
                                hdcp->displays[i].state =
-                                       MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED;
+                                                       MOD_HDCP_DISPLAY_ACTIVE;
                                HDCP_HDCP2_DISABLED_TRACE(
                                        hdcp, hdcp->displays[i].index);
                        }
 {
        struct psp_context *psp = hdcp->config.psp.handle;
        struct ta_hdcp_shared_memory *hdcp_cmd;
-       struct mod_hdcp_display *display = get_first_added_display(hdcp);
+       struct mod_hdcp_display *display = get_first_active_display(hdcp);
        enum mod_hdcp_status status = MOD_HDCP_STATUS_SUCCESS;
 
        if (!display)
 
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++) {
-               if (hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED ||
-                   hdcp->displays[i].adjust.disable)
-                       continue;
+               if (hdcp->displays[i].adjust.disable || hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE)
+                               continue;
+
                hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.display_handle = hdcp->displays[i].index;
                hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.session_handle = hdcp->auth.id;