Lines Matching refs:dev

277 static bool pn533_std_rx_frame_is_valid(void *_frame, struct pn533 *dev)  in pn533_std_rx_frame_is_valid()  argument
287 dev->ops->rx_header_len = PN533_STD_FRAME_HEADER_LEN; in pn533_std_rx_frame_is_valid()
300 dev->ops->rx_header_len = PN533_EXT_FRAME_HEADER_LEN; in pn533_std_rx_frame_is_valid()
357 bool pn533_rx_frame_is_cmd_response(struct pn533 *dev, void *frame) in pn533_rx_frame_is_cmd_response() argument
359 return (dev->ops->get_cmd_code(frame) == in pn533_rx_frame_is_cmd_response()
360 PN533_CMD_RESPONSE(dev->cmd->code)); in pn533_rx_frame_is_cmd_response()
381 static void pn533_build_cmd_frame(struct pn533 *dev, u8 cmd_code, in pn533_build_cmd_frame() argument
386 struct pn533_frame_ops *ops = dev->ops; in pn533_build_cmd_frame()
397 static int pn533_send_async_complete(struct pn533 *dev) in pn533_send_async_complete() argument
399 struct pn533_cmd *cmd = dev->cmd; in pn533_send_async_complete()
404 dev_dbg(dev->dev, "%s: cmd not set\n", __func__); in pn533_send_async_complete()
414 rc = cmd->complete_cb(dev, cmd->complete_cb_context, in pn533_send_async_complete()
425 skb_pull(resp, dev->ops->rx_header_len); in pn533_send_async_complete()
426 skb_trim(resp, resp->len - dev->ops->rx_tail_len); in pn533_send_async_complete()
429 rc = cmd->complete_cb(dev, cmd->complete_cb_context, resp); in pn533_send_async_complete()
433 dev->cmd = NULL; in pn533_send_async_complete()
437 static int __pn533_send_async(struct pn533 *dev, u8 cmd_code, in __pn533_send_async() argument
445 dev_dbg(dev->dev, "Sending command 0x%x\n", cmd_code); in __pn533_send_async()
456 pn533_build_cmd_frame(dev, cmd_code, req); in __pn533_send_async()
458 mutex_lock(&dev->cmd_lock); in __pn533_send_async()
460 if (!dev->cmd_pending) { in __pn533_send_async()
461 dev->cmd = cmd; in __pn533_send_async()
462 rc = dev->phy_ops->send_frame(dev, req); in __pn533_send_async()
464 dev->cmd = NULL; in __pn533_send_async()
468 dev->cmd_pending = 1; in __pn533_send_async()
472 dev_dbg(dev->dev, "%s Queueing command 0x%x\n", in __pn533_send_async()
476 list_add_tail(&cmd->queue, &dev->cmd_queue); in __pn533_send_async()
483 mutex_unlock(&dev->cmd_lock); in __pn533_send_async()
487 static int pn533_send_data_async(struct pn533 *dev, u8 cmd_code, in pn533_send_data_async() argument
492 return __pn533_send_async(dev, cmd_code, req, complete_cb, in pn533_send_data_async()
496 static int pn533_send_cmd_async(struct pn533 *dev, u8 cmd_code, in pn533_send_cmd_async() argument
501 return __pn533_send_async(dev, cmd_code, req, complete_cb, in pn533_send_cmd_async()
513 static int pn533_send_cmd_direct_async(struct pn533 *dev, u8 cmd_code, in pn533_send_cmd_direct_async() argument
530 pn533_build_cmd_frame(dev, cmd_code, req); in pn533_send_cmd_direct_async()
532 dev->cmd = cmd; in pn533_send_cmd_direct_async()
533 rc = dev->phy_ops->send_frame(dev, req); in pn533_send_cmd_direct_async()
535 dev->cmd = NULL; in pn533_send_cmd_direct_async()
544 struct pn533 *dev = container_of(work, struct pn533, cmd_complete_work); in pn533_wq_cmd_complete() local
547 rc = pn533_send_async_complete(dev); in pn533_wq_cmd_complete()
549 queue_work(dev->wq, &dev->cmd_work); in pn533_wq_cmd_complete()
554 struct pn533 *dev = container_of(work, struct pn533, cmd_work); in pn533_wq_cmd() local
558 mutex_lock(&dev->cmd_lock); in pn533_wq_cmd()
560 if (list_empty(&dev->cmd_queue)) { in pn533_wq_cmd()
561 dev->cmd_pending = 0; in pn533_wq_cmd()
562 mutex_unlock(&dev->cmd_lock); in pn533_wq_cmd()
566 cmd = list_first_entry(&dev->cmd_queue, struct pn533_cmd, queue); in pn533_wq_cmd()
570 mutex_unlock(&dev->cmd_lock); in pn533_wq_cmd()
572 dev->cmd = cmd; in pn533_wq_cmd()
573 rc = dev->phy_ops->send_frame(dev, cmd->req); in pn533_wq_cmd()
575 dev->cmd = NULL; in pn533_wq_cmd()
588 static int pn533_send_sync_complete(struct pn533 *dev, void *_arg, in pn533_send_sync_complete() argument
616 static struct sk_buff *pn533_send_cmd_sync(struct pn533 *dev, u8 cmd_code, in pn533_send_cmd_sync() argument
624 rc = pn533_send_cmd_async(dev, cmd_code, req, in pn533_send_cmd_sync()
636 static struct sk_buff *pn533_alloc_skb(struct pn533 *dev, unsigned int size) in pn533_alloc_skb() argument
640 skb = alloc_skb(dev->ops->tx_header_len + in pn533_alloc_skb()
642 dev->ops->tx_tail_len, GFP_KERNEL); in pn533_alloc_skb()
645 skb_reserve(skb, dev->ops->tx_header_len); in pn533_alloc_skb()
891 static void pn533_poll_reset_mod_list(struct pn533 *dev);
892 static int pn533_target_found(struct pn533 *dev, u8 tg, u8 *tgdata, in pn533_target_found() argument
898 dev_dbg(dev->dev, "%s: modulation=%d\n", in pn533_target_found()
899 __func__, dev->poll_mod_curr); in pn533_target_found()
906 switch (dev->poll_mod_curr) { in pn533_target_found()
921 nfc_err(dev->dev, in pn533_target_found()
929 if (!(nfc_tgt.supported_protocols & dev->poll_protocols)) { in pn533_target_found()
930 dev_dbg(dev->dev, in pn533_target_found()
935 dev_dbg(dev->dev, in pn533_target_found()
939 dev->tgt_available_prots = nfc_tgt.supported_protocols; in pn533_target_found()
941 pn533_poll_reset_mod_list(dev); in pn533_target_found()
942 nfc_targets_found(dev->nfc_dev, &nfc_tgt, 1); in pn533_target_found()
947 static inline void pn533_poll_next_mod(struct pn533 *dev) in pn533_poll_next_mod() argument
949 dev->poll_mod_curr = (dev->poll_mod_curr + 1) % dev->poll_mod_count; in pn533_poll_next_mod()
952 static void pn533_poll_reset_mod_list(struct pn533 *dev) in pn533_poll_reset_mod_list() argument
954 dev->poll_mod_count = 0; in pn533_poll_reset_mod_list()
957 static void pn533_poll_add_mod(struct pn533 *dev, u8 mod_index) in pn533_poll_add_mod() argument
959 dev->poll_mod_active[dev->poll_mod_count] = in pn533_poll_add_mod()
961 dev->poll_mod_count++; in pn533_poll_add_mod()
964 static void pn533_poll_create_mod_list(struct pn533 *dev, in pn533_poll_create_mod_list() argument
967 pn533_poll_reset_mod_list(dev); in pn533_poll_create_mod_list()
972 pn533_poll_add_mod(dev, PN533_POLL_MOD_106KBPS_A); in pn533_poll_create_mod_list()
976 pn533_poll_add_mod(dev, PN533_POLL_MOD_212KBPS_FELICA); in pn533_poll_create_mod_list()
977 pn533_poll_add_mod(dev, PN533_POLL_MOD_424KBPS_FELICA); in pn533_poll_create_mod_list()
981 pn533_poll_add_mod(dev, PN533_POLL_MOD_106KBPS_JEWEL); in pn533_poll_create_mod_list()
984 pn533_poll_add_mod(dev, PN533_POLL_MOD_847KBPS_B); in pn533_poll_create_mod_list()
987 pn533_poll_add_mod(dev, PN533_LISTEN_MOD); in pn533_poll_create_mod_list()
990 static int pn533_start_poll_complete(struct pn533 *dev, struct sk_buff *resp) in pn533_start_poll_complete() argument
996 if (dev->poll_protocols & NFC_PROTO_NFC_DEP_MASK) in pn533_start_poll_complete()
997 dev->poll_dep = 1; in pn533_start_poll_complete()
1005 rc = pn533_target_found(dev, tg, tgdata, tgdata_len); in pn533_start_poll_complete()
1015 static struct sk_buff *pn533_alloc_poll_tg_frame(struct pn533 *dev) in pn533_alloc_poll_tg_frame() argument
1020 u8 *gbytes = dev->gb; in pn533_alloc_poll_tg_frame()
1021 size_t gbytes_len = dev->gb_len; in pn533_alloc_poll_tg_frame()
1039 skb = pn533_alloc_skb(dev, skb_len); in pn533_alloc_poll_tg_frame()
1069 static struct sk_buff *pn533_build_response(struct pn533 *dev);
1071 static int pn533_tm_get_data_complete(struct pn533 *dev, void *arg, in pn533_tm_get_data_complete() argument
1079 skb_queue_purge(&dev->resp_q); in pn533_tm_get_data_complete()
1095 skb_queue_tail(&dev->resp_q, resp); in pn533_tm_get_data_complete()
1098 queue_work(dev->wq, &dev->mi_tm_rx_work); in pn533_tm_get_data_complete()
1102 skb = pn533_build_response(dev); in pn533_tm_get_data_complete()
1108 return nfc_tm_data_received(dev->nfc_dev, skb); in pn533_tm_get_data_complete()
1111 nfc_tm_deactivated(dev->nfc_dev); in pn533_tm_get_data_complete()
1112 dev->tgt_mode = 0; in pn533_tm_get_data_complete()
1113 skb_queue_purge(&dev->resp_q); in pn533_tm_get_data_complete()
1121 struct pn533 *dev = container_of(work, struct pn533, mi_tm_rx_work); in pn533_wq_tm_mi_recv() local
1125 skb = pn533_alloc_skb(dev, 0); in pn533_wq_tm_mi_recv()
1129 rc = pn533_send_cmd_direct_async(dev, in pn533_wq_tm_mi_recv()
1139 static int pn533_tm_send_complete(struct pn533 *dev, void *arg,
1143 struct pn533 *dev = container_of(work, struct pn533, mi_tm_tx_work); in pn533_wq_tm_mi_send() local
1148 skb = skb_dequeue(&dev->fragment_skb); in pn533_wq_tm_mi_send()
1151 skb_queue_head_init(&dev->fragment_skb); in pn533_wq_tm_mi_send()
1156 if (skb_queue_len(&dev->fragment_skb) == 0) { in pn533_wq_tm_mi_send()
1157 rc = pn533_send_cmd_direct_async(dev, PN533_CMD_TG_SET_DATA, in pn533_wq_tm_mi_send()
1160 rc = pn533_send_cmd_direct_async(dev, in pn533_wq_tm_mi_send()
1167 dev_err(dev->dev, in pn533_wq_tm_mi_send()
1173 dev->phy_ops->send_ack(dev, GFP_KERNEL); in pn533_wq_tm_mi_send()
1174 queue_work(dev->wq, &dev->cmd_work); in pn533_wq_tm_mi_send()
1179 struct pn533 *dev = container_of(work, struct pn533, tg_work); in pn533_wq_tg_get_data() local
1183 skb = pn533_alloc_skb(dev, 0); in pn533_wq_tg_get_data()
1187 rc = pn533_send_data_async(dev, PN533_CMD_TG_GET_DATA, skb, in pn533_wq_tg_get_data()
1195 static int pn533_init_target_complete(struct pn533 *dev, struct sk_buff *resp) in pn533_init_target_complete() argument
1207 dev_dbg(dev->dev, "Target mode 0x%x len %d\n", in pn533_init_target_complete()
1220 rc = nfc_tm_activated(dev->nfc_dev, NFC_PROTO_NFC_DEP_MASK, in pn533_init_target_complete()
1223 nfc_err(dev->dev, in pn533_init_target_complete()
1228 dev->tgt_mode = 1; in pn533_init_target_complete()
1229 queue_work(dev->wq, &dev->tg_work); in pn533_init_target_complete()
1236 struct pn533 *dev = from_timer(dev, t, listen_timer); in pn533_listen_mode_timer() local
1238 dev->cancel_listen = 1; in pn533_listen_mode_timer()
1240 pn533_poll_next_mod(dev); in pn533_listen_mode_timer()
1242 queue_delayed_work(dev->wq, &dev->poll_work, in pn533_listen_mode_timer()
1246 static int pn533_rf_complete(struct pn533 *dev, void *arg, in pn533_rf_complete() argument
1254 nfc_err(dev->dev, "RF setting error %d\n", rc); in pn533_rf_complete()
1259 queue_delayed_work(dev->wq, &dev->poll_work, in pn533_rf_complete()
1268 struct pn533 *dev = container_of(work, struct pn533, rf_work); in pn533_wq_rf() local
1272 skb = pn533_alloc_skb(dev, 2); in pn533_wq_rf()
1279 rc = pn533_send_cmd_async(dev, PN533_CMD_RF_CONFIGURATION, skb, in pn533_wq_rf()
1283 nfc_err(dev->dev, "RF setting error %d\n", rc); in pn533_wq_rf()
1287 static int pn533_poll_dep_complete(struct pn533 *dev, void *arg, in pn533_poll_dep_complete() argument
1305 queue_work(dev->wq, &dev->rf_work); in pn533_poll_dep_complete()
1311 dev_dbg(dev->dev, "Creating new target"); in pn533_poll_dep_complete()
1316 rc = nfc_targets_found(dev->nfc_dev, &nfc_target, 1); in pn533_poll_dep_complete()
1320 dev->tgt_available_prots = 0; in pn533_poll_dep_complete()
1321 dev->tgt_active_prot = NFC_PROTO_NFC_DEP; in pn533_poll_dep_complete()
1325 rc = nfc_set_remote_general_bytes(dev->nfc_dev, in pn533_poll_dep_complete()
1328 rc = nfc_dep_link_is_up(dev->nfc_dev, in pn533_poll_dep_complete()
1329 dev->nfc_dev->targets[0].idx, in pn533_poll_dep_complete()
1333 pn533_poll_reset_mod_list(dev); in pn533_poll_dep_complete()
1343 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_poll_dep() local
1349 if (!dev->gb) { in pn533_poll_dep()
1350 dev->gb = nfc_get_local_general_bytes(nfc_dev, &dev->gb_len); in pn533_poll_dep()
1352 if (!dev->gb || !dev->gb_len) { in pn533_poll_dep()
1353 dev->poll_dep = 0; in pn533_poll_dep()
1354 queue_work(dev->wq, &dev->rf_work); in pn533_poll_dep()
1358 skb_len = 3 + dev->gb_len; /* ActPass + BR + Next */ in pn533_poll_dep()
1367 skb = pn533_alloc_skb(dev, skb_len); in pn533_poll_dep()
1385 skb_put_data(skb, dev->gb, dev->gb_len); in pn533_poll_dep()
1388 rc = pn533_send_cmd_async(dev, PN533_CMD_IN_JUMP_FOR_DEP, skb, in pn533_poll_dep()
1397 static int pn533_autopoll_complete(struct pn533 *dev, void *arg, in pn533_autopoll_complete() argument
1408 nfc_err(dev->dev, "%s autopoll complete error %d\n", in pn533_autopoll_complete()
1412 if (dev->poll_mod_count != 0) in pn533_autopoll_complete()
1416 nfc_err(dev->dev, in pn533_autopoll_complete()
1431 dev_dbg(dev->dev, "ISOA\n"); in pn533_autopoll_complete()
1437 dev_dbg(dev->dev, "FELICA\n"); in pn533_autopoll_complete()
1442 dev_dbg(dev->dev, "JEWEL\n"); in pn533_autopoll_complete()
1447 dev_dbg(dev->dev, "ISOB\n"); in pn533_autopoll_complete()
1452 dev_dbg(dev->dev, "Mifare\n"); in pn533_autopoll_complete()
1457 nfc_err(dev->dev, in pn533_autopoll_complete()
1465 if (!(nfc_tgt.supported_protocols & dev->poll_protocols)) { in pn533_autopoll_complete()
1466 nfc_err(dev->dev, in pn533_autopoll_complete()
1472 dev->tgt_available_prots = nfc_tgt.supported_protocols; in pn533_autopoll_complete()
1477 pn533_poll_reset_mod_list(dev); in pn533_autopoll_complete()
1478 nfc_targets_found(dev->nfc_dev, &nfc_tgt, 1); in pn533_autopoll_complete()
1485 nfc_err(dev->dev, "autopoll operation has been stopped\n"); in pn533_autopoll_complete()
1487 pn533_poll_reset_mod_list(dev); in pn533_autopoll_complete()
1488 dev->poll_protocols = 0; in pn533_autopoll_complete()
1492 static int pn533_poll_complete(struct pn533 *dev, void *arg, in pn533_poll_complete() argument
1501 nfc_err(dev->dev, "%s Poll complete error %d\n", in pn533_poll_complete()
1505 if (dev->poll_mod_count != 0) in pn533_poll_complete()
1509 nfc_err(dev->dev, in pn533_poll_complete()
1515 cur_mod = dev->poll_mod_active[dev->poll_mod_curr]; in pn533_poll_complete()
1518 del_timer(&dev->listen_timer); in pn533_poll_complete()
1519 rc = pn533_init_target_complete(dev, resp); in pn533_poll_complete()
1524 rc = pn533_start_poll_complete(dev, resp); in pn533_poll_complete()
1528 if (!dev->poll_mod_count) { in pn533_poll_complete()
1529 dev_dbg(dev->dev, "Polling has been stopped\n"); in pn533_poll_complete()
1533 pn533_poll_next_mod(dev); in pn533_poll_complete()
1535 queue_work(dev->wq, &dev->rf_work); in pn533_poll_complete()
1542 nfc_err(dev->dev, "Polling operation has been stopped\n"); in pn533_poll_complete()
1544 pn533_poll_reset_mod_list(dev); in pn533_poll_complete()
1545 dev->poll_protocols = 0; in pn533_poll_complete()
1549 static struct sk_buff *pn533_alloc_poll_in_frame(struct pn533 *dev, in pn533_alloc_poll_in_frame() argument
1554 skb = pn533_alloc_skb(dev, mod->len); in pn533_alloc_poll_in_frame()
1563 static int pn533_send_poll_frame(struct pn533 *dev) in pn533_send_poll_frame() argument
1570 mod = dev->poll_mod_active[dev->poll_mod_curr]; in pn533_send_poll_frame()
1572 dev_dbg(dev->dev, "%s mod len %d\n", in pn533_send_poll_frame()
1575 if ((dev->poll_protocols & NFC_PROTO_NFC_DEP_MASK) && dev->poll_dep) { in pn533_send_poll_frame()
1576 dev->poll_dep = 0; in pn533_send_poll_frame()
1577 return pn533_poll_dep(dev->nfc_dev); in pn533_send_poll_frame()
1582 skb = pn533_alloc_poll_tg_frame(dev); in pn533_send_poll_frame()
1585 skb = pn533_alloc_poll_in_frame(dev, mod); in pn533_send_poll_frame()
1589 nfc_err(dev->dev, "Failed to allocate skb\n"); in pn533_send_poll_frame()
1593 rc = pn533_send_cmd_async(dev, cmd_code, skb, pn533_poll_complete, in pn533_send_poll_frame()
1597 nfc_err(dev->dev, "Polling loop error %d\n", rc); in pn533_send_poll_frame()
1605 struct pn533 *dev = container_of(work, struct pn533, poll_work.work); in pn533_wq_poll() local
1609 cur_mod = dev->poll_mod_active[dev->poll_mod_curr]; in pn533_wq_poll()
1611 dev_dbg(dev->dev, in pn533_wq_poll()
1613 __func__, dev->cancel_listen, cur_mod->len); in pn533_wq_poll()
1615 if (dev->cancel_listen == 1) { in pn533_wq_poll()
1616 dev->cancel_listen = 0; in pn533_wq_poll()
1617 dev->phy_ops->abort_cmd(dev, GFP_ATOMIC); in pn533_wq_poll()
1620 rc = pn533_send_poll_frame(dev); in pn533_wq_poll()
1624 if (cur_mod->len == 0 && dev->poll_mod_count > 1) in pn533_wq_poll()
1625 mod_timer(&dev->listen_timer, jiffies + PN533_LISTEN_TIME * HZ); in pn533_wq_poll()
1631 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_start_poll() local
1637 dev_dbg(dev->dev, in pn533_start_poll()
1641 if (dev->tgt_active_prot) { in pn533_start_poll()
1642 nfc_err(dev->dev, in pn533_start_poll()
1647 if (dev->tgt_mode) { in pn533_start_poll()
1648 nfc_err(dev->dev, in pn533_start_poll()
1654 dev->gb = nfc_get_local_general_bytes(nfc_dev, &dev->gb_len); in pn533_start_poll()
1655 if (dev->gb == NULL) in pn533_start_poll()
1659 dev->poll_protocols = im_protocols; in pn533_start_poll()
1660 dev->listen_protocols = tm_protocols; in pn533_start_poll()
1661 if (dev->device_type == PN533_DEVICE_PN532_AUTOPOLL) { in pn533_start_poll()
1662 skb = pn533_alloc_skb(dev, 4 + 6); in pn533_start_poll()
1714 rc = pn533_send_cmd_async(dev, PN533_CMD_IN_AUTOPOLL, skb, in pn533_start_poll()
1720 dev->poll_mod_count++; in pn533_start_poll()
1725 pn533_poll_create_mod_list(dev, im_protocols, tm_protocols); in pn533_start_poll()
1726 if (!dev->poll_mod_count) { in pn533_start_poll()
1727 nfc_err(dev->dev, in pn533_start_poll()
1734 rand_mod %= dev->poll_mod_count; in pn533_start_poll()
1735 dev->poll_mod_curr = rand_mod; in pn533_start_poll()
1737 cur_mod = dev->poll_mod_active[dev->poll_mod_curr]; in pn533_start_poll()
1739 rc = pn533_send_poll_frame(dev); in pn533_start_poll()
1742 if (!rc && cur_mod->len == 0 && dev->poll_mod_count > 1) in pn533_start_poll()
1743 mod_timer(&dev->listen_timer, jiffies + PN533_LISTEN_TIME * HZ); in pn533_start_poll()
1750 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_stop_poll() local
1752 del_timer(&dev->listen_timer); in pn533_stop_poll()
1754 if (!dev->poll_mod_count) { in pn533_stop_poll()
1755 dev_dbg(dev->dev, in pn533_stop_poll()
1760 dev->phy_ops->abort_cmd(dev, GFP_KERNEL); in pn533_stop_poll()
1761 flush_delayed_work(&dev->poll_work); in pn533_stop_poll()
1762 pn533_poll_reset_mod_list(dev); in pn533_stop_poll()
1765 static int pn533_activate_target_nfcdep(struct pn533 *dev) in pn533_activate_target_nfcdep() argument
1773 skb = pn533_alloc_skb(dev, sizeof(u8) * 2); /*TG + Next*/ in pn533_activate_target_nfcdep()
1780 resp = pn533_send_cmd_sync(dev, PN533_CMD_IN_ATR, skb); in pn533_activate_target_nfcdep()
1787 nfc_err(dev->dev, in pn533_activate_target_nfcdep()
1795 rc = nfc_set_remote_general_bytes(dev->nfc_dev, rsp->gt, gt_len); in pn533_activate_target_nfcdep()
1804 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_activate_target() local
1807 dev_dbg(dev->dev, "%s: protocol=%u\n", __func__, protocol); in pn533_activate_target()
1809 if (dev->poll_mod_count) { in pn533_activate_target()
1810 nfc_err(dev->dev, in pn533_activate_target()
1815 if (dev->tgt_active_prot) { in pn533_activate_target()
1816 nfc_err(dev->dev, in pn533_activate_target()
1821 if (!dev->tgt_available_prots) { in pn533_activate_target()
1822 nfc_err(dev->dev, in pn533_activate_target()
1827 if (!(dev->tgt_available_prots & (1 << protocol))) { in pn533_activate_target()
1828 nfc_err(dev->dev, in pn533_activate_target()
1835 rc = pn533_activate_target_nfcdep(dev); in pn533_activate_target()
1837 nfc_err(dev->dev, in pn533_activate_target()
1843 dev->tgt_active_prot = protocol; in pn533_activate_target()
1844 dev->tgt_available_prots = 0; in pn533_activate_target()
1849 static int pn533_deactivate_target_complete(struct pn533 *dev, void *arg, in pn533_deactivate_target_complete() argument
1857 nfc_err(dev->dev, "Target release error %d\n", rc); in pn533_deactivate_target_complete()
1864 nfc_err(dev->dev, in pn533_deactivate_target_complete()
1874 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_deactivate_target() local
1878 if (!dev->tgt_active_prot) { in pn533_deactivate_target()
1879 nfc_err(dev->dev, "There is no active target\n"); in pn533_deactivate_target()
1883 dev->tgt_active_prot = 0; in pn533_deactivate_target()
1884 skb_queue_purge(&dev->resp_q); in pn533_deactivate_target()
1886 skb = pn533_alloc_skb(dev, sizeof(u8)); in pn533_deactivate_target()
1892 rc = pn533_send_cmd_async(dev, PN533_CMD_IN_RELEASE, skb, in pn533_deactivate_target()
1896 nfc_err(dev->dev, "Target release error %d\n", rc); in pn533_deactivate_target()
1901 static int pn533_in_dep_link_up_complete(struct pn533 *dev, void *arg, in pn533_in_dep_link_up_complete() argument
1914 if (dev->tgt_available_prots && in pn533_in_dep_link_up_complete()
1915 !(dev->tgt_available_prots & (1 << NFC_PROTO_NFC_DEP))) { in pn533_in_dep_link_up_complete()
1916 nfc_err(dev->dev, in pn533_in_dep_link_up_complete()
1926 nfc_err(dev->dev, in pn533_in_dep_link_up_complete()
1931 if (!dev->tgt_available_prots) { in pn533_in_dep_link_up_complete()
1934 dev_dbg(dev->dev, "Creating new target\n"); in pn533_in_dep_link_up_complete()
1941 rc = nfc_targets_found(dev->nfc_dev, &nfc_target, 1); in pn533_in_dep_link_up_complete()
1945 dev->tgt_available_prots = 0; in pn533_in_dep_link_up_complete()
1948 dev->tgt_active_prot = NFC_PROTO_NFC_DEP; in pn533_in_dep_link_up_complete()
1952 rc = nfc_set_remote_general_bytes(dev->nfc_dev, in pn533_in_dep_link_up_complete()
1955 rc = nfc_dep_link_is_up(dev->nfc_dev, in pn533_in_dep_link_up_complete()
1956 dev->nfc_dev->targets[0].idx, in pn533_in_dep_link_up_complete()
1968 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_dep_link_up() local
1974 if (dev->poll_mod_count) { in pn533_dep_link_up()
1975 nfc_err(dev->dev, in pn533_dep_link_up()
1980 if (dev->tgt_active_prot) { in pn533_dep_link_up()
1981 nfc_err(dev->dev, in pn533_dep_link_up()
1997 skb = pn533_alloc_skb(dev, skb_len); in pn533_dep_link_up()
2034 pn533_rf_field(dev->nfc_dev, 0); in pn533_dep_link_up()
2036 rc = pn533_send_cmd_async(dev, PN533_CMD_IN_JUMP_FOR_DEP, skb, in pn533_dep_link_up()
2049 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_dep_link_down() local
2051 pn533_poll_reset_mod_list(dev); in pn533_dep_link_down()
2053 if (dev->tgt_mode || dev->tgt_active_prot) in pn533_dep_link_down()
2054 dev->phy_ops->abort_cmd(dev, GFP_KERNEL); in pn533_dep_link_down()
2056 dev->tgt_active_prot = 0; in pn533_dep_link_down()
2057 dev->tgt_mode = 0; in pn533_dep_link_down()
2059 skb_queue_purge(&dev->resp_q); in pn533_dep_link_down()
2069 static struct sk_buff *pn533_build_response(struct pn533 *dev) in pn533_build_response() argument
2074 if (skb_queue_empty(&dev->resp_q)) in pn533_build_response()
2077 if (skb_queue_len(&dev->resp_q) == 1) { in pn533_build_response()
2078 skb = skb_dequeue(&dev->resp_q); in pn533_build_response()
2082 skb_queue_walk_safe(&dev->resp_q, tmp, t) in pn533_build_response()
2085 dev_dbg(dev->dev, "%s total length %d\n", in pn533_build_response()
2094 skb_queue_walk_safe(&dev->resp_q, tmp, t) { in pn533_build_response()
2100 skb_queue_purge(&dev->resp_q); in pn533_build_response()
2105 static int pn533_data_exchange_complete(struct pn533 *dev, void *_arg, in pn533_data_exchange_complete() argument
2125 nfc_err(dev->dev, in pn533_data_exchange_complete()
2131 skb_queue_tail(&dev->resp_q, resp); in pn533_data_exchange_complete()
2134 dev->cmd_complete_mi_arg = arg; in pn533_data_exchange_complete()
2135 queue_work(dev->wq, &dev->mi_rx_work); in pn533_data_exchange_complete()
2140 if (skb_queue_len(&dev->fragment_skb) > 0) { in pn533_data_exchange_complete()
2141 dev->cmd_complete_dep_arg = arg; in pn533_data_exchange_complete()
2142 queue_work(dev->wq, &dev->mi_tx_work); in pn533_data_exchange_complete()
2147 skb = pn533_build_response(dev); in pn533_data_exchange_complete()
2160 skb_queue_purge(&dev->resp_q); in pn533_data_exchange_complete()
2170 void pn533_recv_frame(struct pn533 *dev, struct sk_buff *skb, int status) in pn533_recv_frame() argument
2172 if (!dev->cmd) in pn533_recv_frame()
2175 dev->cmd->status = status; in pn533_recv_frame()
2178 dev_dbg(dev->dev, "%s: Error received: %d\n", __func__, status); in pn533_recv_frame()
2183 dev_err(dev->dev, "NULL Frame -> link is dead\n"); in pn533_recv_frame()
2188 dev_dbg(dev->dev, "%s: Received ACK frame\n", __func__); in pn533_recv_frame()
2194 dev->ops->rx_frame_size(skb->data), false); in pn533_recv_frame()
2196 if (!dev->ops->rx_is_frame_valid(skb->data, dev)) { in pn533_recv_frame()
2197 nfc_err(dev->dev, "Received an invalid frame\n"); in pn533_recv_frame()
2198 dev->cmd->status = -EIO; in pn533_recv_frame()
2199 } else if (!pn533_rx_frame_is_cmd_response(dev, skb->data)) { in pn533_recv_frame()
2200 nfc_err(dev->dev, "It it not the response to the last command\n"); in pn533_recv_frame()
2201 dev->cmd->status = -EIO; in pn533_recv_frame()
2204 dev->cmd->resp = skb; in pn533_recv_frame()
2207 queue_work(dev->wq, &dev->cmd_complete_work); in pn533_recv_frame()
2212 static int pn533_fill_fragment_skbs(struct pn533 *dev, struct sk_buff *skb) in pn533_fill_fragment_skbs() argument
2225 frag = pn533_alloc_skb(dev, frag_size); in pn533_fill_fragment_skbs()
2227 skb_queue_purge(&dev->fragment_skb); in pn533_fill_fragment_skbs()
2231 if (!dev->tgt_mode) { in pn533_fill_fragment_skbs()
2249 skb_queue_tail(&dev->fragment_skb, frag); in pn533_fill_fragment_skbs()
2255 return skb_queue_len(&dev->fragment_skb); in pn533_fill_fragment_skbs()
2262 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_transceive() local
2266 if (!dev->tgt_active_prot) { in pn533_transceive()
2267 nfc_err(dev->dev, in pn533_transceive()
2282 switch (dev->device_type) { in pn533_transceive()
2284 if (dev->tgt_active_prot == NFC_PROTO_FELICA) { in pn533_transceive()
2285 rc = pn533_send_data_async(dev, PN533_CMD_IN_COMM_THRU, in pn533_transceive()
2296 rc = pn533_fill_fragment_skbs(dev, skb); in pn533_transceive()
2300 skb = skb_dequeue(&dev->fragment_skb); in pn533_transceive()
2309 rc = pn533_send_data_async(dev, PN533_CMD_IN_DATA_EXCHANGE, in pn533_transceive()
2327 static int pn533_tm_send_complete(struct pn533 *dev, void *arg, in pn533_tm_send_complete() argument
2338 if (skb_queue_len(&dev->fragment_skb) > 0) { in pn533_tm_send_complete()
2339 queue_work(dev->wq, &dev->mi_tm_tx_work); in pn533_tm_send_complete()
2345 nfc_tm_deactivated(dev->nfc_dev); in pn533_tm_send_complete()
2347 dev->tgt_mode = 0; in pn533_tm_send_complete()
2352 queue_work(dev->wq, &dev->tg_work); in pn533_tm_send_complete()
2359 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_tm_send() local
2364 rc = pn533_fill_fragment_skbs(dev, skb); in pn533_tm_send()
2369 skb = skb_dequeue(&dev->fragment_skb); in pn533_tm_send()
2375 rc = pn533_send_data_async(dev, PN533_CMD_TG_SET_META_DATA, skb, in pn533_tm_send()
2379 rc = pn533_send_data_async(dev, PN533_CMD_TG_SET_DATA, skb, in pn533_tm_send()
2386 skb_queue_purge(&dev->fragment_skb); in pn533_tm_send()
2394 struct pn533 *dev = container_of(work, struct pn533, mi_rx_work); in pn533_wq_mi_recv() local
2398 skb = pn533_alloc_skb(dev, PN533_CMD_DATAEXCH_HEAD_LEN); in pn533_wq_mi_recv()
2402 switch (dev->device_type) { in pn533_wq_mi_recv()
2404 if (dev->tgt_active_prot == NFC_PROTO_FELICA) { in pn533_wq_mi_recv()
2405 rc = pn533_send_cmd_direct_async(dev, in pn533_wq_mi_recv()
2409 dev->cmd_complete_mi_arg); in pn533_wq_mi_recv()
2417 rc = pn533_send_cmd_direct_async(dev, in pn533_wq_mi_recv()
2421 dev->cmd_complete_mi_arg); in pn533_wq_mi_recv()
2429 nfc_err(dev->dev, in pn533_wq_mi_recv()
2433 kfree(dev->cmd_complete_mi_arg); in pn533_wq_mi_recv()
2436 dev->phy_ops->send_ack(dev, GFP_KERNEL); in pn533_wq_mi_recv()
2437 queue_work(dev->wq, &dev->cmd_work); in pn533_wq_mi_recv()
2442 struct pn533 *dev = container_of(work, struct pn533, mi_tx_work); in pn533_wq_mi_send() local
2447 skb = skb_dequeue(&dev->fragment_skb); in pn533_wq_mi_send()
2451 skb_queue_head_init(&dev->fragment_skb); in pn533_wq_mi_send()
2455 switch (dev->device_type) { in pn533_wq_mi_send()
2457 if (dev->tgt_active_prot != NFC_PROTO_FELICA) { in pn533_wq_mi_send()
2462 rc = pn533_send_cmd_direct_async(dev, PN533_CMD_IN_COMM_THRU, in pn533_wq_mi_send()
2465 dev->cmd_complete_dep_arg); in pn533_wq_mi_send()
2471 rc = pn533_send_cmd_direct_async(dev, in pn533_wq_mi_send()
2475 dev->cmd_complete_dep_arg); in pn533_wq_mi_send()
2483 nfc_err(dev->dev, in pn533_wq_mi_send()
2487 kfree(dev->cmd_complete_dep_arg); in pn533_wq_mi_send()
2490 dev->phy_ops->send_ack(dev, GFP_KERNEL); in pn533_wq_mi_send()
2491 queue_work(dev->wq, &dev->cmd_work); in pn533_wq_mi_send()
2494 static int pn533_set_configuration(struct pn533 *dev, u8 cfgitem, u8 *cfgdata, in pn533_set_configuration() argument
2503 skb = pn533_alloc_skb(dev, skb_len); in pn533_set_configuration()
2510 resp = pn533_send_cmd_sync(dev, PN533_CMD_RF_CONFIGURATION, skb); in pn533_set_configuration()
2518 static int pn533_get_firmware_version(struct pn533 *dev, in pn533_get_firmware_version() argument
2524 skb = pn533_alloc_skb(dev, 0); in pn533_get_firmware_version()
2528 resp = pn533_send_cmd_sync(dev, PN533_CMD_GET_FIRMWARE_VERSION, skb); in pn533_get_firmware_version()
2541 static int pn533_pasori_fw_reset(struct pn533 *dev) in pn533_pasori_fw_reset() argument
2546 skb = pn533_alloc_skb(dev, sizeof(u8)); in pn533_pasori_fw_reset()
2552 resp = pn533_send_cmd_sync(dev, 0x18, skb); in pn533_pasori_fw_reset()
2563 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_rf_field() local
2569 rc = pn533_set_configuration(dev, PN533_CFGITEM_RF_FIELD, in pn533_rf_field()
2572 nfc_err(dev->dev, "Error on setting RF field\n"); in pn533_rf_field()
2581 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn532_sam_configuration() local
2585 skb = pn533_alloc_skb(dev, 1); in pn532_sam_configuration()
2591 resp = pn533_send_cmd_sync(dev, PN533_CMD_SAM_CONFIGURATION, skb); in pn532_sam_configuration()
2601 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_dev_up() local
2604 if (dev->phy_ops->dev_up) { in pn533_dev_up()
2605 rc = dev->phy_ops->dev_up(dev); in pn533_dev_up()
2610 if ((dev->device_type == PN533_DEVICE_PN532) || in pn533_dev_up()
2611 (dev->device_type == PN533_DEVICE_PN532_AUTOPOLL)) { in pn533_dev_up()
2623 struct pn533 *dev = nfc_get_drvdata(nfc_dev); in pn533_dev_down() local
2627 if (dev->phy_ops->dev_down && !ret) in pn533_dev_down()
2628 ret = dev->phy_ops->dev_down(dev); in pn533_dev_down()
2646 static int pn533_setup(struct pn533 *dev) in pn533_setup() argument
2653 switch (dev->device_type) { in pn533_setup()
2671 nfc_err(dev->dev, "Unknown device type %d\n", in pn533_setup()
2672 dev->device_type); in pn533_setup()
2676 rc = pn533_set_configuration(dev, PN533_CFGITEM_MAX_RETRIES, in pn533_setup()
2679 nfc_err(dev->dev, in pn533_setup()
2685 rc = pn533_set_configuration(dev, PN533_CFGITEM_TIMING, in pn533_setup()
2688 nfc_err(dev->dev, "Error on setting RF timings\n"); in pn533_setup()
2692 switch (dev->device_type) { in pn533_setup()
2699 pn533_pasori_fw_reset(dev); in pn533_setup()
2701 rc = pn533_set_configuration(dev, PN533_CFGITEM_PASORI, in pn533_setup()
2704 nfc_err(dev->dev, in pn533_setup()
2709 pn533_pasori_fw_reset(dev); in pn533_setup()
2717 int pn533_finalize_setup(struct pn533 *dev) in pn533_finalize_setup() argument
2725 rc = pn533_get_firmware_version(dev, &fw_ver); in pn533_finalize_setup()
2727 nfc_err(dev->dev, "Unable to get FW version\n"); in pn533_finalize_setup()
2731 nfc_info(dev->dev, "NXP PN5%02X firmware ver %d.%d now attached\n", in pn533_finalize_setup()
2734 rc = pn533_setup(dev); in pn533_finalize_setup()
2747 struct device *dev) in pn53x_common_init() argument
2757 priv->dev = dev; in pn53x_common_init()