Browse Source

NFC: nci: Add nci init ops for early device initialization

Some device may need to execute some proprietary commands
in order to "wake-up"; Before the nci state initialization.

Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Christophe Ricard 10 years ago
parent
commit
c39daeee50
2 changed files with 8 additions and 2 deletions
  1. 1 0
      include/net/nfc/nci_core.h
  2. 7 2
      net/nfc/nci/core.c

+ 1 - 0
include/net/nfc/nci_core.h

@@ -73,6 +73,7 @@ struct nci_prop_ops {
 };
 
 struct nci_ops {
+	int   (*init)(struct nci_dev *ndev);
 	int   (*open)(struct nci_dev *ndev);
 	int   (*close)(struct nci_dev *ndev);
 	int   (*send)(struct nci_dev *ndev, struct sk_buff *skb);

+ 7 - 2
net/nfc/nci/core.c

@@ -344,8 +344,13 @@ static int nci_open_device(struct nci_dev *ndev)
 
 	set_bit(NCI_INIT, &ndev->flags);
 
-	rc = __nci_request(ndev, nci_reset_req, 0,
-			   msecs_to_jiffies(NCI_RESET_TIMEOUT));
+	if (ndev->ops->init)
+		rc = ndev->ops->init(ndev);
+
+	if (!rc) {
+		rc = __nci_request(ndev, nci_reset_req, 0,
+				   msecs_to_jiffies(NCI_RESET_TIMEOUT));
+	}
 
 	if (!rc && ndev->ops->setup) {
 		rc = ndev->ops->setup(ndev);