NFC: nci: Add management for NCI state for machine rf_deactivate_ntf
A notification for rf deaction can be IDLE_MODE, SLEEP_MODE, SLEEP_AF_MODE and DISCOVERY. According to each type and the NCI state machine is different (see figure 10 RF Communication State Machine in NCI specification) Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
98ff416f97
commit
4391590c40
|
@ -680,11 +680,21 @@ static void nci_rf_deactivate_ntf_packet(struct nci_dev *ndev,
|
|||
if (test_bit(NCI_DATA_EXCHANGE, &ndev->flags))
|
||||
nci_data_exchange_complete(ndev, NULL, -EIO);
|
||||
|
||||
nci_clear_target_list(ndev);
|
||||
if (ntf->type == NCI_DEACTIVATE_TYPE_DISCOVERY)
|
||||
atomic_set(&ndev->state, NCI_DISCOVERY);
|
||||
else
|
||||
switch (ntf->type) {
|
||||
case NCI_DEACTIVATE_TYPE_IDLE_MODE:
|
||||
nci_clear_target_list(ndev);
|
||||
atomic_set(&ndev->state, NCI_IDLE);
|
||||
break;
|
||||
case NCI_DEACTIVATE_TYPE_SLEEP_MODE:
|
||||
case NCI_DEACTIVATE_TYPE_SLEEP_AF_MODE:
|
||||
atomic_set(&ndev->state, NCI_W4_HOST_SELECT);
|
||||
break;
|
||||
case NCI_DEACTIVATE_TYPE_DISCOVERY:
|
||||
nci_clear_target_list(ndev);
|
||||
atomic_set(&ndev->state, NCI_DISCOVERY);
|
||||
break;
|
||||
}
|
||||
|
||||
nci_req_complete(ndev, NCI_STATUS_OK);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue