NFC: st-nci: Keep st_nci_gates unchanged in load_session
[firefly-linux-kernel-4.4.55.git] / drivers / nfc / st-nci / se.c
index 4acb945ac252b482a87c0aebb91b9279473c9933..df2dc544b73a01bb0354b059c06ac2aa43fbf5fb 100644 (file)
@@ -232,20 +232,25 @@ int st_nci_hci_load_session(struct nci_dev *ndev)
                if (j < ARRAY_SIZE(st_nci_gates) &&
                    st_nci_gates[j].gate == dm_pipe_info->dst_gate_id &&
                    ST_NCI_DM_IS_PIPE_OPEN(dm_pipe_info->pipe_state)) {
-                       st_nci_gates[j].pipe = pipe_info[2];
+                       ndev->hci_dev->init_data.gates[j].pipe = pipe_info[2];
 
                        ndev->hci_dev->gate2pipe[st_nci_gates[j].gate] =
-                                               st_nci_gates[j].pipe;
-                       ndev->hci_dev->pipes[st_nci_gates[j].pipe].gate =
+                                               pipe_info[2];
+                       ndev->hci_dev->pipes[pipe_info[2]].gate =
                                                st_nci_gates[j].gate;
-                       ndev->hci_dev->pipes[st_nci_gates[j].pipe].host =
+                       ndev->hci_dev->pipes[pipe_info[2]].host =
                                                dm_pipe_info->src_host_id;
                }
                kfree_skb(skb_pipe_info);
        }
 
-       memcpy(ndev->hci_dev->init_data.gates, st_nci_gates,
-              sizeof(st_nci_gates));
+       /*
+        * 3 gates have a well known pipe ID. Only NCI_HCI_LINK_MGMT_GATE
+        * is not yet open at this stage.
+        */
+       r = nci_hci_connect_gate(ndev, ST_NCI_HOST_CONTROLLER_ID,
+                                NCI_HCI_LINK_MGMT_GATE,
+                                NCI_HCI_LINK_MGMT_PIPE);
 
        kfree_skb(skb_pipe_list);
        return r;