And rename the initiator mode data exchange ops for consistency sake.
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
        return 0;
 }
 
-static int pn533_data_exchange(struct nfc_dev *nfc_dev,
-                              struct nfc_target *target, struct sk_buff *skb,
-                              data_exchange_cb_t cb, void *cb_context)
+static int pn533_transceive(struct nfc_dev *nfc_dev,
+                           struct nfc_target *target, struct sk_buff *skb,
+                           data_exchange_cb_t cb, void *cb_context)
 {
        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
        struct pn533_frame *out_frame, *in_frame;
        .stop_poll = pn533_stop_poll,
        .activate_target = pn533_activate_target,
        .deactivate_target = pn533_deactivate_target,
-       .data_exchange = pn533_data_exchange,
+       .im_transceive = pn533_transceive,
 };
 
 static int pn533_probe(struct usb_interface *interface,
 
                               u32 protocol);
        void (*deactivate_target)(struct nfc_dev *dev,
                                  struct nfc_target *target);
-       int (*data_exchange)(struct nfc_dev *dev, struct nfc_target *target,
+       int (*im_transceive)(struct nfc_dev *dev, struct nfc_target *target,
                             struct sk_buff *skb, data_exchange_cb_t cb,
                             void *cb_context);
+       int (*tm_send)(struct nfc_dev *dev, struct sk_buff *skb);
        int (*check_presence)(struct nfc_dev *dev, struct nfc_target *target);
 };
 
 
                goto error;
        }
 
-       if (dev->active_target == NULL) {
-               rc = -ENOTCONN;
-               kfree_skb(skb);
-               goto error;
-       }
+       if (dev->rf_mode == NFC_RF_INITIATOR && dev->active_target != NULL) {
+               if (dev->active_target->idx != target_idx) {
+                       rc = -EADDRNOTAVAIL;
+                       kfree_skb(skb);
+                       goto error;
+               }
 
-       if (dev->active_target->idx != target_idx) {
-               rc = -EADDRNOTAVAIL;
+               if (dev->ops->check_presence)
+                       del_timer_sync(&dev->check_pres_timer);
+
+               rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb,
+                                            cb_context);
+
+               if (!rc && dev->ops->check_presence)
+                       mod_timer(&dev->check_pres_timer, jiffies +
+                                 msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
+       } else if (dev->rf_mode == NFC_RF_TARGET && dev->ops->tm_send != NULL) {
+               rc = dev->ops->tm_send(dev, skb);
+       } else {
+               rc = -ENOTCONN;
                kfree_skb(skb);
                goto error;
        }
 
-       if (dev->ops->check_presence)
-               del_timer_sync(&dev->check_pres_timer);
-
-       rc = dev->ops->data_exchange(dev, dev->active_target, skb, cb,
-                                    cb_context);
-
-       if (!rc && dev->ops->check_presence)
-               mod_timer(&dev->check_pres_timer, jiffies +
-                         msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
 
 error:
        device_unlock(&dev->dev);
        struct nfc_dev *dev;
 
        if (!ops->start_poll || !ops->stop_poll || !ops->activate_target ||
-           !ops->deactivate_target || !ops->data_exchange)
+           !ops->deactivate_target || !ops->im_transceive)
                return NULL;
 
        if (!supported_protocols)
 
 {
 }
 
-static int hci_data_exchange(struct nfc_dev *nfc_dev, struct nfc_target *target,
-                            struct sk_buff *skb, data_exchange_cb_t cb,
-                            void *cb_context)
+static int hci_transceive(struct nfc_dev *nfc_dev, struct nfc_target *target,
+                         struct sk_buff *skb, data_exchange_cb_t cb,
+                         void *cb_context)
 {
        struct nfc_hci_dev *hdev = nfc_get_drvdata(nfc_dev);
        int r;
        .stop_poll = hci_stop_poll,
        .activate_target = hci_activate_target,
        .deactivate_target = hci_deactivate_target,
-       .data_exchange = hci_data_exchange,
+       .im_transceive = hci_transceive,
        .check_presence = hci_check_presence,
 };
 
 
        }
 }
 
-static int nci_data_exchange(struct nfc_dev *nfc_dev, struct nfc_target *target,
-                            struct sk_buff *skb,
-                            data_exchange_cb_t cb, void *cb_context)
+static int nci_transceive(struct nfc_dev *nfc_dev, struct nfc_target *target,
+                         struct sk_buff *skb,
+                         data_exchange_cb_t cb, void *cb_context)
 {
        struct nci_dev *ndev = nfc_get_drvdata(nfc_dev);
        int rc;
        .stop_poll = nci_stop_poll,
        .activate_target = nci_activate_target,
        .deactivate_target = nci_deactivate_target,
-       .data_exchange = nci_data_exchange,
+       .im_transceive = nci_transceive,
 };
 
 /* ---- Interface to NCI drivers ---- */