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 retval = u132_write_pcimem(u132, periodicstart, in u132_periodic_reinit()
1567 static int u132_init(struct u132 *u132) in u132_init() argument
1571 u132_disable(u132); in u132_init()
1572 u132->next_statechange = jiffies; in u132_init()
1573 retval = u132_write_pcimem(u132, intrdisable, OHCI_INTR_MIE); in u132_init()
1576 retval = u132_read_pcimem(u132, control, &control); in u132_init()
1579 if (u132->num_ports == 0) { in u132_init()
1581 retval = u132_read_pcimem(u132, roothub.a, &rh_a); in u132_init()
1584 u132->num_ports = rh_a & RH_A_NDP; in u132_init()
1585 retval = read_roothub_info(u132); in u132_init()
1589 if (u132->num_ports > MAX_U132_PORTS) in u132_init()
1600 static int u132_run(struct u132 *u132) in u132_run() argument
1610 int first = u132->hc_fminterval == 0; in u132_run()
1613 u132_disable(u132); in u132_run()
1616 retval = u132_read_pcimem(u132, fminterval, &temp); in u132_run()
1619 u132->hc_fminterval = temp & 0x3fff; in u132_run()
1620 u132->hc_fminterval |= FSMP(u132->hc_fminterval) << 16; in u132_run()
1622 retval = u132_read_pcimem(u132, control, &u132->hc_control); in u132_run()
1625 dev_info(&u132->platform_dev->dev, "resetting from state '%s', control " in u132_run()
1626 "= %08X\n", hcfs2string(u132->hc_control & OHCI_CTRL_HCFS), in u132_run()
1627 u132->hc_control); in u132_run()
1628 switch (u132->hc_control & OHCI_CTRL_HCFS) { in u132_run()
1634 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1635 u132->hc_control |= OHCI_USB_RESUME; in u132_run()
1639 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1640 u132->hc_control |= OHCI_USB_RESET; in u132_run()
1644 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1647 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1651 retval = u132_read_pcimem(u132, roothub.a, &roothub_a); in u132_run()
1656 for (temp = 0; temp < u132->num_ports; temp++) { in u132_run()
1657 retval = u132_write_pcimem(u132, in u132_run()
1663 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1667 retval = u132_read_pcimem(u132, cmdstatus, &status); in u132_run()
1670 retval = u132_write_pcimem(u132, cmdstatus, OHCI_HCR); in u132_run()
1674 retval = u132_read_pcimem(u132, cmdstatus, &status); in u132_run()
1679 dev_err(&u132->platform_dev->dev, "USB HC reset" in u132_run()
1688 if (u132->flags & OHCI_QUIRK_INITRESET) { in u132_run()
1689 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1692 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1696 retval = u132_write_pcimem(u132, ed_controlhead, 0x00000000); in u132_run()
1699 retval = u132_write_pcimem(u132, ed_bulkhead, 0x11000000); in u132_run()
1702 retval = u132_write_pcimem(u132, hcca, 0x00000000); in u132_run()
1705 retval = u132_periodic_reinit(u132); in u132_run()
1708 retval = u132_read_pcimem(u132, fminterval, &fminterval); in u132_run()
1711 retval = u132_read_pcimem(u132, periodicstart, &periodicstart); in u132_run()
1715 if (!(u132->flags & OHCI_QUIRK_INITRESET)) { in u132_run()
1716 u132->flags |= OHCI_QUIRK_INITRESET; in u132_run()
1719 dev_err(&u132->platform_dev->dev, "init err(%08x %04x)" in u132_run()
1722 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1723 u132->hc_control |= OHCI_CONTROL_INIT | OHCI_CTRL_BLE | OHCI_USB_OPER; in u132_run()
1724 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1727 retval = u132_write_pcimem(u132, cmdstatus, OHCI_BLF); in u132_run()
1730 retval = u132_read_pcimem(u132, cmdstatus, &cmdstatus); in u132_run()
1733 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1736 u132_to_hcd(u132)->state = HC_STATE_RUNNING; in u132_run()
1737 retval = u132_write_pcimem(u132, roothub.status, RH_HS_DRWE); in u132_run()
1740 retval = u132_write_pcimem(u132, intrstatus, mask); in u132_run()
1743 retval = u132_write_pcimem(u132, intrdisable, in u132_run()
1749 retval = u132_read_pcimem(u132, roothub.a, &roothub_a); in u132_run()
1753 if (u132->flags & OHCI_QUIRK_SUPERIO) { in u132_run()
1756 retval = u132_write_pcimem(u132, roothub.a, roothub_a); in u132_run()
1759 } else if ((u132->flags & OHCI_QUIRK_AMD756) || distrust_firmware) { in u132_run()
1761 retval = u132_write_pcimem(u132, roothub.a, roothub_a); in u132_run()
1765 retval = u132_write_pcimem(u132, roothub.status, RH_HS_LPSC); in u132_run()
1768 retval = u132_write_pcimem(u132, roothub.b, in u132_run()
1772 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1776 u132_to_hcd(u132)->state = HC_STATE_RUNNING; in u132_run()
1782 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_stop() local
1783 if (u132->going > 1) { in u132_hcd_stop()
1784 dev_err(&u132->platform_dev->dev, "u132 device %p(hcd=%p) has b" in u132_hcd_stop()
1785 "een removed %d\n", u132, hcd, u132->going); in u132_hcd_stop()
1786 } else if (u132->going > 0) { in u132_hcd_stop()
1787 dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov" in u132_hcd_stop()
1790 mutex_lock(&u132->sw_lock); in u132_hcd_stop()
1792 u132_power(u132, 0); in u132_hcd_stop()
1793 mutex_unlock(&u132->sw_lock); in u132_hcd_stop()
1799 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_start() local
1800 if (u132->going > 1) { in u132_hcd_start()
1801 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_start()
1802 , u132->going); in u132_hcd_start()
1804 } else if (u132->going > 0) { in u132_hcd_start()
1805 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hcd_start()
1815 mutex_lock(&u132->sw_lock); in u132_hcd_start()
1818 u132->flags = OHCI_QUIRK_AMD756; in u132_hcd_start()
1820 dev_err(&u132->platform_dev->dev, "WARNING: OPTi workar" in u132_hcd_start()
1823 u132->flags |= OHCI_QUIRK_ZFMICRO; in u132_hcd_start()
1824 retval = u132_run(u132); in u132_hcd_start()
1826 u132_disable(u132); in u132_hcd_start()
1827 u132->going = 1; in u132_hcd_start()
1830 mutex_unlock(&u132->sw_lock); in u132_hcd_start()
1833 dev_err(&u132->platform_dev->dev, "platform_device missing\n"); in u132_hcd_start()
1840 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_reset() local
1841 if (u132->going > 1) { in u132_hcd_reset()
1842 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_reset()
1843 , u132->going); in u132_hcd_reset()
1845 } else if (u132->going > 0) { in u132_hcd_reset()
1846 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hcd_reset()
1850 mutex_lock(&u132->sw_lock); in u132_hcd_reset()
1851 retval = u132_init(u132); in u132_hcd_reset()
1853 u132_disable(u132); in u132_hcd_reset()
1854 u132->going = 1; in u132_hcd_reset()
1856 mutex_unlock(&u132->sw_lock); in u132_hcd_reset()
1861 static int create_endpoint_and_queue_int(struct u132 *u132, in create_endpoint_and_queue_int() argument
1877 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_int()
1884 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_int()
1885 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_int()
1888 ring = endp->ring = &u132->ring[0]; in create_endpoint_and_queue_int()
1901 endp->u132 = u132; in create_endpoint_and_queue_int()
1904 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_int()
1911 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_int()
1918 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_int()
1920 urb->hcpriv = u132; in create_endpoint_and_queue_int()
1931 u132_endp_queue_work(u132, endp, msecs_to_jiffies(urb->interval)); in create_endpoint_and_queue_int()
1935 static int queue_int_on_old_endpoint(struct u132 *u132, in queue_int_on_old_endpoint() argument
1940 urb->hcpriv = u132; in queue_int_on_old_endpoint()
1959 static int create_endpoint_and_queue_bulk(struct u132 *u132, in create_endpoint_and_queue_bulk() argument
1976 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_bulk()
1983 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_bulk()
1984 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_bulk()
1992 endp->u132 = u132; in create_endpoint_and_queue_bulk()
1995 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_bulk()
2003 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_bulk()
2011 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_bulk()
2013 ring = endp->ring = &u132->ring[ring_number - 1]; in create_endpoint_and_queue_bulk()
2021 urb->hcpriv = u132; in create_endpoint_and_queue_bulk()
2030 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_bulk()
2034 static int queue_bulk_on_old_endpoint(struct u132 *u132, struct u132_udev *udev, in queue_bulk_on_old_endpoint() argument
2039 urb->hcpriv = u132; in queue_bulk_on_old_endpoint()
2056 static int create_endpoint_and_queue_control(struct u132 *u132, in create_endpoint_and_queue_control() argument
2072 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_control()
2079 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_control()
2080 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_control()
2083 ring = endp->ring = &u132->ring[0]; in create_endpoint_and_queue_control()
2096 endp->u132 = u132; in create_endpoint_and_queue_control()
2098 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_control()
2099 u132_endp_get_kref(u132, endp); in create_endpoint_and_queue_control()
2101 u8 address = u132->addr[usb_addr].address; in create_endpoint_and_queue_control()
2102 struct u132_udev *udev = &u132->udev[address]; in create_endpoint_and_queue_control()
2109 u132_udev_init_kref(u132, udev); in create_endpoint_and_queue_control()
2110 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_control()
2113 urb->hcpriv = u132; in create_endpoint_and_queue_control()
2119 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_control()
2122 u8 address = u132->addr[usb_addr].address; in create_endpoint_and_queue_control()
2123 struct u132_udev *udev = &u132->udev[address]; in create_endpoint_and_queue_control()
2130 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_control()
2134 urb->hcpriv = u132; in create_endpoint_and_queue_control()
2140 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_control()
2145 static int queue_control_on_old_endpoint(struct u132 *u132, in queue_control_on_old_endpoint() argument
2152 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2171 struct u132_addr *addr = &u132->addr[usb_dev->devnum]; in queue_control_on_old_endpoint()
2175 struct u132_udev *udev = &u132->udev[++i]; in queue_control_on_old_endpoint()
2180 u132->addr[0].address = i; in queue_control_on_old_endpoint()
2184 u132_udev_init_kref(u132, udev); in queue_control_on_old_endpoint()
2187 u132_udev_get_kref(u132, udev); in queue_control_on_old_endpoint()
2193 u132_udev_get_kref(u132, udev); in queue_control_on_old_endpoint()
2198 dev_err(&u132->platform_dev->dev, "run out of d" in queue_control_on_old_endpoint()
2202 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2222 u8 address = u132->addr[usb_addr].address; in queue_control_on_old_endpoint()
2223 struct u132_udev *udev = &u132->udev[address]; in queue_control_on_old_endpoint()
2224 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2248 struct u132 *u132 = hcd_to_u132(hcd); in u132_urb_enqueue() local
2256 if (u132->going > 1) { in u132_urb_enqueue()
2257 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_urb_enqueue()
2258 , u132->going); in u132_urb_enqueue()
2260 } else if (u132->going > 0) { in u132_urb_enqueue()
2261 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_urb_enqueue()
2269 u8 address = u132->addr[usb_addr].address; in u132_urb_enqueue()
2270 struct u132_udev *udev = &u132->udev[address]; in u132_urb_enqueue()
2281 u132, udev, urb, in u132_urb_enqueue()
2294 u132_endp_queue_work(u132, endp, in u132_urb_enqueue()
2299 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2302 return create_endpoint_and_queue_int(u132, udev, in u132_urb_enqueue()
2307 dev_err(&u132->platform_dev->dev, "the hardware does no" in u132_urb_enqueue()
2311 u8 address = u132->addr[usb_addr].address; in u132_urb_enqueue()
2312 struct u132_udev *udev = &u132->udev[address]; in u132_urb_enqueue()
2323 u132, udev, urb, in u132_urb_enqueue()
2336 u132_endp_queue_work(u132, endp, 0); in u132_urb_enqueue()
2339 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2342 return create_endpoint_and_queue_bulk(u132, in u132_urb_enqueue()
2372 u132, urb, usb_dev, in u132_urb_enqueue()
2384 u132_endp_queue_work(u132, endp, 0); in u132_urb_enqueue()
2387 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2390 return create_endpoint_and_queue_control(u132, in u132_urb_enqueue()
2397 static int dequeue_from_overflow_chain(struct u132 *u132, in dequeue_from_overflow_chain() argument
2406 struct usb_hcd *hcd = u132_to_hcd(u132); in dequeue_from_overflow_chain()
2415 dev_err(&u132->platform_dev->dev, "urb=%p not found in endp[%d]=%p ring" in dequeue_from_overflow_chain()
2424 static int u132_endp_urb_dequeue(struct u132 *u132, struct u132_endp *endp, in u132_endp_urb_dequeue() argument
2431 rc = usb_hcd_check_unlink_urb(u132_to_hcd(u132), urb, status); in u132_endp_urb_dequeue()
2437 dev_err(&u132->platform_dev->dev, "urb=%p not found in endp[%d]" in u132_endp_urb_dequeue()
2449 u132_endp_queue_work(u132, endp, 0); in u132_endp_urb_dequeue()
2454 u132_hcd_abandon_urb(u132, endp, urb, status); in u132_endp_urb_dequeue()
2478 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_endp_urb_dequeue()
2498 dev_err(&u132->platform_dev->dev, "urb=%p not found in " in u132_endp_urb_dequeue()
2511 usb_hcd_unlink_urb_from_ep(u132_to_hcd(u132), urb); in u132_endp_urb_dequeue()
2512 retval = dequeue_from_overflow_chain(u132, endp, in u132_endp_urb_dequeue()
2522 struct u132 *u132 = hcd_to_u132(hcd); in u132_urb_dequeue() local
2523 if (u132->going > 2) { in u132_urb_dequeue()
2524 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_urb_dequeue()
2525 , u132->going); in u132_urb_dequeue()
2530 u8 address = u132->addr[usb_addr].address; in u132_urb_dequeue()
2531 struct u132_udev *udev = &u132->udev[address]; 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()
2538 struct u132_endp *endp = u132->endp[endp_number - 1]; in u132_urb_dequeue()
2539 return u132_endp_urb_dequeue(u132, endp, urb, status); in u132_urb_dequeue()
2547 struct u132 *u132 = hcd_to_u132(hcd); in u132_endpoint_disable() local
2548 if (u132->going > 2) { in u132_endpoint_disable()
2549 dev_err(&u132->platform_dev->dev, "u132 device %p(hcd=%p hep=%p" in u132_endpoint_disable()
2550 ") has been removed %d\n", u132, hcd, hep, in u132_endpoint_disable()
2551 u132->going); in u132_endpoint_disable()
2555 u132_endp_put_kref(u132, endp); in u132_endpoint_disable()
2561 struct u132 *u132 = hcd_to_u132(hcd); in u132_get_frame() local
2562 if (u132->going > 1) { in u132_get_frame()
2563 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_get_frame()
2564 , u132->going); in u132_get_frame()
2566 } else if (u132->going > 0) { in u132_get_frame()
2567 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_get_frame()
2571 dev_err(&u132->platform_dev->dev, "TODO: u132_get_frame\n"); in u132_get_frame()
2577 static int u132_roothub_descriptor(struct u132 *u132, in u132_roothub_descriptor() argument
2584 retval = u132_read_pcimem(u132, roothub.a, &rh_a); in u132_roothub_descriptor()
2590 desc->bNbrPorts = u132->num_ports; in u132_roothub_descriptor()
2591 temp = 1 + (u132->num_ports / 8); in u132_roothub_descriptor()
2603 retval = u132_read_pcimem(u132, roothub.b, &rh_b); in u132_roothub_descriptor()
2609 if (u132->num_ports > 7) { in u132_roothub_descriptor()
2617 static int u132_roothub_status(struct u132 *u132, __le32 *desc) in u132_roothub_status() argument
2620 int ret_status = u132_read_pcimem(u132, roothub.status, &rh_status); in u132_roothub_status()
2625 static int u132_roothub_portstatus(struct u132 *u132, __le32 *desc, u16 wIndex) in u132_roothub_portstatus() argument
2627 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_portstatus()
2632 int ret_portstatus = u132_read_pcimem(u132, in u132_roothub_portstatus()
2636 dev_info(&u132->platform_dev->dev, "Port %d Status Chan" in u132_roothub_portstatus()
2649 static int u132_roothub_portreset(struct u132 *u132, int port_index) in u132_roothub_portreset() argument
2655 retval = u132_read_pcimem(u132, fmnumber, &fmnumber); in u132_roothub_portreset()
2663 retval = u132_read_pcimem(u132, in u132_roothub_portreset()
2676 retval = u132_write_pcimem(u132, in u132_roothub_portreset()
2685 retval = u132_write_pcimem(u132, roothub.portstatus[port_index], in u132_roothub_portreset()
2690 retval = u132_read_pcimem(u132, fmnumber, &fmnumber); in u132_roothub_portreset()
2698 static int u132_roothub_setportfeature(struct u132 *u132, u16 wValue, in u132_roothub_setportfeature() argument
2701 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_setportfeature()
2706 struct u132_port *port = &u132->port[port_index]; in u132_roothub_setportfeature()
2710 retval = u132_write_pcimem(u132, in u132_roothub_setportfeature()
2716 retval = u132_write_pcimem(u132, in u132_roothub_setportfeature()
2722 retval = u132_roothub_portreset(u132, port_index); in u132_roothub_setportfeature()
2732 static int u132_roothub_clearportfeature(struct u132 *u132, u16 wValue, in u132_roothub_clearportfeature() argument
2735 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_clearportfeature()
2741 struct u132_port *port = &u132->port[port_index]; in u132_roothub_clearportfeature()
2752 if ((u132->hc_control & OHCI_CTRL_HCFS) in u132_roothub_clearportfeature()
2754 dev_err(&u132->platform_dev->dev, "TODO resume_" in u132_roothub_clearportfeature()
2776 retval = u132_write_pcimem(u132, roothub.portstatus[port_index], in u132_roothub_clearportfeature()
2788 struct u132 *u132 = hcd_to_u132(hcd); in u132_hub_status_data() local
2789 if (u132->going > 1) { in u132_hub_status_data()
2790 dev_err(&u132->platform_dev->dev, "device hcd=%p has been remov" in u132_hub_status_data()
2791 "ed %d\n", hcd, u132->going); in u132_hub_status_data()
2793 } else if (u132->going > 0) { in u132_hub_status_data()
2794 dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov" in u132_hub_status_data()
2799 if (u132->flags & OHCI_QUIRK_AMD756) { in u132_hub_status_data()
2800 if ((u132->hc_roothub_a & RH_A_NDP) > MAX_ROOT_PORTS) { in u132_hub_status_data()
2801 dev_err(&u132->platform_dev->dev, "bogus NDP, r" in u132_hub_status_data()
2803 u132->hc_roothub_a & RH_A_NDP); in u132_hub_status_data()
2807 if (u132->hc_roothub_status & (RH_HS_LPSC | RH_HS_OCIC)) in u132_hub_status_data()
2811 if (u132->num_ports > 7) { in u132_hub_status_data()
2815 for (i = 0; i < u132->num_ports; i++) { in u132_hub_status_data()
2816 if (u132->hc_roothub_portstatus[i] & (RH_PS_CSC | in u132_hub_status_data()
2826 if (!(u132->hc_roothub_portstatus[i] & RH_PS_CCS)) in u132_hub_status_data()
2829 if ((u132->hc_roothub_portstatus[i] & RH_PS_PSS)) in u132_hub_status_data()
2840 struct u132 *u132 = hcd_to_u132(hcd); in u132_hub_control() local
2841 if (u132->going > 1) { in u132_hub_control()
2842 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hub_control()
2843 , u132->going); in u132_hub_control()
2845 } else if (u132->going > 0) { in u132_hub_control()
2846 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hub_control()
2850 mutex_lock(&u132->sw_lock); in u132_hub_control()
2871 retval = u132_roothub_clearportfeature(u132, in u132_hub_control()
2878 retval = u132_roothub_descriptor(u132, in u132_hub_control()
2885 retval = u132_roothub_status(u132, in u132_hub_control()
2892 retval = u132_roothub_portstatus(u132, in u132_hub_control()
2899 retval = u132_roothub_setportfeature(u132, in u132_hub_control()
2908 u132_disable(u132); in u132_hub_control()
2909 u132->going = 1; in u132_hub_control()
2915 mutex_unlock(&u132->sw_lock); in u132_hub_control()
2922 struct u132 *u132 = hcd_to_u132(hcd); in u132_start_port_reset() local
2923 if (u132->going > 1) { in u132_start_port_reset()
2924 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_start_port_reset()
2925 , u132->going); in u132_start_port_reset()
2927 } else if (u132->going > 0) { in u132_start_port_reset()
2928 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_start_port_reset()
2938 struct u132 *u132 = hcd_to_u132(hcd); in u132_bus_suspend() local
2939 if (u132->going > 1) { in u132_bus_suspend()
2940 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_bus_suspend()
2941 , u132->going); in u132_bus_suspend()
2943 } else if (u132->going > 0) { in u132_bus_suspend()
2944 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_bus_suspend()
2952 struct u132 *u132 = hcd_to_u132(hcd); in u132_bus_resume() local
2953 if (u132->going > 1) { in u132_bus_resume()
2954 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_bus_resume()
2955 , u132->going); in u132_bus_resume()
2957 } else if (u132->going > 0) { in u132_bus_resume()
2958 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_bus_resume()
2970 .hcd_priv_size = sizeof(struct u132),
2997 struct u132 *u132 = hcd_to_u132(hcd); in u132_remove() local
2998 if (u132->going++ > 1) { in u132_remove()
2999 dev_err(&u132->platform_dev->dev, "already being remove" in u132_remove()
3005 dev_err(&u132->platform_dev->dev, "removing device u132" in u132_remove()
3006 ".%d\n", u132->sequence_num); in u132_remove()
3008 mutex_lock(&u132->sw_lock); in u132_remove()
3009 u132_monitor_cancel_work(u132); in u132_remove()
3011 struct u132_ring *ring = &u132->ring[rings]; in u132_remove()
3012 u132_ring_cancel_work(u132, ring); in u132_remove()
3014 struct u132_endp *endp = u132->endp[endps]; in u132_remove()
3016 u132_endp_cancel_work(u132, endp); in u132_remove()
3018 u132->going += 1; in u132_remove()
3020 u132->sequence_num); in u132_remove()
3021 mutex_unlock(&u132->sw_lock); in u132_remove()
3023 u132_u132_put_kref(u132); in u132_remove()
3030 static void u132_initialise(struct u132 *u132, struct platform_device *pdev) in u132_initialise() argument
3037 u132->board = dev_get_platdata(&pdev->dev); in u132_initialise()
3038 u132->platform_dev = pdev; in u132_initialise()
3039 u132->power = 0; in u132_initialise()
3040 u132->reset = 0; in u132_initialise()
3041 mutex_init(&u132->sw_lock); in u132_initialise()
3042 mutex_init(&u132->scheduler_lock); in u132_initialise()
3044 struct u132_ring *ring = &u132->ring[rings]; in u132_initialise()
3045 ring->u132 = u132; in u132_initialise()
3052 mutex_lock(&u132->sw_lock); in u132_initialise()
3053 INIT_DELAYED_WORK(&u132->monitor, u132_hcd_monitor_work); in u132_initialise()
3055 struct u132_port *port = &u132->port[ports]; in u132_initialise()
3056 port->u132 = u132; in u132_initialise()
3063 struct u132_addr *addr = &u132->addr[addrs]; in u132_initialise()
3067 struct u132_udev *udev = &u132->udev[udevs]; in u132_initialise()
3082 u132->endp[endps] = NULL; in u132_initialise()
3084 mutex_unlock(&u132->sw_lock); in u132_initialise()
3119 struct u132 *u132 = hcd_to_u132(hcd); in u132_probe() local
3123 list_add_tail(&u132->u132_list, &u132_static_list); in u132_probe()
3124 u132->sequence_num = ++u132_instances; in u132_probe()
3126 u132_u132_init_kref(u132); in u132_probe()
3127 u132_initialise(u132, pdev); in u132_probe()
3131 dev_err(&u132->platform_dev->dev, "init error %d\n", in u132_probe()
3133 u132_u132_put_kref(u132); in u132_probe()
3137 u132_monitor_queue_work(u132, 100); in u132_probe()
3152 struct u132 *u132 = hcd_to_u132(hcd); in u132_suspend() local
3153 if (u132->going > 1) { in u132_suspend()
3154 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_suspend()
3155 , u132->going); in u132_suspend()
3157 } else if (u132->going > 0) { in u132_suspend()
3158 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_suspend()
3171 port_power(u132, ports, 0); in u132_suspend()
3182 struct u132 *u132 = hcd_to_u132(hcd); in u132_resume() local
3183 if (u132->going > 1) { in u132_resume()
3184 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_resume()
3185 , u132->going); in u132_resume()
3187 } else if (u132->going > 0) { in u132_resume()
3188 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_resume()
3192 if (!u132->port[0].power) { in u132_resume()
3195 port_power(u132, ports, 1); in u132_resume()
3242 struct u132 *u132; in u132_hcd_exit() local
3243 struct u132 *temp; in u132_hcd_exit()
3247 list_for_each_entry_safe(u132, temp, &u132_static_list, u132_list) { in u132_hcd_exit()
3248 platform_device_unregister(u132->platform_dev); in u132_hcd_exit()