Lines Matching refs:drv_data
55 static int nfcmrvl_inc_tx(struct nfcmrvl_usb_drv_data *drv_data) in nfcmrvl_inc_tx() argument
60 spin_lock_irqsave(&drv_data->txlock, flags); in nfcmrvl_inc_tx()
61 rv = test_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_inc_tx()
63 drv_data->tx_in_flight++; in nfcmrvl_inc_tx()
64 spin_unlock_irqrestore(&drv_data->txlock, flags); in nfcmrvl_inc_tx()
71 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", in nfcmrvl_bulk_complete()
77 if (!test_bit(NFCMRVL_NCI_RUNNING, &drv_data->flags)) in nfcmrvl_bulk_complete()
81 if (nfcmrvl_nci_recv_frame(drv_data->priv, urb->transfer_buffer, in nfcmrvl_bulk_complete()
83 nfc_err(&drv_data->udev->dev, "corrupted Rx packet\n"); in nfcmrvl_bulk_complete()
86 if (!test_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags)) in nfcmrvl_bulk_complete()
89 usb_anchor_urb(urb, &drv_data->bulk_anchor); in nfcmrvl_bulk_complete()
90 usb_mark_last_busy(drv_data->udev); in nfcmrvl_bulk_complete()
98 nfc_err(&drv_data->udev->dev, in nfcmrvl_bulk_complete()
105 nfcmrvl_submit_bulk_urb(struct nfcmrvl_usb_drv_data *drv_data, gfp_t mem_flags) in nfcmrvl_submit_bulk_urb() argument
112 if (!drv_data->bulk_rx_ep) in nfcmrvl_submit_bulk_urb()
125 pipe = usb_rcvbulkpipe(drv_data->udev, in nfcmrvl_submit_bulk_urb()
126 drv_data->bulk_rx_ep->bEndpointAddress); in nfcmrvl_submit_bulk_urb()
128 usb_fill_bulk_urb(urb, drv_data->udev, pipe, buf, size, in nfcmrvl_submit_bulk_urb()
129 nfcmrvl_bulk_complete, drv_data); in nfcmrvl_submit_bulk_urb()
133 usb_mark_last_busy(drv_data->udev); in nfcmrvl_submit_bulk_urb()
134 usb_anchor_urb(urb, &drv_data->bulk_anchor); in nfcmrvl_submit_bulk_urb()
139 nfc_err(&drv_data->udev->dev, in nfcmrvl_submit_bulk_urb()
154 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_tx_complete() local
159 spin_lock(&drv_data->txlock); in nfcmrvl_tx_complete()
160 drv_data->tx_in_flight--; in nfcmrvl_tx_complete()
161 spin_unlock(&drv_data->txlock); in nfcmrvl_tx_complete()
169 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_open() local
172 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
176 drv_data->intf->needs_remote_wakeup = 1; in nfcmrvl_usb_nci_open()
178 err = nfcmrvl_submit_bulk_urb(drv_data, GFP_KERNEL); in nfcmrvl_usb_nci_open()
182 set_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_usb_nci_open()
183 nfcmrvl_submit_bulk_urb(drv_data, GFP_KERNEL); in nfcmrvl_usb_nci_open()
185 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
189 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
193 static void nfcmrvl_usb_stop_traffic(struct nfcmrvl_usb_drv_data *drv_data) in nfcmrvl_usb_stop_traffic() argument
195 usb_kill_anchored_urbs(&drv_data->bulk_anchor); in nfcmrvl_usb_stop_traffic()
200 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_close() local
203 cancel_work_sync(&drv_data->waker); in nfcmrvl_usb_nci_close()
205 clear_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_usb_nci_close()
207 nfcmrvl_usb_stop_traffic(drv_data); in nfcmrvl_usb_nci_close()
208 usb_kill_anchored_urbs(&drv_data->tx_anchor); in nfcmrvl_usb_nci_close()
209 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_usb_nci_close()
213 drv_data->intf->needs_remote_wakeup = 0; in nfcmrvl_usb_nci_close()
214 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_close()
217 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_usb_nci_close()
224 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_send() local
229 if (!drv_data->bulk_tx_ep) in nfcmrvl_usb_nci_send()
236 pipe = usb_sndbulkpipe(drv_data->udev, in nfcmrvl_usb_nci_send()
237 drv_data->bulk_tx_ep->bEndpointAddress); in nfcmrvl_usb_nci_send()
239 usb_fill_bulk_urb(urb, drv_data->udev, pipe, skb->data, skb->len, in nfcmrvl_usb_nci_send()
242 err = nfcmrvl_inc_tx(drv_data); in nfcmrvl_usb_nci_send()
244 usb_anchor_urb(urb, &drv_data->deferred); in nfcmrvl_usb_nci_send()
245 schedule_work(&drv_data->waker); in nfcmrvl_usb_nci_send()
250 usb_anchor_urb(urb, &drv_data->tx_anchor); in nfcmrvl_usb_nci_send()
255 nfc_err(&drv_data->udev->dev, in nfcmrvl_usb_nci_send()
260 usb_mark_last_busy(drv_data->udev); in nfcmrvl_usb_nci_send()
276 struct nfcmrvl_usb_drv_data *drv_data = in nfcmrvl_waker() local
280 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_waker()
284 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_waker()
291 struct nfcmrvl_usb_drv_data *drv_data; in nfcmrvl_probe() local
298 drv_data = devm_kzalloc(&intf->dev, sizeof(*drv_data), GFP_KERNEL); in nfcmrvl_probe()
299 if (!drv_data) in nfcmrvl_probe()
305 if (!drv_data->bulk_tx_ep && in nfcmrvl_probe()
307 drv_data->bulk_tx_ep = ep_desc; in nfcmrvl_probe()
311 if (!drv_data->bulk_rx_ep && in nfcmrvl_probe()
313 drv_data->bulk_rx_ep = ep_desc; in nfcmrvl_probe()
318 if (!drv_data->bulk_tx_ep || !drv_data->bulk_rx_ep) in nfcmrvl_probe()
321 drv_data->udev = udev; in nfcmrvl_probe()
322 drv_data->intf = intf; in nfcmrvl_probe()
324 INIT_WORK(&drv_data->waker, nfcmrvl_waker); in nfcmrvl_probe()
325 spin_lock_init(&drv_data->txlock); in nfcmrvl_probe()
327 init_usb_anchor(&drv_data->tx_anchor); in nfcmrvl_probe()
328 init_usb_anchor(&drv_data->bulk_anchor); in nfcmrvl_probe()
329 init_usb_anchor(&drv_data->deferred); in nfcmrvl_probe()
331 priv = nfcmrvl_nci_register_dev(drv_data, &usb_ops, in nfcmrvl_probe()
332 &drv_data->udev->dev); in nfcmrvl_probe()
336 drv_data->priv = priv; in nfcmrvl_probe()
337 priv->dev = &drv_data->udev->dev; in nfcmrvl_probe()
339 usb_set_intfdata(intf, drv_data); in nfcmrvl_probe()
346 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_disconnect() local
348 if (!drv_data) in nfcmrvl_disconnect()
351 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_disconnect()
353 nfcmrvl_nci_unregister_dev(drv_data->priv); in nfcmrvl_disconnect()
355 usb_set_intfdata(drv_data->intf, NULL); in nfcmrvl_disconnect()
361 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_suspend() local
363 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_suspend()
365 if (drv_data->suspend_count++) in nfcmrvl_suspend()
368 spin_lock_irq(&drv_data->txlock); in nfcmrvl_suspend()
369 if (!(PMSG_IS_AUTO(message) && drv_data->tx_in_flight)) { in nfcmrvl_suspend()
370 set_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_suspend()
371 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_suspend()
373 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_suspend()
374 drv_data->suspend_count--; in nfcmrvl_suspend()
378 nfcmrvl_usb_stop_traffic(drv_data); in nfcmrvl_suspend()
379 usb_kill_anchored_urbs(&drv_data->tx_anchor); in nfcmrvl_suspend()
384 static void nfcmrvl_play_deferred(struct nfcmrvl_usb_drv_data *drv_data) in nfcmrvl_play_deferred() argument
389 while ((urb = usb_get_from_anchor(&drv_data->deferred))) { in nfcmrvl_play_deferred()
394 drv_data->tx_in_flight++; in nfcmrvl_play_deferred()
396 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_play_deferred()
401 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_resume() local
404 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_resume()
406 if (--drv_data->suspend_count) in nfcmrvl_resume()
409 if (!test_bit(NFCMRVL_NCI_RUNNING, &drv_data->flags)) in nfcmrvl_resume()
412 if (test_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags)) { in nfcmrvl_resume()
413 err = nfcmrvl_submit_bulk_urb(drv_data, GFP_NOIO); in nfcmrvl_resume()
415 clear_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_resume()
419 nfcmrvl_submit_bulk_urb(drv_data, GFP_NOIO); in nfcmrvl_resume()
422 spin_lock_irq(&drv_data->txlock); in nfcmrvl_resume()
423 nfcmrvl_play_deferred(drv_data); in nfcmrvl_resume()
424 clear_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_resume()
425 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_resume()
430 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_resume()
432 spin_lock_irq(&drv_data->txlock); in nfcmrvl_resume()
433 clear_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_resume()
434 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_resume()