Lines Matching refs:dev

94 typedef void (*port100_send_async_complete_t)(struct port100 *dev, void *arg,
606 static bool port100_rx_frame_is_cmd_response(const struct port100 *dev, in port100_rx_frame_is_cmd_response() argument
611 return (PORT100_FRAME_CMD(f) == PORT100_CMD_RESPONSE(dev->cmd->code)); in port100_rx_frame_is_cmd_response()
616 struct port100 *dev = urb->context; in port100_recv_response() local
617 struct port100_cmd *cmd = dev->cmd; in port100_recv_response()
627 nfc_dbg(&dev->interface->dev, in port100_recv_response()
632 nfc_err(&dev->interface->dev, "Urb failure (status %d)\n", in port100_recv_response()
637 in_frame = dev->in_urb->transfer_buffer; in port100_recv_response()
640 nfc_err(&dev->interface->dev, "Received an invalid frame\n"); in port100_recv_response()
648 if (!port100_rx_frame_is_cmd_response(dev, in_frame)) { in port100_recv_response()
649 nfc_err(&dev->interface->dev, in port100_recv_response()
656 schedule_work(&dev->cmd_complete_work); in port100_recv_response()
659 static int port100_submit_urb_for_response(const struct port100 *dev, in port100_submit_urb_for_response() argument
662 dev->in_urb->complete = port100_recv_response; in port100_submit_urb_for_response()
664 return usb_submit_urb(dev->in_urb, flags); in port100_submit_urb_for_response()
669 struct port100 *dev = urb->context; in port100_recv_ack() local
670 struct port100_cmd *cmd = dev->cmd; in port100_recv_ack()
681 nfc_dbg(&dev->interface->dev, in port100_recv_ack()
686 nfc_err(&dev->interface->dev, "Urb failure (status %d)\n", in port100_recv_ack()
691 in_frame = dev->in_urb->transfer_buffer; in port100_recv_ack()
694 nfc_err(&dev->interface->dev, "Received an invalid ack\n"); in port100_recv_ack()
699 rc = port100_submit_urb_for_response(dev, GFP_ATOMIC); in port100_recv_ack()
701 nfc_err(&dev->interface->dev, in port100_recv_ack()
710 schedule_work(&dev->cmd_complete_work); in port100_recv_ack()
713 static int port100_submit_urb_for_ack(const struct port100 *dev, gfp_t flags) in port100_submit_urb_for_ack() argument
715 dev->in_urb->complete = port100_recv_ack; in port100_submit_urb_for_ack()
717 return usb_submit_urb(dev->in_urb, flags); in port100_submit_urb_for_ack()
720 static int port100_send_ack(struct port100 *dev) in port100_send_ack() argument
724 mutex_lock(&dev->out_urb_lock); in port100_send_ack()
733 if (!dev->cmd_cancel) { in port100_send_ack()
734 reinit_completion(&dev->cmd_cancel_done); in port100_send_ack()
736 usb_kill_urb(dev->out_urb); in port100_send_ack()
738 dev->out_urb->transfer_buffer = ack_frame; in port100_send_ack()
739 dev->out_urb->transfer_buffer_length = sizeof(ack_frame); in port100_send_ack()
740 rc = usb_submit_urb(dev->out_urb, GFP_KERNEL); in port100_send_ack()
747 dev->cmd_cancel = !rc; in port100_send_ack()
750 mutex_unlock(&dev->out_urb_lock); in port100_send_ack()
753 wait_for_completion(&dev->cmd_cancel_done); in port100_send_ack()
758 static int port100_send_frame_async(struct port100 *dev, in port100_send_frame_async() argument
764 mutex_lock(&dev->out_urb_lock); in port100_send_frame_async()
769 if (dev->cmd_cancel) { in port100_send_frame_async()
774 dev->out_urb->transfer_buffer = out->data; in port100_send_frame_async()
775 dev->out_urb->transfer_buffer_length = out->len; in port100_send_frame_async()
777 dev->in_urb->transfer_buffer = in->data; in port100_send_frame_async()
778 dev->in_urb->transfer_buffer_length = in_len; in port100_send_frame_async()
783 rc = usb_submit_urb(dev->out_urb, GFP_KERNEL); in port100_send_frame_async()
787 rc = port100_submit_urb_for_ack(dev, GFP_KERNEL); in port100_send_frame_async()
789 usb_kill_urb(dev->out_urb); in port100_send_frame_async()
792 mutex_unlock(&dev->out_urb_lock); in port100_send_frame_async()
797 static void port100_build_cmd_frame(struct port100 *dev, u8 cmd_code, in port100_build_cmd_frame() argument
811 static void port100_send_async_complete(struct port100 *dev) in port100_send_async_complete() argument
813 struct port100_cmd *cmd = dev->cmd; in port100_send_async_complete()
821 dev->cmd = NULL; in port100_send_async_complete()
824 cmd->complete_cb(dev, cmd->complete_cb_context, in port100_send_async_complete()
834 cmd->complete_cb(dev, cmd->complete_cb_context, resp); in port100_send_async_complete()
840 static int port100_send_cmd_async(struct port100 *dev, u8 cmd_code, in port100_send_cmd_async() argument
852 if (dev->cmd) { in port100_send_cmd_async()
853 nfc_err(&dev->interface->dev, in port100_send_cmd_async()
875 port100_build_cmd_frame(dev, cmd_code, req); in port100_send_cmd_async()
877 dev->cmd = cmd; in port100_send_cmd_async()
879 rc = port100_send_frame_async(dev, req, resp, resp_len); in port100_send_cmd_async()
883 dev->cmd = NULL; in port100_send_cmd_async()
896 struct port100 *dev = container_of(work, struct port100, in port100_wq_cmd_complete() local
899 port100_send_async_complete(dev); in port100_wq_cmd_complete()
902 static void port100_send_sync_complete(struct port100 *dev, void *_arg, in port100_send_sync_complete() argument
911 static struct sk_buff *port100_send_cmd_sync(struct port100 *dev, u8 cmd_code, in port100_send_cmd_sync() argument
919 rc = port100_send_cmd_async(dev, cmd_code, req, in port100_send_cmd_sync()
933 struct port100 *dev = urb->context; in port100_send_complete() local
935 if (dev->cmd_cancel) { in port100_send_complete()
936 complete_all(&dev->cmd_cancel_done); in port100_send_complete()
937 dev->cmd_cancel = false; in port100_send_complete()
945 nfc_dbg(&dev->interface->dev, in port100_send_complete()
950 nfc_err(&dev->interface->dev, "Urb failure (status %d)\n", in port100_send_complete()
957 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_abort_cmd() local
960 port100_send_ack(dev); in port100_abort_cmd()
963 usb_kill_urb(dev->in_urb); in port100_abort_cmd()
966 static struct sk_buff *port100_alloc_skb(const struct port100 *dev, unsigned int size) in port100_alloc_skb() argument
970 skb = alloc_skb(dev->skb_headroom + dev->skb_tailroom + size, in port100_alloc_skb()
973 skb_reserve(skb, dev->skb_headroom); in port100_alloc_skb()
978 static int port100_set_command_type(struct port100 *dev, u8 command_type) in port100_set_command_type() argument
984 skb = port100_alloc_skb(dev, 1); in port100_set_command_type()
990 resp = port100_send_cmd_sync(dev, PORT100_CMD_SET_COMMAND_TYPE, skb); in port100_set_command_type()
1001 static u64 port100_get_command_type_mask(struct port100 *dev) in port100_get_command_type_mask() argument
1007 skb = port100_alloc_skb(dev, 0); in port100_get_command_type_mask()
1011 resp = port100_send_cmd_sync(dev, PORT100_CMD_GET_COMMAND_TYPE, skb); in port100_get_command_type_mask()
1025 static u16 port100_get_firmware_version(struct port100 *dev) in port100_get_firmware_version() argument
1031 skb = port100_alloc_skb(dev, 0); in port100_get_firmware_version()
1035 resp = port100_send_cmd_sync(dev, PORT100_CMD_GET_FIRMWARE_VERSION, in port100_get_firmware_version()
1049 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_switch_rf() local
1052 skb = port100_alloc_skb(dev, 1); in port100_switch_rf()
1062 resp = port100_send_cmd_sync(dev, PORT100_CMD_SWITCH_RF, skb); in port100_switch_rf()
1074 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_in_set_rf() local
1082 skb = port100_alloc_skb(dev, sizeof(struct port100_in_rf_setting)); in port100_in_set_rf()
1089 resp = port100_send_cmd_sync(dev, PORT100_CMD_IN_SET_RF, skb); in port100_in_set_rf()
1103 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_in_set_framing() local
1125 skb = port100_alloc_skb(dev, size); in port100_in_set_framing()
1131 resp = port100_send_cmd_sync(dev, PORT100_CMD_IN_SET_PROTOCOL, skb); in port100_in_set_framing()
1155 static void port100_in_comm_rf_complete(struct port100 *dev, void *arg, in port100_in_comm_rf_complete() argument
1169 nfc_err(&dev->interface->dev, in port100_in_comm_rf_complete()
1185 nfc_err(&dev->interface->dev, in port100_in_comm_rf_complete()
1201 cb(dev->nfc_digital_dev, cb_arg->complete_arg, resp); in port100_in_comm_rf_complete()
1210 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_in_send_cmd() local
1225 return port100_send_cmd_async(dev, PORT100_CMD_IN_COMM_RF, skb, in port100_in_send_cmd()
1231 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_tg_set_rf() local
1239 skb = port100_alloc_skb(dev, sizeof(struct port100_tg_rf_setting)); in port100_tg_set_rf()
1246 resp = port100_send_cmd_sync(dev, PORT100_CMD_TG_SET_RF, skb); in port100_tg_set_rf()
1260 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_tg_set_framing() local
1282 skb = port100_alloc_skb(dev, size); in port100_tg_set_framing()
1288 resp = port100_send_cmd_sync(dev, PORT100_CMD_TG_SET_PROTOCOL, skb); in port100_tg_set_framing()
1312 static bool port100_tg_target_activated(struct port100 *dev, u8 tgt_activated) in port100_tg_target_activated() argument
1316 switch (dev->cmd_type) { in port100_tg_target_activated()
1325 nfc_err(&dev->interface->dev, "Unknown command type\n"); in port100_tg_target_activated()
1332 static void port100_tg_comm_rf_complete(struct port100 *dev, void *arg, in port100_tg_comm_rf_complete() argument
1348 !port100_tg_target_activated(dev, hdr->target_activated)) { in port100_tg_comm_rf_complete()
1367 cb(dev->nfc_digital_dev, cb_arg->complete_arg, resp); in port100_tg_comm_rf_complete()
1376 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_tg_send_cmd() local
1396 return port100_send_cmd_async(dev, PORT100_CMD_TG_COMM_RF, skb, in port100_tg_send_cmd()
1405 struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_listen_mdaa() local
1429 skb = port100_alloc_skb(dev, 0); in port100_listen_mdaa()
1452 return port100_send_cmd_async(dev, PORT100_CMD_TG_COMM_RF, skb, in port100_listen_mdaa()
1459 const struct port100 *dev = nfc_digital_get_drvdata(ddev); in port100_listen() local
1462 skb = port100_alloc_skb(dev, 0); in port100_listen()
1492 struct port100 *dev; in port100_probe() local
1502 dev = devm_kzalloc(&interface->dev, sizeof(struct port100), GFP_KERNEL); in port100_probe()
1503 if (!dev) in port100_probe()
1506 mutex_init(&dev->out_urb_lock); in port100_probe()
1507 dev->udev = usb_get_dev(interface_to_usbdev(interface)); in port100_probe()
1508 dev->interface = interface; in port100_probe()
1509 usb_set_intfdata(interface, dev); in port100_probe()
1524 nfc_err(&interface->dev, in port100_probe()
1530 dev->in_urb = usb_alloc_urb(0, GFP_KERNEL); in port100_probe()
1531 dev->out_urb = usb_alloc_urb(0, GFP_KERNEL); in port100_probe()
1533 if (!dev->in_urb || !dev->out_urb) { in port100_probe()
1534 nfc_err(&interface->dev, "Could not allocate USB URBs\n"); in port100_probe()
1539 usb_fill_bulk_urb(dev->in_urb, dev->udev, in port100_probe()
1540 usb_rcvbulkpipe(dev->udev, in_endpoint), in port100_probe()
1541 NULL, 0, NULL, dev); in port100_probe()
1542 usb_fill_bulk_urb(dev->out_urb, dev->udev, in port100_probe()
1543 usb_sndbulkpipe(dev->udev, out_endpoint), in port100_probe()
1544 NULL, 0, port100_send_complete, dev); in port100_probe()
1545 dev->out_urb->transfer_flags = URB_ZERO_PACKET; in port100_probe()
1547 dev->skb_headroom = PORT100_FRAME_HEADER_LEN + in port100_probe()
1549 dev->skb_tailroom = PORT100_FRAME_TAIL_LEN; in port100_probe()
1551 init_completion(&dev->cmd_cancel_done); in port100_probe()
1552 INIT_WORK(&dev->cmd_complete_work, port100_wq_cmd_complete); in port100_probe()
1557 cmd_type_mask = port100_get_command_type_mask(dev); in port100_probe()
1559 nfc_err(&interface->dev, in port100_probe()
1566 dev->cmd_type = PORT100_CMD_TYPE_1; in port100_probe()
1568 dev->cmd_type = PORT100_CMD_TYPE_0; in port100_probe()
1570 rc = port100_set_command_type(dev, dev->cmd_type); in port100_probe()
1572 nfc_err(&interface->dev, in port100_probe()
1574 dev->cmd_type); in port100_probe()
1578 fw_version = port100_get_firmware_version(dev); in port100_probe()
1580 nfc_err(&interface->dev, in port100_probe()
1583 nfc_info(&interface->dev, in port100_probe()
1587 dev->nfc_digital_dev = nfc_digital_allocate_device(&port100_digital_ops, in port100_probe()
1590 dev->skb_headroom, in port100_probe()
1591 dev->skb_tailroom); in port100_probe()
1592 if (!dev->nfc_digital_dev) { in port100_probe()
1593 nfc_err(&interface->dev, in port100_probe()
1599 nfc_digital_set_parent_dev(dev->nfc_digital_dev, &interface->dev); in port100_probe()
1600 nfc_digital_set_drvdata(dev->nfc_digital_dev, dev); in port100_probe()
1602 rc = nfc_digital_register_device(dev->nfc_digital_dev); in port100_probe()
1604 nfc_err(&interface->dev, in port100_probe()
1612 nfc_digital_free_device(dev->nfc_digital_dev); in port100_probe()
1615 usb_kill_urb(dev->in_urb); in port100_probe()
1616 usb_free_urb(dev->in_urb); in port100_probe()
1617 usb_kill_urb(dev->out_urb); in port100_probe()
1618 usb_free_urb(dev->out_urb); in port100_probe()
1619 usb_put_dev(dev->udev); in port100_probe()
1626 struct port100 *dev; in port100_disconnect() local
1628 dev = usb_get_intfdata(interface); in port100_disconnect()
1631 nfc_digital_unregister_device(dev->nfc_digital_dev); in port100_disconnect()
1632 nfc_digital_free_device(dev->nfc_digital_dev); in port100_disconnect()
1634 usb_kill_urb(dev->in_urb); in port100_disconnect()
1635 usb_kill_urb(dev->out_urb); in port100_disconnect()
1637 usb_free_urb(dev->in_urb); in port100_disconnect()
1638 usb_free_urb(dev->out_urb); in port100_disconnect()
1639 usb_put_dev(dev->udev); in port100_disconnect()
1641 kfree(dev->cmd); in port100_disconnect()
1643 nfc_info(&interface->dev, "Sony Port-100 NFC device disconnected\n"); in port100_disconnect()