Lines Matching refs:usbio
137 static int usbio_ctrl_msg(struct usbio_device *usbio, u8 type, u8 cmd, in usbio_ctrl_msg() argument
146 lockdep_assert_held(&usbio->ctrl_mutex); in usbio_ctrl_msg()
148 if ((obuf_len > (usbio->ctrlbuf_len - sizeof(*cpkt))) || in usbio_ctrl_msg()
149 (ibuf_len > (usbio->ctrlbuf_len - sizeof(*cpkt)))) in usbio_ctrl_msg()
153 cpkt = usbio->ctrlbuf; in usbio_ctrl_msg()
165 pipe = usb_sndctrlpipe(usbio->udev, usbio->ctrl_pipe); in usbio_ctrl_msg()
167 ret = usb_control_msg(usbio->udev, pipe, 0, request | USB_DIR_OUT, 0, 0, in usbio_ctrl_msg()
169 dev_dbg(usbio->dev, "control out %d hdr %*phN data %*phN\n", ret, in usbio_ctrl_msg()
173 dev_err(usbio->dev, "USB control out failed: %d\n", ret); in usbio_ctrl_msg()
180 pipe = usb_rcvctrlpipe(usbio->udev, usbio->ctrl_pipe); in usbio_ctrl_msg()
182 ret = usb_control_msg(usbio->udev, pipe, 0, request | USB_DIR_IN, 0, 0, in usbio_ctrl_msg()
184 dev_dbg(usbio->dev, "control in %d hdr %*phN data %*phN\n", ret, in usbio_ctrl_msg()
188 dev_err(usbio->dev, "USB control in failed: %d\n", ret); in usbio_ctrl_msg()
194 dev_err(usbio->dev, "Unexpected reply type: %u, cmd: %u, flags: %u\n", in usbio_ctrl_msg()
214 struct usbio_device *usbio; in usbio_control_msg() local
219 usbio = client->bridge; in usbio_control_msg()
220 if (!usbio) in usbio_control_msg()
223 ret = usb_autopm_get_interface(usbio->intf); in usbio_control_msg()
227 mutex_lock(&usbio->ctrl_mutex); in usbio_control_msg()
231 mutex_unlock(&usbio->ctrl_mutex); in usbio_control_msg()
232 usb_autopm_put_interface(usbio->intf); in usbio_control_msg()
241 struct usbio_device *usbio = urb->context; in usbio_bulk_recv() local
245 usbio->rxdat_len = urb->actual_length; in usbio_bulk_recv()
246 complete(&usbio->done); in usbio_bulk_recv()
249 dev_err(usbio->dev, "Bulk in error %d\n", urb->status); in usbio_bulk_recv()
252 usb_submit_urb(usbio->urb, GFP_ATOMIC); in usbio_bulk_recv()
259 struct usbio_device *usbio = client->bridge; in usbio_bulk_msg() local
265 lockdep_assert_held(&usbio->bulk_mutex); in usbio_bulk_msg()
267 if ((obuf_len > (usbio->txbuf_len - sizeof(*bpkt))) || in usbio_bulk_msg()
268 (ibuf_len > (usbio->txbuf_len - sizeof(*bpkt)))) in usbio_bulk_msg()
272 reinit_completion(&usbio->done); in usbio_bulk_msg()
279 bpkt = usbio->txbuf; in usbio_bulk_msg()
294 ret = usb_bulk_msg(usbio->udev, usbio->tx_pipe, bpkt, bpkt_len, &act, in usbio_bulk_msg()
296 dev_dbg(usbio->dev, "bulk out %d hdr %*phN data %*phN\n", act, in usbio_bulk_msg()
300 dev_err(usbio->dev, "Bulk out failed: %d\n", ret); in usbio_bulk_msg()
308 ret = wait_for_completion_timeout(&usbio->done, USBIO_BULKXFER_TIMEOUT); in usbio_bulk_msg()
310 dev_err(usbio->dev, "Bulk in wait failed: %d\n", ret); in usbio_bulk_msg()
314 act = usbio->rxdat_len; in usbio_bulk_msg()
315 bpkt = usbio->rxbuf; in usbio_bulk_msg()
317 dev_dbg(usbio->dev, "bulk in %d hdr %*phN data %*phN\n", act, in usbio_bulk_msg()
329 dev_err(usbio->dev, "Bulk in short read: %d\n", act); in usbio_bulk_msg()
335 dev_err(usbio->dev, in usbio_bulk_msg()
356 struct usbio_device *usbio; in usbio_acquire() local
361 usbio = client->bridge; in usbio_acquire()
362 if (!usbio) { in usbio_acquire()
367 ret = usb_autopm_get_interface(usbio->intf); in usbio_acquire()
371 mutex_lock(&usbio->bulk_mutex); in usbio_acquire()
386 struct usbio_device *usbio = client->bridge; in usbio_release() local
390 mutex_unlock(&usbio->bulk_mutex); in usbio_release()
391 usb_autopm_put_interface(usbio->intf); in usbio_release()
399 struct usbio_device *usbio; in usbio_get_txrxbuf_len() local
403 usbio = client->bridge; in usbio_get_txrxbuf_len()
404 if (!usbio) in usbio_get_txrxbuf_len()
407 *txbuf_len = usbio->txbuf_len; in usbio_get_txrxbuf_len()
408 *rxbuf_len = usbio->rxbuf_len; in usbio_get_txrxbuf_len()
415 struct usbio_device *usbio; in usbio_get_quirks() local
419 usbio = client->bridge; in usbio_get_quirks()
420 if (!usbio) in usbio_get_quirks()
423 return usbio->quirks; in usbio_get_quirks()
436 static int usbio_add_client(struct usbio_device *usbio, char *name, u8 id, void *data) in usbio_add_client() argument
447 client->bridge = usbio; in usbio_add_client()
452 adev->dev.parent = usbio->dev; in usbio_add_client()
468 list_add_tail(&client->link, &usbio->cli_list); in usbio_add_client()
473 static int usbio_enum_gpios(struct usbio_device *usbio) in usbio_enum_gpios() argument
475 struct usbio_gpio_bank_desc *gpio = usbio->gpios; in usbio_enum_gpios()
477 dev_dbg(usbio->dev, "GPIO Banks: %d\n", usbio->nr_gpio_banks); in usbio_enum_gpios()
479 for (unsigned int i = 0; i < usbio->nr_gpio_banks; i++) in usbio_enum_gpios()
480 dev_dbg(usbio->dev, "\tBank%d[%d] map: %#08x\n", in usbio_enum_gpios()
483 usbio_add_client(usbio, USBIO_GPIO_CLIENT, 0, gpio); in usbio_enum_gpios()
488 static int usbio_enum_i2cs(struct usbio_device *usbio) in usbio_enum_i2cs() argument
490 struct usbio_i2c_bus_desc *i2c = usbio->i2cs; in usbio_enum_i2cs()
492 dev_dbg(usbio->dev, "I2C Busses: %d\n", usbio->nr_i2c_buses); in usbio_enum_i2cs()
494 for (unsigned int i = 0; i < usbio->nr_i2c_buses; i++) { in usbio_enum_i2cs()
495 dev_dbg(usbio->dev, "\tBus%d caps: %#02x\n", i2c[i].id, i2c[i].caps); in usbio_enum_i2cs()
496 usbio_add_client(usbio, USBIO_I2C_CLIENT, i, &i2c[i]); in usbio_enum_i2cs()
504 struct usbio_device *usbio = usb_get_intfdata(intf); in usbio_suspend() local
506 usb_kill_urb(usbio->urb); in usbio_suspend()
513 struct usbio_device *usbio = usb_get_intfdata(intf); in usbio_resume() local
515 return usb_submit_urb(usbio->urb, GFP_KERNEL); in usbio_resume()
520 struct usbio_device *usbio = usb_get_intfdata(intf); in usbio_disconnect() local
524 usbio->rxdat_len = 0; in usbio_disconnect()
525 complete(&usbio->done); in usbio_disconnect()
528 list_for_each_entry(client, &usbio->cli_list, link) { in usbio_disconnect()
535 usb_kill_urb(usbio->urb); in usbio_disconnect()
536 usb_free_urb(usbio->urb); in usbio_disconnect()
538 list_for_each_entry_reverse(client, &usbio->cli_list, link) { in usbio_disconnect()
550 struct usbio_device *usbio; in usbio_probe() local
554 usbio = devm_kzalloc(dev, sizeof(*usbio), GFP_KERNEL); in usbio_probe()
555 if (!usbio) in usbio_probe()
558 ret = devm_mutex_init(dev, &usbio->ctrl_mutex); in usbio_probe()
562 ret = devm_mutex_init(dev, &usbio->bulk_mutex); in usbio_probe()
566 usbio->dev = dev; in usbio_probe()
567 usbio->udev = udev; in usbio_probe()
568 usbio->intf = intf; in usbio_probe()
569 usbio->quirks = id ? id->driver_info : 0; in usbio_probe()
570 init_completion(&usbio->done); in usbio_probe()
571 INIT_LIST_HEAD(&usbio->cli_list); in usbio_probe()
572 usb_set_intfdata(intf, usbio); in usbio_probe()
574 usbio->ctrl_pipe = usb_endpoint_num(&udev->ep0.desc); in usbio_probe()
575 usbio->ctrlbuf_len = usb_maxpacket(udev, usbio->ctrl_pipe); in usbio_probe()
576 usbio->ctrlbuf = devm_kzalloc(dev, usbio->ctrlbuf_len, GFP_KERNEL); in usbio_probe()
577 if (!usbio->ctrlbuf) in usbio_probe()
588 usbio->tx_pipe = usb_sndbulkpipe(udev, usb_endpoint_num(ep_out)); in usbio_probe()
590 if (usbio->quirks & USBIO_QUIRK_BULK_MAXP_63) in usbio_probe()
591 usbio->txbuf_len = 63; in usbio_probe()
593 usbio->txbuf_len = usb_endpoint_maxp(ep_out); in usbio_probe()
595 usbio->txbuf = devm_kzalloc(dev, usbio->txbuf_len, GFP_KERNEL); in usbio_probe()
596 if (!usbio->txbuf) in usbio_probe()
599 usbio->rx_pipe = usb_rcvbulkpipe(udev, usb_endpoint_num(ep_in)); in usbio_probe()
601 if (usbio->quirks & USBIO_QUIRK_BULK_MAXP_63) in usbio_probe()
602 usbio->rxbuf_len = 63; in usbio_probe()
604 usbio->rxbuf_len = usb_endpoint_maxp(ep_in); in usbio_probe()
606 usbio->rxbuf = devm_kzalloc(dev, usbio->rxbuf_len, GFP_KERNEL); in usbio_probe()
607 if (!usbio->rxbuf) in usbio_probe()
610 usbio->urb = usb_alloc_urb(0, GFP_KERNEL); in usbio_probe()
611 if (!usbio->urb) in usbio_probe()
614 usb_fill_bulk_urb(usbio->urb, udev, usbio->rx_pipe, usbio->rxbuf, in usbio_probe()
615 usbio->rxbuf_len, usbio_bulk_recv, usbio); in usbio_probe()
616 ret = usb_submit_urb(usbio->urb, GFP_KERNEL); in usbio_probe()
620 mutex_lock(&usbio->ctrl_mutex); in usbio_probe()
622 ret = usbio_ctrl_msg(usbio, USBIO_PKTTYPE_CTRL, USBIO_CTRLCMD_HS, NULL, 0, NULL, 0); in usbio_probe()
626 ret = usbio_ctrl_msg(usbio, USBIO_PKTTYPE_CTRL, USBIO_CTRLCMD_PROTVER, NULL, 0, in usbio_probe()
631 ret = usbio_ctrl_msg(usbio, USBIO_PKTTYPE_CTRL, USBIO_CTRLCMD_FWVER, NULL, 0, in usbio_probe()
636 ret = usbio_ctrl_msg(usbio, USBIO_PKTTYPE_CTRL, USBIO_CTRLCMD_ENUMGPIO, NULL, 0, in usbio_probe()
637 usbio->gpios, sizeof(usbio->gpios)); in usbio_probe()
642 usbio->nr_gpio_banks = ret / sizeof(struct usbio_gpio_bank_desc); in usbio_probe()
644 ret = usbio_ctrl_msg(usbio, USBIO_PKTTYPE_CTRL, USBIO_CTRLCMD_ENUMI2C, NULL, 0, in usbio_probe()
645 usbio->i2cs, sizeof(usbio->i2cs)); in usbio_probe()
650 usbio->nr_i2c_buses = ret / sizeof(struct usbio_i2c_bus_desc); in usbio_probe()
652 mutex_unlock(&usbio->ctrl_mutex); in usbio_probe()
658 usbio_enum_gpios(usbio); in usbio_probe()
659 usbio_enum_i2cs(usbio); in usbio_probe()
664 mutex_unlock(&usbio->ctrl_mutex); in usbio_probe()
665 usb_kill_urb(usbio->urb); in usbio_probe()
666 usb_free_urb(usbio->urb); in usbio_probe()