Notify upper layer of deactivation ntf to discovery

In RFST_POLL_ACTIVE state if deactivation to sleep is not successful
3 times ,then MW sends a deactivate cmd with deactivate type discovery.
In that case, the upper layer should be notified of the RF_DEACTIVATION_NTF
to discovery regardless of the reason.

Bug: 136432213
Bug: 140159176
Test: Manually test the described scenerio
Merged-In: I0d54e759e91285787cd89decfeb736f80fe2216f
Change-Id: I0d54e759e91285787cd89decfeb736f80fe2216f
(cherry picked from commit d39f902cae9a34050742c6f8cda965ee3513e919)
diff --git a/src/nfa/dm/nfa_dm_discover.cc b/src/nfa/dm/nfa_dm_discover.cc
index 345c421..8e5cd5c 100644
--- a/src/nfa/dm/nfa_dm_discover.cc
+++ b/src/nfa/dm/nfa_dm_discover.cc
@@ -2192,6 +2192,9 @@
       }
       if (p_data->nfc_discover.deactivate.reason !=
           NFC_DEACTIVATE_REASON_DH_REQ_FAILED) {
+        /* count for number of times deactivate cmd sent */
+        nfa_dm_cb.deactivate_cmd_retry_count = 0;
+
         sleep_wakeup_event = true;
         nfa_dm_disc_notify_deactivation(NFA_DM_RF_DEACTIVATE_NTF,
                                         &(p_data->nfc_discover));
@@ -2201,8 +2204,7 @@
            NFC_DEACTIVATE_TYPE_SLEEP_AF)) {
         if (p_data->nfc_discover.deactivate.reason !=
             NFC_DEACTIVATE_REASON_DH_REQ_FAILED) {
-          /* count for number of times deactivate cmd sent */
-          nfa_dm_cb.deactivate_cmd_retry_count = 0;
+
           nfa_dm_disc_new_state(NFA_DM_RFST_W4_HOST_SELECT);
         }
         if (old_sleep_wakeup_flag) {
@@ -2237,7 +2239,6 @@
                 (!nfa_dm_cb.disc_cb.deact_pending)) {
               nfa_dm_send_deactivate_cmd(NFA_DEACTIVATE_TYPE_DISCOVERY);
             }
-            nfa_dm_cb.deactivate_cmd_retry_count = 0;
           } else {
             nfa_dm_cb.deactivate_cmd_retry_count++;
             nfa_dm_send_deactivate_cmd(p_data->nfc_discover.deactivate.type);
@@ -2250,6 +2251,24 @@
       } else if (p_data->nfc_discover.deactivate.type ==
                  NFC_DEACTIVATE_TYPE_DISCOVERY) {
         nfa_dm_disc_new_state(NFA_DM_RFST_DISCOVERY);
+        /* if deactivation type is discovery and comes after 3 tentatives of
+         * unsuccessful deactivation to sleep then reset the counter and  notify
+         * upper layer.
+         *
+         */
+        if (nfa_dm_cb.deactivate_cmd_retry_count == 3) {
+          nfa_dm_cb.deactivate_cmd_retry_count = 0;
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << __func__
+              << StringPrintf(
+                     " NFA_DM_RF_DEACTIVATE_NTF to discovery after 3 attempt "
+                     "of deactivate (sleep)");
+          if (p_data->nfc_discover.deactivate.reason ==
+              NFC_DEACTIVATE_REASON_DH_REQ_FAILED) {
+            nfa_dm_disc_notify_deactivation(NFA_DM_RF_DEACTIVATE_NTF,
+                                            &(p_data->nfc_discover));
+          }
+        }
         if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING) {
           /* stop discovery */
           NFC_Deactivate(NFA_DEACTIVATE_TYPE_IDLE);