Lines Matching refs:ftdi

202 	struct usb_ftdi *ftdi = kref_to_usb_ftdi(kref);  in ftdi_elan_delete()  local
203 dev_warn(&ftdi->udev->dev, "FREEING ftdi=%p\n", ftdi); in ftdi_elan_delete()
204 usb_put_dev(ftdi->udev); in ftdi_elan_delete()
205 ftdi->disconnected += 1; in ftdi_elan_delete()
207 list_del_init(&ftdi->ftdi_list); in ftdi_elan_delete()
210 kfree(ftdi->bulk_in_buffer); in ftdi_elan_delete()
211 ftdi->bulk_in_buffer = NULL; in ftdi_elan_delete()
214 static void ftdi_elan_put_kref(struct usb_ftdi *ftdi) in ftdi_elan_put_kref() argument
216 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_elan_put_kref()
219 static void ftdi_elan_get_kref(struct usb_ftdi *ftdi) in ftdi_elan_get_kref() argument
221 kref_get(&ftdi->kref); in ftdi_elan_get_kref()
224 static void ftdi_elan_init_kref(struct usb_ftdi *ftdi) in ftdi_elan_init_kref() argument
226 kref_init(&ftdi->kref); in ftdi_elan_init_kref()
229 static void ftdi_status_requeue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_status_requeue_work() argument
231 if (!queue_delayed_work(status_queue, &ftdi->status_work, delta)) in ftdi_status_requeue_work()
232 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_status_requeue_work()
235 static void ftdi_status_queue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_status_queue_work() argument
237 if (queue_delayed_work(status_queue, &ftdi->status_work, delta)) in ftdi_status_queue_work()
238 kref_get(&ftdi->kref); in ftdi_status_queue_work()
241 static void ftdi_status_cancel_work(struct usb_ftdi *ftdi) in ftdi_status_cancel_work() argument
243 if (cancel_delayed_work(&ftdi->status_work)) in ftdi_status_cancel_work()
244 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_status_cancel_work()
247 static void ftdi_command_requeue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_command_requeue_work() argument
249 if (!queue_delayed_work(command_queue, &ftdi->command_work, delta)) in ftdi_command_requeue_work()
250 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_command_requeue_work()
253 static void ftdi_command_queue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_command_queue_work() argument
255 if (queue_delayed_work(command_queue, &ftdi->command_work, delta)) in ftdi_command_queue_work()
256 kref_get(&ftdi->kref); in ftdi_command_queue_work()
259 static void ftdi_command_cancel_work(struct usb_ftdi *ftdi) in ftdi_command_cancel_work() argument
261 if (cancel_delayed_work(&ftdi->command_work)) in ftdi_command_cancel_work()
262 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_command_cancel_work()
265 static void ftdi_response_requeue_work(struct usb_ftdi *ftdi, in ftdi_response_requeue_work() argument
268 if (!queue_delayed_work(respond_queue, &ftdi->respond_work, delta)) in ftdi_response_requeue_work()
269 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_response_requeue_work()
272 static void ftdi_respond_queue_work(struct usb_ftdi *ftdi, unsigned int delta) in ftdi_respond_queue_work() argument
274 if (queue_delayed_work(respond_queue, &ftdi->respond_work, delta)) in ftdi_respond_queue_work()
275 kref_get(&ftdi->kref); in ftdi_respond_queue_work()
278 static void ftdi_response_cancel_work(struct usb_ftdi *ftdi) in ftdi_response_cancel_work() argument
280 if (cancel_delayed_work(&ftdi->respond_work)) in ftdi_response_cancel_work()
281 kref_put(&ftdi->kref, ftdi_elan_delete); in ftdi_response_cancel_work()
286 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in ftdi_elan_gone_away() local
287 ftdi->gone_away += 1; in ftdi_elan_gone_away()
288 ftdi_elan_put_kref(ftdi); in ftdi_elan_gone_away()
298 static void ftdi_elan_do_callback(struct usb_ftdi *ftdi,
300 static void ftdi_elan_kick_command_queue(struct usb_ftdi *ftdi);
301 static void ftdi_elan_kick_respond_queue(struct usb_ftdi *ftdi);
302 static int ftdi_elan_setupOHCI(struct usb_ftdi *ftdi);
303 static int ftdi_elan_checkingPCI(struct usb_ftdi *ftdi);
304 static int ftdi_elan_enumeratePCI(struct usb_ftdi *ftdi);
305 static int ftdi_elan_synchronize(struct usb_ftdi *ftdi);
306 static int ftdi_elan_stuck_waiting(struct usb_ftdi *ftdi);
307 static int ftdi_elan_command_engine(struct usb_ftdi *ftdi);
308 static int ftdi_elan_respond_engine(struct usb_ftdi *ftdi);
309 static int ftdi_elan_hcd_init(struct usb_ftdi *ftdi) in ftdi_elan_hcd_init() argument
312 if (ftdi->platform_dev.dev.parent) in ftdi_elan_hcd_init()
314 ftdi_elan_get_kref(ftdi); in ftdi_elan_hcd_init()
315 ftdi->platform_data.potpg = 100; in ftdi_elan_hcd_init()
316 ftdi->platform_data.reset = NULL; in ftdi_elan_hcd_init()
317 ftdi->platform_dev.id = ftdi->sequence_num; in ftdi_elan_hcd_init()
318 ftdi->platform_dev.resource = ftdi->resources; in ftdi_elan_hcd_init()
319 ftdi->platform_dev.num_resources = ARRAY_SIZE(ftdi->resources); in ftdi_elan_hcd_init()
320 ftdi->platform_dev.dev.platform_data = &ftdi->platform_data; in ftdi_elan_hcd_init()
321 ftdi->platform_dev.dev.parent = NULL; in ftdi_elan_hcd_init()
322 ftdi->platform_dev.dev.release = ftdi_release_platform_dev; in ftdi_elan_hcd_init()
323 ftdi->platform_dev.dev.dma_mask = NULL; in ftdi_elan_hcd_init()
324 snprintf(ftdi->device_name, sizeof(ftdi->device_name), "u132_hcd"); in ftdi_elan_hcd_init()
325 ftdi->platform_dev.name = ftdi->device_name; in ftdi_elan_hcd_init()
326 dev_info(&ftdi->udev->dev, "requesting module '%s'\n", "u132_hcd"); in ftdi_elan_hcd_init()
328 dev_info(&ftdi->udev->dev, "registering '%s'\n", in ftdi_elan_hcd_init()
329 ftdi->platform_dev.name); in ftdi_elan_hcd_init()
330 result = platform_device_register(&ftdi->platform_dev); in ftdi_elan_hcd_init()
334 static void ftdi_elan_abandon_completions(struct usb_ftdi *ftdi) in ftdi_elan_abandon_completions() argument
336 mutex_lock(&ftdi->u132_lock); in ftdi_elan_abandon_completions()
337 while (ftdi->respond_next > ftdi->respond_head) { in ftdi_elan_abandon_completions()
338 struct u132_respond *respond = &ftdi->respond[RESPOND_MASK & in ftdi_elan_abandon_completions()
339 ftdi->respond_head++]; in ftdi_elan_abandon_completions()
343 } mutex_unlock(&ftdi->u132_lock); in ftdi_elan_abandon_completions()
346 static void ftdi_elan_abandon_targets(struct usb_ftdi *ftdi) in ftdi_elan_abandon_targets() argument
349 mutex_lock(&ftdi->u132_lock); in ftdi_elan_abandon_targets()
351 struct u132_target *target = &ftdi->target[ed_number]; in ftdi_elan_abandon_targets()
354 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_abandon_targets()
355 ftdi_elan_do_callback(ftdi, target, NULL, 0); in ftdi_elan_abandon_targets()
356 mutex_lock(&ftdi->u132_lock); in ftdi_elan_abandon_targets()
359 ftdi->received = 0; in ftdi_elan_abandon_targets()
360 ftdi->expected = 4; in ftdi_elan_abandon_targets()
361 ftdi->ed_found = 0; in ftdi_elan_abandon_targets()
362 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_abandon_targets()
365 static void ftdi_elan_flush_targets(struct usb_ftdi *ftdi) in ftdi_elan_flush_targets() argument
368 mutex_lock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
370 struct u132_target *target = &ftdi->target[ed_number]; in ftdi_elan_flush_targets()
373 int command_size = ftdi->command_next - in ftdi_elan_flush_targets()
374 ftdi->command_head; in ftdi_elan_flush_targets()
376 struct u132_command *command = &ftdi->command[ in ftdi_elan_flush_targets()
377 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_flush_targets()
385 ftdi->command_next += 1; in ftdi_elan_flush_targets()
386 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_flush_targets()
388 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
390 mutex_lock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
395 int command_size = ftdi->command_next - in ftdi_elan_flush_targets()
396 ftdi->command_head; in ftdi_elan_flush_targets()
398 struct u132_command *command = &ftdi->command[ in ftdi_elan_flush_targets()
399 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_flush_targets()
407 ftdi->command_next += 1; in ftdi_elan_flush_targets()
408 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_flush_targets()
410 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
412 mutex_lock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
417 ftdi->received = 0; in ftdi_elan_flush_targets()
418 ftdi->expected = 4; in ftdi_elan_flush_targets()
419 ftdi->ed_found = 0; in ftdi_elan_flush_targets()
420 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_flush_targets()
423 static void ftdi_elan_cancel_targets(struct usb_ftdi *ftdi) in ftdi_elan_cancel_targets() argument
426 mutex_lock(&ftdi->u132_lock); in ftdi_elan_cancel_targets()
428 struct u132_target *target = &ftdi->target[ed_number]; in ftdi_elan_cancel_targets()
431 int command_size = ftdi->command_next - in ftdi_elan_cancel_targets()
432 ftdi->command_head; in ftdi_elan_cancel_targets()
434 struct u132_command *command = &ftdi->command[ in ftdi_elan_cancel_targets()
435 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_cancel_targets()
443 ftdi->command_next += 1; in ftdi_elan_cancel_targets()
444 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_cancel_targets()
446 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_cancel_targets()
448 mutex_lock(&ftdi->u132_lock); in ftdi_elan_cancel_targets()
453 ftdi->received = 0; in ftdi_elan_cancel_targets()
454 ftdi->expected = 4; in ftdi_elan_cancel_targets()
455 ftdi->ed_found = 0; in ftdi_elan_cancel_targets()
456 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_cancel_targets()
459 static void ftdi_elan_kick_command_queue(struct usb_ftdi *ftdi) in ftdi_elan_kick_command_queue() argument
461 ftdi_command_queue_work(ftdi, 0); in ftdi_elan_kick_command_queue()
466 struct usb_ftdi *ftdi = in ftdi_elan_command_work() local
469 if (ftdi->disconnected > 0) { in ftdi_elan_command_work()
470 ftdi_elan_put_kref(ftdi); in ftdi_elan_command_work()
473 int retval = ftdi_elan_command_engine(ftdi); in ftdi_elan_command_work()
475 ftdi->disconnected += 1; in ftdi_elan_command_work()
477 ftdi->disconnected += 1; in ftdi_elan_command_work()
479 dev_err(&ftdi->udev->dev, "command error %d\n", retval); in ftdi_elan_command_work()
480 ftdi_command_requeue_work(ftdi, msecs_to_jiffies(10)); in ftdi_elan_command_work()
485 static void ftdi_elan_kick_respond_queue(struct usb_ftdi *ftdi) in ftdi_elan_kick_respond_queue() argument
487 ftdi_respond_queue_work(ftdi, 0); in ftdi_elan_kick_respond_queue()
492 struct usb_ftdi *ftdi = in ftdi_elan_respond_work() local
494 if (ftdi->disconnected > 0) { in ftdi_elan_respond_work()
495 ftdi_elan_put_kref(ftdi); in ftdi_elan_respond_work()
498 int retval = ftdi_elan_respond_engine(ftdi); in ftdi_elan_respond_work()
501 ftdi->disconnected += 1; in ftdi_elan_respond_work()
503 ftdi->disconnected += 1; in ftdi_elan_respond_work()
505 ftdi->disconnected += 1; in ftdi_elan_respond_work()
507 ftdi->disconnected += 1; in ftdi_elan_respond_work()
508 dev_err(&ftdi->udev->dev, "respond error %d\n", retval); in ftdi_elan_respond_work()
510 if (ftdi->disconnected > 0) { in ftdi_elan_respond_work()
511 ftdi_elan_abandon_completions(ftdi); in ftdi_elan_respond_work()
512 ftdi_elan_abandon_targets(ftdi); in ftdi_elan_respond_work()
514 ftdi_response_requeue_work(ftdi, msecs_to_jiffies(10)); in ftdi_elan_respond_work()
527 struct usb_ftdi *ftdi = in ftdi_elan_status_work() local
530 if (ftdi->disconnected > 0) { in ftdi_elan_status_work()
531 ftdi_elan_put_kref(ftdi); in ftdi_elan_status_work()
533 } else if (ftdi->synchronized == 0) { in ftdi_elan_status_work()
534 down(&ftdi->sw_lock); in ftdi_elan_status_work()
535 if (ftdi_elan_synchronize(ftdi) == 0) { in ftdi_elan_status_work()
536 ftdi->synchronized = 1; in ftdi_elan_status_work()
537 ftdi_command_queue_work(ftdi, 1); in ftdi_elan_status_work()
538 ftdi_respond_queue_work(ftdi, 1); in ftdi_elan_status_work()
539 up(&ftdi->sw_lock); in ftdi_elan_status_work()
542 dev_err(&ftdi->udev->dev, "synchronize failed\n"); in ftdi_elan_status_work()
543 up(&ftdi->sw_lock); in ftdi_elan_status_work()
546 } else if (ftdi->stuck_status > 0) { in ftdi_elan_status_work()
547 if (ftdi_elan_stuck_waiting(ftdi) == 0) { in ftdi_elan_status_work()
548 ftdi->stuck_status = 0; in ftdi_elan_status_work()
549 ftdi->synchronized = 0; in ftdi_elan_status_work()
550 } else if ((ftdi->stuck_status++ % 60) == 1) { in ftdi_elan_status_work()
551 dev_err(&ftdi->udev->dev, "WRONG type of card inserted - please remove\n"); in ftdi_elan_status_work()
553 dev_err(&ftdi->udev->dev, "WRONG type of card inserted - checked %d times\n", in ftdi_elan_status_work()
554 ftdi->stuck_status); in ftdi_elan_status_work()
556 } else if (ftdi->enumerated == 0) { in ftdi_elan_status_work()
557 if (ftdi_elan_enumeratePCI(ftdi) == 0) { in ftdi_elan_status_work()
558 ftdi->enumerated = 1; in ftdi_elan_status_work()
562 } else if (ftdi->initialized == 0) { in ftdi_elan_status_work()
563 if (ftdi_elan_setupOHCI(ftdi) == 0) { in ftdi_elan_status_work()
564 ftdi->initialized = 1; in ftdi_elan_status_work()
567 dev_err(&ftdi->udev->dev, "initialized failed - trying again in 10 seconds\n"); in ftdi_elan_status_work()
570 } else if (ftdi->registered == 0) { in ftdi_elan_status_work()
572 if (ftdi_elan_hcd_init(ftdi) == 0) { in ftdi_elan_status_work()
573 ftdi->registered = 1; in ftdi_elan_status_work()
575 dev_err(&ftdi->udev->dev, "register failed\n"); in ftdi_elan_status_work()
578 if (ftdi_elan_checkingPCI(ftdi) == 0) { in ftdi_elan_status_work()
580 } else if (ftdi->controlreg & 0x00400000) { in ftdi_elan_status_work()
581 if (ftdi->gone_away > 0) { in ftdi_elan_status_work()
582 …dev_err(&ftdi->udev->dev, "PCI device eject confirmed platform_dev.dev.parent=%p platform_dev.dev=… in ftdi_elan_status_work()
583 ftdi->platform_dev.dev.parent, in ftdi_elan_status_work()
584 &ftdi->platform_dev.dev); in ftdi_elan_status_work()
585 platform_device_unregister(&ftdi->platform_dev); in ftdi_elan_status_work()
586 ftdi->platform_dev.dev.parent = NULL; in ftdi_elan_status_work()
587 ftdi->registered = 0; in ftdi_elan_status_work()
588 ftdi->enumerated = 0; in ftdi_elan_status_work()
589 ftdi->card_ejected = 0; in ftdi_elan_status_work()
590 ftdi->initialized = 0; in ftdi_elan_status_work()
591 ftdi->gone_away = 0; in ftdi_elan_status_work()
593 ftdi_elan_flush_targets(ftdi); in ftdi_elan_status_work()
596 dev_err(&ftdi->udev->dev, "PCI device has disappeared\n"); in ftdi_elan_status_work()
597 ftdi_elan_cancel_targets(ftdi); in ftdi_elan_status_work()
599 ftdi->enumerated = 0; in ftdi_elan_status_work()
600 ftdi->initialized = 0; in ftdi_elan_status_work()
603 if (ftdi->disconnected > 0) { in ftdi_elan_status_work()
604 ftdi_elan_put_kref(ftdi); in ftdi_elan_status_work()
607 ftdi_status_requeue_work(ftdi, in ftdi_elan_status_work()
632 struct usb_ftdi *ftdi = usb_get_intfdata(interface); in ftdi_elan_open() local
633 if (!ftdi) { in ftdi_elan_open()
636 if (down_interruptible(&ftdi->sw_lock)) { in ftdi_elan_open()
639 ftdi_elan_get_kref(ftdi); in ftdi_elan_open()
640 file->private_data = ftdi; in ftdi_elan_open()
649 struct usb_ftdi *ftdi = file->private_data; in ftdi_elan_release() local
650 if (ftdi == NULL) in ftdi_elan_release()
652 up(&ftdi->sw_lock); /* decrement the count on our device */ in ftdi_elan_release()
653 ftdi_elan_put_kref(ftdi); in ftdi_elan_release()
672 struct usb_ftdi *ftdi = file->private_data; in ftdi_elan_read() local
673 if (ftdi->disconnected > 0) { in ftdi_elan_read()
677 have:if (ftdi->bulk_in_left > 0) { in ftdi_elan_read()
679 char *p = ++ftdi->bulk_in_last + ftdi->bulk_in_buffer; in ftdi_elan_read()
680 ftdi->bulk_in_left -= 1; in ftdi_elan_read()
697 int retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_read()
698 usb_rcvbulkpipe(ftdi->udev, ftdi->bulk_in_endpointAddr), in ftdi_elan_read()
699 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_read()
702 ftdi->bulk_in_left = packet_bytes - 2; in ftdi_elan_read()
703 ftdi->bulk_in_last = 1; in ftdi_elan_read()
725 struct usb_ftdi *ftdi = urb->context; in ftdi_elan_write_bulk_callback() local
730 dev_err(&ftdi->udev->dev, in ftdi_elan_write_bulk_callback()
737 static int fill_buffer_with_all_queued_commands(struct usb_ftdi *ftdi, in fill_buffer_with_all_queued_commands() argument
743 int i = ftdi->command_head; in fill_buffer_with_all_queued_commands()
745 struct u132_command *command = &ftdi->command[COMMAND_MASK & in fill_buffer_with_all_queued_commands()
764 static int ftdi_elan_total_command_size(struct usb_ftdi *ftdi, int command_size) in ftdi_elan_total_command_size() argument
768 int i = ftdi->command_head; in ftdi_elan_total_command_size()
770 struct u132_command *command = &ftdi->command[COMMAND_MASK & in ftdi_elan_total_command_size()
776 static int ftdi_elan_command_engine(struct usb_ftdi *ftdi) in ftdi_elan_command_engine() argument
783 int command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_command_engine()
786 total_size = ftdi_elan_total_command_size(ftdi, command_size); in ftdi_elan_command_engine()
789 …dev_err(&ftdi->udev->dev, "could not get a urb to write %d commands totaling %d bytes to the Uxxx\… in ftdi_elan_command_engine()
793 buf = usb_alloc_coherent(ftdi->udev, total_size, GFP_KERNEL, in ftdi_elan_command_engine()
796 …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()
801 ed_commands = fill_buffer_with_all_queued_commands(ftdi, buf, in ftdi_elan_command_engine()
803 usb_fill_bulk_urb(urb, ftdi->udev, usb_sndbulkpipe(ftdi->udev, in ftdi_elan_command_engine()
804 ftdi->bulk_out_endpointAddr), buf, total_size, in ftdi_elan_command_engine()
805 ftdi_elan_write_bulk_callback, ftdi); in ftdi_elan_command_engine()
823 …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()
825 usb_free_coherent(ftdi->udev, total_size, buf, urb->transfer_dma); in ftdi_elan_command_engine()
831 ftdi->command_head += command_size; in ftdi_elan_command_engine()
832 ftdi_elan_kick_respond_queue(ftdi); in ftdi_elan_command_engine()
836 static void ftdi_elan_do_callback(struct usb_ftdi *ftdi, in ftdi_elan_do_callback() argument
857 static char *have_ed_set_response(struct usb_ftdi *ftdi, in have_ed_set_response() argument
862 mutex_lock(&ftdi->u132_lock); in have_ed_set_response()
869 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
870 ftdi_elan_do_callback(ftdi, target, 4 + ftdi->response, in have_ed_set_response()
872 ftdi->received = 0; in have_ed_set_response()
873 ftdi->expected = 4; in have_ed_set_response()
874 ftdi->ed_found = 0; in have_ed_set_response()
875 return ftdi->response; in have_ed_set_response()
877 ftdi->expected = 4 + payload; in have_ed_set_response()
878 ftdi->ed_found = 1; in have_ed_set_response()
879 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
885 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
886 ftdi_elan_do_callback(ftdi, target, 4 + ftdi->response, in have_ed_set_response()
888 ftdi->received = 0; in have_ed_set_response()
889 ftdi->expected = 4; in have_ed_set_response()
890 ftdi->ed_found = 0; in have_ed_set_response()
891 return ftdi->response; in have_ed_set_response()
893 ftdi->expected = 4 + payload; in have_ed_set_response()
894 ftdi->ed_found = 1; in have_ed_set_response()
895 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
900 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
901 ftdi_elan_do_callback(ftdi, target, 4 + ftdi->response, in have_ed_set_response()
903 ftdi->received = 0; in have_ed_set_response()
904 ftdi->expected = 4; in have_ed_set_response()
905 ftdi->ed_found = 0; in have_ed_set_response()
906 return ftdi->response; in have_ed_set_response()
909 mutex_unlock(&ftdi->u132_lock); in have_ed_set_response()
910 ftdi_elan_do_callback(ftdi, target, 4 + ftdi->response, in have_ed_set_response()
912 ftdi->received = 0; in have_ed_set_response()
913 ftdi->expected = 4; in have_ed_set_response()
914 ftdi->ed_found = 0; in have_ed_set_response()
915 return ftdi->response; in have_ed_set_response()
919 static char *have_ed_get_response(struct usb_ftdi *ftdi, in have_ed_get_response() argument
923 mutex_lock(&ftdi->u132_lock); in have_ed_get_response()
928 mutex_unlock(&ftdi->u132_lock); in have_ed_get_response()
930 ftdi_elan_do_callback(ftdi, target, NULL, 0); in have_ed_get_response()
932 ftdi->received = 0; in have_ed_get_response()
933 ftdi->expected = 4; in have_ed_get_response()
934 ftdi->ed_found = 0; in have_ed_get_response()
935 return ftdi->response; in have_ed_get_response()
947 static int ftdi_elan_respond_engine(struct usb_ftdi *ftdi) in ftdi_elan_respond_engine() argument
949 u8 *b = ftdi->response + ftdi->received; in ftdi_elan_respond_engine()
956 int retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_respond_engine()
957 usb_rcvbulkpipe(ftdi->udev, ftdi->bulk_in_endpointAddr), in ftdi_elan_respond_engine()
958 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_respond_engine()
963 u8 *c = ftdi->bulk_in_buffer; in ftdi_elan_respond_engine()
973 ftdi->bulk_in_left = packet_bytes - 2; in ftdi_elan_respond_engine()
974 ftdi->bulk_in_last = 1; in ftdi_elan_respond_engine()
978 dev_err(&ftdi->udev->dev, "TIMED OUT with packet_bytes = %d with total %d bytes%s\n", in ftdi_elan_respond_engine()
982 dev_err(&ftdi->udev->dev, "ONLY %d bytes%s\n", in ftdi_elan_respond_engine()
986 dev_err(&ftdi->udev->dev, "TIMED OUT with packet_bytes = %d with total %d bytes%s\n", in ftdi_elan_respond_engine()
991 dev_err(&ftdi->udev->dev, "error = %d with packet_bytes = %d with total %d bytes%s\n", in ftdi_elan_respond_engine()
995 dev_err(&ftdi->udev->dev, "error = %d with packet_bytes = %d with total %d bytes%s\n", in ftdi_elan_respond_engine()
999 unsigned char s0 = ftdi->bulk_in_buffer[0]; in ftdi_elan_respond_engine()
1000 unsigned char s1 = ftdi->bulk_in_buffer[1]; in ftdi_elan_respond_engine()
1033 have:if (ftdi->bulk_in_left > 0) { in ftdi_elan_respond_engine()
1034 u8 c = ftdi->bulk_in_buffer[++ftdi->bulk_in_last]; in ftdi_elan_respond_engine()
1036 ftdi->bulk_in_left -= 1; in ftdi_elan_respond_engine()
1037 if (ftdi->received == 0 && c == 0xFF) { in ftdi_elan_respond_engine()
1041 if (++ftdi->received < ftdi->expected) { in ftdi_elan_respond_engine()
1043 } else if (ftdi->ed_found) { in ftdi_elan_respond_engine()
1044 int ed_number = (ftdi->response[0] >> 5) & 0x03; in ftdi_elan_respond_engine()
1045 u16 ed_length = (ftdi->response[2] << 8) | in ftdi_elan_respond_engine()
1046 ftdi->response[1]; in ftdi_elan_respond_engine()
1047 struct u132_target *target = &ftdi->target[ed_number]; in ftdi_elan_respond_engine()
1052 u8 *c = 4 + ftdi->response; in ftdi_elan_respond_engine()
1061 ftdi_elan_do_callback(ftdi, target, 4 + ftdi->response, in ftdi_elan_respond_engine()
1063 ftdi->received = 0; in ftdi_elan_respond_engine()
1064 ftdi->expected = 4; in ftdi_elan_respond_engine()
1065 ftdi->ed_found = 0; in ftdi_elan_respond_engine()
1066 b = ftdi->response; in ftdi_elan_respond_engine()
1068 } else if (ftdi->expected == 8) { in ftdi_elan_respond_engine()
1070 int respond_head = ftdi->respond_head++; in ftdi_elan_respond_engine()
1071 struct u132_respond *respond = &ftdi->respond[ in ftdi_elan_respond_engine()
1073 u32 data = ftdi->response[7]; in ftdi_elan_respond_engine()
1075 data |= ftdi->response[6]; in ftdi_elan_respond_engine()
1077 data |= ftdi->response[5]; in ftdi_elan_respond_engine()
1079 data |= ftdi->response[4]; in ftdi_elan_respond_engine()
1083 ftdi->received = 0; in ftdi_elan_respond_engine()
1084 ftdi->expected = 4; in ftdi_elan_respond_engine()
1085 ftdi->ed_found = 0; in ftdi_elan_respond_engine()
1086 b = ftdi->response; in ftdi_elan_respond_engine()
1087 buscmd = (ftdi->response[0] >> 0) & 0x0F; in ftdi_elan_respond_engine()
1093 dev_err(&ftdi->udev->dev, "Uxxx unknown(%0X) value = %08X\n", in ftdi_elan_respond_engine()
1097 if ((ftdi->response[0] & 0x80) == 0x00) { in ftdi_elan_respond_engine()
1098 ftdi->expected = 8; in ftdi_elan_respond_engine()
1101 int ed_number = (ftdi->response[0] >> 5) & 0x03; in ftdi_elan_respond_engine()
1102 int ed_type = (ftdi->response[0] >> 0) & 0x03; in ftdi_elan_respond_engine()
1103 u16 ed_length = (ftdi->response[2] << 8) | in ftdi_elan_respond_engine()
1104 ftdi->response[1]; in ftdi_elan_respond_engine()
1105 struct u132_target *target = &ftdi->target[ in ftdi_elan_respond_engine()
1107 target->halted = (ftdi->response[0] >> 3) & in ftdi_elan_respond_engine()
1109 target->skipped = (ftdi->response[0] >> 2) & in ftdi_elan_respond_engine()
1111 target->toggle_bits = (ftdi->response[3] >> 6) in ftdi_elan_respond_engine()
1113 target->error_count = (ftdi->response[3] >> 4) in ftdi_elan_respond_engine()
1115 target->condition_code = (ftdi->response[ in ftdi_elan_respond_engine()
1117 if ((ftdi->response[0] & 0x10) == 0x00) { in ftdi_elan_respond_engine()
1118 b = have_ed_set_response(ftdi, target, in ftdi_elan_respond_engine()
1123 b = have_ed_get_response(ftdi, target, in ftdi_elan_respond_engine()
1146 struct usb_ftdi *ftdi = file->private_data; in ftdi_elan_write() local
1148 if (ftdi->disconnected > 0) { in ftdi_elan_write()
1159 buf = usb_alloc_coherent(ftdi->udev, count, GFP_KERNEL, in ftdi_elan_write()
1169 usb_fill_bulk_urb(urb, ftdi->udev, usb_sndbulkpipe(ftdi->udev, in ftdi_elan_write()
1170 ftdi->bulk_out_endpointAddr), buf, count, in ftdi_elan_write()
1171 ftdi_elan_write_bulk_callback, ftdi); in ftdi_elan_write()
1175 dev_err(&ftdi->udev->dev, in ftdi_elan_write()
1184 usb_free_coherent(ftdi->udev, count, buf, urb->transfer_dma); in ftdi_elan_write()
1243 static int ftdi_elan_write_reg(struct usb_ftdi *ftdi, u32 data) in ftdi_elan_write_reg() argument
1245 wait:if (ftdi->disconnected > 0) { in ftdi_elan_write_reg()
1249 mutex_lock(&ftdi->u132_lock); in ftdi_elan_write_reg()
1250 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_write_reg()
1252 struct u132_command *command = &ftdi->command[ in ftdi_elan_write_reg()
1253 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_write_reg()
1261 ftdi->command_next += 1; in ftdi_elan_write_reg()
1262 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_write_reg()
1263 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_reg()
1266 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_reg()
1273 static int ftdi_elan_write_config(struct usb_ftdi *ftdi, int config_offset, in ftdi_elan_write_config() argument
1277 wait:if (ftdi->disconnected > 0) { in ftdi_elan_write_config()
1281 mutex_lock(&ftdi->u132_lock); in ftdi_elan_write_config()
1282 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_write_config()
1284 struct u132_command *command = &ftdi->command[ in ftdi_elan_write_config()
1285 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_write_config()
1293 ftdi->command_next += 1; in ftdi_elan_write_config()
1294 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_write_config()
1295 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_config()
1298 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_config()
1305 static int ftdi_elan_write_pcimem(struct usb_ftdi *ftdi, int mem_offset, in ftdi_elan_write_pcimem() argument
1309 wait:if (ftdi->disconnected > 0) { in ftdi_elan_write_pcimem()
1313 mutex_lock(&ftdi->u132_lock); in ftdi_elan_write_pcimem()
1314 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_write_pcimem()
1316 struct u132_command *command = &ftdi->command[ in ftdi_elan_write_pcimem()
1317 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_write_pcimem()
1325 ftdi->command_next += 1; in ftdi_elan_write_pcimem()
1326 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_write_pcimem()
1327 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_pcimem()
1330 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_write_pcimem()
1340 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_write_pcimem() local
1341 return ftdi_elan_write_pcimem(ftdi, mem_offset, width, data); in usb_ftdi_elan_write_pcimem()
1346 static int ftdi_elan_read_reg(struct usb_ftdi *ftdi, u32 *data) in ftdi_elan_read_reg() argument
1348 wait:if (ftdi->disconnected > 0) { in ftdi_elan_read_reg()
1353 mutex_lock(&ftdi->u132_lock); in ftdi_elan_read_reg()
1354 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_read_reg()
1355 respond_size = ftdi->respond_next - ftdi->respond_head; in ftdi_elan_read_reg()
1358 struct u132_command *command = &ftdi->command[ in ftdi_elan_read_reg()
1359 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_read_reg()
1360 struct u132_respond *respond = &ftdi->respond[ in ftdi_elan_read_reg()
1361 RESPOND_MASK & ftdi->respond_next]; in ftdi_elan_read_reg()
1373 ftdi->command_next += 1; in ftdi_elan_read_reg()
1374 ftdi->respond_next += 1; in ftdi_elan_read_reg()
1375 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_read_reg()
1376 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_reg()
1380 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_reg()
1387 static int ftdi_elan_read_config(struct usb_ftdi *ftdi, int config_offset, in ftdi_elan_read_config() argument
1391 wait:if (ftdi->disconnected > 0) { in ftdi_elan_read_config()
1396 mutex_lock(&ftdi->u132_lock); in ftdi_elan_read_config()
1397 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_read_config()
1398 respond_size = ftdi->respond_next - ftdi->respond_head; in ftdi_elan_read_config()
1401 struct u132_command *command = &ftdi->command[ in ftdi_elan_read_config()
1402 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_read_config()
1403 struct u132_respond *respond = &ftdi->respond[ in ftdi_elan_read_config()
1404 RESPOND_MASK & ftdi->respond_next]; in ftdi_elan_read_config()
1417 ftdi->command_next += 1; in ftdi_elan_read_config()
1418 ftdi->respond_next += 1; in ftdi_elan_read_config()
1419 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_read_config()
1420 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_config()
1424 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_config()
1431 static int ftdi_elan_read_pcimem(struct usb_ftdi *ftdi, int mem_offset, in ftdi_elan_read_pcimem() argument
1435 wait:if (ftdi->disconnected > 0) { in ftdi_elan_read_pcimem()
1440 mutex_lock(&ftdi->u132_lock); in ftdi_elan_read_pcimem()
1441 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_read_pcimem()
1442 respond_size = ftdi->respond_next - ftdi->respond_head; in ftdi_elan_read_pcimem()
1445 struct u132_command *command = &ftdi->command[ in ftdi_elan_read_pcimem()
1446 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_read_pcimem()
1447 struct u132_respond *respond = &ftdi->respond[ in ftdi_elan_read_pcimem()
1448 RESPOND_MASK & ftdi->respond_next]; in ftdi_elan_read_pcimem()
1461 ftdi->command_next += 1; in ftdi_elan_read_pcimem()
1462 ftdi->respond_next += 1; in ftdi_elan_read_pcimem()
1463 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_read_pcimem()
1464 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_pcimem()
1468 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_read_pcimem()
1478 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_read_pcimem() local
1479 if (ftdi->initialized == 0) { in usb_ftdi_elan_read_pcimem()
1482 return ftdi_elan_read_pcimem(ftdi, mem_offset, width, data); in usb_ftdi_elan_read_pcimem()
1487 static int ftdi_elan_edset_setup(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_setup() argument
1494 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_setup()
1496 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_setup()
1500 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_setup()
1501 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_setup()
1503 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_setup()
1504 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_setup()
1505 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_setup()
1519 ftdi->command_next += 1; in ftdi_elan_edset_setup()
1520 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_setup()
1521 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_setup()
1524 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_setup()
1537 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_setup() local
1538 return ftdi_elan_edset_setup(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_setup()
1544 static int ftdi_elan_edset_input(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_input() argument
1551 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_input()
1553 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_input()
1557 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_input()
1558 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_input()
1560 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_input()
1561 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_input()
1562 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_input()
1584 ftdi->command_next += 1; in ftdi_elan_edset_input()
1585 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_input()
1586 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_input()
1589 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_input()
1602 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_input() local
1603 return ftdi_elan_edset_input(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_input()
1609 static int ftdi_elan_edset_empty(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_empty() argument
1616 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_empty()
1618 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_empty()
1622 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_empty()
1623 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_empty()
1625 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_empty()
1626 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_empty()
1627 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_empty()
1641 ftdi->command_next += 1; in ftdi_elan_edset_empty()
1642 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_empty()
1643 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_empty()
1646 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_empty()
1659 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_empty() local
1660 return ftdi_elan_edset_empty(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_empty()
1666 static int ftdi_elan_edset_output(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_output() argument
1673 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_output()
1675 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_output()
1679 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_output()
1680 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_output()
1689 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_output()
1690 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_output()
1691 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_output()
1720 ftdi->command_next += 1; in ftdi_elan_edset_output()
1721 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_output()
1722 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_output()
1725 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_output()
1738 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_output() local
1739 return ftdi_elan_edset_output(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_output()
1745 static int ftdi_elan_edset_single(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_single() argument
1752 wait:if (ftdi->disconnected > 0) { in ftdi_elan_edset_single()
1754 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_single()
1758 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_single()
1759 command_size = ftdi->command_next - ftdi->command_head; in ftdi_elan_edset_single()
1763 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_single()
1764 struct u132_command *command = &ftdi->command[ in ftdi_elan_edset_single()
1765 COMMAND_MASK & ftdi->command_next]; in ftdi_elan_edset_single()
1785 ftdi->command_next += 1; in ftdi_elan_edset_single()
1786 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_single()
1787 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_single()
1790 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_single()
1803 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_single() local
1804 return ftdi_elan_edset_single(ftdi, ed_number, endp, urb, address, in usb_ftdi_elan_edset_single()
1810 static int ftdi_elan_edset_flush(struct usb_ftdi *ftdi, u8 ed_number, in ftdi_elan_edset_flush() argument
1814 if (ftdi->disconnected > 0) { in ftdi_elan_edset_flush()
1816 } else if (ftdi->initialized == 0) { in ftdi_elan_edset_flush()
1819 struct u132_target *target = &ftdi->target[ed]; in ftdi_elan_edset_flush()
1820 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1822 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1827 int command_size = ftdi->command_next - in ftdi_elan_edset_flush()
1828 ftdi->command_head; in ftdi_elan_edset_flush()
1831 &ftdi->command[COMMAND_MASK & in ftdi_elan_edset_flush()
1832 ftdi->command_next]; in ftdi_elan_edset_flush()
1841 ftdi->command_next += 1; in ftdi_elan_edset_flush()
1842 ftdi_elan_kick_command_queue(ftdi); in ftdi_elan_edset_flush()
1844 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1846 mutex_lock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1850 mutex_unlock(&ftdi->u132_lock); in ftdi_elan_edset_flush()
1859 struct usb_ftdi *ftdi = platform_device_to_usb_ftdi(pdev); in usb_ftdi_elan_edset_flush() local
1860 return ftdi_elan_edset_flush(ftdi, ed_number, endp); in usb_ftdi_elan_edset_flush()
1865 static int ftdi_elan_flush_input_fifo(struct usb_ftdi *ftdi) in ftdi_elan_flush_input_fifo() argument
1872 int retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_flush_input_fifo()
1873 usb_rcvbulkpipe(ftdi->udev, ftdi->bulk_in_endpointAddr), in ftdi_elan_flush_input_fifo()
1874 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_flush_input_fifo()
1880 char *b = ftdi->bulk_in_buffer; in ftdi_elan_flush_input_fifo()
1896 char s1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_flush_input_fifo()
1897 char s2 = ftdi->bulk_in_buffer[1]; in ftdi_elan_flush_input_fifo()
1903 dev_err(&ftdi->udev->dev, "STATUS ERROR retry limit reached\n"); in ftdi_elan_flush_input_fifo()
1907 char b1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_flush_input_fifo()
1908 dev_err(&ftdi->udev->dev, "only one byte flushed from FTDI = %02X\n", in ftdi_elan_flush_input_fifo()
1913 dev_err(&ftdi->udev->dev, "STATUS ERROR retry limit reached\n"); in ftdi_elan_flush_input_fifo()
1920 dev_err(&ftdi->udev->dev, "TIMED OUT retry limit reached\n"); in ftdi_elan_flush_input_fifo()
1927 dev_err(&ftdi->udev->dev, "empty packet retry limit reached\n"); in ftdi_elan_flush_input_fifo()
1931 dev_err(&ftdi->udev->dev, "error = %d\n", retval); in ftdi_elan_flush_input_fifo()
1943 static int ftdi_elan_synchronize_flush(struct usb_ftdi *ftdi) in ftdi_elan_synchronize_flush() argument
1952 dev_err(&ftdi->udev->dev, "could not alloc a urb for flush sequence\n"); in ftdi_elan_synchronize_flush()
1955 buf = usb_alloc_coherent(ftdi->udev, I, GFP_KERNEL, &urb->transfer_dma); in ftdi_elan_synchronize_flush()
1957 dev_err(&ftdi->udev->dev, "could not get a buffer for flush sequence\n"); in ftdi_elan_synchronize_flush()
1963 usb_fill_bulk_urb(urb, ftdi->udev, usb_sndbulkpipe(ftdi->udev, in ftdi_elan_synchronize_flush()
1964 ftdi->bulk_out_endpointAddr), buf, i, in ftdi_elan_synchronize_flush()
1965 ftdi_elan_write_bulk_callback, ftdi); in ftdi_elan_synchronize_flush()
1969 dev_err(&ftdi->udev->dev, "failed to submit urb containing the flush sequence\n"); in ftdi_elan_synchronize_flush()
1970 usb_free_coherent(ftdi->udev, i, buf, urb->transfer_dma); in ftdi_elan_synchronize_flush()
1983 static int ftdi_elan_synchronize_reset(struct usb_ftdi *ftdi) in ftdi_elan_synchronize_reset() argument
1992 dev_err(&ftdi->udev->dev, "could not get a urb for the reset sequence\n"); in ftdi_elan_synchronize_reset()
1995 buf = usb_alloc_coherent(ftdi->udev, I, GFP_KERNEL, &urb->transfer_dma); in ftdi_elan_synchronize_reset()
1997 dev_err(&ftdi->udev->dev, "could not get a buffer for the reset sequence\n"); in ftdi_elan_synchronize_reset()
2005 usb_fill_bulk_urb(urb, ftdi->udev, usb_sndbulkpipe(ftdi->udev, in ftdi_elan_synchronize_reset()
2006 ftdi->bulk_out_endpointAddr), buf, i, in ftdi_elan_synchronize_reset()
2007 ftdi_elan_write_bulk_callback, ftdi); in ftdi_elan_synchronize_reset()
2011 dev_err(&ftdi->udev->dev, "failed to submit urb containing the reset sequence\n"); in ftdi_elan_synchronize_reset()
2012 usb_free_coherent(ftdi->udev, i, buf, urb->transfer_dma); in ftdi_elan_synchronize_reset()
2020 static int ftdi_elan_synchronize(struct usb_ftdi *ftdi) in ftdi_elan_synchronize() argument
2027 retval = ftdi_elan_flush_input_fifo(ftdi); in ftdi_elan_synchronize()
2030 ftdi->bulk_in_left = 0; in ftdi_elan_synchronize()
2031 ftdi->bulk_in_last = -1; in ftdi_elan_synchronize()
2035 retval = ftdi_elan_synchronize_flush(ftdi); in ftdi_elan_synchronize()
2038 retval = ftdi_elan_flush_input_fifo(ftdi); in ftdi_elan_synchronize()
2041 reset:retval = ftdi_elan_synchronize_reset(ftdi); in ftdi_elan_synchronize()
2048 retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_synchronize()
2049 usb_rcvbulkpipe(ftdi->udev, in ftdi_elan_synchronize()
2050 ftdi->bulk_in_endpointAddr), in ftdi_elan_synchronize()
2051 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_synchronize()
2057 char *b = ftdi->bulk_in_buffer; in ftdi_elan_synchronize()
2079 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2084 unsigned char s1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_synchronize()
2085 unsigned char s2 = ftdi->bulk_in_buffer[1]; in ftdi_elan_synchronize()
2095 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2102 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2110 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2117 dev_err(&ftdi->udev->dev, "TIMED OUT retry limit reached\n"); in ftdi_elan_synchronize()
2124 dev_err(&ftdi->udev->dev, "empty packet retry limit reached\n"); in ftdi_elan_synchronize()
2129 dev_err(&ftdi->udev->dev, "error = %d\n", in ftdi_elan_synchronize()
2134 dev_err(&ftdi->udev->dev, "retry limit reached\n"); in ftdi_elan_synchronize()
2140 dev_err(&ftdi->udev->dev, "failed to synchronize\n"); in ftdi_elan_synchronize()
2144 static int ftdi_elan_stuck_waiting(struct usb_ftdi *ftdi) in ftdi_elan_stuck_waiting() argument
2151 int retval = usb_bulk_msg(ftdi->udev, in ftdi_elan_stuck_waiting()
2152 usb_rcvbulkpipe(ftdi->udev, ftdi->bulk_in_endpointAddr), in ftdi_elan_stuck_waiting()
2153 ftdi->bulk_in_buffer, ftdi->bulk_in_size, in ftdi_elan_stuck_waiting()
2159 char *b = ftdi->bulk_in_buffer; in ftdi_elan_stuck_waiting()
2175 char s1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_stuck_waiting()
2176 char s2 = ftdi->bulk_in_buffer[1]; in ftdi_elan_stuck_waiting()
2185 char b1 = ftdi->bulk_in_buffer[0]; in ftdi_elan_stuck_waiting()
2186 dev_err(&ftdi->udev->dev, "only one byte flushed from FTDI = %02X\n", b1); in ftdi_elan_stuck_waiting()
2191 dev_err(&ftdi->udev->dev, "STATUS ERROR retry limit reached\n"); in ftdi_elan_stuck_waiting()
2198 dev_err(&ftdi->udev->dev, "TIMED OUT retry limit reached\n"); in ftdi_elan_stuck_waiting()
2205 dev_err(&ftdi->udev->dev, "empty packet retry limit reached\n"); in ftdi_elan_stuck_waiting()
2209 dev_err(&ftdi->udev->dev, "error = %d\n", retval); in ftdi_elan_stuck_waiting()
2216 static int ftdi_elan_checkingPCI(struct usb_ftdi *ftdi) in ftdi_elan_checkingPCI() argument
2218 int UxxxStatus = ftdi_elan_read_reg(ftdi, &ftdi->controlreg); in ftdi_elan_checkingPCI()
2221 if (ftdi->controlreg & 0x00400000) { in ftdi_elan_checkingPCI()
2222 if (ftdi->card_ejected) { in ftdi_elan_checkingPCI()
2224 ftdi->card_ejected = 1; in ftdi_elan_checkingPCI()
2225 dev_err(&ftdi->udev->dev, "CARD EJECTED - controlreg = %08X\n", in ftdi_elan_checkingPCI()
2226 ftdi->controlreg); in ftdi_elan_checkingPCI()
2230 u8 fn = ftdi->function - 1; in ftdi_elan_checkingPCI()
2236 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_checkingPCI()
2242 if (pciVID == ftdi->platform_data.vendor && pciPID == in ftdi_elan_checkingPCI()
2243 ftdi->platform_data.device) { in ftdi_elan_checkingPCI()
2246 dev_err(&ftdi->udev->dev, "vendor=%04X pciVID=%04X device=%04X pciPID=%04X\n", in ftdi_elan_checkingPCI()
2247 ftdi->platform_data.vendor, pciVID, in ftdi_elan_checkingPCI()
2248 ftdi->platform_data.device, pciPID); in ftdi_elan_checkingPCI()
2255 #define ftdi_read_pcimem(ftdi, member, data) ftdi_elan_read_pcimem(ftdi, \ argument
2257 #define ftdi_write_pcimem(ftdi, member, data) ftdi_elan_write_pcimem(ftdi, \ argument
2263 static int ftdi_elan_check_controller(struct usb_ftdi *ftdi, int quirk) in ftdi_elan_check_controller() argument
2281 retval = ftdi_write_pcimem(ftdi, intrdisable, OHCI_INTR_MIE); in ftdi_elan_check_controller()
2284 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2287 retval = ftdi_read_pcimem(ftdi, roothub.a, &rh_a); in ftdi_elan_check_controller()
2291 retval = ftdi_read_pcimem(ftdi, fminterval, &hc_fminterval); in ftdi_elan_check_controller()
2298 retval = ftdi_read_pcimem(ftdi, control, &hc_control); in ftdi_elan_check_controller()
2317 retval = ftdi_write_pcimem(ftdi, control, hc_control); in ftdi_elan_check_controller()
2320 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2324 retval = ftdi_read_pcimem(ftdi, roothub.a, &roothub_a); in ftdi_elan_check_controller()
2329 retval = ftdi_write_pcimem(ftdi, in ftdi_elan_check_controller()
2335 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2338 retry:retval = ftdi_read_pcimem(ftdi, cmdstatus, &status); in ftdi_elan_check_controller()
2341 retval = ftdi_write_pcimem(ftdi, cmdstatus, OHCI_HCR); in ftdi_elan_check_controller()
2345 retval = ftdi_read_pcimem(ftdi, cmdstatus, &status); in ftdi_elan_check_controller()
2350 dev_err(&ftdi->udev->dev, "USB HC reset timed out!\n"); in ftdi_elan_check_controller()
2359 retval = ftdi_write_pcimem(ftdi, control, hc_control); in ftdi_elan_check_controller()
2362 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2366 retval = ftdi_write_pcimem(ftdi, ed_controlhead, 0x00000000); in ftdi_elan_check_controller()
2369 retval = ftdi_write_pcimem(ftdi, ed_bulkhead, 0x11000000); in ftdi_elan_check_controller()
2372 retval = ftdi_write_pcimem(ftdi, hcca, 0x00000000); in ftdi_elan_check_controller()
2375 retval = ftdi_read_pcimem(ftdi, fminterval, &fminterval); in ftdi_elan_check_controller()
2378 retval = ftdi_write_pcimem(ftdi, fminterval, in ftdi_elan_check_controller()
2382 retval = ftdi_write_pcimem(ftdi, periodicstart, in ftdi_elan_check_controller()
2386 retval = ftdi_read_pcimem(ftdi, fminterval, &fminterval); in ftdi_elan_check_controller()
2389 retval = ftdi_read_pcimem(ftdi, periodicstart, &periodicstart); in ftdi_elan_check_controller()
2397 dev_err(&ftdi->udev->dev, "init err(%08x %04x)\n", in ftdi_elan_check_controller()
2402 retval = ftdi_write_pcimem(ftdi, control, hc_control); in ftdi_elan_check_controller()
2405 retval = ftdi_write_pcimem(ftdi, cmdstatus, OHCI_BLF); in ftdi_elan_check_controller()
2408 retval = ftdi_read_pcimem(ftdi, cmdstatus, &cmdstatus); in ftdi_elan_check_controller()
2411 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2414 retval = ftdi_write_pcimem(ftdi, roothub.status, RH_HS_DRWE); in ftdi_elan_check_controller()
2417 retval = ftdi_write_pcimem(ftdi, intrstatus, mask); in ftdi_elan_check_controller()
2420 retval = ftdi_write_pcimem(ftdi, intrdisable, in ftdi_elan_check_controller()
2426 retval = ftdi_read_pcimem(ftdi, roothub.a, &roothub_a); in ftdi_elan_check_controller()
2433 retval = ftdi_write_pcimem(ftdi, roothub.a, roothub_a); in ftdi_elan_check_controller()
2438 retval = ftdi_write_pcimem(ftdi, roothub.a, roothub_a); in ftdi_elan_check_controller()
2442 retval = ftdi_write_pcimem(ftdi, roothub.status, RH_HS_LPSC); in ftdi_elan_check_controller()
2445 retval = ftdi_write_pcimem(ftdi, roothub.b, in ftdi_elan_check_controller()
2449 retval = ftdi_read_pcimem(ftdi, control, &control); in ftdi_elan_check_controller()
2455 retval = ftdi_read_pcimem(ftdi, roothub.portstatus[temp], in ftdi_elan_check_controller()
2465 static int ftdi_elan_setup_controller(struct usb_ftdi *ftdi, int fn) in ftdi_elan_setup_controller() argument
2472 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000025FL | 0x2800); in ftdi_elan_setup_controller()
2476 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2480 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2484 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2488 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2493 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2499 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0x00, in ftdi_elan_setup_controller()
2503 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2508 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0x00, in ftdi_elan_setup_controller()
2512 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setup_controller()
2517 UxxxStatus = ftdi_elan_read_pcimem(ftdi, reg, 0, &pcidata); in ftdi_elan_setup_controller()
2524 static int ftdi_elan_close_controller(struct usb_ftdi *ftdi, int fn) in ftdi_elan_close_controller() argument
2531 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000025FL | 0x2800); in ftdi_elan_close_controller()
2535 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2539 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2543 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2547 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2552 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2558 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0x00, in ftdi_elan_close_controller()
2562 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2567 UxxxStatus = ftdi_elan_write_config(ftdi, activePCIfn | reg, 0x00, in ftdi_elan_close_controller()
2571 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_close_controller()
2578 static int ftdi_elan_found_controller(struct usb_ftdi *ftdi, int fn, int quirk) in ftdi_elan_found_controller() argument
2582 UxxxStatus = ftdi_elan_setup_controller(ftdi, fn); in ftdi_elan_found_controller()
2585 result = ftdi_elan_check_controller(ftdi, quirk); in ftdi_elan_found_controller()
2586 UxxxStatus = ftdi_elan_close_controller(ftdi, fn); in ftdi_elan_found_controller()
2592 static int ftdi_elan_enumeratePCI(struct usb_ftdi *ftdi) in ftdi_elan_enumeratePCI() argument
2597 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2600 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x00000000L); in ftdi_elan_enumeratePCI()
2604 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x00000200L | 0x100); in ftdi_elan_enumeratePCI()
2607 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x00000200L | 0x500); in ftdi_elan_enumeratePCI()
2610 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2613 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000020CL | 0x000); in ftdi_elan_enumeratePCI()
2616 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000020DL | 0x000); in ftdi_elan_enumeratePCI()
2620 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000020FL | 0x000); in ftdi_elan_enumeratePCI()
2623 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2626 UxxxStatus = ftdi_elan_write_reg(ftdi, 0x0000025FL | 0x800); in ftdi_elan_enumeratePCI()
2629 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2632 UxxxStatus = ftdi_elan_read_reg(ftdi, &controlreg); in ftdi_elan_enumeratePCI()
2643 static int ftdi_elan_setupOHCI(struct usb_ftdi *ftdi) in ftdi_elan_setupOHCI() argument
2653 ftdi->function = 0; in ftdi_elan_setupOHCI()
2659 UxxxStatus = ftdi_elan_read_config(ftdi, activePCIfn | reg, 0, in ftdi_elan_setupOHCI()
2666 devices = ftdi_elan_found_controller(ftdi, fn, 0); in ftdi_elan_setupOHCI()
2670 devices = ftdi_elan_found_controller(ftdi, fn, 0); in ftdi_elan_setupOHCI()
2673 devices = ftdi_elan_found_controller(ftdi, fn, 0); in ftdi_elan_setupOHCI()
2677 devices = ftdi_elan_found_controller(ftdi, fn, 0); in ftdi_elan_setupOHCI()
2680 devices = ftdi_elan_found_controller(ftdi, fn, in ftdi_elan_setupOHCI()
2684 devices = ftdi_elan_found_controller(ftdi, fn, in ftdi_elan_setupOHCI()
2692 ftdi->function = fn + 1; in ftdi_elan_setupOHCI()
2693 ftdi->platform_data.vendor = pciVID; in ftdi_elan_setupOHCI()
2694 ftdi->platform_data.device = pciPID; in ftdi_elan_setupOHCI()
2697 if (ftdi->function > 0) { in ftdi_elan_setupOHCI()
2698 UxxxStatus = ftdi_elan_setup_controller(ftdi, in ftdi_elan_setupOHCI()
2699 ftdi->function - 1); in ftdi_elan_setupOHCI()
2708 ftdi->enumerated = 0; in ftdi_elan_setupOHCI()
2725 struct usb_ftdi *ftdi; in ftdi_elan_probe() local
2727 ftdi = kzalloc(sizeof(struct usb_ftdi), GFP_KERNEL); in ftdi_elan_probe()
2728 if (!ftdi) in ftdi_elan_probe()
2732 list_add_tail(&ftdi->ftdi_list, &ftdi_static_list); in ftdi_elan_probe()
2733 ftdi->sequence_num = ++ftdi_instances; in ftdi_elan_probe()
2735 ftdi_elan_init_kref(ftdi); in ftdi_elan_probe()
2736 sema_init(&ftdi->sw_lock, 1); in ftdi_elan_probe()
2737 ftdi->udev = usb_get_dev(interface_to_usbdev(interface)); in ftdi_elan_probe()
2738 ftdi->interface = interface; in ftdi_elan_probe()
2739 mutex_init(&ftdi->u132_lock); in ftdi_elan_probe()
2740 ftdi->expected = 4; in ftdi_elan_probe()
2744 if (!ftdi->bulk_in_endpointAddr && in ftdi_elan_probe()
2747 ftdi->bulk_in_size = buffer_size; in ftdi_elan_probe()
2748 ftdi->bulk_in_endpointAddr = endpoint->bEndpointAddress; in ftdi_elan_probe()
2749 ftdi->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL); in ftdi_elan_probe()
2750 if (!ftdi->bulk_in_buffer) { in ftdi_elan_probe()
2751 dev_err(&ftdi->udev->dev, "Could not allocate bulk_in_buffer\n"); in ftdi_elan_probe()
2756 if (!ftdi->bulk_out_endpointAddr && in ftdi_elan_probe()
2758 ftdi->bulk_out_endpointAddr = in ftdi_elan_probe()
2762 if (!(ftdi->bulk_in_endpointAddr && ftdi->bulk_out_endpointAddr)) { in ftdi_elan_probe()
2763 dev_err(&ftdi->udev->dev, "Could not find both bulk-in and bulk-out endpoints\n"); in ftdi_elan_probe()
2767 dev_info(&ftdi->udev->dev, "interface %d has I=%02X O=%02X\n", in ftdi_elan_probe()
2768 iface_desc->desc.bInterfaceNumber, ftdi->bulk_in_endpointAddr, in ftdi_elan_probe()
2769 ftdi->bulk_out_endpointAddr); in ftdi_elan_probe()
2770 usb_set_intfdata(interface, ftdi); in ftdi_elan_probe()
2772 ftdi->bulk_in_endpointAddr == 0x81 && in ftdi_elan_probe()
2773 ftdi->bulk_out_endpointAddr == 0x02) { in ftdi_elan_probe()
2776 dev_err(&ftdi->udev->dev, "Not able to get a minor for this device\n"); in ftdi_elan_probe()
2781 ftdi->class = &ftdi_elan_jtag_class; in ftdi_elan_probe()
2782 dev_info(&ftdi->udev->dev, "USB FDTI=%p JTAG interface %d now attached to ftdi%d\n", in ftdi_elan_probe()
2783 ftdi, iface_desc->desc.bInterfaceNumber, in ftdi_elan_probe()
2788 ftdi->bulk_in_endpointAddr == 0x83 && in ftdi_elan_probe()
2789 ftdi->bulk_out_endpointAddr == 0x04) { in ftdi_elan_probe()
2790 ftdi->class = NULL; in ftdi_elan_probe()
2791 dev_info(&ftdi->udev->dev, "USB FDTI=%p ELAN interface %d now activated\n", in ftdi_elan_probe()
2792 ftdi, iface_desc->desc.bInterfaceNumber); in ftdi_elan_probe()
2793 INIT_DELAYED_WORK(&ftdi->status_work, ftdi_elan_status_work); in ftdi_elan_probe()
2794 INIT_DELAYED_WORK(&ftdi->command_work, ftdi_elan_command_work); in ftdi_elan_probe()
2795 INIT_DELAYED_WORK(&ftdi->respond_work, ftdi_elan_respond_work); in ftdi_elan_probe()
2796 ftdi_status_queue_work(ftdi, msecs_to_jiffies(3 *1000)); in ftdi_elan_probe()
2799 dev_err(&ftdi->udev->dev, in ftdi_elan_probe()
2804 error:if (ftdi) { in ftdi_elan_probe()
2805 ftdi_elan_put_kref(ftdi); in ftdi_elan_probe()
2812 struct usb_ftdi *ftdi = usb_get_intfdata(interface); in ftdi_elan_disconnect() local
2813 ftdi->disconnected += 1; in ftdi_elan_disconnect()
2814 if (ftdi->class) { in ftdi_elan_disconnect()
2816 struct usb_class_driver *class = ftdi->class; in ftdi_elan_disconnect()
2819 dev_info(&ftdi->udev->dev, "USB FTDI U132 jtag interface on minor %d now disconnected\n", in ftdi_elan_disconnect()
2822 ftdi_status_cancel_work(ftdi); in ftdi_elan_disconnect()
2823 ftdi_command_cancel_work(ftdi); in ftdi_elan_disconnect()
2824 ftdi_response_cancel_work(ftdi); in ftdi_elan_disconnect()
2825 ftdi_elan_abandon_completions(ftdi); in ftdi_elan_disconnect()
2826 ftdi_elan_abandon_targets(ftdi); in ftdi_elan_disconnect()
2827 if (ftdi->registered) { in ftdi_elan_disconnect()
2828 platform_device_unregister(&ftdi->platform_dev); in ftdi_elan_disconnect()
2829 ftdi->synchronized = 0; in ftdi_elan_disconnect()
2830 ftdi->enumerated = 0; in ftdi_elan_disconnect()
2831 ftdi->initialized = 0; in ftdi_elan_disconnect()
2832 ftdi->registered = 0; in ftdi_elan_disconnect()
2837 ftdi->disconnected += 1; in ftdi_elan_disconnect()
2839 dev_info(&ftdi->udev->dev, "USB FTDI U132 host controller interface now disconnected\n"); in ftdi_elan_disconnect()
2841 ftdi_elan_put_kref(ftdi); in ftdi_elan_disconnect()
2885 struct usb_ftdi *ftdi; in ftdi_elan_exit() local
2889 list_for_each_entry_safe(ftdi, temp, &ftdi_static_list, ftdi_list) { in ftdi_elan_exit()
2890 ftdi_status_cancel_work(ftdi); in ftdi_elan_exit()
2891 ftdi_command_cancel_work(ftdi); in ftdi_elan_exit()
2892 ftdi_response_cancel_work(ftdi); in ftdi_elan_exit()