|
@@ -714,18 +714,23 @@ static int pn544_hci_check_presence(struct nfc_hci_dev *hdev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Returns:
|
|
|
+ * <= 0: driver handled the event, skb consumed
|
|
|
+ * 1: driver does not handle the event, please do standard processing
|
|
|
+ */
|
|
|
static int pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate, u8 event,
|
|
|
struct sk_buff *skb)
|
|
|
{
|
|
|
struct sk_buff *rgb_skb = NULL;
|
|
|
- int r = 0;
|
|
|
+ int r;
|
|
|
|
|
|
pr_debug("hci event %d", event);
|
|
|
switch (event) {
|
|
|
case PN544_HCI_EVT_ACTIVATED:
|
|
|
- if (gate == PN544_RF_READER_NFCIP1_INITIATOR_GATE)
|
|
|
+ if (gate == PN544_RF_READER_NFCIP1_INITIATOR_GATE) {
|
|
|
r = nfc_hci_target_discovered(hdev, gate);
|
|
|
- else if (gate == PN544_RF_READER_NFCIP1_TARGET_GATE) {
|
|
|
+ } else if (gate == PN544_RF_READER_NFCIP1_TARGET_GATE) {
|
|
|
r = nfc_hci_get_param(hdev, gate, PN544_DEP_ATR_REQ,
|
|
|
&rgb_skb);
|
|
|
if (r < 0)
|
|
@@ -736,6 +741,8 @@ static int pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate, u8 event,
|
|
|
rgb_skb->len);
|
|
|
|
|
|
kfree_skb(rgb_skb);
|
|
|
+ } else {
|
|
|
+ r = -EINVAL;
|
|
|
}
|
|
|
break;
|
|
|
case PN544_HCI_EVT_DEACTIVATED:
|
|
@@ -757,8 +764,7 @@ static int pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate, u8 event,
|
|
|
skb_pull(skb, 2);
|
|
|
return nfc_tm_data_received(hdev->ndev, skb);
|
|
|
default:
|
|
|
- pr_err("Discarded unknown event %x to gate %x\n", event, gate);
|
|
|
- break;
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
exit:
|