Lines Matching refs:drv_data
54 static int nfcmrvl_inc_tx(struct nfcmrvl_usb_drv_data *drv_data) in nfcmrvl_inc_tx() argument
59 spin_lock_irqsave(&drv_data->txlock, flags); in nfcmrvl_inc_tx()
60 rv = test_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_inc_tx()
62 drv_data->tx_in_flight++; in nfcmrvl_inc_tx()
63 spin_unlock_irqrestore(&drv_data->txlock, flags); in nfcmrvl_inc_tx()
70 struct nfcmrvl_usb_drv_data *drv_data = urb->context; in nfcmrvl_bulk_complete() local
74 dev_dbg(&drv_data->udev->dev, "urb %p status %d count %d\n", in nfcmrvl_bulk_complete()
77 if (!test_bit(NFCMRVL_NCI_RUNNING, &drv_data->flags)) in nfcmrvl_bulk_complete()
81 skb = nci_skb_alloc(drv_data->priv->ndev, urb->actual_length, in nfcmrvl_bulk_complete()
84 nfc_err(&drv_data->udev->dev, "failed to alloc mem\n"); in nfcmrvl_bulk_complete()
88 if (nfcmrvl_nci_recv_frame(drv_data->priv, skb) < 0) in nfcmrvl_bulk_complete()
89 nfc_err(&drv_data->udev->dev, in nfcmrvl_bulk_complete()
94 if (!test_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags)) in nfcmrvl_bulk_complete()
97 usb_anchor_urb(urb, &drv_data->bulk_anchor); in nfcmrvl_bulk_complete()
98 usb_mark_last_busy(drv_data->udev); in nfcmrvl_bulk_complete()
106 nfc_err(&drv_data->udev->dev, in nfcmrvl_bulk_complete()
113 nfcmrvl_submit_bulk_urb(struct nfcmrvl_usb_drv_data *drv_data, gfp_t mem_flags) in nfcmrvl_submit_bulk_urb() argument
120 if (!drv_data->bulk_rx_ep) in nfcmrvl_submit_bulk_urb()
133 pipe = usb_rcvbulkpipe(drv_data->udev, in nfcmrvl_submit_bulk_urb()
134 drv_data->bulk_rx_ep->bEndpointAddress); in nfcmrvl_submit_bulk_urb()
136 usb_fill_bulk_urb(urb, drv_data->udev, pipe, buf, size, in nfcmrvl_submit_bulk_urb()
137 nfcmrvl_bulk_complete, drv_data); in nfcmrvl_submit_bulk_urb()
141 usb_mark_last_busy(drv_data->udev); in nfcmrvl_submit_bulk_urb()
142 usb_anchor_urb(urb, &drv_data->bulk_anchor); in nfcmrvl_submit_bulk_urb()
147 nfc_err(&drv_data->udev->dev, in nfcmrvl_submit_bulk_urb()
162 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_tx_complete() local
168 spin_lock_irqsave(&drv_data->txlock, flags); in nfcmrvl_tx_complete()
169 drv_data->tx_in_flight--; in nfcmrvl_tx_complete()
170 spin_unlock_irqrestore(&drv_data->txlock, flags); in nfcmrvl_tx_complete()
178 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_open() local
181 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
185 drv_data->intf->needs_remote_wakeup = 1; in nfcmrvl_usb_nci_open()
187 err = nfcmrvl_submit_bulk_urb(drv_data, GFP_KERNEL); in nfcmrvl_usb_nci_open()
191 set_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_usb_nci_open()
192 nfcmrvl_submit_bulk_urb(drv_data, GFP_KERNEL); in nfcmrvl_usb_nci_open()
194 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
198 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
202 static void nfcmrvl_usb_stop_traffic(struct nfcmrvl_usb_drv_data *drv_data) in nfcmrvl_usb_stop_traffic() argument
204 usb_kill_anchored_urbs(&drv_data->bulk_anchor); in nfcmrvl_usb_stop_traffic()
209 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_close() local
212 cancel_work_sync(&drv_data->waker); in nfcmrvl_usb_nci_close()
214 clear_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_usb_nci_close()
216 nfcmrvl_usb_stop_traffic(drv_data); in nfcmrvl_usb_nci_close()
217 usb_kill_anchored_urbs(&drv_data->tx_anchor); in nfcmrvl_usb_nci_close()
218 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_usb_nci_close()
222 drv_data->intf->needs_remote_wakeup = 0; in nfcmrvl_usb_nci_close()
223 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_close()
226 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_usb_nci_close()
233 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_send() local
238 if (!drv_data->bulk_tx_ep) in nfcmrvl_usb_nci_send()
245 pipe = usb_sndbulkpipe(drv_data->udev, in nfcmrvl_usb_nci_send()
246 drv_data->bulk_tx_ep->bEndpointAddress); in nfcmrvl_usb_nci_send()
248 usb_fill_bulk_urb(urb, drv_data->udev, pipe, skb->data, skb->len, in nfcmrvl_usb_nci_send()
251 err = nfcmrvl_inc_tx(drv_data); in nfcmrvl_usb_nci_send()
253 usb_anchor_urb(urb, &drv_data->deferred); in nfcmrvl_usb_nci_send()
254 schedule_work(&drv_data->waker); in nfcmrvl_usb_nci_send()
259 usb_anchor_urb(urb, &drv_data->tx_anchor); in nfcmrvl_usb_nci_send()
264 nfc_err(&drv_data->udev->dev, in nfcmrvl_usb_nci_send()
269 usb_mark_last_busy(drv_data->udev); in nfcmrvl_usb_nci_send()
285 struct nfcmrvl_usb_drv_data *drv_data = in nfcmrvl_waker() local
289 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_waker()
293 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_waker()
300 struct nfcmrvl_usb_drv_data *drv_data; in nfcmrvl_probe() local
312 drv_data = devm_kzalloc(&intf->dev, sizeof(*drv_data), GFP_KERNEL); in nfcmrvl_probe()
313 if (!drv_data) in nfcmrvl_probe()
319 if (!drv_data->bulk_tx_ep && in nfcmrvl_probe()
321 drv_data->bulk_tx_ep = ep_desc; in nfcmrvl_probe()
325 if (!drv_data->bulk_rx_ep && in nfcmrvl_probe()
327 drv_data->bulk_rx_ep = ep_desc; in nfcmrvl_probe()
332 if (!drv_data->bulk_tx_ep || !drv_data->bulk_rx_ep) in nfcmrvl_probe()
335 drv_data->udev = udev; in nfcmrvl_probe()
336 drv_data->intf = intf; in nfcmrvl_probe()
338 INIT_WORK(&drv_data->waker, nfcmrvl_waker); in nfcmrvl_probe()
339 spin_lock_init(&drv_data->txlock); in nfcmrvl_probe()
341 init_usb_anchor(&drv_data->tx_anchor); in nfcmrvl_probe()
342 init_usb_anchor(&drv_data->bulk_anchor); in nfcmrvl_probe()
343 init_usb_anchor(&drv_data->deferred); in nfcmrvl_probe()
345 priv = nfcmrvl_nci_register_dev(NFCMRVL_PHY_USB, drv_data, &usb_ops, in nfcmrvl_probe()
350 drv_data->priv = priv; in nfcmrvl_probe()
351 drv_data->priv->support_fw_dnld = false; in nfcmrvl_probe()
353 usb_set_intfdata(intf, drv_data); in nfcmrvl_probe()
360 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_disconnect() local
362 if (!drv_data) in nfcmrvl_disconnect()
365 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_disconnect()
367 nfcmrvl_nci_unregister_dev(drv_data->priv); in nfcmrvl_disconnect()
369 usb_set_intfdata(drv_data->intf, NULL); in nfcmrvl_disconnect()
375 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_suspend() local
377 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_suspend()
379 if (drv_data->suspend_count++) in nfcmrvl_suspend()
382 spin_lock_irq(&drv_data->txlock); in nfcmrvl_suspend()
383 if (!(PMSG_IS_AUTO(message) && drv_data->tx_in_flight)) { in nfcmrvl_suspend()
384 set_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_suspend()
385 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_suspend()
387 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_suspend()
388 drv_data->suspend_count--; in nfcmrvl_suspend()
392 nfcmrvl_usb_stop_traffic(drv_data); in nfcmrvl_suspend()
393 usb_kill_anchored_urbs(&drv_data->tx_anchor); in nfcmrvl_suspend()
398 static void nfcmrvl_play_deferred(struct nfcmrvl_usb_drv_data *drv_data) in nfcmrvl_play_deferred() argument
403 while ((urb = usb_get_from_anchor(&drv_data->deferred))) { in nfcmrvl_play_deferred()
408 drv_data->tx_in_flight++; in nfcmrvl_play_deferred()
410 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_play_deferred()
415 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_resume() local
418 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_resume()
420 if (--drv_data->suspend_count) in nfcmrvl_resume()
423 if (!test_bit(NFCMRVL_NCI_RUNNING, &drv_data->flags)) in nfcmrvl_resume()
426 if (test_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags)) { in nfcmrvl_resume()
427 err = nfcmrvl_submit_bulk_urb(drv_data, GFP_NOIO); in nfcmrvl_resume()
429 clear_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_resume()
433 nfcmrvl_submit_bulk_urb(drv_data, GFP_NOIO); in nfcmrvl_resume()
436 spin_lock_irq(&drv_data->txlock); in nfcmrvl_resume()
437 nfcmrvl_play_deferred(drv_data); in nfcmrvl_resume()
438 clear_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_resume()
439 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_resume()
444 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_resume()
446 spin_lock_irq(&drv_data->txlock); in nfcmrvl_resume()
447 clear_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_resume()
448 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_resume()