Lines Matching refs:u132

113 	struct u132 *u132;  member
148 struct u132 *u132; member
174 struct u132 *u132; member
178 struct u132 { struct
214 #define u132_read_pcimem(u132, member, data) \ argument
215 usb_ftdi_elan_read_pcimem(u132->platform_dev, offsetof(struct \
217 #define u132_write_pcimem(u132, member, data) \ argument
218 usb_ftdi_elan_write_pcimem(u132->platform_dev, offsetof(struct \
220 static inline struct u132 *udev_to_u132(struct u132_udev *udev) in udev_to_u132()
223 return container_of(udev, struct u132, udev[udev_number]); in udev_to_u132()
226 static inline struct u132 *hcd_to_u132(struct usb_hcd *hcd) in hcd_to_u132()
228 return (struct u132 *)(hcd->hcd_priv); in hcd_to_u132()
231 static inline struct usb_hcd *u132_to_hcd(struct u132 *u132) in u132_to_hcd() argument
233 return container_of((void *)u132, struct usb_hcd, hcd_priv); in u132_to_hcd()
236 static inline void u132_disable(struct u132 *u132) in u132_disable() argument
238 u132_to_hcd(u132)->state = HC_STATE_HALT; in u132_disable()
242 #define kref_to_u132(d) container_of(d, struct u132, kref)
252 struct u132 *u132 = kref_to_u132(kref); in u132_hcd_delete() local
253 struct platform_device *pdev = u132->platform_dev; in u132_hcd_delete()
254 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_hcd_delete()
255 u132->going += 1; in u132_hcd_delete()
257 list_del_init(&u132->u132_list); in u132_hcd_delete()
260 dev_warn(&u132->platform_dev->dev, "FREEING the hcd=%p and thus the u13" in u132_hcd_delete()
261 "2=%p going=%d pdev=%p\n", hcd, u132, u132->going, pdev); in u132_hcd_delete()
265 static inline void u132_u132_put_kref(struct u132 *u132) in u132_u132_put_kref() argument
267 kref_put(&u132->kref, u132_hcd_delete); in u132_u132_put_kref()
270 static inline void u132_u132_init_kref(struct u132 *u132) in u132_u132_init_kref() argument
272 kref_init(&u132->kref); in u132_u132_init_kref()
284 static inline void u132_udev_put_kref(struct u132 *u132, struct u132_udev *udev) in u132_udev_put_kref() argument
289 static inline void u132_udev_get_kref(struct u132 *u132, struct u132_udev *udev) in u132_udev_get_kref() argument
294 static inline void u132_udev_init_kref(struct u132 *u132, in u132_udev_init_kref() argument
300 static inline void u132_ring_put_kref(struct u132 *u132, struct u132_ring *ring) in u132_ring_put_kref() argument
302 kref_put(&u132->kref, u132_hcd_delete); in u132_ring_put_kref()
305 static void u132_ring_requeue_work(struct u132 *u132, struct u132_ring *ring, in u132_ring_requeue_work() argument
313 kref_put(&u132->kref, u132_hcd_delete); in u132_ring_requeue_work()
316 static void u132_ring_queue_work(struct u132 *u132, struct u132_ring *ring, in u132_ring_queue_work() argument
319 kref_get(&u132->kref); in u132_ring_queue_work()
320 u132_ring_requeue_work(u132, ring, delta); in u132_ring_queue_work()
323 static void u132_ring_cancel_work(struct u132 *u132, struct u132_ring *ring) in u132_ring_cancel_work() argument
326 kref_put(&u132->kref, u132_hcd_delete); in u132_ring_cancel_work()
332 struct u132 *u132 = endp->u132; in u132_endp_delete() local
335 u8 address = u132->addr[usb_addr].address; in u132_endp_delete()
336 struct u132_udev *udev = &u132->udev[address]; in u132_endp_delete()
356 u132_udev_put_kref(u132, udev); in u132_endp_delete()
360 u132_udev_put_kref(u132, udev); in u132_endp_delete()
362 u132->endp[endp_number - 1] = NULL; in u132_endp_delete()
365 u132_u132_put_kref(u132); in u132_endp_delete()
368 static inline void u132_endp_put_kref(struct u132 *u132, struct u132_endp *endp) in u132_endp_put_kref() argument
373 static inline void u132_endp_get_kref(struct u132 *u132, struct u132_endp *endp) in u132_endp_get_kref() argument
378 static inline void u132_endp_init_kref(struct u132 *u132, in u132_endp_init_kref() argument
382 kref_get(&u132->kref); in u132_endp_init_kref()
385 static void u132_endp_queue_work(struct u132 *u132, struct u132_endp *endp, in u132_endp_queue_work() argument
392 static void u132_endp_cancel_work(struct u132 *u132, struct u132_endp *endp) in u132_endp_cancel_work() argument
398 static inline void u132_monitor_put_kref(struct u132 *u132) in u132_monitor_put_kref() argument
400 kref_put(&u132->kref, u132_hcd_delete); in u132_monitor_put_kref()
403 static void u132_monitor_queue_work(struct u132 *u132, unsigned int delta) in u132_monitor_queue_work() argument
405 if (queue_delayed_work(workqueue, &u132->monitor, delta)) in u132_monitor_queue_work()
406 kref_get(&u132->kref); in u132_monitor_queue_work()
409 static void u132_monitor_requeue_work(struct u132 *u132, unsigned int delta) in u132_monitor_requeue_work() argument
411 if (!queue_delayed_work(workqueue, &u132->monitor, delta)) in u132_monitor_requeue_work()
412 kref_put(&u132->kref, u132_hcd_delete); in u132_monitor_requeue_work()
415 static void u132_monitor_cancel_work(struct u132 *u132) in u132_monitor_cancel_work() argument
417 if (cancel_delayed_work(&u132->monitor)) in u132_monitor_cancel_work()
418 kref_put(&u132->kref, u132_hcd_delete); in u132_monitor_cancel_work()
421 static int read_roothub_info(struct u132 *u132) in read_roothub_info() argument
425 retval = u132_read_pcimem(u132, revision, &revision); in read_roothub_info()
427 dev_err(&u132->platform_dev->dev, "error %d accessing device co" in read_roothub_info()
433 dev_err(&u132->platform_dev->dev, "device revision is not valid" in read_roothub_info()
437 retval = u132_read_pcimem(u132, control, &u132->hc_control); in read_roothub_info()
439 dev_err(&u132->platform_dev->dev, "error %d accessing device co" in read_roothub_info()
443 retval = u132_read_pcimem(u132, roothub.status, in read_roothub_info()
444 &u132->hc_roothub_status); in read_roothub_info()
446 dev_err(&u132->platform_dev->dev, "error %d accessing device re" in read_roothub_info()
450 retval = u132_read_pcimem(u132, roothub.a, &u132->hc_roothub_a); in read_roothub_info()
452 dev_err(&u132->platform_dev->dev, "error %d accessing device re" in read_roothub_info()
457 int I = u132->num_ports; in read_roothub_info()
460 retval = u132_read_pcimem(u132, roothub.portstatus[i], in read_roothub_info()
461 &u132->hc_roothub_portstatus[i]); in read_roothub_info()
463 dev_err(&u132->platform_dev->dev, "error %d acc" in read_roothub_info()
476 struct u132 *u132 = container_of(work, struct u132, monitor.work); in u132_hcd_monitor_work() local
477 if (u132->going > 1) { in u132_hcd_monitor_work()
478 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_monitor_work()
479 , u132->going); in u132_hcd_monitor_work()
480 u132_monitor_put_kref(u132); in u132_hcd_monitor_work()
482 } else if (u132->going > 0) { in u132_hcd_monitor_work()
483 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hcd_monitor_work()
484 u132_monitor_put_kref(u132); in u132_hcd_monitor_work()
488 mutex_lock(&u132->sw_lock); in u132_hcd_monitor_work()
489 retval = read_roothub_info(u132); in u132_hcd_monitor_work()
491 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_hcd_monitor_work()
492 u132_disable(u132); in u132_hcd_monitor_work()
493 u132->going = 1; in u132_hcd_monitor_work()
494 mutex_unlock(&u132->sw_lock); in u132_hcd_monitor_work()
496 ftdi_elan_gone_away(u132->platform_dev); in u132_hcd_monitor_work()
497 u132_monitor_put_kref(u132); in u132_hcd_monitor_work()
500 u132_monitor_requeue_work(u132, 500); in u132_hcd_monitor_work()
501 mutex_unlock(&u132->sw_lock); in u132_hcd_monitor_work()
507 static void u132_hcd_giveback_urb(struct u132 *u132, struct u132_endp *endp, in u132_hcd_giveback_urb() argument
512 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_hcd_giveback_urb()
531 mutex_lock(&u132->scheduler_lock); in u132_hcd_giveback_urb()
534 u132_ring_cancel_work(u132, ring); in u132_hcd_giveback_urb()
535 u132_ring_queue_work(u132, ring, 0); in u132_hcd_giveback_urb()
536 mutex_unlock(&u132->scheduler_lock); in u132_hcd_giveback_urb()
537 u132_endp_put_kref(u132, endp); in u132_hcd_giveback_urb()
541 static void u132_hcd_forget_urb(struct u132 *u132, struct u132_endp *endp, in u132_hcd_forget_urb() argument
544 u132_endp_put_kref(u132, endp); in u132_hcd_forget_urb()
547 static void u132_hcd_abandon_urb(struct u132 *u132, struct u132_endp *endp, in u132_hcd_abandon_urb() argument
551 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_hcd_abandon_urb()
573 static inline int edset_input(struct u132 *u132, struct u132_ring *ring, in edset_input() argument
579 return usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, in edset_input()
583 static inline int edset_setup(struct u132 *u132, struct u132_ring *ring, in edset_setup() argument
589 return usb_ftdi_elan_edset_setup(u132->platform_dev, ring->number, endp, in edset_setup()
593 static inline int edset_single(struct u132 *u132, struct u132_ring *ring, in edset_single() argument
599 return usb_ftdi_elan_edset_single(u132->platform_dev, ring->number, in edset_single()
603 static inline int edset_output(struct u132 *u132, struct u132_ring *ring, in edset_output() argument
609 return usb_ftdi_elan_edset_output(u132->platform_dev, ring->number, in edset_output()
623 struct u132 *u132 = endp->u132; in u132_hcd_interrupt_recv() local
624 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_interrupt_recv()
625 struct u132_udev *udev = &u132->udev[address]; in u132_hcd_interrupt_recv()
626 mutex_lock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
627 if (u132->going > 1) { in u132_hcd_interrupt_recv()
628 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_interrupt_recv()
629 , u132->going); in u132_hcd_interrupt_recv()
630 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
631 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_interrupt_recv()
635 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
636 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_interrupt_recv()
638 } else if (u132->going > 0) { in u132_hcd_interrupt_recv()
639 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_interrupt_recv()
641 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
642 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_interrupt_recv()
661 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
662 retval = edset_single(u132, ring, endp, urb, in u132_hcd_interrupt_recv()
666 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_interrupt_recv()
673 u132_ring_cancel_work(u132, ring); in u132_hcd_interrupt_recv()
674 u132_ring_queue_work(u132, ring, 0); in u132_hcd_interrupt_recv()
675 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
676 u132_endp_put_kref(u132, endp); in u132_hcd_interrupt_recv()
684 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
685 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_interrupt_recv()
700 dev_err(&u132->platform_dev->dev, "urb=%p givin" in u132_hcd_interrupt_recv()
704 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
705 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_interrupt_recv()
710 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_interrupt_recv()
712 mutex_unlock(&u132->scheduler_lock); in u132_hcd_interrupt_recv()
713 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_interrupt_recv()
723 struct u132 *u132 = endp->u132; in u132_hcd_bulk_output_sent() local
724 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_bulk_output_sent()
725 mutex_lock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
726 if (u132->going > 1) { in u132_hcd_bulk_output_sent()
727 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_bulk_output_sent()
728 , u132->going); in u132_hcd_bulk_output_sent()
729 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
730 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_bulk_output_sent()
734 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
735 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_bulk_output_sent()
737 } else if (u132->going > 0) { in u132_hcd_bulk_output_sent()
738 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_bulk_output_sent()
740 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
741 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_bulk_output_sent()
749 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
750 retval = edset_output(u132, ring, endp, urb, address, in u132_hcd_bulk_output_sent()
753 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_bulk_output_sent()
756 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
757 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_output_sent()
761 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_bulk_output_sent()
763 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_output_sent()
764 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_output_sent()
774 struct u132 *u132 = endp->u132; in u132_hcd_bulk_input_recv() local
775 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_bulk_input_recv()
776 struct u132_udev *udev = &u132->udev[address]; in u132_hcd_bulk_input_recv()
777 mutex_lock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
778 if (u132->going > 1) { in u132_hcd_bulk_input_recv()
779 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_bulk_input_recv()
780 , u132->going); in u132_hcd_bulk_input_recv()
781 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
782 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_bulk_input_recv()
786 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
787 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_bulk_input_recv()
789 } else if (u132->going > 0) { in u132_hcd_bulk_input_recv()
790 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_bulk_input_recv()
792 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
793 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_bulk_input_recv()
811 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
812 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_bulk_input_recv()
817 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_bulk_input_recv()
823 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
824 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_bulk_input_recv()
832 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
833 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_input_recv()
839 dev_warn(&u132->platform_dev->dev, "urb=%p(SHORT NOT OK" in u132_hcd_bulk_input_recv()
842 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
843 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_input_recv()
848 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
849 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_bulk_input_recv()
855 dev_err(&u132->platform_dev->dev, "urb=%p giving back B" in u132_hcd_bulk_input_recv()
858 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
859 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_bulk_input_recv()
864 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_bulk_input_recv()
866 mutex_unlock(&u132->scheduler_lock); in u132_hcd_bulk_input_recv()
867 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_bulk_input_recv()
877 struct u132 *u132 = endp->u132; in u132_hcd_configure_empty_sent() local
878 mutex_lock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
879 if (u132->going > 1) { in u132_hcd_configure_empty_sent()
880 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_configure_empty_sent()
881 , u132->going); in u132_hcd_configure_empty_sent()
882 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
883 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_empty_sent()
887 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
888 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_configure_empty_sent()
890 } else if (u132->going > 0) { in u132_hcd_configure_empty_sent()
891 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_configure_empty_sent()
893 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
894 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); 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, 0); in u132_hcd_configure_empty_sent()
901 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_configure_empty_sent()
903 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_sent()
904 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_empty_sent()
914 struct u132 *u132 = endp->u132; in u132_hcd_configure_input_recv() local
915 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_configure_input_recv()
916 mutex_lock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
917 if (u132->going > 1) { in u132_hcd_configure_input_recv()
918 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_configure_input_recv()
919 , u132->going); in u132_hcd_configure_input_recv()
920 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
921 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_input_recv()
925 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
926 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_configure_input_recv()
928 } else if (u132->going > 0) { in u132_hcd_configure_input_recv()
929 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_configure_input_recv()
931 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
932 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_input_recv()
948 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
949 retval = usb_ftdi_elan_edset_empty(u132->platform_dev, in u132_hcd_configure_input_recv()
954 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_configure_input_recv()
957 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
958 dev_warn(&u132->platform_dev->dev, "giving back SETUP I" in u132_hcd_configure_input_recv()
960 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_configure_input_recv()
964 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
965 dev_err(&u132->platform_dev->dev, "giving back SETUP IN" in u132_hcd_configure_input_recv()
968 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_configure_input_recv()
973 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_configure_input_recv()
975 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_input_recv()
976 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_input_recv()
986 struct u132 *u132 = endp->u132; in u132_hcd_configure_empty_recv() local
987 mutex_lock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
988 if (u132->going > 1) { in u132_hcd_configure_empty_recv()
989 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_configure_empty_recv()
990 , u132->going); in u132_hcd_configure_empty_recv()
991 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
992 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_empty_recv()
996 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
997 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_configure_empty_recv()
999 } else if (u132->going > 0) { in u132_hcd_configure_empty_recv()
1000 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_configure_empty_recv()
1002 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
1003 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); 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, 0); in u132_hcd_configure_empty_recv()
1010 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_configure_empty_recv()
1012 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_empty_recv()
1013 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_empty_recv()
1023 struct u132 *u132 = endp->u132; in u132_hcd_configure_setup_sent() local
1024 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_configure_setup_sent()
1025 mutex_lock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1026 if (u132->going > 1) { in u132_hcd_configure_setup_sent()
1027 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_configure_setup_sent()
1028 , u132->going); in u132_hcd_configure_setup_sent()
1029 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1030 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_setup_sent()
1034 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1035 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_configure_setup_sent()
1037 } else if (u132->going > 0) { in u132_hcd_configure_setup_sent()
1038 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_configure_setup_sent()
1040 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1041 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_configure_setup_sent()
1047 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1048 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_configure_setup_sent()
1053 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_configure_setup_sent()
1058 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1059 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_configure_setup_sent()
1064 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_configure_setup_sent()
1068 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_configure_setup_sent()
1070 mutex_unlock(&u132->scheduler_lock); in u132_hcd_configure_setup_sent()
1071 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_configure_setup_sent()
1081 struct u132 *u132 = endp->u132; in u132_hcd_enumeration_empty_recv() local
1082 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_enumeration_empty_recv()
1083 struct u132_udev *udev = &u132->udev[address]; in u132_hcd_enumeration_empty_recv()
1084 mutex_lock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1085 if (u132->going > 1) { in u132_hcd_enumeration_empty_recv()
1086 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_enumeration_empty_recv()
1087 , u132->going); in u132_hcd_enumeration_empty_recv()
1088 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1089 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_enumeration_empty_recv()
1093 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1094 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_enumeration_empty_recv()
1096 } else if (u132->going > 0) { in u132_hcd_enumeration_empty_recv()
1097 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_enumeration_empty_recv()
1099 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1100 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_enumeration_empty_recv()
1103 u132->addr[0].address = 0; in u132_hcd_enumeration_empty_recv()
1105 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1106 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_enumeration_empty_recv()
1109 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_enumeration_empty_recv()
1111 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_empty_recv()
1112 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_enumeration_empty_recv()
1122 struct u132 *u132 = endp->u132; in u132_hcd_enumeration_address_sent() local
1123 mutex_lock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1124 if (u132->going > 1) { in u132_hcd_enumeration_address_sent()
1125 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_enumeration_address_sent()
1126 , u132->going); in u132_hcd_enumeration_address_sent()
1127 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1128 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_enumeration_address_sent()
1132 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1133 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_enumeration_address_sent()
1135 } else if (u132->going > 0) { in u132_hcd_enumeration_address_sent()
1136 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_enumeration_address_sent()
1138 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1139 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_enumeration_address_sent()
1144 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1145 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_enumeration_address_sent()
1149 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_enumeration_address_sent()
1152 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_enumeration_address_sent()
1154 mutex_unlock(&u132->scheduler_lock); in u132_hcd_enumeration_address_sent()
1155 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_enumeration_address_sent()
1165 struct u132 *u132 = endp->u132; in u132_hcd_initial_empty_sent() local
1166 mutex_lock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1167 if (u132->going > 1) { in u132_hcd_initial_empty_sent()
1168 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_initial_empty_sent()
1169 , u132->going); in u132_hcd_initial_empty_sent()
1170 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1171 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_empty_sent()
1175 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1176 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_initial_empty_sent()
1178 } else if (u132->going > 0) { in u132_hcd_initial_empty_sent()
1179 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_initial_empty_sent()
1181 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1182 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); 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, 0); in u132_hcd_initial_empty_sent()
1189 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_initial_empty_sent()
1191 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_empty_sent()
1192 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_initial_empty_sent()
1202 struct u132 *u132 = endp->u132; in u132_hcd_initial_input_recv() local
1203 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_initial_input_recv()
1204 mutex_lock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1205 if (u132->going > 1) { in u132_hcd_initial_input_recv()
1206 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_initial_input_recv()
1207 , u132->going); in u132_hcd_initial_input_recv()
1208 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1209 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_input_recv()
1213 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1214 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_initial_input_recv()
1216 } else if (u132->going > 0) { in u132_hcd_initial_input_recv()
1217 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_initial_input_recv()
1219 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1220 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_input_recv()
1233 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1234 retval = usb_ftdi_elan_edset_empty(u132->platform_dev, in u132_hcd_initial_input_recv()
1238 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_initial_input_recv()
1241 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_initial_input_recv()
1243 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_input_recv()
1244 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_initial_input_recv()
1254 struct u132 *u132 = endp->u132; in u132_hcd_initial_setup_sent() local
1255 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_initial_setup_sent()
1256 mutex_lock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1257 if (u132->going > 1) { in u132_hcd_initial_setup_sent()
1258 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_initial_setup_sent()
1259 , u132->going); in u132_hcd_initial_setup_sent()
1260 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1261 u132_hcd_forget_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_setup_sent()
1265 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1266 u132_hcd_giveback_urb(u132, endp, urb, -EINTR); in u132_hcd_initial_setup_sent()
1268 } else if (u132->going > 0) { in u132_hcd_initial_setup_sent()
1269 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_hcd_initial_setup_sent()
1271 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1272 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); in u132_hcd_initial_setup_sent()
1277 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1278 retval = usb_ftdi_elan_edset_input(u132->platform_dev, in u132_hcd_initial_setup_sent()
1282 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_initial_setup_sent()
1285 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p " in u132_hcd_initial_setup_sent()
1287 mutex_unlock(&u132->scheduler_lock); in u132_hcd_initial_setup_sent()
1288 u132_hcd_giveback_urb(u132, endp, urb, 0); in u132_hcd_initial_setup_sent()
1301 struct u132 *u132 = ring->u132; in u132_hcd_ring_work_scheduler() local
1302 mutex_lock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1304 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1305 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1315 u132_endp_cancel_work(u132, last_endp); in u132_hcd_ring_work_scheduler()
1316 u132_endp_queue_work(u132, last_endp, 0); in u132_hcd_ring_work_scheduler()
1317 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1318 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1329 u132_endp_cancel_work(u132, last_endp); in u132_hcd_ring_work_scheduler()
1330 u132_endp_queue_work(u132, last_endp, 0); in u132_hcd_ring_work_scheduler()
1331 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1332 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1340 u132_ring_requeue_work(u132, ring, wakeup); in u132_hcd_ring_work_scheduler()
1341 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1344 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1345 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1349 mutex_unlock(&u132->scheduler_lock); in u132_hcd_ring_work_scheduler()
1350 u132_ring_put_kref(u132, ring); in u132_hcd_ring_work_scheduler()
1360 struct u132 *u132 = endp->u132; in u132_hcd_endp_work_scheduler() local
1361 mutex_lock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1366 usb_ftdi_elan_edset_flush(u132->platform_dev, in u132_hcd_endp_work_scheduler()
1368 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1369 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1372 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1373 u132_endp_put_kref(u132, endp); 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 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1386 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1387 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1396 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1397 retval = edset_single(u132, ring, endp, urb, address, in u132_hcd_endp_work_scheduler()
1400 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_endp_work_scheduler()
1404 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1406 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1407 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1416 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1417 retval = edset_setup(u132, ring, endp, urb, address, in u132_hcd_endp_work_scheduler()
1420 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_endp_work_scheduler()
1429 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1430 retval = edset_setup(u132, ring, endp, urb, 0, 0x2, in u132_hcd_endp_work_scheduler()
1433 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_endp_work_scheduler()
1439 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1443 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1444 retval = edset_setup(u132, ring, endp, urb, address, in u132_hcd_endp_work_scheduler()
1447 u132_hcd_giveback_urb(u132, endp, urb, retval); in u132_hcd_endp_work_scheduler()
1452 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1454 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1455 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1464 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1465 retval = edset_input(u132, ring, endp, urb, in u132_hcd_endp_work_scheduler()
1470 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_endp_work_scheduler()
1475 u8 address = u132->addr[endp->usb_addr].address; in u132_hcd_endp_work_scheduler()
1477 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1478 u132_endp_put_kref(u132, endp); in u132_hcd_endp_work_scheduler()
1487 mutex_unlock(&u132->scheduler_lock); in u132_hcd_endp_work_scheduler()
1488 retval = edset_output(u132, ring, endp, urb, in u132_hcd_endp_work_scheduler()
1493 u132_hcd_giveback_urb(u132, endp, urb, in u132_hcd_endp_work_scheduler()
1502 static void port_power(struct u132 *u132, int pn, int is_on) in port_power() argument
1504 u132->port[pn].power = is_on; in port_power()
1509 static void u132_power(struct u132 *u132, int is_on) in u132_power() argument
1511 struct usb_hcd *hcd = u132_to_hcd(u132) in u132_power()
1514 if (u132->power) in u132_power()
1516 u132->power = 1; in u132_power()
1518 u132->power = 0; in u132_power()
1523 static int u132_periodic_reinit(struct u132 *u132) in u132_periodic_reinit() argument
1526 u32 fi = u132->hc_fminterval & 0x03fff; in u132_periodic_reinit()
1529 retval = u132_read_pcimem(u132, fminterval, &fminterval); in u132_periodic_reinit()
1533 retval = u132_write_pcimem(u132, fminterval, in u132_periodic_reinit()
1534 (fit ^ FIT) | u132->hc_fminterval); in u132_periodic_reinit()
1537 return u132_write_pcimem(u132, periodicstart, in u132_periodic_reinit()
1556 static int u132_init(struct u132 *u132) in u132_init() argument
1560 u132_disable(u132); in u132_init()
1561 u132->next_statechange = jiffies; in u132_init()
1562 retval = u132_write_pcimem(u132, intrdisable, OHCI_INTR_MIE); in u132_init()
1565 retval = u132_read_pcimem(u132, control, &control); in u132_init()
1568 if (u132->num_ports == 0) { in u132_init()
1570 retval = u132_read_pcimem(u132, roothub.a, &rh_a); in u132_init()
1573 u132->num_ports = rh_a & RH_A_NDP; in u132_init()
1574 retval = read_roothub_info(u132); in u132_init()
1578 if (u132->num_ports > MAX_U132_PORTS) in u132_init()
1589 static int u132_run(struct u132 *u132) in u132_run() argument
1599 int first = u132->hc_fminterval == 0; in u132_run()
1602 u132_disable(u132); in u132_run()
1605 retval = u132_read_pcimem(u132, fminterval, &temp); in u132_run()
1608 u132->hc_fminterval = temp & 0x3fff; in u132_run()
1609 u132->hc_fminterval |= FSMP(u132->hc_fminterval) << 16; in u132_run()
1611 retval = u132_read_pcimem(u132, control, &u132->hc_control); in u132_run()
1614 dev_info(&u132->platform_dev->dev, "resetting from state '%s', control " in u132_run()
1615 "= %08X\n", hcfs2string(u132->hc_control & OHCI_CTRL_HCFS), in u132_run()
1616 u132->hc_control); in u132_run()
1617 switch (u132->hc_control & OHCI_CTRL_HCFS) { in u132_run()
1623 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1624 u132->hc_control |= OHCI_USB_RESUME; in u132_run()
1628 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1629 u132->hc_control |= OHCI_USB_RESET; in u132_run()
1633 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1636 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1640 retval = u132_read_pcimem(u132, roothub.a, &roothub_a); in u132_run()
1645 for (temp = 0; temp < u132->num_ports; temp++) { in u132_run()
1646 retval = u132_write_pcimem(u132, in u132_run()
1652 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1656 retval = u132_read_pcimem(u132, cmdstatus, &status); in u132_run()
1659 retval = u132_write_pcimem(u132, cmdstatus, OHCI_HCR); in u132_run()
1663 retval = u132_read_pcimem(u132, cmdstatus, &status); in u132_run()
1668 dev_err(&u132->platform_dev->dev, "USB HC reset" in u132_run()
1677 if (u132->flags & OHCI_QUIRK_INITRESET) { in u132_run()
1678 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1681 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1685 retval = u132_write_pcimem(u132, ed_controlhead, 0x00000000); in u132_run()
1688 retval = u132_write_pcimem(u132, ed_bulkhead, 0x11000000); in u132_run()
1691 retval = u132_write_pcimem(u132, hcca, 0x00000000); in u132_run()
1694 retval = u132_periodic_reinit(u132); in u132_run()
1697 retval = u132_read_pcimem(u132, fminterval, &fminterval); in u132_run()
1700 retval = u132_read_pcimem(u132, periodicstart, &periodicstart); in u132_run()
1704 if (!(u132->flags & OHCI_QUIRK_INITRESET)) { in u132_run()
1705 u132->flags |= OHCI_QUIRK_INITRESET; in u132_run()
1708 dev_err(&u132->platform_dev->dev, "init err(%08x %04x)" in u132_run()
1711 u132->hc_control &= OHCI_CTRL_RWC; in u132_run()
1712 u132->hc_control |= OHCI_CONTROL_INIT | OHCI_CTRL_BLE | OHCI_USB_OPER; in u132_run()
1713 retval = u132_write_pcimem(u132, control, u132->hc_control); in u132_run()
1716 retval = u132_write_pcimem(u132, cmdstatus, OHCI_BLF); in u132_run()
1719 retval = u132_read_pcimem(u132, cmdstatus, &cmdstatus); in u132_run()
1722 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1725 u132_to_hcd(u132)->state = HC_STATE_RUNNING; in u132_run()
1726 retval = u132_write_pcimem(u132, roothub.status, RH_HS_DRWE); in u132_run()
1729 retval = u132_write_pcimem(u132, intrstatus, mask); in u132_run()
1732 retval = u132_write_pcimem(u132, intrdisable, in u132_run()
1738 retval = u132_read_pcimem(u132, roothub.a, &roothub_a); in u132_run()
1742 if (u132->flags & OHCI_QUIRK_SUPERIO) { in u132_run()
1745 retval = u132_write_pcimem(u132, roothub.a, roothub_a); in u132_run()
1748 } else if ((u132->flags & OHCI_QUIRK_AMD756) || distrust_firmware) { in u132_run()
1750 retval = u132_write_pcimem(u132, roothub.a, roothub_a); in u132_run()
1754 retval = u132_write_pcimem(u132, roothub.status, RH_HS_LPSC); in u132_run()
1757 retval = u132_write_pcimem(u132, roothub.b, in u132_run()
1761 retval = u132_read_pcimem(u132, control, &control); in u132_run()
1765 u132_to_hcd(u132)->state = HC_STATE_RUNNING; in u132_run()
1771 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_stop() local
1772 if (u132->going > 1) { in u132_hcd_stop()
1773 dev_err(&u132->platform_dev->dev, "u132 device %p(hcd=%p) has b" in u132_hcd_stop()
1774 "een removed %d\n", u132, hcd, u132->going); in u132_hcd_stop()
1775 } else if (u132->going > 0) { in u132_hcd_stop()
1776 dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov" in u132_hcd_stop()
1779 mutex_lock(&u132->sw_lock); in u132_hcd_stop()
1781 u132_power(u132, 0); in u132_hcd_stop()
1782 mutex_unlock(&u132->sw_lock); in u132_hcd_stop()
1788 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_start() local
1789 if (u132->going > 1) { in u132_hcd_start()
1790 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_start()
1791 , u132->going); in u132_hcd_start()
1793 } else if (u132->going > 0) { in u132_hcd_start()
1794 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hcd_start()
1804 mutex_lock(&u132->sw_lock); in u132_hcd_start()
1807 u132->flags = OHCI_QUIRK_AMD756; in u132_hcd_start()
1809 dev_err(&u132->platform_dev->dev, "WARNING: OPTi workar" in u132_hcd_start()
1812 u132->flags |= OHCI_QUIRK_ZFMICRO; in u132_hcd_start()
1813 retval = u132_run(u132); in u132_hcd_start()
1815 u132_disable(u132); in u132_hcd_start()
1816 u132->going = 1; in u132_hcd_start()
1819 mutex_unlock(&u132->sw_lock); in u132_hcd_start()
1822 dev_err(&u132->platform_dev->dev, "platform_device missing\n"); in u132_hcd_start()
1829 struct u132 *u132 = hcd_to_u132(hcd); in u132_hcd_reset() local
1830 if (u132->going > 1) { in u132_hcd_reset()
1831 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hcd_reset()
1832 , u132->going); in u132_hcd_reset()
1834 } else if (u132->going > 0) { in u132_hcd_reset()
1835 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hcd_reset()
1839 mutex_lock(&u132->sw_lock); in u132_hcd_reset()
1840 retval = u132_init(u132); in u132_hcd_reset()
1842 u132_disable(u132); in u132_hcd_reset()
1843 u132->going = 1; in u132_hcd_reset()
1845 mutex_unlock(&u132->sw_lock); in u132_hcd_reset()
1850 static int create_endpoint_and_queue_int(struct u132 *u132, in create_endpoint_and_queue_int() argument
1866 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_int()
1873 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_int()
1874 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_int()
1877 ring = endp->ring = &u132->ring[0]; in create_endpoint_and_queue_int()
1890 endp->u132 = u132; in create_endpoint_and_queue_int()
1893 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_int()
1900 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_int()
1907 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_int()
1909 urb->hcpriv = u132; in create_endpoint_and_queue_int()
1920 u132_endp_queue_work(u132, endp, msecs_to_jiffies(urb->interval)); in create_endpoint_and_queue_int()
1924 static int queue_int_on_old_endpoint(struct u132 *u132, in queue_int_on_old_endpoint() argument
1929 urb->hcpriv = u132; in queue_int_on_old_endpoint()
1948 static int create_endpoint_and_queue_bulk(struct u132 *u132, in create_endpoint_and_queue_bulk() argument
1965 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_bulk()
1972 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_bulk()
1973 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_bulk()
1981 endp->u132 = u132; in create_endpoint_and_queue_bulk()
1984 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_bulk()
1992 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_bulk()
2000 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_bulk()
2002 ring = endp->ring = &u132->ring[ring_number - 1]; in create_endpoint_and_queue_bulk()
2010 urb->hcpriv = u132; in create_endpoint_and_queue_bulk()
2019 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_bulk()
2023 static int queue_bulk_on_old_endpoint(struct u132 *u132, struct u132_udev *udev, in queue_bulk_on_old_endpoint() argument
2028 urb->hcpriv = u132; in queue_bulk_on_old_endpoint()
2045 static int create_endpoint_and_queue_control(struct u132 *u132, in create_endpoint_and_queue_control() argument
2061 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb); in create_endpoint_and_queue_control()
2068 endp_number = ++u132->num_endpoints; in create_endpoint_and_queue_control()
2069 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp; in create_endpoint_and_queue_control()
2072 ring = endp->ring = &u132->ring[0]; in create_endpoint_and_queue_control()
2085 endp->u132 = u132; in create_endpoint_and_queue_control()
2087 u132_endp_init_kref(u132, endp); in create_endpoint_and_queue_control()
2088 u132_endp_get_kref(u132, endp); in create_endpoint_and_queue_control()
2090 u8 address = u132->addr[usb_addr].address; in create_endpoint_and_queue_control()
2091 struct u132_udev *udev = &u132->udev[address]; in create_endpoint_and_queue_control()
2098 u132_udev_init_kref(u132, udev); in create_endpoint_and_queue_control()
2099 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_control()
2102 urb->hcpriv = u132; in create_endpoint_and_queue_control()
2108 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_control()
2111 u8 address = u132->addr[usb_addr].address; in create_endpoint_and_queue_control()
2112 struct u132_udev *udev = &u132->udev[address]; in create_endpoint_and_queue_control()
2119 u132_udev_get_kref(u132, udev); in create_endpoint_and_queue_control()
2123 urb->hcpriv = u132; in create_endpoint_and_queue_control()
2129 u132_endp_queue_work(u132, endp, 0); in create_endpoint_and_queue_control()
2134 static int queue_control_on_old_endpoint(struct u132 *u132, in queue_control_on_old_endpoint() argument
2141 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2160 struct u132_addr *addr = &u132->addr[usb_dev->devnum]; in queue_control_on_old_endpoint()
2164 struct u132_udev *udev = &u132->udev[++i]; in queue_control_on_old_endpoint()
2169 u132->addr[0].address = i; in queue_control_on_old_endpoint()
2173 u132_udev_init_kref(u132, udev); in queue_control_on_old_endpoint()
2176 u132_udev_get_kref(u132, udev); in queue_control_on_old_endpoint()
2182 u132_udev_get_kref(u132, udev); in queue_control_on_old_endpoint()
2187 dev_err(&u132->platform_dev->dev, "run out of d" in queue_control_on_old_endpoint()
2191 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2211 u8 address = u132->addr[usb_addr].address; in queue_control_on_old_endpoint()
2212 struct u132_udev *udev = &u132->udev[address]; in queue_control_on_old_endpoint()
2213 urb->hcpriv = u132; in queue_control_on_old_endpoint()
2237 struct u132 *u132 = hcd_to_u132(hcd); in u132_urb_enqueue() local
2244 if (u132->going > 1) { in u132_urb_enqueue()
2245 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_urb_enqueue()
2246 , u132->going); in u132_urb_enqueue()
2248 } else if (u132->going > 0) { in u132_urb_enqueue()
2249 dev_err(&u132->platform_dev->dev, "device is being removed " in u132_urb_enqueue()
2257 u8 address = u132->addr[usb_addr].address; in u132_urb_enqueue()
2258 struct u132_udev *udev = &u132->udev[address]; in u132_urb_enqueue()
2269 u132, udev, urb, in u132_urb_enqueue()
2282 u132_endp_queue_work(u132, endp, in u132_urb_enqueue()
2287 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2290 return create_endpoint_and_queue_int(u132, udev, in u132_urb_enqueue()
2295 dev_err(&u132->platform_dev->dev, "the hardware does no" in u132_urb_enqueue()
2299 u8 address = u132->addr[usb_addr].address; in u132_urb_enqueue()
2300 struct u132_udev *udev = &u132->udev[address]; in u132_urb_enqueue()
2311 u132, udev, urb, in u132_urb_enqueue()
2324 u132_endp_queue_work(u132, endp, 0); in u132_urb_enqueue()
2327 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2330 return create_endpoint_and_queue_bulk(u132, in u132_urb_enqueue()
2360 u132, urb, usb_dev, in u132_urb_enqueue()
2372 u132_endp_queue_work(u132, endp, 0); in u132_urb_enqueue()
2375 } else if (u132->num_endpoints == MAX_U132_ENDPS) { in u132_urb_enqueue()
2378 return create_endpoint_and_queue_control(u132, in u132_urb_enqueue()
2385 static int dequeue_from_overflow_chain(struct u132 *u132, in dequeue_from_overflow_chain() argument
2392 struct usb_hcd *hcd = u132_to_hcd(u132); in dequeue_from_overflow_chain()
2401 dev_err(&u132->platform_dev->dev, "urb=%p not found in endp[%d]=%p ring" in dequeue_from_overflow_chain()
2410 static int u132_endp_urb_dequeue(struct u132 *u132, struct u132_endp *endp, in u132_endp_urb_dequeue() argument
2417 rc = usb_hcd_check_unlink_urb(u132_to_hcd(u132), urb, status); in u132_endp_urb_dequeue()
2423 dev_err(&u132->platform_dev->dev, "urb=%p not found in endp[%d]" in u132_endp_urb_dequeue()
2435 u132_endp_queue_work(u132, endp, 0); in u132_endp_urb_dequeue()
2440 u132_hcd_abandon_urb(u132, endp, urb, status); in u132_endp_urb_dequeue()
2464 struct usb_hcd *hcd = u132_to_hcd(u132); in u132_endp_urb_dequeue()
2484 dev_err(&u132->platform_dev->dev, "urb=%p not found in " in u132_endp_urb_dequeue()
2497 usb_hcd_unlink_urb_from_ep(u132_to_hcd(u132), urb); in u132_endp_urb_dequeue()
2498 retval = dequeue_from_overflow_chain(u132, endp, in u132_endp_urb_dequeue()
2508 struct u132 *u132 = hcd_to_u132(hcd); in u132_urb_dequeue() local
2509 if (u132->going > 2) { in u132_urb_dequeue()
2510 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_urb_dequeue()
2511 , u132->going); in u132_urb_dequeue()
2516 u8 address = u132->addr[usb_addr].address; in u132_urb_dequeue()
2517 struct u132_udev *udev = &u132->udev[address]; in u132_urb_dequeue()
2520 struct u132_endp *endp = u132->endp[endp_number - 1]; in u132_urb_dequeue()
2521 return u132_endp_urb_dequeue(u132, endp, urb, status); in u132_urb_dequeue()
2524 struct u132_endp *endp = u132->endp[endp_number - 1]; in u132_urb_dequeue()
2525 return u132_endp_urb_dequeue(u132, endp, urb, status); in u132_urb_dequeue()
2533 struct u132 *u132 = hcd_to_u132(hcd); in u132_endpoint_disable() local
2534 if (u132->going > 2) { in u132_endpoint_disable()
2535 dev_err(&u132->platform_dev->dev, "u132 device %p(hcd=%p hep=%p" in u132_endpoint_disable()
2536 ") has been removed %d\n", u132, hcd, hep, in u132_endpoint_disable()
2537 u132->going); in u132_endpoint_disable()
2541 u132_endp_put_kref(u132, endp); in u132_endpoint_disable()
2547 struct u132 *u132 = hcd_to_u132(hcd); in u132_get_frame() local
2548 if (u132->going > 1) { in u132_get_frame()
2549 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_get_frame()
2550 , u132->going); in u132_get_frame()
2552 } else if (u132->going > 0) { in u132_get_frame()
2553 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_get_frame()
2557 dev_err(&u132->platform_dev->dev, "TODO: u132_get_frame\n"); in u132_get_frame()
2563 static int u132_roothub_descriptor(struct u132 *u132, in u132_roothub_descriptor() argument
2570 retval = u132_read_pcimem(u132, roothub.a, &rh_a); in u132_roothub_descriptor()
2576 desc->bNbrPorts = u132->num_ports; in u132_roothub_descriptor()
2577 temp = 1 + (u132->num_ports / 8); in u132_roothub_descriptor()
2589 retval = u132_read_pcimem(u132, roothub.b, &rh_b); in u132_roothub_descriptor()
2595 if (u132->num_ports > 7) { in u132_roothub_descriptor()
2603 static int u132_roothub_status(struct u132 *u132, __le32 *desc) in u132_roothub_status() argument
2606 int ret_status = u132_read_pcimem(u132, roothub.status, &rh_status); in u132_roothub_status()
2611 static int u132_roothub_portstatus(struct u132 *u132, __le32 *desc, u16 wIndex) in u132_roothub_portstatus() argument
2613 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_portstatus()
2618 int ret_portstatus = u132_read_pcimem(u132, in u132_roothub_portstatus()
2622 dev_info(&u132->platform_dev->dev, "Port %d Status Chan" in u132_roothub_portstatus()
2635 static int u132_roothub_portreset(struct u132 *u132, int port_index) in u132_roothub_portreset() argument
2641 retval = u132_read_pcimem(u132, fmnumber, &fmnumber); in u132_roothub_portreset()
2649 retval = u132_read_pcimem(u132, in u132_roothub_portreset()
2662 retval = u132_write_pcimem(u132, in u132_roothub_portreset()
2671 retval = u132_write_pcimem(u132, roothub.portstatus[port_index], in u132_roothub_portreset()
2676 retval = u132_read_pcimem(u132, fmnumber, &fmnumber); in u132_roothub_portreset()
2684 static int u132_roothub_setportfeature(struct u132 *u132, u16 wValue, in u132_roothub_setportfeature() argument
2687 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_setportfeature()
2691 struct u132_port *port = &u132->port[port_index]; in u132_roothub_setportfeature()
2695 return u132_write_pcimem(u132, in u132_roothub_setportfeature()
2698 return u132_write_pcimem(u132, in u132_roothub_setportfeature()
2701 return u132_roothub_portreset(u132, port_index); in u132_roothub_setportfeature()
2708 static int u132_roothub_clearportfeature(struct u132 *u132, u16 wValue, in u132_roothub_clearportfeature() argument
2711 if (wIndex == 0 || wIndex > u132->num_ports) { in u132_roothub_clearportfeature()
2716 struct u132_port *port = &u132->port[port_index]; in u132_roothub_clearportfeature()
2727 if ((u132->hc_control & OHCI_CTRL_HCFS) in u132_roothub_clearportfeature()
2729 dev_err(&u132->platform_dev->dev, "TODO resume_" in u132_roothub_clearportfeature()
2751 return u132_write_pcimem(u132, roothub.portstatus[port_index], in u132_roothub_clearportfeature()
2760 struct u132 *u132 = hcd_to_u132(hcd); in u132_hub_status_data() local
2761 if (u132->going > 1) { in u132_hub_status_data()
2762 dev_err(&u132->platform_dev->dev, "device hcd=%p has been remov" in u132_hub_status_data()
2763 "ed %d\n", hcd, u132->going); in u132_hub_status_data()
2765 } else if (u132->going > 0) { in u132_hub_status_data()
2766 dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov" in u132_hub_status_data()
2771 if (u132->flags & OHCI_QUIRK_AMD756) { in u132_hub_status_data()
2772 if ((u132->hc_roothub_a & RH_A_NDP) > MAX_ROOT_PORTS) { in u132_hub_status_data()
2773 dev_err(&u132->platform_dev->dev, "bogus NDP, r" in u132_hub_status_data()
2775 u132->hc_roothub_a & RH_A_NDP); in u132_hub_status_data()
2779 if (u132->hc_roothub_status & (RH_HS_LPSC | RH_HS_OCIC)) in u132_hub_status_data()
2783 if (u132->num_ports > 7) { in u132_hub_status_data()
2787 for (i = 0; i < u132->num_ports; i++) { in u132_hub_status_data()
2788 if (u132->hc_roothub_portstatus[i] & (RH_PS_CSC | in u132_hub_status_data()
2798 if (!(u132->hc_roothub_portstatus[i] & RH_PS_CCS)) in u132_hub_status_data()
2801 if ((u132->hc_roothub_portstatus[i] & RH_PS_PSS)) in u132_hub_status_data()
2812 struct u132 *u132 = hcd_to_u132(hcd); in u132_hub_control() local
2813 if (u132->going > 1) { in u132_hub_control()
2814 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_hub_control()
2815 , u132->going); in u132_hub_control()
2817 } else if (u132->going > 0) { in u132_hub_control()
2818 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_hub_control()
2822 mutex_lock(&u132->sw_lock); in u132_hub_control()
2843 retval = u132_roothub_clearportfeature(u132, in u132_hub_control()
2850 retval = u132_roothub_descriptor(u132, in u132_hub_control()
2857 retval = u132_roothub_status(u132, in u132_hub_control()
2864 retval = u132_roothub_portstatus(u132, in u132_hub_control()
2871 retval = u132_roothub_setportfeature(u132, in u132_hub_control()
2880 u132_disable(u132); in u132_hub_control()
2881 u132->going = 1; in u132_hub_control()
2887 mutex_unlock(&u132->sw_lock); in u132_hub_control()
2894 struct u132 *u132 = hcd_to_u132(hcd); in u132_start_port_reset() local
2895 if (u132->going > 1) { in u132_start_port_reset()
2896 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_start_port_reset()
2897 , u132->going); in u132_start_port_reset()
2899 } else if (u132->going > 0) { in u132_start_port_reset()
2900 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_start_port_reset()
2910 struct u132 *u132 = hcd_to_u132(hcd); in u132_bus_suspend() local
2911 if (u132->going > 1) { in u132_bus_suspend()
2912 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_bus_suspend()
2913 , u132->going); in u132_bus_suspend()
2915 } else if (u132->going > 0) { in u132_bus_suspend()
2916 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_bus_suspend()
2924 struct u132 *u132 = hcd_to_u132(hcd); in u132_bus_resume() local
2925 if (u132->going > 1) { in u132_bus_resume()
2926 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_bus_resume()
2927 , u132->going); in u132_bus_resume()
2929 } else if (u132->going > 0) { in u132_bus_resume()
2930 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_bus_resume()
2942 .hcd_priv_size = sizeof(struct u132),
2969 struct u132 *u132 = hcd_to_u132(hcd); in u132_remove() local
2970 if (u132->going++ > 1) { in u132_remove()
2971 dev_err(&u132->platform_dev->dev, "already being remove" in u132_remove()
2977 dev_err(&u132->platform_dev->dev, "removing device u132" in u132_remove()
2978 ".%d\n", u132->sequence_num); in u132_remove()
2980 mutex_lock(&u132->sw_lock); in u132_remove()
2981 u132_monitor_cancel_work(u132); in u132_remove()
2983 struct u132_ring *ring = &u132->ring[rings]; in u132_remove()
2984 u132_ring_cancel_work(u132, ring); in u132_remove()
2986 struct u132_endp *endp = u132->endp[endps]; in u132_remove()
2988 u132_endp_cancel_work(u132, endp); in u132_remove()
2990 u132->going += 1; in u132_remove()
2992 u132->sequence_num); in u132_remove()
2993 mutex_unlock(&u132->sw_lock); in u132_remove()
2995 u132_u132_put_kref(u132); in u132_remove()
3002 static void u132_initialise(struct u132 *u132, struct platform_device *pdev) in u132_initialise() argument
3009 u132->board = dev_get_platdata(&pdev->dev); in u132_initialise()
3010 u132->platform_dev = pdev; in u132_initialise()
3011 u132->power = 0; in u132_initialise()
3012 u132->reset = 0; in u132_initialise()
3013 mutex_init(&u132->sw_lock); in u132_initialise()
3014 mutex_init(&u132->scheduler_lock); in u132_initialise()
3016 struct u132_ring *ring = &u132->ring[rings]; in u132_initialise()
3017 ring->u132 = u132; in u132_initialise()
3024 mutex_lock(&u132->sw_lock); in u132_initialise()
3025 INIT_DELAYED_WORK(&u132->monitor, u132_hcd_monitor_work); in u132_initialise()
3027 struct u132_port *port = &u132->port[ports]; in u132_initialise()
3028 port->u132 = u132; in u132_initialise()
3035 struct u132_addr *addr = &u132->addr[addrs]; in u132_initialise()
3039 struct u132_udev *udev = &u132->udev[udevs]; in u132_initialise()
3054 u132->endp[endps] = NULL; in u132_initialise()
3056 mutex_unlock(&u132->sw_lock); in u132_initialise()
3089 struct u132 *u132 = hcd_to_u132(hcd); in u132_probe() local
3093 list_add_tail(&u132->u132_list, &u132_static_list); in u132_probe()
3094 u132->sequence_num = ++u132_instances; in u132_probe()
3096 u132_u132_init_kref(u132); in u132_probe()
3097 u132_initialise(u132, pdev); in u132_probe()
3101 dev_err(&u132->platform_dev->dev, "init error %d\n", in u132_probe()
3103 u132_u132_put_kref(u132); in u132_probe()
3107 u132_monitor_queue_work(u132, 100); in u132_probe()
3122 struct u132 *u132 = hcd_to_u132(hcd); in u132_suspend() local
3123 if (u132->going > 1) { in u132_suspend()
3124 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_suspend()
3125 , u132->going); in u132_suspend()
3127 } else if (u132->going > 0) { in u132_suspend()
3128 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_suspend()
3141 port_power(u132, ports, 0); in u132_suspend()
3152 struct u132 *u132 = hcd_to_u132(hcd); in u132_resume() local
3153 if (u132->going > 1) { in u132_resume()
3154 dev_err(&u132->platform_dev->dev, "device has been removed %d\n" in u132_resume()
3155 , u132->going); in u132_resume()
3157 } else if (u132->going > 0) { in u132_resume()
3158 dev_err(&u132->platform_dev->dev, "device is being removed\n"); in u132_resume()
3162 if (!u132->port[0].power) { in u132_resume()
3165 port_power(u132, ports, 1); in u132_resume()
3212 struct u132 *u132; in u132_hcd_exit() local
3213 struct u132 *temp; in u132_hcd_exit()
3217 list_for_each_entry_safe(u132, temp, &u132_static_list, u132_list) { in u132_hcd_exit()
3218 platform_device_unregister(u132->platform_dev); in u132_hcd_exit()