Lines Matching refs:u132
117 struct u132 *u132; member
152 struct u132 *u132; member
178 struct u132 *u132; member
182 struct u132 { struct
218 #define u132_read_pcimem(u132, member, data) \ argument
219 usb_ftdi_elan_read_pcimem(u132->platform_dev, offsetof(struct \
221 #define u132_write_pcimem(u132, member, data) \ argument
222 usb_ftdi_elan_write_pcimem(u132->platform_dev, offsetof(struct \
224 static inline struct u132 *udev_to_u132(struct u132_udev *udev) in udev_to_u132()
227 return container_of(udev, struct u132, udev[udev_number]); in udev_to_u132()
230 static inline struct u132 *hcd_to_u132(struct usb_hcd *hcd) in hcd_to_u132()
232 return (struct u132 *)(hcd->hcd_priv); in hcd_to_u132()
235 static inline struct usb_hcd *u132_to_hcd(struct u132 *u132) in u132_to_hcd() argument
237 return container_of((void *)u132, struct usb_hcd, hcd_priv); in u132_to_hcd()
240 static inline void u132_disable(struct u132 *u132) in u132_disable() argument
242 u132_to_hcd(u132)->state = HC_STATE_HALT; in u132_disable()
246 #define kref_to_u132(d) container_of(d, struct u132, kref)
256 struct u132 *u132 = kref_to_u132(kref); in u132_hcd_delete() local
257 struct platform_device *pdev = u132->platform_dev; in u132_hcd_delete()
258 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_hcd_delete()
259 u132->going += 1; in u132_hcd_delete()
261 list_del_init(&u132->u132_list); in u132_hcd_delete()
264 dev_warn(&u132->platform_dev->dev, "FREEING the hcd=%p and thus the u13" in u132_hcd_delete()
265 "2=%p going=%d pdev=%p\n", hcd, u132, u132->going, pdev); in u132_hcd_delete()
269 static inline void u132_u132_put_kref(struct u132 *u132) in u132_u132_put_kref() argument
271 kref_put(&u132->kref, u132_hcd_delete); in u132_u132_put_kref()
274 static inline void u132_u132_init_kref(struct u132 *u132) in u132_u132_init_kref() argument
276 kref_init(&u132->kref); in u132_u132_init_kref()
288 static inline void u132_udev_put_kref(struct u132 *u132, struct u132_udev *udev) in u132_udev_put_kref() argument
293 static inline void u132_udev_get_kref(struct u132 *u132, struct u132_udev *udev) in u132_udev_get_kref() argument
298 static inline void u132_udev_init_kref(struct u132 *u132, in u132_udev_init_kref() argument
304 static inline void u132_ring_put_kref(struct u132 *u132, struct u132_ring *ring) in u132_ring_put_kref() argument
306 kref_put(&u132->kref, u132_hcd_delete); in u132_ring_put_kref()
309 static void u132_ring_requeue_work(struct u132 *u132, struct u132_ring *ring, in u132_ring_requeue_work() argument
317 kref_put(&u132->kref, u132_hcd_delete); in u132_ring_requeue_work()
320 static void u132_ring_queue_work(struct u132 *u132, struct u132_ring *ring, in u132_ring_queue_work() argument
323 kref_get(&u132->kref); in u132_ring_queue_work()
324 u132_ring_requeue_work(u132, ring, delta); in u132_ring_queue_work()
327 static void u132_ring_cancel_work(struct u132 *u132, struct u132_ring *ring) in u132_ring_cancel_work() argument
330 kref_put(&u132->kref, u132_hcd_delete); in u132_ring_cancel_work()
336 struct u132 *u132 = endp->u132; in u132_endp_delete() local
339 u8 address = u132->addr[usb_addr].address; in u132_endp_delete()
340 struct u132_udev *udev = &u132->udev[address]; in u132_endp_delete()
360 u132_udev_put_kref(u132, udev); in u132_endp_delete()
364 u132_udev_put_kref(u132, udev); in u132_endp_delete()
366 u132->endp[endp_number - 1] = NULL; in u132_endp_delete()
369 u132_u132_put_kref(u132); in u132_endp_delete()
372 static inline void u132_endp_put_kref(struct u132 *u132, struct u132_endp *endp) in u132_endp_put_kref() argument
377 static inline void u132_endp_get_kref(struct u132 *u132, struct u132_endp *endp) in u132_endp_get_kref() argument
382 static inline void u132_endp_init_kref(struct u132 *u132, in u132_endp_init_kref() argument
386 kref_get(&u132->kref); in u132_endp_init_kref()
389 static void u132_endp_queue_work(struct u132 *u132, struct u132_endp *endp, in u132_endp_queue_work() argument
396 static void u132_endp_cancel_work(struct u132 *u132, struct u132_endp *endp) in u132_endp_cancel_work() argument
402 static inline void u132_monitor_put_kref(struct u132 *u132) in u132_monitor_put_kref() argument
404 kref_put(&u132->kref, u132_hcd_delete); in u132_monitor_put_kref()
407 static void u132_monitor_queue_work(struct u132 *u132, unsigned int delta) in u132_monitor_queue_work() argument
409 if (queue_delayed_work(workqueue, &u132->monitor, delta)) in u132_monitor_queue_work()
410 kref_get(&u132->kref); in u132_monitor_queue_work()
413 static void u132_monitor_requeue_work(struct u132 *u132, unsigned int delta) in u132_monitor_requeue_work() argument
415 if (!queue_delayed_work(workqueue, &u132->monitor, delta)) in u132_monitor_requeue_work()
416 kref_put(&u132->kref, u132_hcd_delete); in u132_monitor_requeue_work()
419 static void u132_monitor_cancel_work(struct u132 *u132) in u132_monitor_cancel_work() argument
421 if (cancel_delayed_work(&u132->monitor)) in u132_monitor_cancel_work()
422 kref_put(&u132->kref, u132_hcd_delete); in u132_monitor_cancel_work()
425 static int read_roothub_info(struct u132 *u132) in read_roothub_info() argument
429 retval = u132_read_pcimem(u132, revision, &revision); in read_roothub_info()
431 dev_err(&u132->platform_dev->dev, "error %d accessing device co" in read_roothub_info()
437 dev_err(&u132->platform_dev->dev, "device revision is not valid" in read_roothub_info()
441 retval = u132_read_pcimem(u132, control, &u132->hc_control); in read_roothub_info()
443 dev_err(&u132->platform_dev->dev, "error %d accessing device co" in read_roothub_info()
447 retval = u132_read_pcimem(u132, roothub.status, in read_roothub_info()
448 &u132->hc_roothub_status); in read_roothub_info()
450 dev_err(&u132->platform_dev->dev, "error %d accessing device re" in read_roothub_info()
454 retval = u132_read_pcimem(u132, roothub.a, &u132->hc_roothub_a); in read_roothub_info()
456 dev_err(&u132->platform_dev->dev, "error %d accessing device re" in read_roothub_info()
461 int I = u132->num_ports; in read_roothub_info()
464 retval = u132_read_pcimem(u132, roothub.portstatus[i], in read_roothub_info()
465 &u132->hc_roothub_portstatus[i]); in read_roothub_info()
467 dev_err(&u132->platform_dev->dev, "error %d acc" in read_roothub_info()
480 struct u132 *u132 = container_of(work, struct u132, monitor.work); in u132_hcd_monitor_work() local
481 if (u132->going > 1) { in u132_hcd_monitor_work()
482 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_monitor_work()
483 , u132->going); in u132_hcd_monitor_work()
484 u132_monitor_put_kref(u132); in u132_hcd_monitor_work()
486 } else if (u132->going > 0) { in u132_hcd_monitor_work()
487 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hcd_monitor_work()
488 u132_monitor_put_kref(u132); in u132_hcd_monitor_work()
492 mutex_lock(&u132->sw_lock); in u132_hcd_monitor_work()
493 retval = read_roothub_info(u132); in u132_hcd_monitor_work()
495 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_hcd_monitor_work()
496 u132_disable(u132); in u132_hcd_monitor_work()
497 u132->going = 1; in u132_hcd_monitor_work()
498 mutex_unlock(&u132->sw_lock); in u132_hcd_monitor_work()
500 ftdi_elan_gone_away(u132->platform_dev); in u132_hcd_monitor_work()
501 u132_monitor_put_kref(u132); in u132_hcd_monitor_work()
504 u132_monitor_requeue_work(u132, 500); in u132_hcd_monitor_work()
505 mutex_unlock(&u132->sw_lock); in u132_hcd_monitor_work()
511 static void u132_hcd_giveback_urb(struct u132 *u132, struct u132_endp *endp, in u132_hcd_giveback_urb() argument
516 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_hcd_giveback_urb()
535 mutex_lock(&u132->scheduler_lock); in u132_hcd_giveback_urb()
538 u132_ring_cancel_work(u132, ring); in u132_hcd_giveback_urb()
539 u132_ring_queue_work(u132, ring, 0); in u132_hcd_giveback_urb()
540 mutex_unlock(&u132->scheduler_lock); in u132_hcd_giveback_urb()
541 u132_endp_put_kref(u132, endp); in u132_hcd_giveback_urb()
545 static void u132_hcd_forget_urb(struct u132 *u132, struct u132_endp *endp, in u132_hcd_forget_urb() argument
548 u132_endp_put_kref(u132, endp); in u132_hcd_forget_urb()
551 static void u132_hcd_abandon_urb(struct u132 *u132, struct u132_endp *endp, in u132_hcd_abandon_urb() argument
555 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_hcd_abandon_urb()
577 static inline int edset_input(struct u132 *u132, struct u132_ring *ring, in edset_input() argument
583 return usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, in edset_input()
587 static inline int edset_setup(struct u132 *u132, struct u132_ring *ring, in edset_setup() argument
593 return usb_ftdi_elan_edset_setup(u132->platform_dev, ring->number, endp, in edset_setup()
597 static inline int edset_single(struct u132 *u132, struct u132_ring *ring, in edset_single() argument
603 return usb_ftdi_elan_edset_single(u132->platform_dev, ring->number, in edset_single()
607 static inline int edset_output(struct u132 *u132, struct u132_ring *ring, in edset_output() argument
613 return usb_ftdi_elan_edset_output(u132->platform_dev, ring->number, in edset_output()
627 struct u132 *u132 = endp->u132; in u132_hcd_interrupt_recv() local
628 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_interrupt_recv()
629 struct u132_udev *udev = &u132->udev[address]; in u132_hcd_interrupt_recv()
630 mutex_lock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
631 if (u132->going > 1) { in u132_hcd_interrupt_recv()
632 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_interrupt_recv()
633 , u132->going); in u132_hcd_interrupt_recv()
634 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
635 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_interrupt_recv()
639 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
640 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_interrupt_recv()
642 } else if (u132->going > 0) { in u132_hcd_interrupt_recv()
643 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_interrupt_recv()
645 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
646 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_interrupt_recv()
665 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
666 retval = edset_single(u132, ring, endp, urb, in u132_hcd_interrupt_recv()
670 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_interrupt_recv()
677 u132_ring_cancel_work(u132, ring); in u132_hcd_interrupt_recv()
678 u132_ring_queue_work(u132, ring, 0); in u132_hcd_interrupt_recv()
679 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
680 u132_endp_put_kref(u132, endp); in u132_hcd_interrupt_recv()
688 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
689 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_interrupt_recv()
704 dev_err(&u132->platform_dev->dev, "urb=%p givin" in u132_hcd_interrupt_recv()
708 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
709 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_interrupt_recv()
714 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_interrupt_recv()
716 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
717 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_interrupt_recv()
727 struct u132 *u132 = endp->u132; in u132_hcd_bulk_output_sent() local
728 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_bulk_output_sent()
729 mutex_lock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
730 if (u132->going > 1) { in u132_hcd_bulk_output_sent()
731 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_bulk_output_sent()
732 , u132->going); in u132_hcd_bulk_output_sent()
733 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
734 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_bulk_output_sent()
738 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
739 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_bulk_output_sent()
741 } else if (u132->going > 0) { in u132_hcd_bulk_output_sent()
742 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_bulk_output_sent()
744 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
745 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_bulk_output_sent()
753 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
754 retval = edset_output(u132, ring, endp, urb, address, in u132_hcd_bulk_output_sent()
757 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_bulk_output_sent()
760 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
761 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_output_sent()
765 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_bulk_output_sent()
767 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
768 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_output_sent()
778 struct u132 *u132 = endp->u132; in u132_hcd_bulk_input_recv() local
779 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_bulk_input_recv()
780 struct u132_udev *udev = &u132->udev[address]; in u132_hcd_bulk_input_recv()
781 mutex_lock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
782 if (u132->going > 1) { in u132_hcd_bulk_input_recv()
783 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_bulk_input_recv()
784 , u132->going); in u132_hcd_bulk_input_recv()
785 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
786 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_bulk_input_recv()
790 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
791 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_bulk_input_recv()
793 } else if (u132->going > 0) { in u132_hcd_bulk_input_recv()
794 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_bulk_input_recv()
796 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
797 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_bulk_input_recv()
815 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
816 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_bulk_input_recv()
821 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_bulk_input_recv()
827 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
828 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_bulk_input_recv()
836 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
837 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_input_recv()
843 dev_warn(&u132->platform_dev->dev, "urb=%p(SHORT NOT OK" in u132_hcd_bulk_input_recv()
846 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
847 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_input_recv()
852 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
853 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_bulk_input_recv()
859 dev_err(&u132->platform_dev->dev, "urb=%p giving back B" in u132_hcd_bulk_input_recv()
862 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
863 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_bulk_input_recv()
868 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_bulk_input_recv()
870 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
871 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_input_recv()
881 struct u132 *u132 = endp->u132; in u132_hcd_configure_empty_sent() local
882 mutex_lock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
883 if (u132->going > 1) { in u132_hcd_configure_empty_sent()
884 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_configure_empty_sent()
885 , u132->going); in u132_hcd_configure_empty_sent()
886 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
887 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_empty_sent()
891 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
892 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_configure_empty_sent()
894 } else if (u132->going > 0) { in u132_hcd_configure_empty_sent()
895 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_configure_empty_sent()
897 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
898 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_empty_sent()
901 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
902 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_empty_sent()
905 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_configure_empty_sent()
907 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
908 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_empty_sent()
918 struct u132 *u132 = endp->u132; in u132_hcd_configure_input_recv() local
919 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_configure_input_recv()
920 mutex_lock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
921 if (u132->going > 1) { in u132_hcd_configure_input_recv()
922 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_configure_input_recv()
923 , u132->going); in u132_hcd_configure_input_recv()
924 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
925 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_input_recv()
929 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
930 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_configure_input_recv()
932 } else if (u132->going > 0) { in u132_hcd_configure_input_recv()
933 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_configure_input_recv()
935 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
936 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_input_recv()
952 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
953 retval = usb_ftdi_elan_edset_empty(u132->platform_dev, in u132_hcd_configure_input_recv()
958 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_configure_input_recv()
961 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
962 dev_warn(&u132->platform_dev->dev, "giving back SETUP I" in u132_hcd_configure_input_recv()
964 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_configure_input_recv()
968 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
969 dev_err(&u132->platform_dev->dev, "giving back SETUP IN" in u132_hcd_configure_input_recv()
972 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_configure_input_recv()
977 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_configure_input_recv()
979 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
980 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_input_recv()
990 struct u132 *u132 = endp->u132; in u132_hcd_configure_empty_recv() local
991 mutex_lock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
992 if (u132->going > 1) { in u132_hcd_configure_empty_recv()
993 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_configure_empty_recv()
994 , u132->going); in u132_hcd_configure_empty_recv()
995 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
996 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_empty_recv()
1000 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
1001 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_configure_empty_recv()
1003 } else if (u132->going > 0) { in u132_hcd_configure_empty_recv()
1004 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_configure_empty_recv()
1006 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
1007 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_empty_recv()
1010 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
1011 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_empty_recv()
1014 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_configure_empty_recv()
1016 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
1017 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_empty_recv()
1027 struct u132 *u132 = endp->u132; in u132_hcd_configure_setup_sent() local
1028 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_configure_setup_sent()
1029 mutex_lock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1030 if (u132->going > 1) { in u132_hcd_configure_setup_sent()
1031 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_configure_setup_sent()
1032 , u132->going); in u132_hcd_configure_setup_sent()
1033 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1034 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_setup_sent()
1038 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1039 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_configure_setup_sent()
1041 } else if (u132->going > 0) { in u132_hcd_configure_setup_sent()
1042 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_configure_setup_sent()
1044 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1045 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_setup_sent()
1051 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1052 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_configure_setup_sent()
1057 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_configure_setup_sent()
1062 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1063 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_configure_setup_sent()
1068 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_configure_setup_sent()
1072 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_configure_setup_sent()
1074 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1075 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_setup_sent()
1085 struct u132 *u132 = endp->u132; in u132_hcd_enumeration_empty_recv() local
1086 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_enumeration_empty_recv()
1087 struct u132_udev *udev = &u132->udev[address]; in u132_hcd_enumeration_empty_recv()
1088 mutex_lock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1089 if (u132->going > 1) { in u132_hcd_enumeration_empty_recv()
1090 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_enumeration_empty_recv()
1091 , u132->going); in u132_hcd_enumeration_empty_recv()
1092 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1093 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_enumeration_empty_recv()
1097 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1098 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_enumeration_empty_recv()
1100 } else if (u132->going > 0) { in u132_hcd_enumeration_empty_recv()
1101 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_enumeration_empty_recv()
1103 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1104 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_enumeration_empty_recv()
1107 u132->addr[0].address = 0; in u132_hcd_enumeration_empty_recv()
1109 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1110 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_enumeration_empty_recv()
1113 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_enumeration_empty_recv()
1115 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1116 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_enumeration_empty_recv()
1126 struct u132 *u132 = endp->u132; in u132_hcd_enumeration_address_sent() local
1127 mutex_lock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1128 if (u132->going > 1) { in u132_hcd_enumeration_address_sent()
1129 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_enumeration_address_sent()
1130 , u132->going); in u132_hcd_enumeration_address_sent()
1131 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1132 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_enumeration_address_sent()
1136 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1137 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_enumeration_address_sent()
1139 } else if (u132->going > 0) { in u132_hcd_enumeration_address_sent()
1140 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_enumeration_address_sent()
1142 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1143 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_enumeration_address_sent()
1148 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1149 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_enumeration_address_sent()
1153 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_enumeration_address_sent()
1156 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_enumeration_address_sent()
1158 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1159 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_enumeration_address_sent()
1169 struct u132 *u132 = endp->u132; in u132_hcd_initial_empty_sent() local
1170 mutex_lock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1171 if (u132->going > 1) { in u132_hcd_initial_empty_sent()
1172 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_initial_empty_sent()
1173 , u132->going); in u132_hcd_initial_empty_sent()
1174 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1175 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_empty_sent()
1179 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1180 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_initial_empty_sent()
1182 } else if (u132->going > 0) { in u132_hcd_initial_empty_sent()
1183 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_initial_empty_sent()
1185 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1186 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_empty_sent()
1189 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1190 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_initial_empty_sent()
1193 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_initial_empty_sent()
1195 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1196 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_initial_empty_sent()
1206 struct u132 *u132 = endp->u132; in u132_hcd_initial_input_recv() local
1207 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_initial_input_recv()
1208 mutex_lock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1209 if (u132->going > 1) { in u132_hcd_initial_input_recv()
1210 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_initial_input_recv()
1211 , u132->going); in u132_hcd_initial_input_recv()
1212 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1213 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_input_recv()
1217 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1218 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_initial_input_recv()
1220 } else if (u132->going > 0) { in u132_hcd_initial_input_recv()
1221 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_initial_input_recv()
1223 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1224 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_input_recv()
1237 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1238 retval = usb_ftdi_elan_edset_empty(u132->platform_dev, in u132_hcd_initial_input_recv()
1242 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_initial_input_recv()
1245 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_initial_input_recv()
1247 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1248 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_initial_input_recv()
1258 struct u132 *u132 = endp->u132; in u132_hcd_initial_setup_sent() local
1259 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_initial_setup_sent()
1260 mutex_lock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1261 if (u132->going > 1) { in u132_hcd_initial_setup_sent()
1262 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_initial_setup_sent()
1263 , u132->going); in u132_hcd_initial_setup_sent()
1264 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1265 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_setup_sent()
1269 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1270 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_initial_setup_sent()
1272 } else if (u132->going > 0) { in u132_hcd_initial_setup_sent()
1273 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_initial_setup_sent()
1275 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1276 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_setup_sent()
1281 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1282 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_initial_setup_sent()
1286 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_initial_setup_sent()
1289 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_initial_setup_sent()
1291 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1292 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_initial_setup_sent()
1305 struct u132 *u132 = ring->u132; in u132_hcd_ring_work_scheduler() local
1306 mutex_lock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1308 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1309 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1323 u132_endp_cancel_work(u132, last_endp); in u132_hcd_ring_work_scheduler()
1324 u132_endp_queue_work(u132, last_endp, 0); in u132_hcd_ring_work_scheduler()
1325 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1326 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1337 u132_endp_cancel_work(u132, last_endp); in u132_hcd_ring_work_scheduler()
1338 u132_endp_queue_work(u132, last_endp, 0); in u132_hcd_ring_work_scheduler()
1339 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1340 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1348 u132_ring_requeue_work(u132, ring, wakeup); in u132_hcd_ring_work_scheduler()
1349 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1352 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1353 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1357 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1358 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1368 struct u132 *u132 = endp->u132; in u132_hcd_endp_work_scheduler() local
1369 mutex_lock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1374 usb_ftdi_elan_edset_flush(u132->platform_dev, in u132_hcd_endp_work_scheduler()
1376 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1377 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1380 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1381 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1384 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1385 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1388 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1389 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1392 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1394 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1395 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1404 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1405 retval = edset_single(u132, ring, endp, urb, address, in u132_hcd_endp_work_scheduler()
1408 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_endp_work_scheduler()
1412 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1414 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1415 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1424 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1425 retval = edset_setup(u132, ring, endp, urb, address, in u132_hcd_endp_work_scheduler()
1428 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_endp_work_scheduler()
1437 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1438 retval = edset_setup(u132, ring, endp, urb, 0, 0x2, in u132_hcd_endp_work_scheduler()
1441 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_endp_work_scheduler()
1447 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1451 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1452 retval = edset_setup(u132, ring, endp, urb, address, in u132_hcd_endp_work_scheduler()
1455 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_endp_work_scheduler()
1460 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1462 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1463 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1472 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1473 retval = edset_input(u132, ring, endp, urb, in u132_hcd_endp_work_scheduler()
1478 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_endp_work_scheduler()
1483 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1485 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1486 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1495 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1496 retval = edset_output(u132, ring, endp, urb, in u132_hcd_endp_work_scheduler()
1501 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_endp_work_scheduler()
1510 static void port_power(struct u132 *u132, int pn, int is_on) in port_power() argument
1512 u132->port[pn].power = is_on; in port_power()
1517 static void u132_power(struct u132 *u132, int is_on) in u132_power() argument
1519 struct usb_hcd *hcd = u132_to_hcd(u132) in u132_power()
1522 if (u132->power) in u132_power()
1524 u132->power = 1; in u132_power()
1526 u132->power = 0; in u132_power()
1531 static int u132_periodic_reinit(struct u132 *u132) in u132_periodic_reinit() argument
1534 u32 fi = u132->hc_fminterval & 0x03fff; in u132_periodic_reinit()
1537 retval = u132_read_pcimem(u132, fminterval, &fminterval); in u132_periodic_reinit()
1541 retval = u132_write_pcimem(u132, fminterval, in u132_periodic_reinit()
1542 (fit ^ FIT) | u132->hc_fminterval); in u132_periodic_reinit()
1545 return u132_write_pcimem(u132, periodicstart, in u132_periodic_reinit()
1564 static int u132_init(struct u132 *u132) in u132_init() argument
1568 u132_disable(u132); in u132_init()
1569 u132->next_statechange = jiffies; in u132_init()
1570 retval = u132_write_pcimem(u132, intrdisable, OHCI_INTR_MIE); in u132_init()
1573 retval = u132_read_pcimem(u132, control, &control); in u132_init()
1576 if (u132->num_ports == 0) { in u132_init()
1578 retval = u132_read_pcimem(u132, roothub.a, &rh_a); in u132_init()
1581 u132->num_ports = rh_a & RH_A_NDP; in u132_init()
1582 retval = read_roothub_info(u132); in u132_init()
1586 if (u132->num_ports > MAX_U132_PORTS) in u132_init()
1597 static int u132_run(struct u132 *u132) in u132_run() argument
1607 int first = u132->hc_fminterval == 0; in u132_run()
1610 u132_disable(u132); in u132_run()
1613 retval = u132_read_pcimem(u132, fminterval, &temp); in u132_run()
1616 u132->hc_fminterval = temp & 0x3fff; in u132_run()
1617 u132->hc_fminterval |= FSMP(u132->hc_fminterval) << 16; in u132_run()
1619 retval = u132_read_pcimem(u132, control, &u132->hc_control); in u132_run()
1622 dev_info(&u132->platform_dev->dev, "resetting from state '%s', control " in u132_run()
1623 "= %08X\n", hcfs2string(u132->hc_control & OHCI_CTRL_HCFS), in u132_run()
1624 u132->hc_control); in u132_run()
1625 switch (u132->hc_control & OHCI_CTRL_HCFS) { in u132_run()
1631 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1632 u132->hc_control |= OHCI_USB_RESUME; in u132_run()
1636 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1637 u132->hc_control |= OHCI_USB_RESET; in u132_run()
1641 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1644 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1648 retval = u132_read_pcimem(u132, roothub.a, &roothub_a); in u132_run()
1653 for (temp = 0; temp < u132->num_ports; temp++) { in u132_run()
1654 retval = u132_write_pcimem(u132, in u132_run()
1660 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1664 retval = u132_read_pcimem(u132, cmdstatus, &status); in u132_run()
1667 retval = u132_write_pcimem(u132, cmdstatus, OHCI_HCR); in u132_run()
1671 retval = u132_read_pcimem(u132, cmdstatus, &status); in u132_run()
1676 dev_err(&u132->platform_dev->dev, "USB HC reset" in u132_run()
1685 if (u132->flags & OHCI_QUIRK_INITRESET) { in u132_run()
1686 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1689 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1693 retval = u132_write_pcimem(u132, ed_controlhead, 0x00000000); in u132_run()
1696 retval = u132_write_pcimem(u132, ed_bulkhead, 0x11000000); in u132_run()
1699 retval = u132_write_pcimem(u132, hcca, 0x00000000); in u132_run()
1702 retval = u132_periodic_reinit(u132); in u132_run()
1705 retval = u132_read_pcimem(u132, fminterval, &fminterval); in u132_run()
1708 retval = u132_read_pcimem(u132, periodicstart, &periodicstart); in u132_run()
1712 if (!(u132->flags & OHCI_QUIRK_INITRESET)) { in u132_run()
1713 u132->flags |= OHCI_QUIRK_INITRESET; in u132_run()
1716 dev_err(&u132->platform_dev->dev, "init err(%08x %04x)" in u132_run()
1719 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1720 u132->hc_control |= OHCI_CONTROL_INIT | OHCI_CTRL_BLE | OHCI_USB_OPER; in u132_run()
1721 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1724 retval = u132_write_pcimem(u132, cmdstatus, OHCI_BLF); in u132_run()
1727 retval = u132_read_pcimem(u132, cmdstatus, &cmdstatus); in u132_run()
1730 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1733 u132_to_hcd(u132)->state = HC_STATE_RUNNING; in u132_run()
1734 retval = u132_write_pcimem(u132, roothub.status, RH_HS_DRWE); in u132_run()
1737 retval = u132_write_pcimem(u132, intrstatus, mask); in u132_run()
1740 retval = u132_write_pcimem(u132, intrdisable, in u132_run()
1746 retval = u132_read_pcimem(u132, roothub.a, &roothub_a); in u132_run()
1750 if (u132->flags & OHCI_QUIRK_SUPERIO) { in u132_run()
1753 retval = u132_write_pcimem(u132, roothub.a, roothub_a); in u132_run()
1756 } else if ((u132->flags & OHCI_QUIRK_AMD756) || distrust_firmware) { in u132_run()
1758 retval = u132_write_pcimem(u132, roothub.a, roothub_a); in u132_run()
1762 retval = u132_write_pcimem(u132, roothub.status, RH_HS_LPSC); in u132_run()
1765 retval = u132_write_pcimem(u132, roothub.b, in u132_run()
1769 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1773 u132_to_hcd(u132)->state = HC_STATE_RUNNING; in u132_run()
1779 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_stop() local
1780 if (u132->going > 1) { in u132_hcd_stop()
1781 dev_err(&u132->platform_dev->dev, "u132 device %p(hcd=%p) has b" in u132_hcd_stop()
1782 "een removed %d\n", u132, hcd, u132->going); in u132_hcd_stop()
1783 } else if (u132->going > 0) { in u132_hcd_stop()
1784 dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov" in u132_hcd_stop()
1787 mutex_lock(&u132->sw_lock); in u132_hcd_stop()
1789 u132_power(u132, 0); in u132_hcd_stop()
1790 mutex_unlock(&u132->sw_lock); in u132_hcd_stop()
1796 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_start() local
1797 if (u132->going > 1) { in u132_hcd_start()
1798 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_start()
1799 , u132->going); in u132_hcd_start()
1801 } else if (u132->going > 0) { in u132_hcd_start()
1802 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hcd_start()
1812 mutex_lock(&u132->sw_lock); in u132_hcd_start()
1815 u132->flags = OHCI_QUIRK_AMD756; in u132_hcd_start()
1817 dev_err(&u132->platform_dev->dev, "WARNING: OPTi workar" in u132_hcd_start()
1820 u132->flags |= OHCI_QUIRK_ZFMICRO; in u132_hcd_start()
1821 retval = u132_run(u132); in u132_hcd_start()
1823 u132_disable(u132); in u132_hcd_start()
1824 u132->going = 1; in u132_hcd_start()
1827 mutex_unlock(&u132->sw_lock); in u132_hcd_start()
1830 dev_err(&u132->platform_dev->dev, "platform_device missing\n"); in u132_hcd_start()
1837 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_reset() local
1838 if (u132->going > 1) { in u132_hcd_reset()
1839 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_reset()
1840 , u132->going); in u132_hcd_reset()
1842 } else if (u132->going > 0) { in u132_hcd_reset()
1843 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hcd_reset()
1847 mutex_lock(&u132->sw_lock); in u132_hcd_reset()
1848 retval = u132_init(u132); in u132_hcd_reset()
1850 u132_disable(u132); in u132_hcd_reset()
1851 u132->going = 1; in u132_hcd_reset()
1853 mutex_unlock(&u132->sw_lock); in u132_hcd_reset()
1858 static int create_endpoint_and_queue_int(struct u132 *u132, in create_endpoint_and_queue_int() argument
1874 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_int()
1881 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_int()
1882 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_int()
1885 ring = endp->ring = &u132->ring[0]; in create_endpoint_and_queue_int()
1898 endp->u132 = u132; in create_endpoint_and_queue_int()
1901 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_int()
1908 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_int()
1915 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_int()
1917 urb->hcpriv = u132; in create_endpoint_and_queue_int()
1928 u132_endp_queue_work(u132, endp, msecs_to_jiffies(urb->interval)); in create_endpoint_and_queue_int()
1932 static int queue_int_on_old_endpoint(struct u132 *u132, in queue_int_on_old_endpoint() argument
1937 urb->hcpriv = u132; in queue_int_on_old_endpoint()
1956 static int create_endpoint_and_queue_bulk(struct u132 *u132, in create_endpoint_and_queue_bulk() argument
1973 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_bulk()
1980 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_bulk()
1981 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_bulk()
1989 endp->u132 = u132; in create_endpoint_and_queue_bulk()
1992 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_bulk()
2000 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_bulk()
2008 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_bulk()
2010 ring = endp->ring = &u132->ring[ring_number - 1]; in create_endpoint_and_queue_bulk()
2018 urb->hcpriv = u132; in create_endpoint_and_queue_bulk()
2027 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_bulk()
2031 static int queue_bulk_on_old_endpoint(struct u132 *u132, struct u132_udev *udev, in queue_bulk_on_old_endpoint() argument
2036 urb->hcpriv = u132; in queue_bulk_on_old_endpoint()
2053 static int create_endpoint_and_queue_control(struct u132 *u132, in create_endpoint_and_queue_control() argument
2069 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_control()
2076 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_control()
2077 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_control()
2080 ring = endp->ring = &u132->ring[0]; in create_endpoint_and_queue_control()
2093 endp->u132 = u132; in create_endpoint_and_queue_control()
2095 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_control()
2096 u132_endp_get_kref(u132, endp); in create_endpoint_and_queue_control()
2098 u8 address = u132->addr[usb_addr].address; in create_endpoint_and_queue_control()
2099 struct u132_udev *udev = &u132->udev[address]; in create_endpoint_and_queue_control()
2106 u132_udev_init_kref(u132, udev); in create_endpoint_and_queue_control()
2107 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_control()
2110 urb->hcpriv = u132; in create_endpoint_and_queue_control()
2116 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_control()
2119 u8 address = u132->addr[usb_addr].address; in create_endpoint_and_queue_control()
2120 struct u132_udev *udev = &u132->udev[address]; in create_endpoint_and_queue_control()
2127 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_control()
2131 urb->hcpriv = u132; in create_endpoint_and_queue_control()
2137 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_control()
2142 static int queue_control_on_old_endpoint(struct u132 *u132, in queue_control_on_old_endpoint() argument
2149 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2168 struct u132_addr *addr = &u132->addr[usb_dev->devnum]; in queue_control_on_old_endpoint()
2172 struct u132_udev *udev = &u132->udev[++i]; in queue_control_on_old_endpoint()
2177 u132->addr[0].address = i; in queue_control_on_old_endpoint()
2181 u132_udev_init_kref(u132, udev); in queue_control_on_old_endpoint()
2184 u132_udev_get_kref(u132, udev); in queue_control_on_old_endpoint()
2190 u132_udev_get_kref(u132, udev); in queue_control_on_old_endpoint()
2195 dev_err(&u132->platform_dev->dev, "run out of d" in queue_control_on_old_endpoint()
2199 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2219 u8 address = u132->addr[usb_addr].address; in queue_control_on_old_endpoint()
2220 struct u132_udev *udev = &u132->udev[address]; in queue_control_on_old_endpoint()
2221 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2245 struct u132 *u132 = hcd_to_u132(hcd); in u132_urb_enqueue() local
2252 if (u132->going > 1) { in u132_urb_enqueue()
2253 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_urb_enqueue()
2254 , u132->going); in u132_urb_enqueue()
2256 } else if (u132->going > 0) { in u132_urb_enqueue()
2257 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_urb_enqueue()
2265 u8 address = u132->addr[usb_addr].address; in u132_urb_enqueue()
2266 struct u132_udev *udev = &u132->udev[address]; in u132_urb_enqueue()
2277 u132, udev, urb, in u132_urb_enqueue()
2290 u132_endp_queue_work(u132, endp, in u132_urb_enqueue()
2295 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2298 return create_endpoint_and_queue_int(u132, udev, in u132_urb_enqueue()
2303 dev_err(&u132->platform_dev->dev, "the hardware does no" in u132_urb_enqueue()
2307 u8 address = u132->addr[usb_addr].address; in u132_urb_enqueue()
2308 struct u132_udev *udev = &u132->udev[address]; in u132_urb_enqueue()
2319 u132, udev, urb, in u132_urb_enqueue()
2332 u132_endp_queue_work(u132, endp, 0); in u132_urb_enqueue()
2335 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2338 return create_endpoint_and_queue_bulk(u132, in u132_urb_enqueue()
2368 u132, urb, usb_dev, in u132_urb_enqueue()
2380 u132_endp_queue_work(u132, endp, 0); in u132_urb_enqueue()
2383 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2386 return create_endpoint_and_queue_control(u132, in u132_urb_enqueue()
2393 static int dequeue_from_overflow_chain(struct u132 *u132, in dequeue_from_overflow_chain() argument
2402 struct usb_hcd *hcd = u132_to_hcd(u132); in dequeue_from_overflow_chain()
2411 dev_err(&u132->platform_dev->dev, "urb=%p not found in endp[%d]=%p ring" in dequeue_from_overflow_chain()
2420 static int u132_endp_urb_dequeue(struct u132 *u132, struct u132_endp *endp, in u132_endp_urb_dequeue() argument
2427 rc = usb_hcd_check_unlink_urb(u132_to_hcd(u132), urb, status); in u132_endp_urb_dequeue()
2433 dev_err(&u132->platform_dev->dev, "urb=%p not found in endp[%d]" in u132_endp_urb_dequeue()
2445 u132_endp_queue_work(u132, endp, 0); in u132_endp_urb_dequeue()
2450 u132_hcd_abandon_urb(u132, endp, urb, status); in u132_endp_urb_dequeue()
2474 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_endp_urb_dequeue()
2494 dev_err(&u132->platform_dev->dev, "urb=%p not found in " in u132_endp_urb_dequeue()
2507 usb_hcd_unlink_urb_from_ep(u132_to_hcd(u132), urb); in u132_endp_urb_dequeue()
2508 retval = dequeue_from_overflow_chain(u132, endp, in u132_endp_urb_dequeue()
2518 struct u132 *u132 = hcd_to_u132(hcd); in u132_urb_dequeue() local
2519 if (u132->going > 2) { in u132_urb_dequeue()
2520 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_urb_dequeue()
2521 , u132->going); in u132_urb_dequeue()
2526 u8 address = u132->addr[usb_addr].address; in u132_urb_dequeue()
2527 struct u132_udev *udev = &u132->udev[address]; in u132_urb_dequeue()
2530 struct u132_endp *endp = u132->endp[endp_number - 1]; in u132_urb_dequeue()
2531 return u132_endp_urb_dequeue(u132, endp, urb, status); in u132_urb_dequeue()
2534 struct u132_endp *endp = u132->endp[endp_number - 1]; in u132_urb_dequeue()
2535 return u132_endp_urb_dequeue(u132, endp, urb, status); in u132_urb_dequeue()
2543 struct u132 *u132 = hcd_to_u132(hcd); in u132_endpoint_disable() local
2544 if (u132->going > 2) { in u132_endpoint_disable()
2545 dev_err(&u132->platform_dev->dev, "u132 device %p(hcd=%p hep=%p" in u132_endpoint_disable()
2546 ") has been removed %d\n", u132, hcd, hep, in u132_endpoint_disable()
2547 u132->going); in u132_endpoint_disable()
2551 u132_endp_put_kref(u132, endp); in u132_endpoint_disable()
2557 struct u132 *u132 = hcd_to_u132(hcd); in u132_get_frame() local
2558 if (u132->going > 1) { in u132_get_frame()
2559 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_get_frame()
2560 , u132->going); in u132_get_frame()
2562 } else if (u132->going > 0) { in u132_get_frame()
2563 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_get_frame()
2567 dev_err(&u132->platform_dev->dev, "TODO: u132_get_frame\n"); in u132_get_frame()
2573 static int u132_roothub_descriptor(struct u132 *u132, in u132_roothub_descriptor() argument
2580 retval = u132_read_pcimem(u132, roothub.a, &rh_a); in u132_roothub_descriptor()
2586 desc->bNbrPorts = u132->num_ports; in u132_roothub_descriptor()
2587 temp = 1 + (u132->num_ports / 8); in u132_roothub_descriptor()
2599 retval = u132_read_pcimem(u132, roothub.b, &rh_b); in u132_roothub_descriptor()
2605 if (u132->num_ports > 7) { in u132_roothub_descriptor()
2613 static int u132_roothub_status(struct u132 *u132, __le32 *desc) in u132_roothub_status() argument
2616 int ret_status = u132_read_pcimem(u132, roothub.status, &rh_status); in u132_roothub_status()
2621 static int u132_roothub_portstatus(struct u132 *u132, __le32 *desc, u16 wIndex) in u132_roothub_portstatus() argument
2623 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_portstatus()
2628 int ret_portstatus = u132_read_pcimem(u132, in u132_roothub_portstatus()
2632 dev_info(&u132->platform_dev->dev, "Port %d Status Chan" in u132_roothub_portstatus()
2645 static int u132_roothub_portreset(struct u132 *u132, int port_index) in u132_roothub_portreset() argument
2651 retval = u132_read_pcimem(u132, fmnumber, &fmnumber); in u132_roothub_portreset()
2659 retval = u132_read_pcimem(u132, in u132_roothub_portreset()
2672 retval = u132_write_pcimem(u132, in u132_roothub_portreset()
2681 retval = u132_write_pcimem(u132, roothub.portstatus[port_index], in u132_roothub_portreset()
2686 retval = u132_read_pcimem(u132, fmnumber, &fmnumber); in u132_roothub_portreset()
2694 static int u132_roothub_setportfeature(struct u132 *u132, u16 wValue, in u132_roothub_setportfeature() argument
2697 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_setportfeature()
2701 struct u132_port *port = &u132->port[port_index]; in u132_roothub_setportfeature()
2705 return u132_write_pcimem(u132, in u132_roothub_setportfeature()
2708 return u132_write_pcimem(u132, in u132_roothub_setportfeature()
2711 return u132_roothub_portreset(u132, port_index); in u132_roothub_setportfeature()
2718 static int u132_roothub_clearportfeature(struct u132 *u132, u16 wValue, in u132_roothub_clearportfeature() argument
2721 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_clearportfeature()
2726 struct u132_port *port = &u132->port[port_index]; in u132_roothub_clearportfeature()
2737 if ((u132->hc_control & OHCI_CTRL_HCFS) in u132_roothub_clearportfeature()
2739 dev_err(&u132->platform_dev->dev, "TODO resume_" in u132_roothub_clearportfeature()
2761 return u132_write_pcimem(u132, roothub.portstatus[port_index], in u132_roothub_clearportfeature()
2770 struct u132 *u132 = hcd_to_u132(hcd); in u132_hub_status_data() local
2771 if (u132->going > 1) { in u132_hub_status_data()
2772 dev_err(&u132->platform_dev->dev, "device hcd=%p has been remov" in u132_hub_status_data()
2773 "ed %d\n", hcd, u132->going); in u132_hub_status_data()
2775 } else if (u132->going > 0) { in u132_hub_status_data()
2776 dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov" in u132_hub_status_data()
2781 if (u132->flags & OHCI_QUIRK_AMD756) { in u132_hub_status_data()
2782 if ((u132->hc_roothub_a & RH_A_NDP) > MAX_ROOT_PORTS) { in u132_hub_status_data()
2783 dev_err(&u132->platform_dev->dev, "bogus NDP, r" in u132_hub_status_data()
2785 u132->hc_roothub_a & RH_A_NDP); in u132_hub_status_data()
2789 if (u132->hc_roothub_status & (RH_HS_LPSC | RH_HS_OCIC)) in u132_hub_status_data()
2793 if (u132->num_ports > 7) { in u132_hub_status_data()
2797 for (i = 0; i < u132->num_ports; i++) { in u132_hub_status_data()
2798 if (u132->hc_roothub_portstatus[i] & (RH_PS_CSC | in u132_hub_status_data()
2808 if (!(u132->hc_roothub_portstatus[i] & RH_PS_CCS)) in u132_hub_status_data()
2811 if ((u132->hc_roothub_portstatus[i] & RH_PS_PSS)) in u132_hub_status_data()
2822 struct u132 *u132 = hcd_to_u132(hcd); in u132_hub_control() local
2823 if (u132->going > 1) { in u132_hub_control()
2824 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hub_control()
2825 , u132->going); in u132_hub_control()
2827 } else if (u132->going > 0) { in u132_hub_control()
2828 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hub_control()
2832 mutex_lock(&u132->sw_lock); in u132_hub_control()
2853 retval = u132_roothub_clearportfeature(u132, in u132_hub_control()
2860 retval = u132_roothub_descriptor(u132, in u132_hub_control()
2867 retval = u132_roothub_status(u132, in u132_hub_control()
2874 retval = u132_roothub_portstatus(u132, in u132_hub_control()
2881 retval = u132_roothub_setportfeature(u132, in u132_hub_control()
2890 u132_disable(u132); in u132_hub_control()
2891 u132->going = 1; in u132_hub_control()
2897 mutex_unlock(&u132->sw_lock); in u132_hub_control()
2904 struct u132 *u132 = hcd_to_u132(hcd); in u132_start_port_reset() local
2905 if (u132->going > 1) { in u132_start_port_reset()
2906 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_start_port_reset()
2907 , u132->going); in u132_start_port_reset()
2909 } else if (u132->going > 0) { in u132_start_port_reset()
2910 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_start_port_reset()
2920 struct u132 *u132 = hcd_to_u132(hcd); in u132_bus_suspend() local
2921 if (u132->going > 1) { in u132_bus_suspend()
2922 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_bus_suspend()
2923 , u132->going); in u132_bus_suspend()
2925 } else if (u132->going > 0) { in u132_bus_suspend()
2926 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_bus_suspend()
2934 struct u132 *u132 = hcd_to_u132(hcd); in u132_bus_resume() local
2935 if (u132->going > 1) { in u132_bus_resume()
2936 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_bus_resume()
2937 , u132->going); in u132_bus_resume()
2939 } else if (u132->going > 0) { in u132_bus_resume()
2940 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_bus_resume()
2952 .hcd_priv_size = sizeof(struct u132),
2979 struct u132 *u132 = hcd_to_u132(hcd); in u132_remove() local
2980 if (u132->going++ > 1) { in u132_remove()
2981 dev_err(&u132->platform_dev->dev, "already being remove" in u132_remove()
2987 dev_err(&u132->platform_dev->dev, "removing device u132" in u132_remove()
2988 ".%d\n", u132->sequence_num); in u132_remove()
2990 mutex_lock(&u132->sw_lock); in u132_remove()
2991 u132_monitor_cancel_work(u132); in u132_remove()
2993 struct u132_ring *ring = &u132->ring[rings]; in u132_remove()
2994 u132_ring_cancel_work(u132, ring); in u132_remove()
2996 struct u132_endp *endp = u132->endp[endps]; in u132_remove()
2998 u132_endp_cancel_work(u132, endp); in u132_remove()
3000 u132->going += 1; in u132_remove()
3002 u132->sequence_num); in u132_remove()
3003 mutex_unlock(&u132->sw_lock); in u132_remove()
3005 u132_u132_put_kref(u132); in u132_remove()
3012 static void u132_initialise(struct u132 *u132, struct platform_device *pdev) in u132_initialise() argument
3019 u132->board = dev_get_platdata(&pdev->dev); in u132_initialise()
3020 u132->platform_dev = pdev; in u132_initialise()
3021 u132->power = 0; in u132_initialise()
3022 u132->reset = 0; in u132_initialise()
3023 mutex_init(&u132->sw_lock); in u132_initialise()
3024 mutex_init(&u132->scheduler_lock); in u132_initialise()
3026 struct u132_ring *ring = &u132->ring[rings]; in u132_initialise()
3027 ring->u132 = u132; in u132_initialise()
3034 mutex_lock(&u132->sw_lock); in u132_initialise()
3035 INIT_DELAYED_WORK(&u132->monitor, u132_hcd_monitor_work); in u132_initialise()
3037 struct u132_port *port = &u132->port[ports]; in u132_initialise()
3038 port->u132 = u132; in u132_initialise()
3045 struct u132_addr *addr = &u132->addr[addrs]; in u132_initialise()
3049 struct u132_udev *udev = &u132->udev[udevs]; in u132_initialise()
3064 u132->endp[endps] = NULL; in u132_initialise()
3066 mutex_unlock(&u132->sw_lock); in u132_initialise()
3101 struct u132 *u132 = hcd_to_u132(hcd); in u132_probe() local
3105 list_add_tail(&u132->u132_list, &u132_static_list); in u132_probe()
3106 u132->sequence_num = ++u132_instances; in u132_probe()
3108 u132_u132_init_kref(u132); in u132_probe()
3109 u132_initialise(u132, pdev); in u132_probe()
3113 dev_err(&u132->platform_dev->dev, "init error %d\n", in u132_probe()
3115 u132_u132_put_kref(u132); in u132_probe()
3119 u132_monitor_queue_work(u132, 100); in u132_probe()
3134 struct u132 *u132 = hcd_to_u132(hcd); in u132_suspend() local
3135 if (u132->going > 1) { in u132_suspend()
3136 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_suspend()
3137 , u132->going); in u132_suspend()
3139 } else if (u132->going > 0) { in u132_suspend()
3140 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_suspend()
3153 port_power(u132, ports, 0); in u132_suspend()
3164 struct u132 *u132 = hcd_to_u132(hcd); in u132_resume() local
3165 if (u132->going > 1) { in u132_resume()
3166 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_resume()
3167 , u132->going); in u132_resume()
3169 } else if (u132->going > 0) { in u132_resume()
3170 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_resume()
3174 if (!u132->port[0].power) { in u132_resume()
3177 port_power(u132, ports, 1); in u132_resume()
3224 struct u132 *u132; in u132_hcd_exit() local
3225 struct u132 *temp; in u132_hcd_exit()
3229 list_for_each_entry_safe(u132, temp, &u132_static_list, u132_list) { in u132_hcd_exit()
3230 platform_device_unregister(u132->platform_dev); in u132_hcd_exit()