Lines Matching full:adap
192 static void ljca_handle_event(struct ljca_adapter *adap, in ljca_handle_event() argument
197 list_for_each_entry(client, &adap->client_list, link) { in ljca_handle_event()
217 static void ljca_handle_cmd_ack(struct ljca_adapter *adap, struct ljca_msg *header) in ljca_handle_cmd_ack() argument
219 struct ljca_msg *tx_header = adap->tx_buf; in ljca_handle_cmd_ack()
224 spin_lock_irqsave(&adap->lock, flags); in ljca_handle_cmd_ack()
227 spin_unlock_irqrestore(&adap->lock, flags); in ljca_handle_cmd_ack()
228 dev_err(adap->dev, "cmd ack mismatch error\n"); in ljca_handle_cmd_ack()
232 ibuf_len = adap->ex_buf_len; in ljca_handle_cmd_ack()
233 ibuf = adap->ex_buf; in ljca_handle_cmd_ack()
242 adap->actual_length = actual_len; in ljca_handle_cmd_ack()
244 spin_unlock_irqrestore(&adap->lock, flags); in ljca_handle_cmd_ack()
246 complete(&adap->cmd_completion); in ljca_handle_cmd_ack()
252 struct ljca_adapter *adap = urb->context; in ljca_recv() local
264 if (adap->disconnect) in ljca_recv()
265 complete(&adap->cmd_completion); in ljca_recv()
271 dev_dbg(adap->dev, "rx urb terminated with status: %d\n", in ljca_recv()
275 dev_dbg(adap->dev, "rx urb error: %d\n", urb->status); in ljca_recv()
283 ljca_handle_cmd_ack(adap, header); in ljca_recv()
285 ljca_handle_event(adap, header); in ljca_recv()
290 dev_err(adap->dev, "resubmit rx urb error %d\n", ret); in ljca_recv()
293 static int ljca_send(struct ljca_adapter *adap, u8 type, u8 cmd, in ljca_send() argument
298 struct ljca_msg *header = adap->tx_buf; in ljca_send()
303 if (adap->disconnect) in ljca_send()
306 if (msg_len > adap->tx_buf_len) in ljca_send()
309 mutex_lock(&adap->mutex); in ljca_send()
311 spin_lock_irqsave(&adap->lock, flags); in ljca_send()
321 adap->ex_buf = ibuf; in ljca_send()
322 adap->ex_buf_len = ibuf_len; in ljca_send()
323 adap->actual_length = 0; in ljca_send()
325 spin_unlock_irqrestore(&adap->lock, flags); in ljca_send()
327 reinit_completion(&adap->cmd_completion); in ljca_send()
329 ret = usb_autopm_get_interface(adap->intf); in ljca_send()
333 ret = usb_bulk_msg(adap->usb_dev, adap->tx_pipe, header, in ljca_send()
343 ret = wait_for_completion_timeout(&adap->cmd_completion, in ljca_send()
350 ret = adap->actual_length; in ljca_send()
353 usb_autopm_put_interface(adap->intf); in ljca_send()
356 spin_lock_irqsave(&adap->lock, flags); in ljca_send()
357 adap->ex_buf = NULL; in ljca_send()
358 adap->ex_buf_len = 0; in ljca_send()
361 spin_unlock_irqrestore(&adap->lock, flags); in ljca_send()
363 mutex_unlock(&adap->mutex); in ljca_send()
456 static void ljca_auxdev_acpi_bind(struct ljca_adapter *adap, in ljca_auxdev_acpi_bind() argument
461 struct device *dev = adap->dev; in ljca_auxdev_acpi_bind()
514 static int ljca_new_client_device(struct ljca_adapter *adap, u8 type, u8 id, in ljca_new_client_device() argument
529 client->adapter = adap; in ljca_new_client_device()
536 auxdev->dev.parent = adap->dev; in ljca_new_client_device()
546 ljca_auxdev_acpi_bind(adap, auxdev, adr, id); in ljca_new_client_device()
552 list_add_tail(&client->link, &adap->client_list); in ljca_new_client_device()
565 static int ljca_enumerate_gpio(struct ljca_adapter *adap) in ljca_enumerate_gpio() argument
574 ret = ljca_send(adap, LJCA_CLIENT_MNG, LJCA_MNG_ENUM_GPIO, NULL, 0, buf, in ljca_enumerate_gpio()
598 return ljca_new_client_device(adap, LJCA_CLIENT_GPIO, 0, "ljca-gpio", in ljca_enumerate_gpio()
602 static int ljca_enumerate_i2c(struct ljca_adapter *adap) in ljca_enumerate_i2c() argument
610 ret = ljca_send(adap, LJCA_CLIENT_MNG, LJCA_MNG_ENUM_I2C, NULL, 0, buf, in ljca_enumerate_i2c()
630 ret = ljca_new_client_device(adap, LJCA_CLIENT_I2C, i, in ljca_enumerate_i2c()
640 static int ljca_enumerate_spi(struct ljca_adapter *adap) in ljca_enumerate_spi() argument
649 ret = ljca_send(adap, LJCA_CLIENT_MNG, LJCA_MNG_ENUM_SPI, NULL, 0, buf, in ljca_enumerate_spi()
668 ret = ljca_new_client_device(adap, LJCA_CLIENT_SPI, i, in ljca_enumerate_spi()
678 static int ljca_reset_handshake(struct ljca_adapter *adap) in ljca_reset_handshake() argument
680 __le32 reset_id = cpu_to_le32(adap->reset_id); in ljca_reset_handshake()
684 adap->reset_id++; in ljca_reset_handshake()
686 ret = ljca_send(adap, LJCA_CLIENT_MNG, LJCA_MNG_RESET, (u8 *)&reset_id, in ljca_reset_handshake()
698 static int ljca_enumerate_clients(struct ljca_adapter *adap) in ljca_enumerate_clients() argument
703 ret = ljca_reset_handshake(adap); in ljca_enumerate_clients()
707 ret = ljca_enumerate_gpio(adap); in ljca_enumerate_clients()
709 dev_err(adap->dev, "enumerate GPIO error\n"); in ljca_enumerate_clients()
713 ret = ljca_enumerate_i2c(adap); in ljca_enumerate_clients()
715 dev_err(adap->dev, "enumerate I2C error\n"); in ljca_enumerate_clients()
719 ret = ljca_enumerate_spi(adap); in ljca_enumerate_clients()
721 dev_err(adap->dev, "enumerate SPI error\n"); in ljca_enumerate_clients()
728 adap->disconnect = true; in ljca_enumerate_clients()
730 usb_kill_urb(adap->rx_urb); in ljca_enumerate_clients()
732 list_for_each_entry_safe_reverse(client, next, &adap->client_list, link) { in ljca_enumerate_clients()
750 struct ljca_adapter *adap; in ljca_probe() local
753 adap = devm_kzalloc(dev, sizeof(*adap), GFP_KERNEL); in ljca_probe()
754 if (!adap) in ljca_probe()
758 adap->tx_buf = devm_kzalloc(dev, LJCA_MAX_PACKET_SIZE, GFP_KERNEL); in ljca_probe()
759 if (!adap->tx_buf) in ljca_probe()
761 adap->tx_buf_len = LJCA_MAX_PACKET_SIZE; in ljca_probe()
763 mutex_init(&adap->mutex); in ljca_probe()
764 spin_lock_init(&adap->lock); in ljca_probe()
765 init_completion(&adap->cmd_completion); in ljca_probe()
766 INIT_LIST_HEAD(&adap->client_list); in ljca_probe()
768 adap->intf = usb_get_intf(interface); in ljca_probe()
769 adap->usb_dev = usb_dev; in ljca_probe()
770 adap->dev = dev; in ljca_probe()
781 adap->rx_pipe = usb_rcvbulkpipe(usb_dev, usb_endpoint_num(ep_in)); in ljca_probe()
782 adap->tx_pipe = usb_sndbulkpipe(usb_dev, usb_endpoint_num(ep_out)); in ljca_probe()
785 adap->rx_len = usb_endpoint_maxp(ep_in); in ljca_probe()
786 adap->rx_buf = devm_kzalloc(dev, adap->rx_len, GFP_KERNEL); in ljca_probe()
787 if (!adap->rx_buf) { in ljca_probe()
793 adap->rx_urb = usb_alloc_urb(0, GFP_KERNEL); in ljca_probe()
794 if (!adap->rx_urb) { in ljca_probe()
798 usb_fill_bulk_urb(adap->rx_urb, usb_dev, adap->rx_pipe, in ljca_probe()
799 adap->rx_buf, adap->rx_len, ljca_recv, adap); in ljca_probe()
801 usb_set_intfdata(interface, adap); in ljca_probe()
804 ret = usb_submit_urb(adap->rx_urb, GFP_KERNEL); in ljca_probe()
810 ret = ljca_enumerate_clients(adap); in ljca_probe()
827 usb_free_urb(adap->rx_urb); in ljca_probe()
830 usb_put_intf(adap->intf); in ljca_probe()
832 mutex_destroy(&adap->mutex); in ljca_probe()
839 struct ljca_adapter *adap = usb_get_intfdata(interface); in ljca_disconnect() local
842 adap->disconnect = true; in ljca_disconnect()
844 usb_kill_urb(adap->rx_urb); in ljca_disconnect()
846 list_for_each_entry_safe_reverse(client, next, &adap->client_list, link) { in ljca_disconnect()
854 usb_free_urb(adap->rx_urb); in ljca_disconnect()
856 usb_put_intf(adap->intf); in ljca_disconnect()
858 mutex_destroy(&adap->mutex); in ljca_disconnect()
863 struct ljca_adapter *adap = usb_get_intfdata(interface); in ljca_suspend() local
865 usb_kill_urb(adap->rx_urb); in ljca_suspend()
872 struct ljca_adapter *adap = usb_get_intfdata(interface); in ljca_resume() local
874 return usb_submit_urb(adap->rx_urb, GFP_KERNEL); in ljca_resume()