Lines Matching refs:ftdi

195 	struct usb_ftdi *ftdi = kref_to_usb_ftdi(kref);  in ftdi_elan_delete()  local
196 dev_warn(&ftdi->udev->dev, "FREEING ftdi=%p\n", ftdi); in ftdi_elan_delete()
197 usb_put_dev(ftdi->udev); in ftdi_elan_delete()
198 ftdi->disconnected += 1; in ftdi_elan_delete()
200 list_del_init(&ftdi->ftdi_list); in ftdi_elan_delete()
203 kfree(ftdi->bulk_in_buffer); in ftdi_elan_delete()
204 ftdi->bulk_in_buffer = NULL; in ftdi_elan_delete()
207 static void ftdi_elan_put_kref(struct usb_ftdi *ftdi) in ftdi_elan_put_kref() argument
209 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_elan_put_kref()
212 static void ftdi_elan_get_kref(struct usb_ftdi *ftdi) in ftdi_elan_get_kref() argument
214 kref_get(&ftdi->kref); in ftdi_elan_get_kref()
217 static void ftdi_elan_init_kref(struct usb_ftdi *ftdi) in ftdi_elan_init_kref() argument
219 kref_init(&ftdi->kref); in ftdi_elan_init_kref()
222 static void ftdi_status_requeue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_status_requeue_work() argument
224 if (!schedule_delayed_work(&ftdi->status_work, delta)) in ftdi_status_requeue_work()
225 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_status_requeue_work()
228 static void ftdi_status_queue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_status_queue_work() argument
230 if (schedule_delayed_work(&ftdi->status_work, delta)) in ftdi_status_queue_work()
231 kref_get(&ftdi->kref); in ftdi_status_queue_work()
234 static void ftdi_status_cancel_work(struct usb_ftdi *ftdi) in ftdi_status_cancel_work() argument
236 if (cancel_delayed_work_sync(&ftdi->status_work)) in ftdi_status_cancel_work()
237 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_status_cancel_work()
240 static void ftdi_command_requeue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_command_requeue_work() argument
242 if (!schedule_delayed_work(&ftdi->command_work, delta)) in ftdi_command_requeue_work()
243 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_command_requeue_work()
246 static void ftdi_command_queue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_command_queue_work() argument
248 if (schedule_delayed_work(&ftdi->command_work, delta)) in ftdi_command_queue_work()
249 kref_get(&ftdi->kref); in ftdi_command_queue_work()
252 static void ftdi_command_cancel_work(struct usb_ftdi *ftdi) in ftdi_command_cancel_work() argument
254 if (cancel_delayed_work_sync(&ftdi->command_work)) in ftdi_command_cancel_work()
255 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_command_cancel_work()
258 static void ftdi_response_requeue_work(struct usb_ftdi *ftdi, in ftdi_response_requeue_work() argument
261 if (!schedule_delayed_work(&ftdi->respond_work, delta)) in ftdi_response_requeue_work()
262 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_response_requeue_work()
265 static void ftdi_respond_queue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_respond_queue_work() argument
267 if (schedule_delayed_work(&ftdi->respond_work, delta)) in ftdi_respond_queue_work()
268 kref_get(&ftdi->kref); in ftdi_respond_queue_work()
271 static void ftdi_response_cancel_work(struct usb_ftdi *ftdi) in ftdi_response_cancel_work() argument
273 if (cancel_delayed_work_sync(&ftdi->respond_work)) in ftdi_response_cancel_work()
274 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_response_cancel_work()
279 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in ftdi_elan_gone_away() local
280 ftdi->gone_away += 1; in ftdi_elan_gone_away()
281 ftdi_elan_put_kref(ftdi); in ftdi_elan_gone_away()
291 static void ftdi_elan_do_callback(struct usb_ftdi *ftdi,
293 static void ftdi_elan_kick_command_queue(struct usb_ftdi *ftdi);
294 static void ftdi_elan_kick_respond_queue(struct usb_ftdi *ftdi);
295 static int ftdi_elan_setupOHCI(struct usb_ftdi *ftdi);
296 static int ftdi_elan_checkingPCI(struct usb_ftdi *ftdi);
297 static int ftdi_elan_enumeratePCI(struct usb_ftdi *ftdi);
298 static int ftdi_elan_synchronize(struct usb_ftdi *ftdi);
299 static int ftdi_elan_stuck_waiting(struct usb_ftdi *ftdi);
300 static int ftdi_elan_command_engine(struct usb_ftdi *ftdi);
301 static int ftdi_elan_respond_engine(struct usb_ftdi *ftdi);
302 static int ftdi_elan_hcd_init(struct usb_ftdi *ftdi) in ftdi_elan_hcd_init() argument
304 if (ftdi->platform_dev.dev.parent) in ftdi_elan_hcd_init()
307 ftdi_elan_get_kref(ftdi); in ftdi_elan_hcd_init()
308 ftdi->platform_data.potpg = 100; in ftdi_elan_hcd_init()
309 ftdi->platform_data.reset = NULL; in ftdi_elan_hcd_init()
310 ftdi->platform_dev.id = ftdi->sequence_num; in ftdi_elan_hcd_init()
311 ftdi->platform_dev.resource = ftdi->resources; in ftdi_elan_hcd_init()
312 ftdi->platform_dev.num_resources = ARRAY_SIZE(ftdi->resources); in ftdi_elan_hcd_init()
313 ftdi->platform_dev.dev.platform_data = &ftdi->platform_data; in ftdi_elan_hcd_init()
314 ftdi->platform_dev.dev.parent = NULL; in ftdi_elan_hcd_init()
315 ftdi->platform_dev.dev.release = ftdi_release_platform_dev; in ftdi_elan_hcd_init()
316 ftdi->platform_dev.dev.dma_mask = NULL; in ftdi_elan_hcd_init()
317 snprintf(ftdi->device_name, sizeof(ftdi->device_name), "u132_hcd"); in ftdi_elan_hcd_init()
318 ftdi->platform_dev.name = ftdi->device_name; in ftdi_elan_hcd_init()
319 dev_info(&ftdi->udev->dev, "requesting module '%s'\n", "u132_hcd"); in ftdi_elan_hcd_init()
321 dev_info(&ftdi->udev->dev, "registering '%s'\n", in ftdi_elan_hcd_init()
322 ftdi->platform_dev.name); in ftdi_elan_hcd_init()
324 return platform_device_register(&ftdi->platform_dev); in ftdi_elan_hcd_init()
327 static void ftdi_elan_abandon_completions(struct usb_ftdi *ftdi) in ftdi_elan_abandon_completions() argument
329 mutex_lock(&ftdi->u132_lock); in ftdi_elan_abandon_completions()
330 while (ftdi->respond_next > ftdi->respond_head) { in ftdi_elan_abandon_completions()
331 struct u132_respond *respond = &ftdi->respond[RESPOND_MASK & in ftdi_elan_abandon_completions()
332 ftdi->respond_head++]; in ftdi_elan_abandon_completions()
336 } mutex_unlock(&ftdi->u132_lock); in ftdi_elan_abandon_completions()
339 static void ftdi_elan_abandon_targets(struct usb_ftdi *ftdi) in ftdi_elan_abandon_targets() argument
342 mutex_lock(&ftdi->u132_lock); in ftdi_elan_abandon_targets()
344 struct u132_target *target = &ftdi->target[ed_number]; in ftdi_elan_abandon_targets()
347 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_abandon_targets()
348 ftdi_elan_do_callback(ftdi, target, NULL, 0); in ftdi_elan_abandon_targets()
349 mutex_lock(&ftdi->u132_lock); in ftdi_elan_abandon_targets()
352 ftdi->received = 0; in ftdi_elan_abandon_targets()
353 ftdi->expected = 4; in ftdi_elan_abandon_targets()
354 ftdi->ed_found = 0; in ftdi_elan_abandon_targets()
355 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_abandon_targets()
358 static void ftdi_elan_flush_targets(struct usb_ftdi *ftdi) in ftdi_elan_flush_targets() argument
361 mutex_lock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
363 struct u132_target *target = &ftdi->target[ed_number]; in ftdi_elan_flush_targets()
366 int command_size = ftdi->command_next - in ftdi_elan_flush_targets()
367 ftdi->command_head; in ftdi_elan_flush_targets()
369 struct u132_command *command = &ftdi->command[ in ftdi_elan_flush_targets()
370 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_flush_targets()
378 ftdi->command_next += 1; in ftdi_elan_flush_targets()
379 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_flush_targets()
381 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
383 mutex_lock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
388 int command_size = ftdi->command_next - in ftdi_elan_flush_targets()
389 ftdi->command_head; in ftdi_elan_flush_targets()
391 struct u132_command *command = &ftdi->command[ in ftdi_elan_flush_targets()
392 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_flush_targets()
400 ftdi->command_next += 1; in ftdi_elan_flush_targets()
401 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_flush_targets()
403 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
405 mutex_lock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
410 ftdi->received = 0; in ftdi_elan_flush_targets()
411 ftdi->expected = 4; in ftdi_elan_flush_targets()
412 ftdi->ed_found = 0; in ftdi_elan_flush_targets()
413 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
416 static void ftdi_elan_cancel_targets(struct usb_ftdi *ftdi) in ftdi_elan_cancel_targets() argument
419 mutex_lock(&ftdi->u132_lock); in ftdi_elan_cancel_targets()
421 struct u132_target *target = &ftdi->target[ed_number]; in ftdi_elan_cancel_targets()
424 int command_size = ftdi->command_next - in ftdi_elan_cancel_targets()
425 ftdi->command_head; in ftdi_elan_cancel_targets()
427 struct u132_command *command = &ftdi->command[ in ftdi_elan_cancel_targets()
428 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_cancel_targets()
436 ftdi->command_next += 1; in ftdi_elan_cancel_targets()
437 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_cancel_targets()
439 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_cancel_targets()
441 mutex_lock(&ftdi->u132_lock); in ftdi_elan_cancel_targets()
446 ftdi->received = 0; in ftdi_elan_cancel_targets()
447 ftdi->expected = 4; in ftdi_elan_cancel_targets()
448 ftdi->ed_found = 0; in ftdi_elan_cancel_targets()
449 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_cancel_targets()
452 static void ftdi_elan_kick_command_queue(struct usb_ftdi *ftdi) in ftdi_elan_kick_command_queue() argument
454 ftdi_command_queue_work(ftdi, 0); in ftdi_elan_kick_command_queue()
459 struct usb_ftdi *ftdi = in ftdi_elan_command_work() local
462 if (ftdi->disconnected > 0) { in ftdi_elan_command_work()
463 ftdi_elan_put_kref(ftdi); in ftdi_elan_command_work()
466 int retval = ftdi_elan_command_engine(ftdi); in ftdi_elan_command_work()
468 ftdi->disconnected += 1; in ftdi_elan_command_work()
470 ftdi->disconnected += 1; in ftdi_elan_command_work()
472 dev_err(&ftdi->udev->dev, "command error %d\n", retval); in ftdi_elan_command_work()
473 ftdi_command_requeue_work(ftdi, msecs_to_jiffies(10)); in ftdi_elan_command_work()
478 static void ftdi_elan_kick_respond_queue(struct usb_ftdi *ftdi) in ftdi_elan_kick_respond_queue() argument
480 ftdi_respond_queue_work(ftdi, 0); in ftdi_elan_kick_respond_queue()
485 struct usb_ftdi *ftdi = in ftdi_elan_respond_work() local
487 if (ftdi->disconnected > 0) { in ftdi_elan_respond_work()
488 ftdi_elan_put_kref(ftdi); in ftdi_elan_respond_work()
491 int retval = ftdi_elan_respond_engine(ftdi); in ftdi_elan_respond_work()
494 ftdi->disconnected += 1; in ftdi_elan_respond_work()
496 ftdi->disconnected += 1; in ftdi_elan_respond_work()
498 ftdi->disconnected += 1; in ftdi_elan_respond_work()
500 ftdi->disconnected += 1; in ftdi_elan_respond_work()
501 dev_err(&ftdi->udev->dev, "respond error %d\n", retval); in ftdi_elan_respond_work()
503 if (ftdi->disconnected > 0) { in ftdi_elan_respond_work()
504 ftdi_elan_abandon_completions(ftdi); in ftdi_elan_respond_work()
505 ftdi_elan_abandon_targets(ftdi); in ftdi_elan_respond_work()
507 ftdi_response_requeue_work(ftdi, msecs_to_jiffies(10)); in ftdi_elan_respond_work()
520 struct usb_ftdi *ftdi = in ftdi_elan_status_work() local
523 if (ftdi->disconnected > 0) { in ftdi_elan_status_work()
524 ftdi_elan_put_kref(ftdi); in ftdi_elan_status_work()
526 } else if (ftdi->synchronized == 0) { in ftdi_elan_status_work()
527 down(&ftdi->sw_lock); in ftdi_elan_status_work()
528 if (ftdi_elan_synchronize(ftdi) == 0) { in ftdi_elan_status_work()
529 ftdi->synchronized = 1; in ftdi_elan_status_work()
530 ftdi_command_queue_work(ftdi, 1); in ftdi_elan_status_work()
531 ftdi_respond_queue_work(ftdi, 1); in ftdi_elan_status_work()
532 up(&ftdi->sw_lock); in ftdi_elan_status_work()
535 dev_err(&ftdi->udev->dev, "synchronize failed\n"); in ftdi_elan_status_work()
536 up(&ftdi->sw_lock); in ftdi_elan_status_work()
539 } else if (ftdi->stuck_status > 0) { in ftdi_elan_status_work()
540 if (ftdi_elan_stuck_waiting(ftdi) == 0) { in ftdi_elan_status_work()
541 ftdi->stuck_status = 0; in ftdi_elan_status_work()
542 ftdi->synchronized = 0; in ftdi_elan_status_work()
543 } else if ((ftdi->stuck_status++ % 60) == 1) { in ftdi_elan_status_work()
544 dev_err(&ftdi->udev->dev, "WRONG type of card inserted - please remove\n"); in ftdi_elan_status_work()
546 dev_err(&ftdi->udev->dev, "WRONG type of card inserted - checked %d times\n", in ftdi_elan_status_work()
547 ftdi->stuck_status); in ftdi_elan_status_work()
549 } else if (ftdi->enumerated == 0) { in ftdi_elan_status_work()
550 if (ftdi_elan_enumeratePCI(ftdi) == 0) { in ftdi_elan_status_work()
551 ftdi->enumerated = 1; in ftdi_elan_status_work()
555 } else if (ftdi->initialized == 0) { in ftdi_elan_status_work()
556 if (ftdi_elan_setupOHCI(ftdi) == 0) { in ftdi_elan_status_work()
557 ftdi->initialized = 1; in ftdi_elan_status_work()
560 dev_err(&ftdi->udev->dev, "initialized failed - trying again in 10 seconds\n"); in ftdi_elan_status_work()
563 } else if (ftdi->registered == 0) { in ftdi_elan_status_work()
565 if (ftdi_elan_hcd_init(ftdi) == 0) { in ftdi_elan_status_work()
566 ftdi->registered = 1; in ftdi_elan_status_work()
568 dev_err(&ftdi->udev->dev, "register failed\n"); in ftdi_elan_status_work()
571 if (ftdi_elan_checkingPCI(ftdi) == 0) { in ftdi_elan_status_work()
573 } else if (ftdi->controlreg & 0x00400000) { in ftdi_elan_status_work()
574 if (ftdi->gone_away > 0) { in ftdi_elan_status_work()
575 …dev_err(&ftdi->udev->dev, "PCI device eject confirmed platform_dev.dev.parent=%p platform_dev.dev=… in ftdi_elan_status_work()
576 ftdi->platform_dev.dev.parent, in ftdi_elan_status_work()
577 &ftdi->platform_dev.dev); in ftdi_elan_status_work()
578 platform_device_unregister(&ftdi->platform_dev); in ftdi_elan_status_work()
579 ftdi->platform_dev.dev.parent = NULL; in ftdi_elan_status_work()
580 ftdi->registered = 0; in ftdi_elan_status_work()
581 ftdi->enumerated = 0; in ftdi_elan_status_work()
582 ftdi->card_ejected = 0; in ftdi_elan_status_work()
583 ftdi->initialized = 0; in ftdi_elan_status_work()
584 ftdi->gone_away = 0; in ftdi_elan_status_work()
586 ftdi_elan_flush_targets(ftdi); in ftdi_elan_status_work()
589 dev_err(&ftdi->udev->dev, "PCI device has disappeared\n"); in ftdi_elan_status_work()
590 ftdi_elan_cancel_targets(ftdi); in ftdi_elan_status_work()
592 ftdi->enumerated = 0; in ftdi_elan_status_work()
593 ftdi->initialized = 0; in ftdi_elan_status_work()
596 if (ftdi->disconnected > 0) { in ftdi_elan_status_work()
597 ftdi_elan_put_kref(ftdi); in ftdi_elan_status_work()
600 ftdi_status_requeue_work(ftdi, in ftdi_elan_status_work()
625 struct usb_ftdi *ftdi = usb_get_intfdata(interface); in ftdi_elan_open() local
626 if (!ftdi) { in ftdi_elan_open()
629 if (down_interruptible(&ftdi->sw_lock)) { in ftdi_elan_open()
632 ftdi_elan_get_kref(ftdi); in ftdi_elan_open()
633 file->private_data = ftdi; in ftdi_elan_open()
642 struct usb_ftdi *ftdi = file->private_data; in ftdi_elan_release() local
643 if (ftdi == NULL) in ftdi_elan_release()
645 up(&ftdi->sw_lock); /* decrement the count on our device */ in ftdi_elan_release()
646 ftdi_elan_put_kref(ftdi); in ftdi_elan_release()
665 struct usb_ftdi *ftdi = file->private_data; in ftdi_elan_read() local
666 if (ftdi->disconnected > 0) { in ftdi_elan_read()
670 have:if (ftdi->bulk_in_left > 0) { in ftdi_elan_read()
672 char *p = ++ftdi->bulk_in_last + ftdi->bulk_in_buffer; in ftdi_elan_read()
673 ftdi->bulk_in_left -= 1; in ftdi_elan_read()
690 int retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_read()
691 usb_rcvbulkpipe(ftdi->udev, ftdi->bulk_in_endpointAddr), in ftdi_elan_read()
692 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_read()
695 ftdi->bulk_in_left = packet_bytes - 2; in ftdi_elan_read()
696 ftdi->bulk_in_last = 1; in ftdi_elan_read()
718 struct usb_ftdi *ftdi = urb->context; in ftdi_elan_write_bulk_callback() local
723 dev_err(&ftdi->udev->dev, in ftdi_elan_write_bulk_callback()
730 static int fill_buffer_with_all_queued_commands(struct usb_ftdi *ftdi, in fill_buffer_with_all_queued_commands() argument
736 int i = ftdi->command_head; in fill_buffer_with_all_queued_commands()
738 struct u132_command *command = &ftdi->command[COMMAND_MASK & in fill_buffer_with_all_queued_commands()
757 static int ftdi_elan_total_command_size(struct usb_ftdi *ftdi, int command_size) in ftdi_elan_total_command_size() argument
761 int i = ftdi->command_head; in ftdi_elan_total_command_size()
763 struct u132_command *command = &ftdi->command[COMMAND_MASK & in ftdi_elan_total_command_size()
769 static int ftdi_elan_command_engine(struct usb_ftdi *ftdi) in ftdi_elan_command_engine() argument
776 int command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_command_engine()
779 total_size = ftdi_elan_total_command_size(ftdi, command_size); in ftdi_elan_command_engine()
783 buf = usb_alloc_coherent(ftdi->udev, total_size, GFP_KERNEL, in ftdi_elan_command_engine()
786 …dev_err(&ftdi->udev->dev, "could not get a buffer to write %d commands totaling %d bytes to the Ux… in ftdi_elan_command_engine()
791 ed_commands = fill_buffer_with_all_queued_commands(ftdi, buf, in ftdi_elan_command_engine()
793 usb_fill_bulk_urb(urb, ftdi->udev, usb_sndbulkpipe(ftdi->udev, in ftdi_elan_command_engine()
794 ftdi->bulk_out_endpointAddr), buf, total_size, in ftdi_elan_command_engine()
795 ftdi_elan_write_bulk_callback, ftdi); in ftdi_elan_command_engine()
813 …dev_err(&ftdi->udev->dev, "failed %d to submit urb %p to write %d commands totaling %d bytes to th… in ftdi_elan_command_engine()
815 usb_free_coherent(ftdi->udev, total_size, buf, urb->transfer_dma); in ftdi_elan_command_engine()
821 ftdi->command_head += command_size; in ftdi_elan_command_engine()
822 ftdi_elan_kick_respond_queue(ftdi); in ftdi_elan_command_engine()
826 static void ftdi_elan_do_callback(struct usb_ftdi *ftdi, in ftdi_elan_do_callback() argument
847 static char *have_ed_set_response(struct usb_ftdi *ftdi, in have_ed_set_response() argument
852 mutex_lock(&ftdi->u132_lock); in have_ed_set_response()
859 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
860 ftdi_elan_do_callback(ftdi, target, 4 + ftdi->response, in have_ed_set_response()
862 ftdi->received = 0; in have_ed_set_response()
863 ftdi->expected = 4; in have_ed_set_response()
864 ftdi->ed_found = 0; in have_ed_set_response()
865 return ftdi->response; in have_ed_set_response()
867 ftdi->expected = 4 + payload; in have_ed_set_response()
868 ftdi->ed_found = 1; in have_ed_set_response()
869 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
874 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
875 ftdi_elan_do_callback(ftdi, target, 4 + ftdi->response, in have_ed_set_response()
877 ftdi->received = 0; in have_ed_set_response()
878 ftdi->expected = 4; in have_ed_set_response()
879 ftdi->ed_found = 0; in have_ed_set_response()
880 return ftdi->response; in have_ed_set_response()
884 static char *have_ed_get_response(struct usb_ftdi *ftdi, in have_ed_get_response() argument
888 mutex_lock(&ftdi->u132_lock); in have_ed_get_response()
893 mutex_unlock(&ftdi->u132_lock); in have_ed_get_response()
895 ftdi_elan_do_callback(ftdi, target, NULL, 0); in have_ed_get_response()
897 ftdi->received = 0; in have_ed_get_response()
898 ftdi->expected = 4; in have_ed_get_response()
899 ftdi->ed_found = 0; in have_ed_get_response()
900 return ftdi->response; in have_ed_get_response()
912 static int ftdi_elan_respond_engine(struct usb_ftdi *ftdi) in ftdi_elan_respond_engine() argument
914 u8 *b = ftdi->response + ftdi->received; in ftdi_elan_respond_engine()
921 int retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_respond_engine()
922 usb_rcvbulkpipe(ftdi->udev, ftdi->bulk_in_endpointAddr), in ftdi_elan_respond_engine()
923 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_respond_engine()
928 u8 *c = ftdi->bulk_in_buffer; in ftdi_elan_respond_engine()
938 ftdi->bulk_in_left = packet_bytes - 2; in ftdi_elan_respond_engine()
939 ftdi->bulk_in_last = 1; in ftdi_elan_respond_engine()
943 dev_err(&ftdi->udev->dev, "TIMED OUT with packet_bytes = %d with total %d bytes%s\n", in ftdi_elan_respond_engine()
947 dev_err(&ftdi->udev->dev, "ONLY %d bytes%s\n", in ftdi_elan_respond_engine()
951 dev_err(&ftdi->udev->dev, "TIMED OUT with packet_bytes = %d with total %d bytes%s\n", in ftdi_elan_respond_engine()
956 dev_err(&ftdi->udev->dev, "error = %d with packet_bytes = %d with total %d bytes%s\n", in ftdi_elan_respond_engine()
960 dev_err(&ftdi->udev->dev, "error = %d with packet_bytes = %d with total %d bytes%s\n", in ftdi_elan_respond_engine()
964 unsigned char s0 = ftdi->bulk_in_buffer[0]; in ftdi_elan_respond_engine()
965 unsigned char s1 = ftdi->bulk_in_buffer[1]; in ftdi_elan_respond_engine()
998 have:if (ftdi->bulk_in_left > 0) { in ftdi_elan_respond_engine()
999 u8 c = ftdi->bulk_in_buffer[++ftdi->bulk_in_last]; in ftdi_elan_respond_engine()
1001 ftdi->bulk_in_left -= 1; in ftdi_elan_respond_engine()
1002 if (ftdi->received == 0 && c == 0xFF) { in ftdi_elan_respond_engine()
1006 if (++ftdi->received < ftdi->expected) { in ftdi_elan_respond_engine()
1008 } else if (ftdi->ed_found) { in ftdi_elan_respond_engine()
1009 int ed_number = (ftdi->response[0] >> 5) & 0x03; in ftdi_elan_respond_engine()
1010 u16 ed_length = (ftdi->response[2] << 8) | in ftdi_elan_respond_engine()
1011 ftdi->response[1]; in ftdi_elan_respond_engine()
1012 struct u132_target *target = &ftdi->target[ed_number]; in ftdi_elan_respond_engine()
1017 u8 *c = 4 + ftdi->response; in ftdi_elan_respond_engine()
1026 ftdi_elan_do_callback(ftdi, target, 4 + ftdi->response, in ftdi_elan_respond_engine()
1028 ftdi->received = 0; in ftdi_elan_respond_engine()
1029 ftdi->expected = 4; in ftdi_elan_respond_engine()
1030 ftdi->ed_found = 0; in ftdi_elan_respond_engine()
1031 b = ftdi->response; in ftdi_elan_respond_engine()
1033 } else if (ftdi->expected == 8) { in ftdi_elan_respond_engine()
1035 int respond_head = ftdi->respond_head++; in ftdi_elan_respond_engine()
1036 struct u132_respond *respond = &ftdi->respond[ in ftdi_elan_respond_engine()
1038 u32 data = ftdi->response[7]; in ftdi_elan_respond_engine()
1040 data |= ftdi->response[6]; in ftdi_elan_respond_engine()
1042 data |= ftdi->response[5]; in ftdi_elan_respond_engine()
1044 data |= ftdi->response[4]; in ftdi_elan_respond_engine()
1048 ftdi->received = 0; in ftdi_elan_respond_engine()
1049 ftdi->expected = 4; in ftdi_elan_respond_engine()
1050 ftdi->ed_found = 0; in ftdi_elan_respond_engine()
1051 b = ftdi->response; in ftdi_elan_respond_engine()
1052 buscmd = (ftdi->response[0] >> 0) & 0x0F; in ftdi_elan_respond_engine()
1058 dev_err(&ftdi->udev->dev, "Uxxx unknown(%0X) value = %08X\n", in ftdi_elan_respond_engine()
1062 if ((ftdi->response[0] & 0x80) == 0x00) { in ftdi_elan_respond_engine()
1063 ftdi->expected = 8; in ftdi_elan_respond_engine()
1066 int ed_number = (ftdi->response[0] >> 5) & 0x03; in ftdi_elan_respond_engine()
1067 int ed_type = (ftdi->response[0] >> 0) & 0x03; in ftdi_elan_respond_engine()
1068 u16 ed_length = (ftdi->response[2] << 8) | in ftdi_elan_respond_engine()
1069 ftdi->response[1]; in ftdi_elan_respond_engine()
1070 struct u132_target *target = &ftdi->target[ in ftdi_elan_respond_engine()
1072 target->halted = (ftdi->response[0] >> 3) & in ftdi_elan_respond_engine()
1074 target->skipped = (ftdi->response[0] >> 2) & in ftdi_elan_respond_engine()
1076 target->toggle_bits = (ftdi->response[3] >> 6) in ftdi_elan_respond_engine()
1078 target->error_count = (ftdi->response[3] >> 4) in ftdi_elan_respond_engine()
1080 target->condition_code = (ftdi->response[ in ftdi_elan_respond_engine()
1082 if ((ftdi->response[0] & 0x10) == 0x00) { in ftdi_elan_respond_engine()
1083 b = have_ed_set_response(ftdi, target, in ftdi_elan_respond_engine()
1088 b = have_ed_get_response(ftdi, target, in ftdi_elan_respond_engine()
1111 struct usb_ftdi *ftdi = file->private_data; in ftdi_elan_write() local
1113 if (ftdi->disconnected > 0) { in ftdi_elan_write()
1124 buf = usb_alloc_coherent(ftdi->udev, count, GFP_KERNEL, in ftdi_elan_write()
1134 usb_fill_bulk_urb(urb, ftdi->udev, usb_sndbulkpipe(ftdi->udev, in ftdi_elan_write()
1135 ftdi->bulk_out_endpointAddr), buf, count, in ftdi_elan_write()
1136 ftdi_elan_write_bulk_callback, ftdi); in ftdi_elan_write()
1140 dev_err(&ftdi->udev->dev, in ftdi_elan_write()
1149 usb_free_coherent(ftdi->udev, count, buf, urb->transfer_dma); in ftdi_elan_write()
1208 static int ftdi_elan_write_reg(struct usb_ftdi *ftdi, u32 data) in ftdi_elan_write_reg() argument
1210 wait:if (ftdi->disconnected > 0) { in ftdi_elan_write_reg()
1214 mutex_lock(&ftdi->u132_lock); in ftdi_elan_write_reg()
1215 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_write_reg()
1217 struct u132_command *command = &ftdi->command[ in ftdi_elan_write_reg()
1218 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_write_reg()
1226 ftdi->command_next += 1; in ftdi_elan_write_reg()
1227 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_write_reg()
1228 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_reg()
1231 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_reg()
1238 static int ftdi_elan_write_config(struct usb_ftdi *ftdi, int config_offset, in ftdi_elan_write_config() argument
1242 wait:if (ftdi->disconnected > 0) { in ftdi_elan_write_config()
1246 mutex_lock(&ftdi->u132_lock); in ftdi_elan_write_config()
1247 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_write_config()
1249 struct u132_command *command = &ftdi->command[ in ftdi_elan_write_config()
1250 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_write_config()
1258 ftdi->command_next += 1; in ftdi_elan_write_config()
1259 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_write_config()
1260 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_config()
1263 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_config()
1270 static int ftdi_elan_write_pcimem(struct usb_ftdi *ftdi, int mem_offset, in ftdi_elan_write_pcimem() argument
1274 wait:if (ftdi->disconnected > 0) { in ftdi_elan_write_pcimem()
1278 mutex_lock(&ftdi->u132_lock); in ftdi_elan_write_pcimem()
1279 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_write_pcimem()
1281 struct u132_command *command = &ftdi->command[ in ftdi_elan_write_pcimem()
1282 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_write_pcimem()
1290 ftdi->command_next += 1; in ftdi_elan_write_pcimem()
1291 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_write_pcimem()
1292 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_pcimem()
1295 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_pcimem()
1305 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_write_pcimem() local
1306 return ftdi_elan_write_pcimem(ftdi, mem_offset, width, data); in usb_ftdi_elan_write_pcimem()
1311 static int ftdi_elan_read_reg(struct usb_ftdi *ftdi, u32 *data) in ftdi_elan_read_reg() argument
1313 wait:if (ftdi->disconnected > 0) { in ftdi_elan_read_reg()
1318 mutex_lock(&ftdi->u132_lock); in ftdi_elan_read_reg()
1319 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_read_reg()
1320 respond_size = ftdi->respond_next - ftdi->respond_head; in ftdi_elan_read_reg()
1323 struct u132_command *command = &ftdi->command[ in ftdi_elan_read_reg()
1324 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_read_reg()
1325 struct u132_respond *respond = &ftdi->respond[ in ftdi_elan_read_reg()
1326 RESPOND_MASK & ftdi->respond_next]; in ftdi_elan_read_reg()
1338 ftdi->command_next += 1; in ftdi_elan_read_reg()
1339 ftdi->respond_next += 1; in ftdi_elan_read_reg()
1340 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_read_reg()
1341 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_reg()
1345 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_reg()
1352 static int ftdi_elan_read_config(struct usb_ftdi *ftdi, int config_offset, in ftdi_elan_read_config() argument
1356 wait:if (ftdi->disconnected > 0) { in ftdi_elan_read_config()
1361 mutex_lock(&ftdi->u132_lock); in ftdi_elan_read_config()
1362 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_read_config()
1363 respond_size = ftdi->respond_next - ftdi->respond_head; in ftdi_elan_read_config()
1366 struct u132_command *command = &ftdi->command[ in ftdi_elan_read_config()
1367 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_read_config()
1368 struct u132_respond *respond = &ftdi->respond[ in ftdi_elan_read_config()
1369 RESPOND_MASK & ftdi->respond_next]; in ftdi_elan_read_config()
1382 ftdi->command_next += 1; in ftdi_elan_read_config()
1383 ftdi->respond_next += 1; in ftdi_elan_read_config()
1384 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_read_config()
1385 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_config()
1389 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_config()
1396 static int ftdi_elan_read_pcimem(struct usb_ftdi *ftdi, int mem_offset, in ftdi_elan_read_pcimem() argument
1400 wait:if (ftdi->disconnected > 0) { in ftdi_elan_read_pcimem()
1405 mutex_lock(&ftdi->u132_lock); in ftdi_elan_read_pcimem()
1406 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_read_pcimem()
1407 respond_size = ftdi->respond_next - ftdi->respond_head; in ftdi_elan_read_pcimem()
1410 struct u132_command *command = &ftdi->command[ in ftdi_elan_read_pcimem()
1411 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_read_pcimem()
1412 struct u132_respond *respond = &ftdi->respond[ in ftdi_elan_read_pcimem()
1413 RESPOND_MASK & ftdi->respond_next]; in ftdi_elan_read_pcimem()
1426 ftdi->command_next += 1; in ftdi_elan_read_pcimem()
1427 ftdi->respond_next += 1; in ftdi_elan_read_pcimem()
1428 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_read_pcimem()
1429 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_pcimem()
1433 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_pcimem()
1443 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_read_pcimem() local
1444 if (ftdi->initialized == 0) { in usb_ftdi_elan_read_pcimem()
1447 return ftdi_elan_read_pcimem(ftdi, mem_offset, width, data); in usb_ftdi_elan_read_pcimem()
1452 static int ftdi_elan_edset_setup(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_setup() argument
1459 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_setup()
1461 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_setup()
1465 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_setup()
1466 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_setup()
1468 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_setup()
1469 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_setup()
1470 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_setup()
1484 ftdi->command_next += 1; in ftdi_elan_edset_setup()
1485 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_setup()
1486 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_setup()
1489 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_setup()
1502 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_setup() local
1503 return ftdi_elan_edset_setup(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_setup()
1509 static int ftdi_elan_edset_input(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_input() argument
1516 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_input()
1518 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_input()
1522 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_input()
1523 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_input()
1525 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_input()
1526 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_input()
1527 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_input()
1549 ftdi->command_next += 1; in ftdi_elan_edset_input()
1550 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_input()
1551 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_input()
1554 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_input()
1567 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_input() local
1568 return ftdi_elan_edset_input(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_input()
1574 static int ftdi_elan_edset_empty(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_empty() argument
1581 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_empty()
1583 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_empty()
1587 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_empty()
1588 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_empty()
1590 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_empty()
1591 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_empty()
1592 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_empty()
1606 ftdi->command_next += 1; in ftdi_elan_edset_empty()
1607 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_empty()
1608 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_empty()
1611 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_empty()
1624 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_empty() local
1625 return ftdi_elan_edset_empty(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_empty()
1631 static int ftdi_elan_edset_output(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_output() argument
1638 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_output()
1640 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_output()
1644 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_output()
1645 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_output()
1654 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_output()
1655 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_output()
1656 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_output()
1685 ftdi->command_next += 1; in ftdi_elan_edset_output()
1686 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_output()
1687 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_output()
1690 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_output()
1703 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_output() local
1704 return ftdi_elan_edset_output(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_output()
1710 static int ftdi_elan_edset_single(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_single() argument
1717 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_single()
1719 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_single()
1723 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_single()
1724 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_single()
1728 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_single()
1729 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_single()
1730 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_single()
1750 ftdi->command_next += 1; in ftdi_elan_edset_single()
1751 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_single()
1752 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_single()
1755 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_single()
1768 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_single() local
1769 return ftdi_elan_edset_single(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_single()
1775 static int ftdi_elan_edset_flush(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_flush() argument
1779 if (ftdi->disconnected > 0) { in ftdi_elan_edset_flush()
1781 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_flush()
1784 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_flush()
1785 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1787 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1792 int command_size = ftdi->command_next - in ftdi_elan_edset_flush()
1793 ftdi->command_head; in ftdi_elan_edset_flush()
1796 &ftdi->command[COMMAND_MASK & in ftdi_elan_edset_flush()
1797 ftdi->command_next]; in ftdi_elan_edset_flush()
1806 ftdi->command_next += 1; in ftdi_elan_edset_flush()
1807 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_flush()
1809 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1811 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1815 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1824 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_flush() local
1825 return ftdi_elan_edset_flush(ftdi, ed_number, endp); in usb_ftdi_elan_edset_flush()
1830 static int ftdi_elan_flush_input_fifo(struct usb_ftdi *ftdi) in ftdi_elan_flush_input_fifo() argument
1837 int retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_flush_input_fifo()
1838 usb_rcvbulkpipe(ftdi->udev, ftdi->bulk_in_endpointAddr), in ftdi_elan_flush_input_fifo()
1839 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_flush_input_fifo()
1845 char *b = ftdi->bulk_in_buffer; in ftdi_elan_flush_input_fifo()
1861 char s1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_flush_input_fifo()
1862 char s2 = ftdi->bulk_in_buffer[1]; in ftdi_elan_flush_input_fifo()
1868 dev_err(&ftdi->udev->dev, "STATUS ERROR retry limit reached\n"); in ftdi_elan_flush_input_fifo()
1872 char b1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_flush_input_fifo()
1873 dev_err(&ftdi->udev->dev, "only one byte flushed from FTDI = %02X\n", in ftdi_elan_flush_input_fifo()
1878 dev_err(&ftdi->udev->dev, "STATUS ERROR retry limit reached\n"); in ftdi_elan_flush_input_fifo()
1885 dev_err(&ftdi->udev->dev, "TIMED OUT retry limit reached\n"); in ftdi_elan_flush_input_fifo()
1892 dev_err(&ftdi->udev->dev, "empty packet retry limit reached\n"); in ftdi_elan_flush_input_fifo()
1896 dev_err(&ftdi->udev->dev, "error = %d\n", retval); in ftdi_elan_flush_input_fifo()
1908 static int ftdi_elan_synchronize_flush(struct usb_ftdi *ftdi) in ftdi_elan_synchronize_flush() argument
1918 buf = usb_alloc_coherent(ftdi->udev, I, GFP_KERNEL, &urb->transfer_dma); in ftdi_elan_synchronize_flush()
1920 dev_err(&ftdi->udev->dev, "could not get a buffer for flush sequence\n"); in ftdi_elan_synchronize_flush()
1926 usb_fill_bulk_urb(urb, ftdi->udev, usb_sndbulkpipe(ftdi->udev, in ftdi_elan_synchronize_flush()
1927 ftdi->bulk_out_endpointAddr), buf, i, in ftdi_elan_synchronize_flush()
1928 ftdi_elan_write_bulk_callback, ftdi); in ftdi_elan_synchronize_flush()
1932 dev_err(&ftdi->udev->dev, "failed to submit urb containing the flush sequence\n"); in ftdi_elan_synchronize_flush()
1933 usb_free_coherent(ftdi->udev, i, buf, urb->transfer_dma); in ftdi_elan_synchronize_flush()
1946 static int ftdi_elan_synchronize_reset(struct usb_ftdi *ftdi) in ftdi_elan_synchronize_reset() argument
1956 buf = usb_alloc_coherent(ftdi->udev, I, GFP_KERNEL, &urb->transfer_dma); in ftdi_elan_synchronize_reset()
1958 dev_err(&ftdi->udev->dev, "could not get a buffer for the reset sequence\n"); in ftdi_elan_synchronize_reset()
1966 usb_fill_bulk_urb(urb, ftdi->udev, usb_sndbulkpipe(ftdi->udev, in ftdi_elan_synchronize_reset()
1967 ftdi->bulk_out_endpointAddr), buf, i, in ftdi_elan_synchronize_reset()
1968 ftdi_elan_write_bulk_callback, ftdi); in ftdi_elan_synchronize_reset()
1972 dev_err(&ftdi->udev->dev, "failed to submit urb containing the reset sequence\n"); in ftdi_elan_synchronize_reset()
1973 usb_free_coherent(ftdi->udev, i, buf, urb->transfer_dma); in ftdi_elan_synchronize_reset()
1981 static int ftdi_elan_synchronize(struct usb_ftdi *ftdi) in ftdi_elan_synchronize() argument
1988 retval = ftdi_elan_flush_input_fifo(ftdi); in ftdi_elan_synchronize()
1991 ftdi->bulk_in_left = 0; in ftdi_elan_synchronize()
1992 ftdi->bulk_in_last = -1; in ftdi_elan_synchronize()
1996 retval = ftdi_elan_synchronize_flush(ftdi); in ftdi_elan_synchronize()
1999 retval = ftdi_elan_flush_input_fifo(ftdi); in ftdi_elan_synchronize()
2002 reset:retval = ftdi_elan_synchronize_reset(ftdi); in ftdi_elan_synchronize()
2009 retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_synchronize()
2010 usb_rcvbulkpipe(ftdi->udev, in ftdi_elan_synchronize()
2011 ftdi->bulk_in_endpointAddr), in ftdi_elan_synchronize()
2012 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_synchronize()
2018 char *b = ftdi->bulk_in_buffer; in ftdi_elan_synchronize()
2040 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2045 unsigned char s1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_synchronize()
2046 unsigned char s2 = ftdi->bulk_in_buffer[1]; in ftdi_elan_synchronize()
2056 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2063 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2071 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2078 dev_err(&ftdi->udev->dev, "TIMED OUT retry limit reached\n"); in ftdi_elan_synchronize()
2085 dev_err(&ftdi->udev->dev, "empty packet retry limit reached\n"); in ftdi_elan_synchronize()
2090 dev_err(&ftdi->udev->dev, "error = %d\n", in ftdi_elan_synchronize()
2095 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2101 dev_err(&ftdi->udev->dev, "failed to synchronize\n"); in ftdi_elan_synchronize()
2105 static int ftdi_elan_stuck_waiting(struct usb_ftdi *ftdi) in ftdi_elan_stuck_waiting() argument
2112 int retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_stuck_waiting()
2113 usb_rcvbulkpipe(ftdi->udev, ftdi->bulk_in_endpointAddr), in ftdi_elan_stuck_waiting()
2114 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_stuck_waiting()
2120 char *b = ftdi->bulk_in_buffer; in ftdi_elan_stuck_waiting()
2136 char s1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_stuck_waiting()
2137 char s2 = ftdi->bulk_in_buffer[1]; in ftdi_elan_stuck_waiting()
2146 char b1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_stuck_waiting()
2147 dev_err(&ftdi->udev->dev, "only one byte flushed from FTDI = %02X\n", b1); in ftdi_elan_stuck_waiting()
2152 dev_err(&ftdi->udev->dev, "STATUS ERROR retry limit reached\n"); in ftdi_elan_stuck_waiting()
2159 dev_err(&ftdi->udev->dev, "TIMED OUT retry limit reached\n"); in ftdi_elan_stuck_waiting()
2166 dev_err(&ftdi->udev->dev, "empty packet retry limit reached\n"); in ftdi_elan_stuck_waiting()
2170 dev_err(&ftdi->udev->dev, "error = %d\n", retval); in ftdi_elan_stuck_waiting()
2177 static int ftdi_elan_checkingPCI(struct usb_ftdi *ftdi) in ftdi_elan_checkingPCI() argument
2179 int UxxxStatus = ftdi_elan_read_reg(ftdi, &ftdi->controlreg); in ftdi_elan_checkingPCI()
2182 if (ftdi->controlreg & 0x00400000) { in ftdi_elan_checkingPCI()
2183 if (ftdi->card_ejected) { in ftdi_elan_checkingPCI()
2185 ftdi->card_ejected = 1; in ftdi_elan_checkingPCI()
2186 dev_err(&ftdi->udev->dev, "CARD EJECTED - controlreg = %08X\n", in ftdi_elan_checkingPCI()
2187 ftdi->controlreg); in ftdi_elan_checkingPCI()
2191 u8 fn = ftdi->function - 1; in ftdi_elan_checkingPCI()
2197 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_checkingPCI()
2203 if (pciVID == ftdi->platform_data.vendor && pciPID == in ftdi_elan_checkingPCI()
2204 ftdi->platform_data.device) { in ftdi_elan_checkingPCI()
2207 dev_err(&ftdi->udev->dev, "vendor=%04X pciVID=%04X device=%04X pciPID=%04X\n", in ftdi_elan_checkingPCI()
2208 ftdi->platform_data.vendor, pciVID, in ftdi_elan_checkingPCI()
2209 ftdi->platform_data.device, pciPID); in ftdi_elan_checkingPCI()
2216 #define ftdi_read_pcimem(ftdi, member, data) ftdi_elan_read_pcimem(ftdi, \ argument
2218 #define ftdi_write_pcimem(ftdi, member, data) ftdi_elan_write_pcimem(ftdi, \ argument
2224 static int ftdi_elan_check_controller(struct usb_ftdi *ftdi, int quirk) in ftdi_elan_check_controller() argument
2242 retval = ftdi_write_pcimem(ftdi, intrdisable, OHCI_INTR_MIE); in ftdi_elan_check_controller()
2245 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2248 retval = ftdi_read_pcimem(ftdi, roothub.a, &rh_a); in ftdi_elan_check_controller()
2252 retval = ftdi_read_pcimem(ftdi, fminterval, &hc_fminterval); in ftdi_elan_check_controller()
2259 retval = ftdi_read_pcimem(ftdi, control, &hc_control); in ftdi_elan_check_controller()
2278 retval = ftdi_write_pcimem(ftdi, control, hc_control); in ftdi_elan_check_controller()
2281 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2285 retval = ftdi_read_pcimem(ftdi, roothub.a, &roothub_a); in ftdi_elan_check_controller()
2290 retval = ftdi_write_pcimem(ftdi, in ftdi_elan_check_controller()
2296 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2299 retry:retval = ftdi_read_pcimem(ftdi, cmdstatus, &status); in ftdi_elan_check_controller()
2302 retval = ftdi_write_pcimem(ftdi, cmdstatus, OHCI_HCR); in ftdi_elan_check_controller()
2306 retval = ftdi_read_pcimem(ftdi, cmdstatus, &status); in ftdi_elan_check_controller()
2311 dev_err(&ftdi->udev->dev, "USB HC reset timed out!\n"); in ftdi_elan_check_controller()
2320 retval = ftdi_write_pcimem(ftdi, control, hc_control); in ftdi_elan_check_controller()
2323 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2327 retval = ftdi_write_pcimem(ftdi, ed_controlhead, 0x00000000); in ftdi_elan_check_controller()
2330 retval = ftdi_write_pcimem(ftdi, ed_bulkhead, 0x11000000); in ftdi_elan_check_controller()
2333 retval = ftdi_write_pcimem(ftdi, hcca, 0x00000000); in ftdi_elan_check_controller()
2336 retval = ftdi_read_pcimem(ftdi, fminterval, &fminterval); in ftdi_elan_check_controller()
2339 retval = ftdi_write_pcimem(ftdi, fminterval, in ftdi_elan_check_controller()
2343 retval = ftdi_write_pcimem(ftdi, periodicstart, in ftdi_elan_check_controller()
2347 retval = ftdi_read_pcimem(ftdi, fminterval, &fminterval); in ftdi_elan_check_controller()
2350 retval = ftdi_read_pcimem(ftdi, periodicstart, &periodicstart); in ftdi_elan_check_controller()
2358 dev_err(&ftdi->udev->dev, "init err(%08x %04x)\n", in ftdi_elan_check_controller()
2363 retval = ftdi_write_pcimem(ftdi, control, hc_control); in ftdi_elan_check_controller()
2366 retval = ftdi_write_pcimem(ftdi, cmdstatus, OHCI_BLF); in ftdi_elan_check_controller()
2369 retval = ftdi_read_pcimem(ftdi, cmdstatus, &cmdstatus); in ftdi_elan_check_controller()
2372 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2375 retval = ftdi_write_pcimem(ftdi, roothub.status, RH_HS_DRWE); in ftdi_elan_check_controller()
2378 retval = ftdi_write_pcimem(ftdi, intrstatus, mask); in ftdi_elan_check_controller()
2381 retval = ftdi_write_pcimem(ftdi, intrdisable, in ftdi_elan_check_controller()
2387 retval = ftdi_read_pcimem(ftdi, roothub.a, &roothub_a); in ftdi_elan_check_controller()
2394 retval = ftdi_write_pcimem(ftdi, roothub.a, roothub_a); in ftdi_elan_check_controller()
2399 retval = ftdi_write_pcimem(ftdi, roothub.a, roothub_a); in ftdi_elan_check_controller()
2403 retval = ftdi_write_pcimem(ftdi, roothub.status, RH_HS_LPSC); in ftdi_elan_check_controller()
2406 retval = ftdi_write_pcimem(ftdi, roothub.b, in ftdi_elan_check_controller()
2410 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2416 retval = ftdi_read_pcimem(ftdi, roothub.portstatus[temp], in ftdi_elan_check_controller()
2426 static int ftdi_elan_setup_controller(struct usb_ftdi *ftdi, int fn) in ftdi_elan_setup_controller() argument
2433 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000025FL | 0x2800); in ftdi_elan_setup_controller()
2437 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2441 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2445 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2449 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2454 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2460 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0x00, in ftdi_elan_setup_controller()
2464 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2469 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0x00, in ftdi_elan_setup_controller()
2473 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2478 UxxxStatus = ftdi_elan_read_pcimem(ftdi, reg, 0, &pcidata); in ftdi_elan_setup_controller()
2485 static int ftdi_elan_close_controller(struct usb_ftdi *ftdi, int fn) in ftdi_elan_close_controller() argument
2492 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000025FL | 0x2800); in ftdi_elan_close_controller()
2496 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2500 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2504 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2508 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2513 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2519 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0x00, in ftdi_elan_close_controller()
2523 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2528 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0x00, in ftdi_elan_close_controller()
2532 return ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, &pcidata); in ftdi_elan_close_controller()
2535 static int ftdi_elan_found_controller(struct usb_ftdi *ftdi, int fn, int quirk) in ftdi_elan_found_controller() argument
2539 UxxxStatus = ftdi_elan_setup_controller(ftdi, fn); in ftdi_elan_found_controller()
2542 result = ftdi_elan_check_controller(ftdi, quirk); in ftdi_elan_found_controller()
2543 UxxxStatus = ftdi_elan_close_controller(ftdi, fn); in ftdi_elan_found_controller()
2549 static int ftdi_elan_enumeratePCI(struct usb_ftdi *ftdi) in ftdi_elan_enumeratePCI() argument
2554 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2557 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x00000000L); in ftdi_elan_enumeratePCI()
2561 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x00000200L | 0x100); in ftdi_elan_enumeratePCI()
2564 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x00000200L | 0x500); in ftdi_elan_enumeratePCI()
2567 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2570 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000020CL | 0x000); in ftdi_elan_enumeratePCI()
2573 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000020DL | 0x000); in ftdi_elan_enumeratePCI()
2577 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000020FL | 0x000); in ftdi_elan_enumeratePCI()
2580 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2583 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000025FL | 0x800); in ftdi_elan_enumeratePCI()
2586 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2589 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2600 static int ftdi_elan_setupOHCI(struct usb_ftdi *ftdi) in ftdi_elan_setupOHCI() argument
2610 ftdi->function = 0; in ftdi_elan_setupOHCI()
2616 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setupOHCI()
2623 devices = ftdi_elan_found_controller(ftdi, fn, 0); in ftdi_elan_setupOHCI()
2627 devices = ftdi_elan_found_controller(ftdi, fn, 0); in ftdi_elan_setupOHCI()
2630 devices = ftdi_elan_found_controller(ftdi, fn, 0); in ftdi_elan_setupOHCI()
2634 devices = ftdi_elan_found_controller(ftdi, fn, 0); in ftdi_elan_setupOHCI()
2637 devices = ftdi_elan_found_controller(ftdi, fn, in ftdi_elan_setupOHCI()
2641 devices = ftdi_elan_found_controller(ftdi, fn, in ftdi_elan_setupOHCI()
2649 ftdi->function = fn + 1; in ftdi_elan_setupOHCI()
2650 ftdi->platform_data.vendor = pciVID; in ftdi_elan_setupOHCI()
2651 ftdi->platform_data.device = pciPID; in ftdi_elan_setupOHCI()
2654 if (ftdi->function > 0) { in ftdi_elan_setupOHCI()
2655 return ftdi_elan_setup_controller(ftdi, ftdi->function - 1); in ftdi_elan_setupOHCI()
2661 ftdi->enumerated = 0; in ftdi_elan_setupOHCI()
2676 struct usb_ftdi *ftdi; in ftdi_elan_probe() local
2678 ftdi = kzalloc(sizeof(struct usb_ftdi), GFP_KERNEL); in ftdi_elan_probe()
2679 if (!ftdi) in ftdi_elan_probe()
2683 list_add_tail(&ftdi->ftdi_list, &ftdi_static_list); in ftdi_elan_probe()
2684 ftdi->sequence_num = ++ftdi_instances; in ftdi_elan_probe()
2686 ftdi_elan_init_kref(ftdi); in ftdi_elan_probe()
2687 sema_init(&ftdi->sw_lock, 1); in ftdi_elan_probe()
2688 ftdi->udev = usb_get_dev(interface_to_usbdev(interface)); in ftdi_elan_probe()
2689 ftdi->interface = interface; in ftdi_elan_probe()
2690 mutex_init(&ftdi->u132_lock); in ftdi_elan_probe()
2691 ftdi->expected = 4; in ftdi_elan_probe()
2697 dev_err(&ftdi->udev->dev, "Could not find both bulk-in and bulk-out endpoints\n"); in ftdi_elan_probe()
2701 ftdi->bulk_in_size = usb_endpoint_maxp(bulk_in); in ftdi_elan_probe()
2702 ftdi->bulk_in_endpointAddr = bulk_in->bEndpointAddress; in ftdi_elan_probe()
2703 ftdi->bulk_in_buffer = kmalloc(ftdi->bulk_in_size, GFP_KERNEL); in ftdi_elan_probe()
2704 if (!ftdi->bulk_in_buffer) { in ftdi_elan_probe()
2709 ftdi->bulk_out_endpointAddr = bulk_out->bEndpointAddress; in ftdi_elan_probe()
2711 dev_info(&ftdi->udev->dev, "interface %d has I=%02X O=%02X\n", in ftdi_elan_probe()
2712 iface_desc->desc.bInterfaceNumber, ftdi->bulk_in_endpointAddr, in ftdi_elan_probe()
2713 ftdi->bulk_out_endpointAddr); in ftdi_elan_probe()
2714 usb_set_intfdata(interface, ftdi); in ftdi_elan_probe()
2716 ftdi->bulk_in_endpointAddr == 0x81 && in ftdi_elan_probe()
2717 ftdi->bulk_out_endpointAddr == 0x02) { in ftdi_elan_probe()
2720 dev_err(&ftdi->udev->dev, "Not able to get a minor for this device\n"); in ftdi_elan_probe()
2725 ftdi->class = &ftdi_elan_jtag_class; in ftdi_elan_probe()
2726 dev_info(&ftdi->udev->dev, "USB FDTI=%p JTAG interface %d now attached to ftdi%d\n", in ftdi_elan_probe()
2727 ftdi, iface_desc->desc.bInterfaceNumber, in ftdi_elan_probe()
2732 ftdi->bulk_in_endpointAddr == 0x83 && in ftdi_elan_probe()
2733 ftdi->bulk_out_endpointAddr == 0x04) { in ftdi_elan_probe()
2734 ftdi->class = NULL; in ftdi_elan_probe()
2735 dev_info(&ftdi->udev->dev, "USB FDTI=%p ELAN interface %d now activated\n", in ftdi_elan_probe()
2736 ftdi, iface_desc->desc.bInterfaceNumber); in ftdi_elan_probe()
2737 INIT_DELAYED_WORK(&ftdi->status_work, ftdi_elan_status_work); in ftdi_elan_probe()
2738 INIT_DELAYED_WORK(&ftdi->command_work, ftdi_elan_command_work); in ftdi_elan_probe()
2739 INIT_DELAYED_WORK(&ftdi->respond_work, ftdi_elan_respond_work); in ftdi_elan_probe()
2740 ftdi_status_queue_work(ftdi, msecs_to_jiffies(3 *1000)); in ftdi_elan_probe()
2743 dev_err(&ftdi->udev->dev, in ftdi_elan_probe()
2748 error:if (ftdi) { in ftdi_elan_probe()
2749 ftdi_elan_put_kref(ftdi); in ftdi_elan_probe()
2756 struct usb_ftdi *ftdi = usb_get_intfdata(interface); in ftdi_elan_disconnect() local
2757 ftdi->disconnected += 1; in ftdi_elan_disconnect()
2758 if (ftdi->class) { in ftdi_elan_disconnect()
2760 struct usb_class_driver *class = ftdi->class; in ftdi_elan_disconnect()
2763 dev_info(&ftdi->udev->dev, "USB FTDI U132 jtag interface on minor %d now disconnected\n", in ftdi_elan_disconnect()
2766 ftdi_status_cancel_work(ftdi); in ftdi_elan_disconnect()
2767 ftdi_command_cancel_work(ftdi); in ftdi_elan_disconnect()
2768 ftdi_response_cancel_work(ftdi); in ftdi_elan_disconnect()
2769 ftdi_elan_abandon_completions(ftdi); in ftdi_elan_disconnect()
2770 ftdi_elan_abandon_targets(ftdi); in ftdi_elan_disconnect()
2771 if (ftdi->registered) { in ftdi_elan_disconnect()
2772 platform_device_unregister(&ftdi->platform_dev); in ftdi_elan_disconnect()
2773 ftdi->synchronized = 0; in ftdi_elan_disconnect()
2774 ftdi->enumerated = 0; in ftdi_elan_disconnect()
2775 ftdi->initialized = 0; in ftdi_elan_disconnect()
2776 ftdi->registered = 0; in ftdi_elan_disconnect()
2778 ftdi->disconnected += 1; in ftdi_elan_disconnect()
2780 dev_info(&ftdi->udev->dev, "USB FTDI U132 host controller interface now disconnected\n"); in ftdi_elan_disconnect()
2782 ftdi_elan_put_kref(ftdi); in ftdi_elan_disconnect()
2807 struct usb_ftdi *ftdi; in ftdi_elan_exit() local
2811 list_for_each_entry_safe(ftdi, temp, &ftdi_static_list, ftdi_list) { in ftdi_elan_exit()
2812 ftdi_status_cancel_work(ftdi); in ftdi_elan_exit()
2813 ftdi_command_cancel_work(ftdi); in ftdi_elan_exit()
2814 ftdi_response_cancel_work(ftdi); in ftdi_elan_exit()