aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/ABI/testing/sysfs-bus-usb15
-rw-r--r--Documentation/devicetree/bindings/usb/isp1301.txt25
-rw-r--r--Documentation/devicetree/bindings/usb/lpc32xx-udc.txt28
-rw-r--r--Documentation/devicetree/bindings/usb/ohci-nxp.txt24
-rw-r--r--Documentation/devicetree/bindings/usb/spear-usb.txt39
-rw-r--r--Documentation/usb/functionfs.txt67
-rw-r--r--MAINTAINERS14
-rw-r--r--arch/arm/mach-exynos/Kconfig3
-rw-r--r--arch/arm/mach-exynos/include/mach/irqs.h1
-rw-r--r--arch/arm/mach-exynos/include/mach/map.h4
-rw-r--r--arch/arm/mach-exynos/include/mach/regs-pmu.h3
-rw-r--r--arch/arm/mach-exynos/mach-nuri.c10
-rw-r--r--arch/arm/mach-exynos/mach-universal_c210.c11
-rw-r--r--arch/arm/mach-exynos/setup-usb-phy.c100
-rw-r--r--arch/arm/mach-s3c64xx/mach-crag6410.c2
-rw-r--r--arch/arm/mach-s3c64xx/mach-smartq.c2
-rw-r--r--arch/arm/mach-s3c64xx/mach-smdk6410.c2
-rw-r--r--arch/arm/mach-s5pv210/Kconfig1
-rw-r--r--arch/arm/mach-s5pv210/mach-goni.c6
-rw-r--r--arch/arm/plat-samsung/devs.c2
-rw-r--r--arch/arm/plat-samsung/include/plat/regs-usb-hsotg.h379
-rw-r--r--drivers/acpi/glue.c2
-rw-r--r--drivers/acpi/utils.c30
-rw-r--r--drivers/bcma/scan.c19
-rw-r--r--drivers/bluetooth/ath3k.c1
-rw-r--r--drivers/bluetooth/bcm203x.c1
-rw-r--r--drivers/bluetooth/bfusb.c1
-rw-r--r--drivers/bluetooth/bpa10x.c1
-rw-r--r--drivers/bluetooth/btusb.c1
-rw-r--r--drivers/hid/usbhid/hid-core.c65
-rw-r--r--drivers/hid/usbhid/usbmouse.c7
-rw-r--r--drivers/input/joystick/iforce/iforce-main.c3
-rw-r--r--drivers/input/joystick/iforce/iforce-packets.c16
-rw-r--r--drivers/input/joystick/iforce/iforce-usb.c18
-rw-r--r--drivers/input/joystick/iforce/iforce.h1
-rw-r--r--drivers/input/joystick/xpad.c35
-rw-r--r--drivers/input/misc/cm109.c33
-rw-r--r--drivers/input/misc/keyspan_remote.c23
-rw-r--r--drivers/input/misc/powermate.c13
-rw-r--r--drivers/input/misc/yealink.c31
-rw-r--r--drivers/input/mouse/appletouch.c59
-rw-r--r--drivers/input/mouse/bcm5974.c24
-rw-r--r--drivers/input/tablet/acecad.c15
-rw-r--r--drivers/input/tablet/aiptek.c28
-rw-r--r--drivers/input/tablet/gtco.c110
-rw-r--r--drivers/input/tablet/kbtab.c15
-rw-r--r--drivers/input/tablet/wacom_sys.c11
-rw-r--r--drivers/input/tablet/wacom_wac.c16
-rw-r--r--drivers/input/touchscreen/usbtouchscreen.c77
-rw-r--r--drivers/isdn/gigaset/bas-gigaset.c1
-rw-r--r--drivers/isdn/gigaset/usb-gigaset.c1
-rw-r--r--drivers/isdn/hardware/mISDN/hfcsusb.c1
-rw-r--r--drivers/isdn/hisax/hfc_usb.c1
-rw-r--r--drivers/isdn/hisax/st5481_init.c1
-rw-r--r--drivers/media/video/gspca/ov534_9.c2
-rw-r--r--drivers/media/video/hdpvr/hdpvr-core.c4
-rw-r--r--drivers/net/irda/irda-usb.c2
-rw-r--r--drivers/net/irda/kingsun-sir.c42
-rw-r--r--drivers/net/irda/ks959-sir.c31
-rw-r--r--drivers/net/irda/ksdazzle-sir.c46
-rw-r--r--drivers/net/irda/stir4200.c6
-rw-r--r--drivers/net/usb/asix.c1
-rw-r--r--drivers/net/usb/catc.c26
-rw-r--r--drivers/net/usb/cdc-phonet.c1
-rw-r--r--drivers/net/usb/cdc_eem.c1
-rw-r--r--drivers/net/usb/cdc_ether.c1
-rw-r--r--drivers/net/usb/cdc_ncm.c1
-rw-r--r--drivers/net/usb/cdc_subset.c1
-rw-r--r--drivers/net/usb/cx82310_eth.c1
-rw-r--r--drivers/net/usb/dm9601.c1
-rw-r--r--drivers/net/usb/gl620a.c1
-rw-r--r--drivers/net/usb/hso.c1
-rw-r--r--drivers/net/usb/int51x1.c1
-rw-r--r--drivers/net/usb/ipheth.c35
-rw-r--r--drivers/net/usb/kalmia.c3
-rw-r--r--drivers/net/usb/kaweth.c64
-rw-r--r--drivers/net/usb/lg-vl600.c1
-rw-r--r--drivers/net/usb/mcs7830.c1
-rw-r--r--drivers/net/usb/net1080.c1
-rw-r--r--drivers/net/usb/pegasus.c1
-rw-r--r--drivers/net/usb/plusb.c1
-rw-r--r--drivers/net/usb/qmi_wwan.c1
-rw-r--r--drivers/net/usb/rndis_host.c1
-rw-r--r--drivers/net/usb/rtl8150.c18
-rw-r--r--drivers/net/usb/sierra_net.c1
-rw-r--r--drivers/net/usb/smsc75xx.c1
-rw-r--r--drivers/net/usb/smsc95xx.c1
-rw-r--r--drivers/net/usb/zaurus.c1
-rw-r--r--drivers/net/wireless/at76c50x-usb.c3
-rw-r--r--drivers/net/wireless/ath/ath6kl/usb.c1
-rw-r--r--drivers/net/wireless/ath/ath9k/hif_usb.c1
-rw-r--r--drivers/net/wireless/ath/carl9170/usb.c1
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/usb.c3
-rw-r--r--drivers/net/wireless/libertas/if_usb.c1
-rw-r--r--drivers/net/wireless/libertas_tf/if_usb.c1
-rw-r--r--drivers/net/wireless/orinoco/orinoco_usb.c1
-rw-r--r--drivers/net/wireless/p54/p54usb.c1
-rw-r--r--drivers/net/wireless/rndis_wlan.c1
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c1
-rw-r--r--drivers/net/wireless/rt2x00/rt2800usb.c1
-rw-r--r--drivers/net/wireless/rt2x00/rt73usb.c1
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187/dev.c1
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/sw.c1
-rw-r--r--drivers/net/wireless/zd1201.c1
-rw-r--r--drivers/net/wireless/zd1211rw/zd_usb.c1
-rw-r--r--drivers/staging/Kconfig4
-rw-r--r--drivers/staging/Makefile2
-rw-r--r--drivers/staging/asus_oled/asus_oled.c6
-rw-r--r--drivers/staging/ccg/Kconfig20
-rw-r--r--drivers/staging/ccg/Makefile4
-rw-r--r--drivers/staging/ccg/TODO6
-rw-r--r--drivers/staging/ccg/ccg.c1299
-rw-r--r--drivers/staging/ccg/sysfs-class-ccg_usb158
-rw-r--r--drivers/staging/comedi/drivers/dt9812.c16
-rw-r--r--drivers/staging/comedi/drivers/vmk80xx.c4
-rw-r--r--drivers/staging/frontier/alphatrack.c15
-rw-r--r--drivers/staging/frontier/tranzport.c16
-rw-r--r--drivers/staging/line6/driver.c5
-rw-r--r--drivers/staging/line6/toneport.c2
-rw-r--r--drivers/staging/media/as102/as102_drv.c34
-rw-r--r--drivers/staging/media/as102/as102_usb_drv.c7
-rw-r--r--drivers/staging/media/easycap/easycap_main.c6
-rw-r--r--drivers/staging/media/go7007/go7007.txt1
-rw-r--r--drivers/staging/media/lirc/lirc_imon.c80
-rw-r--r--drivers/staging/media/lirc/lirc_sasem.c100
-rw-r--r--drivers/staging/media/lirc/lirc_ttusbir.c13
-rw-r--r--drivers/staging/quatech_usb2/Kconfig15
-rw-r--r--drivers/staging/quatech_usb2/Makefile1
-rw-r--r--drivers/staging/quatech_usb2/TODO8
-rw-r--r--drivers/staging/quatech_usb2/quatech_usb2.c1976
-rw-r--r--drivers/staging/serqt_usb2/serqt_usb2.c79
-rw-r--r--drivers/usb/Kconfig4
-rw-r--r--drivers/usb/Makefile2
-rw-r--r--drivers/usb/atm/cxacru.c34
-rw-r--r--drivers/usb/atm/speedtch.c2
-rw-r--r--drivers/usb/atm/ueagle-atm.c15
-rw-r--r--drivers/usb/atm/usbatm.c30
-rw-r--r--drivers/usb/atm/xusbatm.c4
-rw-r--r--drivers/usb/chipidea/Kconfig32
-rw-r--r--drivers/usb/chipidea/Makefile14
-rw-r--r--drivers/usb/chipidea/bits.h90
-rw-r--r--drivers/usb/chipidea/ci.h313
-rw-r--r--drivers/usb/chipidea/ci13xxx_msm.c (renamed from drivers/usb/gadget/ci13xxx_msm.c)60
-rw-r--r--drivers/usb/chipidea/ci13xxx_pci.c (renamed from drivers/usb/gadget/ci13xxx_pci.c)154
-rw-r--r--drivers/usb/chipidea/core.c474
-rw-r--r--drivers/usb/chipidea/debug.c804
-rw-r--r--drivers/usb/chipidea/debug.h56
-rw-r--r--drivers/usb/chipidea/host.c160
-rw-r--r--drivers/usb/chipidea/host.h17
-rw-r--r--drivers/usb/chipidea/udc.c1809
-rw-r--r--drivers/usb/chipidea/udc.h93
-rw-r--r--drivers/usb/class/cdc-acm.c1
-rw-r--r--drivers/usb/class/cdc-wdm.c38
-rw-r--r--drivers/usb/class/usblp.c82
-rw-r--r--drivers/usb/core/Kconfig53
-rw-r--r--drivers/usb/core/Makefile2
-rw-r--r--drivers/usb/core/devio.c93
-rw-r--r--drivers/usb/core/driver.c103
-rw-r--r--drivers/usb/core/file.c4
-rw-r--r--drivers/usb/core/hcd.c15
-rw-r--r--drivers/usb/core/hub.c676
-rw-r--r--drivers/usb/core/inode.c748
-rw-r--r--drivers/usb/core/message.c38
-rw-r--r--drivers/usb/core/quirks.c3
-rw-r--r--drivers/usb/core/urb.c21
-rw-r--r--drivers/usb/core/usb-acpi.c117
-rw-r--r--drivers/usb/core/usb.c9
-rw-r--r--drivers/usb/core/usb.h7
-rw-r--r--drivers/usb/dwc3/Kconfig2
-rw-r--r--drivers/usb/dwc3/core.c31
-rw-r--r--drivers/usb/dwc3/core.h40
-rw-r--r--drivers/usb/dwc3/dwc3-omap.c32
-rw-r--r--drivers/usb/dwc3/ep0.c157
-rw-r--r--drivers/usb/dwc3/gadget.c151
-rw-r--r--drivers/usb/dwc3/gadget.h1
-rw-r--r--drivers/usb/dwc3/host.c19
-rw-r--r--drivers/usb/dwc3/io.h16
-rw-r--r--drivers/usb/gadget/Kconfig68
-rw-r--r--drivers/usb/gadget/Makefile4
-rw-r--r--drivers/usb/gadget/amd5536udc.c27
-rw-r--r--drivers/usb/gadget/amd5536udc.h1
-rw-r--r--drivers/usb/gadget/at91_udc.c77
-rw-r--r--drivers/usb/gadget/at91_udc.h3
-rw-r--r--drivers/usb/gadget/atmel_usba_udc.c76
-rw-r--r--drivers/usb/gadget/atmel_usba_udc.h1
-rw-r--r--drivers/usb/gadget/ci13xxx_udc.c2996
-rw-r--r--drivers/usb/gadget/ci13xxx_udc.h227
-rw-r--r--drivers/usb/gadget/composite.c107
-rw-r--r--drivers/usb/gadget/dummy_hcd.c8
-rw-r--r--drivers/usb/gadget/f_fs.c52
-rw-r--r--drivers/usb/gadget/f_hid.c2
-rw-r--r--drivers/usb/gadget/f_loopback.c4
-rw-r--r--drivers/usb/gadget/f_mass_storage.c7
-rw-r--r--drivers/usb/gadget/f_rndis.c30
-rw-r--r--drivers/usb/gadget/f_sourcesink.c424
-rw-r--r--drivers/usb/gadget/fsl_qe_udc.c371
-rw-r--r--drivers/usb/gadget/fsl_qe_udc.h1
-rw-r--r--drivers/usb/gadget/fsl_udc_core.c55
-rw-r--r--drivers/usb/gadget/fsl_usb2_udc.h12
-rw-r--r--drivers/usb/gadget/fusb300_udc.c4
-rw-r--r--drivers/usb/gadget/fusb300_udc.h1
-rw-r--r--drivers/usb/gadget/g_ffs.c200
-rw-r--r--drivers/usb/gadget/g_zero.h5
-rw-r--r--drivers/usb/gadget/gadget_chips.h3
-rw-r--r--drivers/usb/gadget/goku_udc.c32
-rw-r--r--drivers/usb/gadget/goku_udc.h1
-rw-r--r--drivers/usb/gadget/imx_udc.c53
-rw-r--r--drivers/usb/gadget/langwell_udc.c3434
-rw-r--r--drivers/usb/gadget/langwell_udc.h224
-rw-r--r--drivers/usb/gadget/lpc32xx_udc.c3538
-rw-r--r--drivers/usb/gadget/m66592-udc.c10
-rw-r--r--drivers/usb/gadget/m66592-udc.h2
-rw-r--r--drivers/usb/gadget/mv_udc.h1
-rw-r--r--drivers/usb/gadget/mv_udc_core.c19
-rw-r--r--drivers/usb/gadget/omap_udc.c19
-rw-r--r--drivers/usb/gadget/omap_udc.h1
-rw-r--r--drivers/usb/gadget/pch_udc.c29
-rw-r--r--drivers/usb/gadget/printer.c470
-rw-r--r--drivers/usb/gadget/pxa25x_udc.c26
-rw-r--r--drivers/usb/gadget/pxa25x_udc.h1
-rw-r--r--drivers/usb/gadget/r8a66597-udc.c29
-rw-r--r--drivers/usb/gadget/r8a66597-udc.h3
-rw-r--r--drivers/usb/gadget/s3c-hsotg.c1633
-rw-r--r--drivers/usb/gadget/s3c-hsotg.h377
-rw-r--r--drivers/usb/gadget/s3c-hsudc.c9
-rw-r--r--drivers/usb/gadget/s3c2410_udc.c14
-rw-r--r--drivers/usb/gadget/s3c2410_udc.h1
-rw-r--r--drivers/usb/gadget/u_ether.c8
-rw-r--r--drivers/usb/gadget/u_ether.h46
-rw-r--r--drivers/usb/gadget/u_serial.c4
-rw-r--r--drivers/usb/gadget/zero.c19
-rw-r--r--drivers/usb/host/Kconfig41
-rw-r--r--drivers/usb/host/Makefile2
-rw-r--r--drivers/usb/host/bcma-hcd.c335
-rw-r--r--drivers/usb/host/ehci-dbg.c6
-rw-r--r--drivers/usb/host/ehci-fsl.c41
-rw-r--r--drivers/usb/host/ehci-fsl.h13
-rw-r--r--drivers/usb/host/ehci-hcd.c36
-rw-r--r--drivers/usb/host/ehci-hub.c22
-rw-r--r--drivers/usb/host/ehci-omap.c22
-rw-r--r--drivers/usb/host/ehci-pci.c4
-rw-r--r--drivers/usb/host/ehci-platform.c6
-rw-r--r--drivers/usb/host/ehci-q.c19
-rw-r--r--drivers/usb/host/ehci-s5p.c4
-rw-r--r--drivers/usb/host/ehci-sched.c55
-rw-r--r--drivers/usb/host/ehci-sead3.c266
-rw-r--r--drivers/usb/host/ehci-sh.c8
-rw-r--r--drivers/usb/host/ehci-spear.c36
-rw-r--r--drivers/usb/host/ehci-tegra.c69
-rw-r--r--drivers/usb/host/fhci-tds.c2
-rw-r--r--drivers/usb/host/fsl-mph-dr-of.c41
-rw-r--r--drivers/usb/host/isp1760-hcd.c9
-rw-r--r--drivers/usb/host/isp1760-if.c8
-rw-r--r--drivers/usb/host/ohci-at91.c16
-rw-r--r--drivers/usb/host/ohci-au1xxx.c3
-rw-r--r--drivers/usb/host/ohci-cns3xxx.c3
-rw-r--r--drivers/usb/host/ohci-da8xx.c2
-rw-r--r--drivers/usb/host/ohci-dbg.c4
-rw-r--r--drivers/usb/host/ohci-ep93xx.c9
-rw-r--r--drivers/usb/host/ohci-exynos.c3
-rw-r--r--drivers/usb/host/ohci-hcd.c21
-rw-r--r--drivers/usb/host/ohci-nxp.c173
-rw-r--r--drivers/usb/host/ohci-omap.c5
-rw-r--r--drivers/usb/host/ohci-platform.c4
-rw-r--r--drivers/usb/host/ohci-pnx8550.c3
-rw-r--r--drivers/usb/host/ohci-ppc-of.c5
-rw-r--r--drivers/usb/host/ohci-ppc-soc.c3
-rw-r--r--drivers/usb/host/ohci-ps3.c3
-rw-r--r--drivers/usb/host/ohci-pxa27x.c3
-rw-r--r--drivers/usb/host/ohci-s3c2410.c3
-rw-r--r--drivers/usb/host/ohci-sa1111.c4
-rw-r--r--drivers/usb/host/ohci-sh.c8
-rw-r--r--drivers/usb/host/ohci-spear.c36
-rw-r--r--drivers/usb/host/ohci-ssb.c260
-rw-r--r--drivers/usb/host/ohci-tmio.c3
-rw-r--r--drivers/usb/host/ohci-xls.c3
-rw-r--r--drivers/usb/host/oxu210hp-hcd.c13
-rw-r--r--drivers/usb/host/pci-quirks.c32
-rw-r--r--drivers/usb/host/r8a66597-hcd.c20
-rw-r--r--drivers/usb/host/ssb-hcd.c280
-rw-r--r--drivers/usb/host/xhci-hub.c41
-rw-r--r--drivers/usb/host/xhci-mem.c39
-rw-r--r--drivers/usb/host/xhci-pci.c14
-rw-r--r--drivers/usb/host/xhci-ring.c28
-rw-r--r--drivers/usb/host/xhci.c483
-rw-r--r--drivers/usb/host/xhci.h17
-rw-r--r--drivers/usb/image/mdc800.c19
-rw-r--r--drivers/usb/misc/appledisplay.c12
-rw-r--r--drivers/usb/misc/emi26.c59
-rw-r--r--drivers/usb/misc/emi62.c62
-rw-r--r--drivers/usb/misc/idmouse.c9
-rw-r--r--drivers/usb/misc/iowarrior.c4
-rw-r--r--drivers/usb/misc/ldusb.c15
-rw-r--r--drivers/usb/misc/legousbtower.c45
-rw-r--r--drivers/usb/misc/rio500.c65
-rw-r--r--drivers/usb/misc/usblcd.c24
-rw-r--r--drivers/usb/misc/usbtest.c17
-rw-r--r--drivers/usb/misc/uss720.c49
-rw-r--r--drivers/usb/misc/yurex.c54
-rw-r--r--drivers/usb/musb/Kconfig8
-rw-r--r--drivers/usb/musb/Makefile1
-rw-r--r--drivers/usb/musb/cppi_dma.c1
-rw-r--r--drivers/usb/musb/musb_core.c4
-rw-r--r--drivers/usb/musb/musb_dsps.c711
-rw-r--r--drivers/usb/otg/gpio_vbus.c81
-rw-r--r--drivers/usb/otg/twl6030-usb.c4
-rw-r--r--drivers/usb/phy/Kconfig17
-rw-r--r--drivers/usb/phy/Makefile7
-rw-r--r--drivers/usb/phy/isp1301.c77
-rw-r--r--drivers/usb/renesas_usbhs/mod_gadget.c19
-rw-r--r--drivers/usb/serial/Kconfig9
-rw-r--r--drivers/usb/serial/Makefile1
-rw-r--r--drivers/usb/serial/aircable.c16
-rw-r--r--drivers/usb/serial/ark3116.c36
-rw-r--r--drivers/usb/serial/belkin_sa.c47
-rw-r--r--drivers/usb/serial/bus.c9
-rw-r--r--drivers/usb/serial/ch341.c48
-rw-r--r--drivers/usb/serial/console.c9
-rw-r--r--drivers/usb/serial/cp210x.c32
-rw-r--r--drivers/usb/serial/cyberjack.c27
-rw-r--r--drivers/usb/serial/cypress_m8.c45
-rw-r--r--drivers/usb/serial/digi_acceleport.c35
-rw-r--r--drivers/usb/serial/empeg.c13
-rw-r--r--drivers/usb/serial/ezusb.c2
-rw-r--r--drivers/usb/serial/f81232.c37
-rw-r--r--drivers/usb/serial/ftdi_sio.c47
-rw-r--r--drivers/usb/serial/ftdi_sio_ids.h8
-rw-r--r--drivers/usb/serial/funsoft.c9
-rw-r--r--drivers/usb/serial/garmin_gps.c29
-rw-r--r--drivers/usb/serial/generic.c68
-rw-r--r--drivers/usb/serial/hp4x.c9
-rw-r--r--drivers/usb/serial/io_edgeport.c2
-rw-r--r--drivers/usb/serial/io_tables.h7
-rw-r--r--drivers/usb/serial/io_ti.c27
-rw-r--r--drivers/usb/serial/ipaq.c52
-rw-r--r--drivers/usb/serial/ipw.c18
-rw-r--r--drivers/usb/serial/ir-usb.c72
-rw-r--r--drivers/usb/serial/iuu_phoenix.c47
-rw-r--r--drivers/usb/serial/keyspan.c53
-rw-r--r--drivers/usb/serial/keyspan.h7
-rw-r--r--drivers/usb/serial/keyspan_pda.c17
-rw-r--r--drivers/usb/serial/kl5kusb105.c18
-rw-r--r--drivers/usb/serial/kobil_sct.c19
-rw-r--r--drivers/usb/serial/mct_u232.c33
-rw-r--r--drivers/usb/serial/metro-usb.c92
-rw-r--r--drivers/usb/serial/mos7720.c49
-rw-r--r--drivers/usb/serial/mos7840.c298
-rw-r--r--drivers/usb/serial/moto_modem.c9
-rw-r--r--drivers/usb/serial/navman.c26
-rw-r--r--drivers/usb/serial/omninet.c24
-rw-r--r--drivers/usb/serial/opticon.c53
-rw-r--r--drivers/usb/serial/option.c18
-rw-r--r--drivers/usb/serial/oti6858.c44
-rw-r--r--drivers/usb/serial/pl2303.c114
-rw-r--r--drivers/usb/serial/qcaux.c9
-rw-r--r--drivers/usb/serial/qcserial.c41
-rw-r--r--drivers/usb/serial/quatech2.c1155
-rw-r--r--drivers/usb/serial/safe_serial.c11
-rw-r--r--drivers/usb/serial/siemens_mpi.c9
-rw-r--r--drivers/usb/serial/sierra.c56
-rw-r--r--drivers/usb/serial/spcp8x5.c24
-rw-r--r--drivers/usb/serial/ssu100.c33
-rw-r--r--drivers/usb/serial/symbolserial.c30
-rw-r--r--drivers/usb/serial/ti_usb_3410_5052.c65
-rw-r--r--drivers/usb/serial/ti_usb_3410_5052.h1
-rw-r--r--drivers/usb/serial/usb-serial.c109
-rw-r--r--drivers/usb/serial/usb_debug.c9
-rw-r--r--drivers/usb/serial/usb_wwan.c50
-rw-r--r--drivers/usb/serial/visor.c98
-rw-r--r--drivers/usb/serial/vivopay-serial.c9
-rw-r--r--drivers/usb/serial/whiteheat.c569
-rw-r--r--drivers/usb/serial/zio.c9
-rw-r--r--drivers/usb/storage/ene_ub6250.c6
-rw-r--r--drivers/usb/storage/unusual_devs.h7
-rw-r--r--drivers/usb/storage/usb.c22
-rw-r--r--drivers/usb/usb-skeleton.c36
-rw-r--r--drivers/video/udlfb.c2
-rw-r--r--include/acpi/acpi_bus.h36
-rw-r--r--include/linux/bcma/bcma.h1
-rw-r--r--include/linux/fsl_devices.h9
-rw-r--r--include/linux/platform_data/ehci-sh.h28
-rw-r--r--include/linux/platform_data/s3c-hsotg.h (renamed from arch/arm/plat-samsung/include/plat/udc-hs.h)5
-rw-r--r--include/linux/usb.h79
-rw-r--r--include/linux/usb/ch11.h2
-rw-r--r--include/linux/usb/ch9.h58
-rw-r--r--include/linux/usb/chipidea.h28
-rw-r--r--include/linux/usb/composite.h6
-rw-r--r--include/linux/usb/functionfs.h4
-rw-r--r--include/linux/usb/gpio_vbus.h2
-rw-r--r--include/linux/usb/hcd.h32
-rw-r--r--include/linux/usb/isp1301.h80
-rw-r--r--include/linux/usb/langwell_udc.h310
-rw-r--r--include/linux/usb/serial.h34
-rw-r--r--tools/usb/ffs-test.c2
-rw-r--r--tools/usb/testusb.c5
395 files changed, 19447 insertions, 16215 deletions
diff --git a/Documentation/ABI/testing/sysfs-bus-usb b/Documentation/ABI/testing/sysfs-bus-usb
index 7c22a532fdfb..6ae9fec8e07d 100644
--- a/Documentation/ABI/testing/sysfs-bus-usb
+++ b/Documentation/ABI/testing/sysfs-bus-usb
@@ -135,6 +135,17 @@ Description:
135 for the device and attempt to bind to it. For example: 135 for the device and attempt to bind to it. For example:
136 # echo "8086 10f5" > /sys/bus/usb/drivers/foo/new_id 136 # echo "8086 10f5" > /sys/bus/usb/drivers/foo/new_id
137 137
138 Reading from this file will list all dynamically added
139 device IDs in the same format, with one entry per
140 line. For example:
141 # cat /sys/bus/usb/drivers/foo/new_id
142 8086 10f5
143 dead beef 06
144 f00d cafe
145
146 The list will be truncated at PAGE_SIZE bytes due to
147 sysfs restrictions.
148
138What: /sys/bus/usb-serial/drivers/.../new_id 149What: /sys/bus/usb-serial/drivers/.../new_id
139Date: October 2011 150Date: October 2011
140Contact: linux-usb@vger.kernel.org 151Contact: linux-usb@vger.kernel.org
@@ -157,6 +168,10 @@ Description:
157 match the driver to the device. For example: 168 match the driver to the device. For example:
158 # echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id 169 # echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id
159 170
171 Reading from this file will list the dynamically added
172 device IDs, exactly like reading from the entry
173 "/sys/bus/usb/drivers/.../new_id"
174
160What: /sys/bus/usb/device/.../avoid_reset_quirk 175What: /sys/bus/usb/device/.../avoid_reset_quirk
161Date: December 2009 176Date: December 2009
162Contact: Oliver Neukum <oliver@neukum.org> 177Contact: Oliver Neukum <oliver@neukum.org>
diff --git a/Documentation/devicetree/bindings/usb/isp1301.txt b/Documentation/devicetree/bindings/usb/isp1301.txt
new file mode 100644
index 000000000000..5405d99d9aaa
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/isp1301.txt
@@ -0,0 +1,25 @@
1* NXP ISP1301 USB transceiver
2
3Required properties:
4- compatible: must be "nxp,isp1301"
5- reg: I2C address of the ISP1301 device
6
7Optional properties of devices using ISP1301:
8- transceiver: phandle of isp1301 - this helps the ISP1301 driver to find the
9 ISP1301 instance associated with the respective USB driver
10
11Example:
12
13 isp1301: usb-transceiver@2c {
14 compatible = "nxp,isp1301";
15 reg = <0x2c>;
16 };
17
18 usbd@31020000 {
19 compatible = "nxp,lpc3220-udc";
20 reg = <0x31020000 0x300>;
21 interrupt-parent = <&mic>;
22 interrupts = <0x3d 0>, <0x3e 0>, <0x3c 0>, <0x3a 0>;
23 transceiver = <&isp1301>;
24 status = "okay";
25 };
diff --git a/Documentation/devicetree/bindings/usb/lpc32xx-udc.txt b/Documentation/devicetree/bindings/usb/lpc32xx-udc.txt
new file mode 100644
index 000000000000..29f12a533f66
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/lpc32xx-udc.txt
@@ -0,0 +1,28 @@
1* NXP LPC32xx SoC USB Device Controller (UDC)
2
3Required properties:
4- compatible: Must be "nxp,lpc3220-udc"
5- reg: Physical base address of the controller and length of memory mapped
6 region.
7- interrupts: The USB interrupts:
8 * USB Device Low Priority Interrupt
9 * USB Device High Priority Interrupt
10 * USB Device DMA Interrupt
11 * External USB Transceiver Interrupt (OTG ATX)
12- transceiver: phandle of the associated ISP1301 device - this is necessary for
13 the UDC controller for connecting to the USB physical layer
14
15Example:
16
17 isp1301: usb-transceiver@2c {
18 compatible = "nxp,isp1301";
19 reg = <0x2c>;
20 };
21
22 usbd@31020000 {
23 compatible = "nxp,lpc3220-udc";
24 reg = <0x31020000 0x300>;
25 interrupt-parent = <&mic>;
26 interrupts = <0x3d 0>, <0x3e 0>, <0x3c 0>, <0x3a 0>;
27 transceiver = <&isp1301>;
28 };
diff --git a/Documentation/devicetree/bindings/usb/ohci-nxp.txt b/Documentation/devicetree/bindings/usb/ohci-nxp.txt
new file mode 100644
index 000000000000..71e28c1017ed
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/ohci-nxp.txt
@@ -0,0 +1,24 @@
1* OHCI controller, NXP ohci-nxp variant
2
3Required properties:
4- compatible: must be "nxp,ohci-nxp"
5- reg: physical base address of the controller and length of memory mapped
6 region.
7- interrupts: The OHCI interrupt
8- transceiver: phandle of the associated ISP1301 device - this is necessary for
9 the UDC controller for connecting to the USB physical layer
10
11Example (LPC32xx):
12
13 isp1301: usb-transceiver@2c {
14 compatible = "nxp,isp1301";
15 reg = <0x2c>;
16 };
17
18 ohci@31020000 {
19 compatible = "nxp,ohci-nxp";
20 reg = <0x31020000 0x300>;
21 interrupt-parent = <&mic>;
22 interrupts = <0x3b 0>;
23 transceiver = <&isp1301>;
24 };
diff --git a/Documentation/devicetree/bindings/usb/spear-usb.txt b/Documentation/devicetree/bindings/usb/spear-usb.txt
new file mode 100644
index 000000000000..f8a464a25653
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/spear-usb.txt
@@ -0,0 +1,39 @@
1ST SPEAr SoC USB controllers:
2-----------------------------
3
4EHCI:
5-----
6
7Required properties:
8- compatible: "st,spear600-ehci"
9- interrupt-parent: Should be the phandle for the interrupt controller
10 that services interrupts for this device
11- interrupts: Should contain the EHCI interrupt
12
13Example:
14
15 ehci@e1800000 {
16 compatible = "st,spear600-ehci", "usb-ehci";
17 reg = <0xe1800000 0x1000>;
18 interrupt-parent = <&vic1>;
19 interrupts = <27>;
20 };
21
22
23OHCI:
24-----
25
26Required properties:
27- compatible: "st,spear600-ohci"
28- interrupt-parent: Should be the phandle for the interrupt controller
29 that services interrupts for this device
30- interrupts: Should contain the OHCI interrupt
31
32Example:
33
34 ohci@e1900000 {
35 compatible = "st,spear600-ohci", "usb-ohci";
36 reg = <0xe1800000 0x1000>;
37 interrupt-parent = <&vic1>;
38 interrupts = <26>;
39 };
diff --git a/Documentation/usb/functionfs.txt b/Documentation/usb/functionfs.txt
new file mode 100644
index 000000000000..eaaaea019fc7
--- /dev/null
+++ b/Documentation/usb/functionfs.txt
@@ -0,0 +1,67 @@
1*How FunctionFS works*
2
3From kernel point of view it is just a composite function with some
4unique behaviour. It may be added to an USB configuration only after
5the user space driver has registered by writing descriptors and
6strings (the user space program has to provide the same information
7that kernel level composite functions provide when they are added to
8the configuration).
9
10This in particular means that the composite initialisation functions
11may not be in init section (ie. may not use the __init tag).
12
13From user space point of view it is a file system which when
14mounted provides an "ep0" file. User space driver need to
15write descriptors and strings to that file. It does not need
16to worry about endpoints, interfaces or strings numbers but
17simply provide descriptors such as if the function was the
18only one (endpoints and strings numbers starting from one and
19interface numbers starting from zero). The FunctionFS changes
20them as needed also handling situation when numbers differ in
21different configurations.
22
23When descriptors and strings are written "ep#" files appear
24(one for each declared endpoint) which handle communication on
25a single endpoint. Again, FunctionFS takes care of the real
26numbers and changing of the configuration (which means that
27"ep1" file may be really mapped to (say) endpoint 3 (and when
28configuration changes to (say) endpoint 2)). "ep0" is used
29for receiving events and handling setup requests.
30
31When all files are closed the function disables itself.
32
33What I also want to mention is that the FunctionFS is designed in such
34a way that it is possible to mount it several times so in the end
35a gadget could use several FunctionFS functions. The idea is that
36each FunctionFS instance is identified by the device name used
37when mounting.
38
39One can imagine a gadget that has an Ethernet, MTP and HID interfaces
40where the last two are implemented via FunctionFS. On user space
41level it would look like this:
42
43$ insmod g_ffs.ko idVendor=<ID> iSerialNumber=<string> functions=mtp,hid
44$ mkdir /dev/ffs-mtp && mount -t functionfs mtp /dev/ffs-mtp
45$ ( cd /dev/ffs-mtp && mtp-daemon ) &
46$ mkdir /dev/ffs-hid && mount -t functionfs hid /dev/ffs-hid
47$ ( cd /dev/ffs-hid && hid-daemon ) &
48
49On kernel level the gadget checks ffs_data->dev_name to identify
50whether it's FunctionFS designed for MTP ("mtp") or HID ("hid").
51
52If no "functions" module parameters is supplied, the driver accepts
53just one function with any name.
54
55When "functions" module parameter is supplied, only functions
56with listed names are accepted. In particular, if the "functions"
57parameter's value is just a one-element list, then the behaviour
58is similar to when there is no "functions" at all; however,
59only a function with the specified name is accepted.
60
61The gadget is registered only after all the declared function
62filesystems have been mounted and USB descriptors of all functions
63have been written to their ep0's.
64
65Conversely, the gadget is unregistered after the first USB function
66closes its endpoints.
67
diff --git a/MAINTAINERS b/MAINTAINERS
index 17360c7ac27b..a8e609855995 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1826,6 +1826,12 @@ L: linux-kernel@zh-kernel.org (moderated for non-subscribers)
1826S: Maintained 1826S: Maintained
1827F: Documentation/zh_CN/ 1827F: Documentation/zh_CN/
1828 1828
1829CHIPIDEA USB HIGH SPEED DUAL ROLE CONTROLLER
1830M: Alexander Shishkin <alexander.shishkin@linux.intel.com>
1831L: linux-usb@vger.kernel.org
1832S: Maintained
1833F: drivers/usb/chipidea/
1834
1829CISCO VIC ETHERNET NIC DRIVER 1835CISCO VIC ETHERNET NIC DRIVER
1830M: Christian Benvenuti <benve@cisco.com> 1836M: Christian Benvenuti <benve@cisco.com>
1831M: Roopa Prabhu <roprabhu@cisco.com> 1837M: Roopa Prabhu <roprabhu@cisco.com>
@@ -7053,6 +7059,14 @@ W: http://pegasus2.sourceforge.net/
7053S: Maintained 7059S: Maintained
7054F: drivers/net/usb/pegasus.* 7060F: drivers/net/usb/pegasus.*
7055 7061
7062USB PHY LAYER
7063M: Felipe Balbi <balbi@ti.com>
7064L: linux-usb@vger.kernel.org
7065T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
7066S: Maintained
7067F: drivers/usb/phy/
7068F: drivers/usb/otg/
7069
7056USB PRINTER DRIVER (usblp) 7070USB PRINTER DRIVER (usblp)
7057M: Pete Zaitcev <zaitcev@redhat.com> 7071M: Pete Zaitcev <zaitcev@redhat.com>
7058L: linux-usb@vger.kernel.org 7072L: linux-usb@vger.kernel.org
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index 2808e471cdcc..15b05b89cc39 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -251,6 +251,7 @@ config MACH_UNIVERSAL_C210
251 select S3C_DEV_I2C1 251 select S3C_DEV_I2C1
252 select S3C_DEV_I2C3 252 select S3C_DEV_I2C3
253 select S3C_DEV_I2C5 253 select S3C_DEV_I2C5
254 select S3C_DEV_USB_HSOTG
254 select S5P_DEV_I2C_HDMIPHY 255 select S5P_DEV_I2C_HDMIPHY
255 select S5P_DEV_MFC 256 select S5P_DEV_MFC
256 select S5P_DEV_ONENAND 257 select S5P_DEV_ONENAND
@@ -264,6 +265,7 @@ config MACH_UNIVERSAL_C210
264 select EXYNOS4_SETUP_SDHCI 265 select EXYNOS4_SETUP_SDHCI
265 select EXYNOS4_SETUP_FIMC 266 select EXYNOS4_SETUP_FIMC
266 select S5P_SETUP_MIPIPHY 267 select S5P_SETUP_MIPIPHY
268 select EXYNOS4_SETUP_USB_PHY
267 help 269 help
268 Machine support for Samsung Mobile Universal S5PC210 Reference 270 Machine support for Samsung Mobile Universal S5PC210 Reference
269 Board. 271 Board.
@@ -282,6 +284,7 @@ config MACH_NURI
282 select S3C_DEV_I2C3 284 select S3C_DEV_I2C3
283 select S3C_DEV_I2C5 285 select S3C_DEV_I2C5
284 select S3C_DEV_I2C6 286 select S3C_DEV_I2C6
287 select S3C_DEV_USB_HSOTG
285 select S5P_DEV_CSIS0 288 select S5P_DEV_CSIS0
286 select S5P_DEV_JPEG 289 select S5P_DEV_JPEG
287 select S5P_DEV_FIMC0 290 select S5P_DEV_FIMC0
diff --git a/arch/arm/mach-exynos/include/mach/irqs.h b/arch/arm/mach-exynos/include/mach/irqs.h
index 591e78521a9f..c02dae7bf4a3 100644
--- a/arch/arm/mach-exynos/include/mach/irqs.h
+++ b/arch/arm/mach-exynos/include/mach/irqs.h
@@ -189,6 +189,7 @@
189#define IRQ_IIC7 EXYNOS4_IRQ_IIC7 189#define IRQ_IIC7 EXYNOS4_IRQ_IIC7
190 190
191#define IRQ_USB_HOST EXYNOS4_IRQ_USB_HOST 191#define IRQ_USB_HOST EXYNOS4_IRQ_USB_HOST
192#define IRQ_OTG EXYNOS4_IRQ_USB_HSOTG
192 193
193#define IRQ_HSMMC0 EXYNOS4_IRQ_HSMMC0 194#define IRQ_HSMMC0 EXYNOS4_IRQ_HSMMC0
194#define IRQ_HSMMC1 EXYNOS4_IRQ_HSMMC1 195#define IRQ_HSMMC1 EXYNOS4_IRQ_HSMMC1
diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h
index 6e6d11ff352a..e009a66477f4 100644
--- a/arch/arm/mach-exynos/include/mach/map.h
+++ b/arch/arm/mach-exynos/include/mach/map.h
@@ -130,6 +130,9 @@
130#define EXYNOS4_PA_HSMMC(x) (0x12510000 + ((x) * 0x10000)) 130#define EXYNOS4_PA_HSMMC(x) (0x12510000 + ((x) * 0x10000))
131#define EXYNOS4_PA_DWMCI 0x12550000 131#define EXYNOS4_PA_DWMCI 0x12550000
132 132
133#define EXYNOS4_PA_HSOTG 0x12480000
134#define EXYNOS4_PA_USB_HSPHY 0x125B0000
135
133#define EXYNOS4_PA_SATA 0x12560000 136#define EXYNOS4_PA_SATA 0x12560000
134#define EXYNOS4_PA_SATAPHY 0x125D0000 137#define EXYNOS4_PA_SATAPHY 0x125D0000
135#define EXYNOS4_PA_SATAPHY_CTRL 0x126B0000 138#define EXYNOS4_PA_SATAPHY_CTRL 0x126B0000
@@ -186,6 +189,7 @@
186#define S3C_PA_SPI0 EXYNOS4_PA_SPI0 189#define S3C_PA_SPI0 EXYNOS4_PA_SPI0
187#define S3C_PA_SPI1 EXYNOS4_PA_SPI1 190#define S3C_PA_SPI1 EXYNOS4_PA_SPI1
188#define S3C_PA_SPI2 EXYNOS4_PA_SPI2 191#define S3C_PA_SPI2 EXYNOS4_PA_SPI2
192#define S3C_PA_USB_HSOTG EXYNOS4_PA_HSOTG
189 193
190#define S5P_PA_EHCI EXYNOS4_PA_EHCI 194#define S5P_PA_EHCI EXYNOS4_PA_EHCI
191#define S5P_PA_FIMC0 EXYNOS4_PA_FIMC0 195#define S5P_PA_FIMC0 EXYNOS4_PA_FIMC0
diff --git a/arch/arm/mach-exynos/include/mach/regs-pmu.h b/arch/arm/mach-exynos/include/mach/regs-pmu.h
index 4c53f38b5a9e..d457d052a420 100644
--- a/arch/arm/mach-exynos/include/mach/regs-pmu.h
+++ b/arch/arm/mach-exynos/include/mach/regs-pmu.h
@@ -163,6 +163,9 @@
163#define S5P_CHECK_SLEEP 0x00000BAD 163#define S5P_CHECK_SLEEP 0x00000BAD
164 164
165/* Only for EXYNOS4210 */ 165/* Only for EXYNOS4210 */
166#define S5P_USBDEVICE_PHY_CONTROL S5P_PMUREG(0x0704)
167#define S5P_USBDEVICE_PHY_ENABLE (1 << 0)
168
166#define S5P_USBHOST_PHY_CONTROL S5P_PMUREG(0x0708) 169#define S5P_USBHOST_PHY_CONTROL S5P_PMUREG(0x0708)
167#define S5P_USBHOST_PHY_ENABLE (1 << 0) 170#define S5P_USBHOST_PHY_ENABLE (1 << 0)
168 171
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
index 5784b0abfe9d..6c31f2ad765d 100644
--- a/arch/arm/mach-exynos/mach-nuri.c
+++ b/arch/arm/mach-exynos/mach-nuri.c
@@ -25,6 +25,7 @@
25#include <linux/mmc/host.h> 25#include <linux/mmc/host.h>
26#include <linux/fb.h> 26#include <linux/fb.h>
27#include <linux/pwm_backlight.h> 27#include <linux/pwm_backlight.h>
28#include <linux/platform_data/s3c-hsotg.h>
28#include <drm/exynos_drm.h> 29#include <drm/exynos_drm.h>
29 30
30#include <video/platform_lcd.h> 31#include <video/platform_lcd.h>
@@ -373,6 +374,7 @@ static struct regulator_consumer_supply __initdata max8997_ldo1_[] = {
373 REGULATOR_SUPPLY("vdd", "s5p-adc"), /* Used by CPU's ADC drv */ 374 REGULATOR_SUPPLY("vdd", "s5p-adc"), /* Used by CPU's ADC drv */
374}; 375};
375static struct regulator_consumer_supply __initdata max8997_ldo3_[] = { 376static struct regulator_consumer_supply __initdata max8997_ldo3_[] = {
377 REGULATOR_SUPPLY("vusb_d", "s3c-hsotg"), /* USB */
376 REGULATOR_SUPPLY("vdd11", "s5p-mipi-csis.0"), /* MIPI */ 378 REGULATOR_SUPPLY("vdd11", "s5p-mipi-csis.0"), /* MIPI */
377}; 379};
378static struct regulator_consumer_supply __initdata max8997_ldo4_[] = { 380static struct regulator_consumer_supply __initdata max8997_ldo4_[] = {
@@ -388,7 +390,7 @@ static struct regulator_consumer_supply __initdata max8997_ldo7_[] = {
388 REGULATOR_SUPPLY("dig_18", "0-001f"), /* HCD803 */ 390 REGULATOR_SUPPLY("dig_18", "0-001f"), /* HCD803 */
389}; 391};
390static struct regulator_consumer_supply __initdata max8997_ldo8_[] = { 392static struct regulator_consumer_supply __initdata max8997_ldo8_[] = {
391 REGULATOR_SUPPLY("vusb_d", NULL), /* Used by CPU */ 393 REGULATOR_SUPPLY("vusb_a", "s3c-hsotg"), /* USB */
392 REGULATOR_SUPPLY("vdac", NULL), /* Used by CPU */ 394 REGULATOR_SUPPLY("vdac", NULL), /* Used by CPU */
393}; 395};
394static struct regulator_consumer_supply __initdata max8997_ldo11_[] = { 396static struct regulator_consumer_supply __initdata max8997_ldo11_[] = {
@@ -844,6 +846,7 @@ static struct regulator_init_data __initdata max8997_esafeout1_data = {
844 .constraints = { 846 .constraints = {
845 .name = "SAFEOUT1", 847 .name = "SAFEOUT1",
846 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 848 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
849 .always_on = 1,
847 .state_mem = { 850 .state_mem = {
848 .disabled = 1, 851 .disabled = 1,
849 }, 852 },
@@ -1101,6 +1104,9 @@ static void __init nuri_ehci_init(void)
1101 s5p_ehci_set_platdata(pdata); 1104 s5p_ehci_set_platdata(pdata);
1102} 1105}
1103 1106
1107/* USB OTG */
1108static struct s3c_hsotg_plat nuri_hsotg_pdata;
1109
1104/* CAMERA */ 1110/* CAMERA */
1105static struct regulator_consumer_supply cam_vt_cam15_supply = 1111static struct regulator_consumer_supply cam_vt_cam15_supply =
1106 REGULATOR_SUPPLY("vdd_core", "6-003c"); 1112 REGULATOR_SUPPLY("vdd_core", "6-003c");
@@ -1313,6 +1319,7 @@ static struct platform_device *nuri_devices[] __initdata = {
1313 &s5p_device_mfc_l, 1319 &s5p_device_mfc_l,
1314 &s5p_device_mfc_r, 1320 &s5p_device_mfc_r,
1315 &s5p_device_fimc_md, 1321 &s5p_device_fimc_md,
1322 &s3c_device_usb_hsotg,
1316 1323
1317 /* NURI Devices */ 1324 /* NURI Devices */
1318 &nuri_gpio_keys, 1325 &nuri_gpio_keys,
@@ -1369,6 +1376,7 @@ static void __init nuri_machine_init(void)
1369 nuri_camera_init(); 1376 nuri_camera_init();
1370 1377
1371 nuri_ehci_init(); 1378 nuri_ehci_init();
1379 s3c_hsotg_set_platdata(&nuri_hsotg_pdata);
1372 1380
1373 /* Last */ 1381 /* Last */
1374 platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices)); 1382 platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices));
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c
index 27fab5389d7e..6b731b863275 100644
--- a/arch/arm/mach-exynos/mach-universal_c210.c
+++ b/arch/arm/mach-exynos/mach-universal_c210.c
@@ -23,6 +23,7 @@
23#include <linux/i2c-gpio.h> 23#include <linux/i2c-gpio.h>
24#include <linux/i2c/mcs.h> 24#include <linux/i2c/mcs.h>
25#include <linux/i2c/atmel_mxt_ts.h> 25#include <linux/i2c/atmel_mxt_ts.h>
26#include <linux/platform_data/s3c-hsotg.h>
26#include <drm/exynos_drm.h> 27#include <drm/exynos_drm.h>
27 28
28#include <asm/mach/arch.h> 29#include <asm/mach/arch.h>
@@ -206,6 +207,7 @@ static struct regulator_init_data lp3974_ldo2_data = {
206}; 207};
207 208
208static struct regulator_consumer_supply lp3974_ldo3_consumer[] = { 209static struct regulator_consumer_supply lp3974_ldo3_consumer[] = {
210 REGULATOR_SUPPLY("vusb_a", "s3c-hsotg"),
209 REGULATOR_SUPPLY("vdd", "exynos4-hdmi"), 211 REGULATOR_SUPPLY("vdd", "exynos4-hdmi"),
210 REGULATOR_SUPPLY("vdd_pll", "exynos4-hdmi"), 212 REGULATOR_SUPPLY("vdd_pll", "exynos4-hdmi"),
211 REGULATOR_SUPPLY("vdd11", "s5p-mipi-csis.0"), 213 REGULATOR_SUPPLY("vdd11", "s5p-mipi-csis.0"),
@@ -291,6 +293,7 @@ static struct regulator_init_data lp3974_ldo7_data = {
291}; 293};
292 294
293static struct regulator_consumer_supply lp3974_ldo8_consumer[] = { 295static struct regulator_consumer_supply lp3974_ldo8_consumer[] = {
296 REGULATOR_SUPPLY("vusb_d", "s3c-hsotg"),
294 REGULATOR_SUPPLY("vdd33a_dac", "s5p-sdo"), 297 REGULATOR_SUPPLY("vdd33a_dac", "s5p-sdo"),
295}; 298};
296 299
@@ -487,7 +490,10 @@ static struct regulator_init_data lp3974_vichg_data = {
487static struct regulator_init_data lp3974_esafeout1_data = { 490static struct regulator_init_data lp3974_esafeout1_data = {
488 .constraints = { 491 .constraints = {
489 .name = "SAFEOUT1", 492 .name = "SAFEOUT1",
493 .min_uV = 4800000,
494 .max_uV = 4800000,
490 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 495 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
496 .always_on = 1,
491 .state_mem = { 497 .state_mem = {
492 .enabled = 1, 498 .enabled = 1,
493 }, 499 },
@@ -1017,6 +1023,9 @@ static struct gpio universal_camera_gpios[] = {
1017 { GPIO_CAM_VGA_NSTBY, GPIOF_OUT_INIT_LOW, "CAM_VGA_NSTBY" }, 1023 { GPIO_CAM_VGA_NSTBY, GPIOF_OUT_INIT_LOW, "CAM_VGA_NSTBY" },
1018}; 1024};
1019 1025
1026/* USB OTG */
1027static struct s3c_hsotg_plat universal_hsotg_pdata;
1028
1020static void __init universal_camera_init(void) 1029static void __init universal_camera_init(void)
1021{ 1030{
1022 s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata), 1031 s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
@@ -1075,6 +1084,7 @@ static struct platform_device *universal_devices[] __initdata = {
1075#ifdef CONFIG_DRM_EXYNOS 1084#ifdef CONFIG_DRM_EXYNOS
1076 &exynos_device_drm, 1085 &exynos_device_drm,
1077#endif 1086#endif
1087 &s3c_device_usb_hsotg,
1078 &s5p_device_mfc, 1088 &s5p_device_mfc,
1079 &s5p_device_mfc_l, 1089 &s5p_device_mfc_l,
1080 &s5p_device_mfc_r, 1090 &s5p_device_mfc_r,
@@ -1133,6 +1143,7 @@ static void __init universal_machine_init(void)
1133 i2c_register_board_info(I2C_GPIO_BUS_12, i2c_gpio12_devs, 1143 i2c_register_board_info(I2C_GPIO_BUS_12, i2c_gpio12_devs,
1134 ARRAY_SIZE(i2c_gpio12_devs)); 1144 ARRAY_SIZE(i2c_gpio12_devs));
1135 1145
1146 s3c_hsotg_set_platdata(&universal_hsotg_pdata);
1136 universal_camera_init(); 1147 universal_camera_init();
1137 1148
1138 /* Last */ 1149 /* Last */
diff --git a/arch/arm/mach-exynos/setup-usb-phy.c b/arch/arm/mach-exynos/setup-usb-phy.c
index 41743d21e8c6..1af0a7f44e00 100644
--- a/arch/arm/mach-exynos/setup-usb-phy.c
+++ b/arch/arm/mach-exynos/setup-usb-phy.c
@@ -26,11 +26,71 @@ static int exynos4_usb_host_phy_is_on(void)
26 return (readl(EXYNOS4_PHYPWR) & PHY1_STD_ANALOG_POWERDOWN) ? 0 : 1; 26 return (readl(EXYNOS4_PHYPWR) & PHY1_STD_ANALOG_POWERDOWN) ? 0 : 1;
27} 27}
28 28
29static int exynos4_usb_phy1_init(struct platform_device *pdev) 29static void exynos4210_usb_phy_clkset(struct platform_device *pdev)
30{ 30{
31 struct clk *otg_clk;
32 struct clk *xusbxti_clk; 31 struct clk *xusbxti_clk;
33 u32 phyclk; 32 u32 phyclk;
33
34 /* set clock frequency for PLL */
35 phyclk = readl(EXYNOS4_PHYCLK) & ~CLKSEL_MASK;
36
37 xusbxti_clk = clk_get(&pdev->dev, "xusbxti");
38 if (xusbxti_clk && !IS_ERR(xusbxti_clk)) {
39 switch (clk_get_rate(xusbxti_clk)) {
40 case 12 * MHZ:
41 phyclk |= CLKSEL_12M;
42 break;
43 case 24 * MHZ:
44 phyclk |= CLKSEL_24M;
45 break;
46 default:
47 case 48 * MHZ:
48 /* default reference clock */
49 break;
50 }
51 clk_put(xusbxti_clk);
52 }
53
54 writel(phyclk, EXYNOS4_PHYCLK);
55}
56
57static int exynos4210_usb_phy0_init(struct platform_device *pdev)
58{
59 u32 rstcon;
60
61 writel(readl(S5P_USBDEVICE_PHY_CONTROL) | S5P_USBDEVICE_PHY_ENABLE,
62 S5P_USBDEVICE_PHY_CONTROL);
63
64 exynos4210_usb_phy_clkset(pdev);
65
66 /* set to normal PHY0 */
67 writel((readl(EXYNOS4_PHYPWR) & ~PHY0_NORMAL_MASK), EXYNOS4_PHYPWR);
68
69 /* reset PHY0 and Link */
70 rstcon = readl(EXYNOS4_RSTCON) | PHY0_SWRST_MASK;
71 writel(rstcon, EXYNOS4_RSTCON);
72 udelay(10);
73
74 rstcon &= ~PHY0_SWRST_MASK;
75 writel(rstcon, EXYNOS4_RSTCON);
76
77 return 0;
78}
79
80static int exynos4210_usb_phy0_exit(struct platform_device *pdev)
81{
82 writel((readl(EXYNOS4_PHYPWR) | PHY0_ANALOG_POWERDOWN |
83 PHY0_OTG_DISABLE), EXYNOS4_PHYPWR);
84
85 writel(readl(S5P_USBDEVICE_PHY_CONTROL) & ~S5P_USBDEVICE_PHY_ENABLE,
86 S5P_USBDEVICE_PHY_CONTROL);
87
88 return 0;
89}
90
91static int exynos4210_usb_phy1_init(struct platform_device *pdev)
92{
93 struct clk *otg_clk;
34 u32 rstcon; 94 u32 rstcon;
35 int err; 95 int err;
36 96
@@ -54,27 +114,7 @@ static int exynos4_usb_phy1_init(struct platform_device *pdev)
54 writel(readl(S5P_USBHOST_PHY_CONTROL) | S5P_USBHOST_PHY_ENABLE, 114 writel(readl(S5P_USBHOST_PHY_CONTROL) | S5P_USBHOST_PHY_ENABLE,
55 S5P_USBHOST_PHY_CONTROL); 115 S5P_USBHOST_PHY_CONTROL);
56 116
57 /* set clock frequency for PLL */ 117 exynos4210_usb_phy_clkset(pdev);
58 phyclk = readl(EXYNOS4_PHYCLK) & ~CLKSEL_MASK;
59
60 xusbxti_clk = clk_get(&pdev->dev, "xusbxti");
61 if (xusbxti_clk && !IS_ERR(xusbxti_clk)) {
62 switch (clk_get_rate(xusbxti_clk)) {
63 case 12 * MHZ:
64 phyclk |= CLKSEL_12M;
65 break;
66 case 24 * MHZ:
67 phyclk |= CLKSEL_24M;
68 break;
69 default:
70 case 48 * MHZ:
71 /* default reference clock */
72 break;
73 }
74 clk_put(xusbxti_clk);
75 }
76
77 writel(phyclk, EXYNOS4_PHYCLK);
78 118
79 /* floating prevention logic: disable */ 119 /* floating prevention logic: disable */
80 writel((readl(EXYNOS4_PHY1CON) | FPENABLEN), EXYNOS4_PHY1CON); 120 writel((readl(EXYNOS4_PHY1CON) | FPENABLEN), EXYNOS4_PHY1CON);
@@ -102,7 +142,7 @@ static int exynos4_usb_phy1_init(struct platform_device *pdev)
102 return 0; 142 return 0;
103} 143}
104 144
105static int exynos4_usb_phy1_exit(struct platform_device *pdev) 145static int exynos4210_usb_phy1_exit(struct platform_device *pdev)
106{ 146{
107 struct clk *otg_clk; 147 struct clk *otg_clk;
108 int err; 148 int err;
@@ -136,16 +176,20 @@ static int exynos4_usb_phy1_exit(struct platform_device *pdev)
136 176
137int s5p_usb_phy_init(struct platform_device *pdev, int type) 177int s5p_usb_phy_init(struct platform_device *pdev, int type)
138{ 178{
139 if (type == S5P_USB_PHY_HOST) 179 if (type == S5P_USB_PHY_DEVICE)
140 return exynos4_usb_phy1_init(pdev); 180 return exynos4210_usb_phy0_init(pdev);
181 else if (type == S5P_USB_PHY_HOST)
182 return exynos4210_usb_phy1_init(pdev);
141 183
142 return -EINVAL; 184 return -EINVAL;
143} 185}
144 186
145int s5p_usb_phy_exit(struct platform_device *pdev, int type) 187int s5p_usb_phy_exit(struct platform_device *pdev, int type)
146{ 188{
147 if (type == S5P_USB_PHY_HOST) 189 if (type == S5P_USB_PHY_DEVICE)
148 return exynos4_usb_phy1_exit(pdev); 190 return exynos4210_usb_phy0_exit(pdev);
191 else if (type == S5P_USB_PHY_HOST)
192 return exynos4210_usb_phy1_exit(pdev);
149 193
150 return -EINVAL; 194 return -EINVAL;
151} 195}
diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c
index 0569765a8e90..aa1137fb47e6 100644
--- a/arch/arm/mach-s3c64xx/mach-crag6410.c
+++ b/arch/arm/mach-s3c64xx/mach-crag6410.c
@@ -31,6 +31,7 @@
31#include <linux/spi/spi.h> 31#include <linux/spi/spi.h>
32 32
33#include <linux/i2c/pca953x.h> 33#include <linux/i2c/pca953x.h>
34#include <linux/platform_data/s3c-hsotg.h>
34 35
35#include <video/platform_lcd.h> 36#include <video/platform_lcd.h>
36 37
@@ -61,7 +62,6 @@
61#include <plat/sdhci.h> 62#include <plat/sdhci.h>
62#include <plat/gpio-cfg.h> 63#include <plat/gpio-cfg.h>
63#include <plat/s3c64xx-spi.h> 64#include <plat/s3c64xx-spi.h>
64#include <plat/udc-hs.h>
65 65
66#include <plat/keypad.h> 66#include <plat/keypad.h>
67#include <plat/clock.h> 67#include <plat/clock.h>
diff --git a/arch/arm/mach-s3c64xx/mach-smartq.c b/arch/arm/mach-s3c64xx/mach-smartq.c
index ce745e19aa27..ceeb1de40376 100644
--- a/arch/arm/mach-s3c64xx/mach-smartq.c
+++ b/arch/arm/mach-s3c64xx/mach-smartq.c
@@ -18,6 +18,7 @@
18#include <linux/serial_core.h> 18#include <linux/serial_core.h>
19#include <linux/spi/spi_gpio.h> 19#include <linux/spi/spi_gpio.h>
20#include <linux/usb/gpio_vbus.h> 20#include <linux/usb/gpio_vbus.h>
21#include <linux/platform_data/s3c-hsotg.h>
21 22
22#include <asm/mach-types.h> 23#include <asm/mach-types.h>
23#include <asm/mach/map.h> 24#include <asm/mach/map.h>
@@ -33,7 +34,6 @@
33#include <plat/gpio-cfg.h> 34#include <plat/gpio-cfg.h>
34#include <plat/hwmon.h> 35#include <plat/hwmon.h>
35#include <plat/regs-serial.h> 36#include <plat/regs-serial.h>
36#include <plat/udc-hs.h>
37#include <plat/usb-control.h> 37#include <plat/usb-control.h>
38#include <plat/sdhci.h> 38#include <plat/sdhci.h>
39#include <plat/ts.h> 39#include <plat/ts.h>
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c
index 1ecd0485a9b6..7da044f738ac 100644
--- a/arch/arm/mach-s3c64xx/mach-smdk6410.c
+++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c
@@ -30,6 +30,7 @@
30#include <linux/regulator/fixed.h> 30#include <linux/regulator/fixed.h>
31#include <linux/regulator/machine.h> 31#include <linux/regulator/machine.h>
32#include <linux/pwm_backlight.h> 32#include <linux/pwm_backlight.h>
33#include <linux/platform_data/s3c-hsotg.h>
33 34
34#ifdef CONFIG_SMDK6410_WM1190_EV1 35#ifdef CONFIG_SMDK6410_WM1190_EV1
35#include <linux/mfd/wm8350/core.h> 36#include <linux/mfd/wm8350/core.h>
@@ -72,7 +73,6 @@
72#include <plat/keypad.h> 73#include <plat/keypad.h>
73#include <plat/backlight.h> 74#include <plat/backlight.h>
74#include <plat/regs-fb-v4.h> 75#include <plat/regs-fb-v4.h>
75#include <plat/udc-hs.h>
76 76
77#include "common.h" 77#include "common.h"
78 78
diff --git a/arch/arm/mach-s5pv210/Kconfig b/arch/arm/mach-s5pv210/Kconfig
index 29594fc4fdf4..88e983b0c82e 100644
--- a/arch/arm/mach-s5pv210/Kconfig
+++ b/arch/arm/mach-s5pv210/Kconfig
@@ -85,6 +85,7 @@ config MACH_AQUILA
85 select S5P_DEV_ONENAND 85 select S5P_DEV_ONENAND
86 select S5PV210_SETUP_FB_24BPP 86 select S5PV210_SETUP_FB_24BPP
87 select S5PV210_SETUP_SDHCI 87 select S5PV210_SETUP_SDHCI
88 select S5PV210_SETUP_USB_PHY
88 help 89 help
89 Machine support for the Samsung Aquila target based on S5PC110 SoC 90 Machine support for the Samsung Aquila target based on S5PC110 SoC
90 91
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c
index 32395664e879..f20a97c8e411 100644
--- a/arch/arm/mach-s5pv210/mach-goni.c
+++ b/arch/arm/mach-s5pv210/mach-goni.c
@@ -27,6 +27,7 @@
27#include <linux/gpio.h> 27#include <linux/gpio.h>
28#include <linux/mmc/host.h> 28#include <linux/mmc/host.h>
29#include <linux/interrupt.h> 29#include <linux/interrupt.h>
30#include <linux/platform_data/s3c-hsotg.h>
30 31
31#include <asm/hardware/vic.h> 32#include <asm/hardware/vic.h>
32#include <asm/mach/arch.h> 33#include <asm/mach/arch.h>
@@ -278,6 +279,9 @@ static void __init goni_tsp_init(void)
278 i2c2_devs[0].irq = gpio_to_irq(gpio); 279 i2c2_devs[0].irq = gpio_to_irq(gpio);
279} 280}
280 281
282/* USB OTG */
283static struct s3c_hsotg_plat goni_hsotg_pdata;
284
281static void goni_camera_init(void) 285static void goni_camera_init(void)
282{ 286{
283 s5pv210_fimc_setup_gpio(S5P_CAMPORT_A); 287 s5pv210_fimc_setup_gpio(S5P_CAMPORT_A);
@@ -941,6 +945,8 @@ static void __init goni_machine_init(void)
941 s3c_set_platdata(&goni_fimc_md_platdata, sizeof(goni_fimc_md_platdata), 945 s3c_set_platdata(&goni_fimc_md_platdata, sizeof(goni_fimc_md_platdata),
942 &s5p_device_fimc_md); 946 &s5p_device_fimc_md);
943 947
948 s3c_hsotg_set_platdata(&goni_hsotg_pdata);
949
944 goni_camera_init(); 950 goni_camera_init();
945 951
946 /* SPI */ 952 /* SPI */
diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c
index 1013a341b0fd..1d214cb9d770 100644
--- a/arch/arm/plat-samsung/devs.c
+++ b/arch/arm/plat-samsung/devs.c
@@ -30,6 +30,7 @@
30#include <linux/mmc/host.h> 30#include <linux/mmc/host.h>
31#include <linux/ioport.h> 31#include <linux/ioport.h>
32#include <linux/platform_data/s3c-hsudc.h> 32#include <linux/platform_data/s3c-hsudc.h>
33#include <linux/platform_data/s3c-hsotg.h>
33 34
34#include <asm/irq.h> 35#include <asm/irq.h>
35#include <asm/pmu.h> 36#include <asm/pmu.h>
@@ -57,7 +58,6 @@
57#include <plat/sdhci.h> 58#include <plat/sdhci.h>
58#include <plat/ts.h> 59#include <plat/ts.h>
59#include <plat/udc.h> 60#include <plat/udc.h>
60#include <plat/udc-hs.h>
61#include <plat/usb-control.h> 61#include <plat/usb-control.h>
62#include <plat/usb-phy.h> 62#include <plat/usb-phy.h>
63#include <plat/regs-iic.h> 63#include <plat/regs-iic.h>
diff --git a/arch/arm/plat-samsung/include/plat/regs-usb-hsotg.h b/arch/arm/plat-samsung/include/plat/regs-usb-hsotg.h
deleted file mode 100644
index dc90f5ede88f..000000000000
--- a/arch/arm/plat-samsung/include/plat/regs-usb-hsotg.h
+++ /dev/null
@@ -1,379 +0,0 @@
1/* arch/arm/plat-s3c/include/plat/regs-usb-hsotg.h
2 *
3 * Copyright 2008 Openmoko, Inc.
4 * Copyright 2008 Simtec Electronics
5 * http://armlinux.simtec.co.uk/
6 * Ben Dooks <ben@simtec.co.uk>
7 *
8 * S3C - USB2.0 Highspeed/OtG device block registers
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13*/
14
15#ifndef __PLAT_S3C64XX_REGS_USB_HSOTG_H
16#define __PLAT_S3C64XX_REGS_USB_HSOTG_H __FILE__
17
18#define S3C_HSOTG_REG(x) (x)
19
20#define S3C_GOTGCTL S3C_HSOTG_REG(0x000)
21#define S3C_GOTGCTL_BSESVLD (1 << 19)
22#define S3C_GOTGCTL_ASESVLD (1 << 18)
23#define S3C_GOTGCTL_DBNC_SHORT (1 << 17)
24#define S3C_GOTGCTL_CONID_B (1 << 16)
25#define S3C_GOTGCTL_DEVHNPEN (1 << 11)
26#define S3C_GOTGCTL_HSSETHNPEN (1 << 10)
27#define S3C_GOTGCTL_HNPREQ (1 << 9)
28#define S3C_GOTGCTL_HSTNEGSCS (1 << 8)
29#define S3C_GOTGCTL_SESREQ (1 << 1)
30#define S3C_GOTGCTL_SESREQSCS (1 << 0)
31
32#define S3C_GOTGINT S3C_HSOTG_REG(0x004)
33#define S3C_GOTGINT_DbnceDone (1 << 19)
34#define S3C_GOTGINT_ADevTOUTChg (1 << 18)
35#define S3C_GOTGINT_HstNegDet (1 << 17)
36#define S3C_GOTGINT_HstnegSucStsChng (1 << 9)
37#define S3C_GOTGINT_SesReqSucStsChng (1 << 8)
38#define S3C_GOTGINT_SesEndDet (1 << 2)
39
40#define S3C_GAHBCFG S3C_HSOTG_REG(0x008)
41#define S3C_GAHBCFG_PTxFEmpLvl (1 << 8)
42#define S3C_GAHBCFG_NPTxFEmpLvl (1 << 7)
43#define S3C_GAHBCFG_DMAEn (1 << 5)
44#define S3C_GAHBCFG_HBstLen_MASK (0xf << 1)
45#define S3C_GAHBCFG_HBstLen_SHIFT (1)
46#define S3C_GAHBCFG_HBstLen_Single (0x0 << 1)
47#define S3C_GAHBCFG_HBstLen_Incr (0x1 << 1)
48#define S3C_GAHBCFG_HBstLen_Incr4 (0x3 << 1)
49#define S3C_GAHBCFG_HBstLen_Incr8 (0x5 << 1)
50#define S3C_GAHBCFG_HBstLen_Incr16 (0x7 << 1)
51#define S3C_GAHBCFG_GlblIntrEn (1 << 0)
52
53#define S3C_GUSBCFG S3C_HSOTG_REG(0x00C)
54#define S3C_GUSBCFG_PHYLPClkSel (1 << 15)
55#define S3C_GUSBCFG_HNPCap (1 << 9)
56#define S3C_GUSBCFG_SRPCap (1 << 8)
57#define S3C_GUSBCFG_PHYIf16 (1 << 3)
58#define S3C_GUSBCFG_TOutCal_MASK (0x7 << 0)
59#define S3C_GUSBCFG_TOutCal_SHIFT (0)
60#define S3C_GUSBCFG_TOutCal_LIMIT (0x7)
61#define S3C_GUSBCFG_TOutCal(_x) ((_x) << 0)
62
63#define S3C_GRSTCTL S3C_HSOTG_REG(0x010)
64
65#define S3C_GRSTCTL_AHBIdle (1 << 31)
66#define S3C_GRSTCTL_DMAReq (1 << 30)
67#define S3C_GRSTCTL_TxFNum_MASK (0x1f << 6)
68#define S3C_GRSTCTL_TxFNum_SHIFT (6)
69#define S3C_GRSTCTL_TxFNum_LIMIT (0x1f)
70#define S3C_GRSTCTL_TxFNum(_x) ((_x) << 6)
71#define S3C_GRSTCTL_TxFFlsh (1 << 5)
72#define S3C_GRSTCTL_RxFFlsh (1 << 4)
73#define S3C_GRSTCTL_INTknQFlsh (1 << 3)
74#define S3C_GRSTCTL_FrmCntrRst (1 << 2)
75#define S3C_GRSTCTL_HSftRst (1 << 1)
76#define S3C_GRSTCTL_CSftRst (1 << 0)
77
78#define S3C_GINTSTS S3C_HSOTG_REG(0x014)
79#define S3C_GINTMSK S3C_HSOTG_REG(0x018)
80
81#define S3C_GINTSTS_WkUpInt (1 << 31)
82#define S3C_GINTSTS_SessReqInt (1 << 30)
83#define S3C_GINTSTS_DisconnInt (1 << 29)
84#define S3C_GINTSTS_ConIDStsChng (1 << 28)
85#define S3C_GINTSTS_PTxFEmp (1 << 26)
86#define S3C_GINTSTS_HChInt (1 << 25)
87#define S3C_GINTSTS_PrtInt (1 << 24)
88#define S3C_GINTSTS_FetSusp (1 << 22)
89#define S3C_GINTSTS_incompIP (1 << 21)
90#define S3C_GINTSTS_IncomplSOIN (1 << 20)
91#define S3C_GINTSTS_OEPInt (1 << 19)
92#define S3C_GINTSTS_IEPInt (1 << 18)
93#define S3C_GINTSTS_EPMis (1 << 17)
94#define S3C_GINTSTS_EOPF (1 << 15)
95#define S3C_GINTSTS_ISOutDrop (1 << 14)
96#define S3C_GINTSTS_EnumDone (1 << 13)
97#define S3C_GINTSTS_USBRst (1 << 12)
98#define S3C_GINTSTS_USBSusp (1 << 11)
99#define S3C_GINTSTS_ErlySusp (1 << 10)
100#define S3C_GINTSTS_GOUTNakEff (1 << 7)
101#define S3C_GINTSTS_GINNakEff (1 << 6)
102#define S3C_GINTSTS_NPTxFEmp (1 << 5)
103#define S3C_GINTSTS_RxFLvl (1 << 4)
104#define S3C_GINTSTS_SOF (1 << 3)
105#define S3C_GINTSTS_OTGInt (1 << 2)
106#define S3C_GINTSTS_ModeMis (1 << 1)
107#define S3C_GINTSTS_CurMod_Host (1 << 0)
108
109#define S3C_GRXSTSR S3C_HSOTG_REG(0x01C)
110#define S3C_GRXSTSP S3C_HSOTG_REG(0x020)
111
112#define S3C_GRXSTS_FN_MASK (0x7f << 25)
113#define S3C_GRXSTS_FN_SHIFT (25)
114
115#define S3C_GRXSTS_PktSts_MASK (0xf << 17)
116#define S3C_GRXSTS_PktSts_SHIFT (17)
117#define S3C_GRXSTS_PktSts_GlobalOutNAK (0x1 << 17)
118#define S3C_GRXSTS_PktSts_OutRX (0x2 << 17)
119#define S3C_GRXSTS_PktSts_OutDone (0x3 << 17)
120#define S3C_GRXSTS_PktSts_SetupDone (0x4 << 17)
121#define S3C_GRXSTS_PktSts_SetupRX (0x6 << 17)
122
123#define S3C_GRXSTS_DPID_MASK (0x3 << 15)
124#define S3C_GRXSTS_DPID_SHIFT (15)
125#define S3C_GRXSTS_ByteCnt_MASK (0x7ff << 4)
126#define S3C_GRXSTS_ByteCnt_SHIFT (4)
127#define S3C_GRXSTS_EPNum_MASK (0xf << 0)
128#define S3C_GRXSTS_EPNum_SHIFT (0)
129
130#define S3C_GRXFSIZ S3C_HSOTG_REG(0x024)
131
132#define S3C_GNPTXFSIZ S3C_HSOTG_REG(0x028)
133
134#define S3C_GNPTXFSIZ_NPTxFDep_MASK (0xffff << 16)
135#define S3C_GNPTXFSIZ_NPTxFDep_SHIFT (16)
136#define S3C_GNPTXFSIZ_NPTxFDep_LIMIT (0xffff)
137#define S3C_GNPTXFSIZ_NPTxFDep(_x) ((_x) << 16)
138#define S3C_GNPTXFSIZ_NPTxFStAddr_MASK (0xffff << 0)
139#define S3C_GNPTXFSIZ_NPTxFStAddr_SHIFT (0)
140#define S3C_GNPTXFSIZ_NPTxFStAddr_LIMIT (0xffff)
141#define S3C_GNPTXFSIZ_NPTxFStAddr(_x) ((_x) << 0)
142
143#define S3C_GNPTXSTS S3C_HSOTG_REG(0x02C)
144
145#define S3C_GNPTXSTS_NPtxQTop_MASK (0x7f << 24)
146#define S3C_GNPTXSTS_NPtxQTop_SHIFT (24)
147
148#define S3C_GNPTXSTS_NPTxQSpcAvail_MASK (0xff << 16)
149#define S3C_GNPTXSTS_NPTxQSpcAvail_SHIFT (16)
150#define S3C_GNPTXSTS_NPTxQSpcAvail_GET(_v) (((_v) >> 16) & 0xff)
151
152#define S3C_GNPTXSTS_NPTxFSpcAvail_MASK (0xffff << 0)
153#define S3C_GNPTXSTS_NPTxFSpcAvail_SHIFT (0)
154#define S3C_GNPTXSTS_NPTxFSpcAvail_GET(_v) (((_v) >> 0) & 0xffff)
155
156
157#define S3C_HPTXFSIZ S3C_HSOTG_REG(0x100)
158
159#define S3C_DPTXFSIZn(_a) S3C_HSOTG_REG(0x104 + (((_a) - 1) * 4))
160
161#define S3C_DPTXFSIZn_DPTxFSize_MASK (0xffff << 16)
162#define S3C_DPTXFSIZn_DPTxFSize_SHIFT (16)
163#define S3C_DPTXFSIZn_DPTxFSize_GET(_v) (((_v) >> 16) & 0xffff)
164#define S3C_DPTXFSIZn_DPTxFSize_LIMIT (0xffff)
165#define S3C_DPTXFSIZn_DPTxFSize(_x) ((_x) << 16)
166
167#define S3C_DPTXFSIZn_DPTxFStAddr_MASK (0xffff << 0)
168#define S3C_DPTXFSIZn_DPTxFStAddr_SHIFT (0)
169
170/* Device mode registers */
171#define S3C_DCFG S3C_HSOTG_REG(0x800)
172
173#define S3C_DCFG_EPMisCnt_MASK (0x1f << 18)
174#define S3C_DCFG_EPMisCnt_SHIFT (18)
175#define S3C_DCFG_EPMisCnt_LIMIT (0x1f)
176#define S3C_DCFG_EPMisCnt(_x) ((_x) << 18)
177
178#define S3C_DCFG_PerFrInt_MASK (0x3 << 11)
179#define S3C_DCFG_PerFrInt_SHIFT (11)
180#define S3C_DCFG_PerFrInt_LIMIT (0x3)
181#define S3C_DCFG_PerFrInt(_x) ((_x) << 11)
182
183#define S3C_DCFG_DevAddr_MASK (0x7f << 4)
184#define S3C_DCFG_DevAddr_SHIFT (4)
185#define S3C_DCFG_DevAddr_LIMIT (0x7f)
186#define S3C_DCFG_DevAddr(_x) ((_x) << 4)
187
188#define S3C_DCFG_NZStsOUTHShk (1 << 2)
189
190#define S3C_DCFG_DevSpd_MASK (0x3 << 0)
191#define S3C_DCFG_DevSpd_SHIFT (0)
192#define S3C_DCFG_DevSpd_HS (0x0 << 0)
193#define S3C_DCFG_DevSpd_FS (0x1 << 0)
194#define S3C_DCFG_DevSpd_LS (0x2 << 0)
195#define S3C_DCFG_DevSpd_FS48 (0x3 << 0)
196
197#define S3C_DCTL S3C_HSOTG_REG(0x804)
198
199#define S3C_DCTL_PWROnPrgDone (1 << 11)
200#define S3C_DCTL_CGOUTNak (1 << 10)
201#define S3C_DCTL_SGOUTNak (1 << 9)
202#define S3C_DCTL_CGNPInNAK (1 << 8)
203#define S3C_DCTL_SGNPInNAK (1 << 7)
204#define S3C_DCTL_TstCtl_MASK (0x7 << 4)
205#define S3C_DCTL_TstCtl_SHIFT (4)
206#define S3C_DCTL_GOUTNakSts (1 << 3)
207#define S3C_DCTL_GNPINNakSts (1 << 2)
208#define S3C_DCTL_SftDiscon (1 << 1)
209#define S3C_DCTL_RmtWkUpSig (1 << 0)
210
211#define S3C_DSTS S3C_HSOTG_REG(0x808)
212
213#define S3C_DSTS_SOFFN_MASK (0x3fff << 8)
214#define S3C_DSTS_SOFFN_SHIFT (8)
215#define S3C_DSTS_SOFFN_LIMIT (0x3fff)
216#define S3C_DSTS_SOFFN(_x) ((_x) << 8)
217#define S3C_DSTS_ErraticErr (1 << 3)
218#define S3C_DSTS_EnumSpd_MASK (0x3 << 1)
219#define S3C_DSTS_EnumSpd_SHIFT (1)
220#define S3C_DSTS_EnumSpd_HS (0x0 << 1)
221#define S3C_DSTS_EnumSpd_FS (0x1 << 1)
222#define S3C_DSTS_EnumSpd_LS (0x2 << 1)
223#define S3C_DSTS_EnumSpd_FS48 (0x3 << 1)
224
225#define S3C_DSTS_SuspSts (1 << 0)
226
227#define S3C_DIEPMSK S3C_HSOTG_REG(0x810)
228
229#define S3C_DIEPMSK_TxFIFOEmpty (1 << 7)
230#define S3C_DIEPMSK_INEPNakEffMsk (1 << 6)
231#define S3C_DIEPMSK_INTknEPMisMsk (1 << 5)
232#define S3C_DIEPMSK_INTknTXFEmpMsk (1 << 4)
233#define S3C_DIEPMSK_TimeOUTMsk (1 << 3)
234#define S3C_DIEPMSK_AHBErrMsk (1 << 2)
235#define S3C_DIEPMSK_EPDisbldMsk (1 << 1)
236#define S3C_DIEPMSK_XferComplMsk (1 << 0)
237
238#define S3C_DOEPMSK S3C_HSOTG_REG(0x814)
239
240#define S3C_DOEPMSK_Back2BackSetup (1 << 6)
241#define S3C_DOEPMSK_OUTTknEPdisMsk (1 << 4)
242#define S3C_DOEPMSK_SetupMsk (1 << 3)
243#define S3C_DOEPMSK_AHBErrMsk (1 << 2)
244#define S3C_DOEPMSK_EPDisbldMsk (1 << 1)
245#define S3C_DOEPMSK_XferComplMsk (1 << 0)
246
247#define S3C_DAINT S3C_HSOTG_REG(0x818)
248#define S3C_DAINTMSK S3C_HSOTG_REG(0x81C)
249
250#define S3C_DAINT_OutEP_SHIFT (16)
251#define S3C_DAINT_OutEP(x) (1 << ((x) + 16))
252#define S3C_DAINT_InEP(x) (1 << (x))
253
254#define S3C_DTKNQR1 S3C_HSOTG_REG(0x820)
255#define S3C_DTKNQR2 S3C_HSOTG_REG(0x824)
256#define S3C_DTKNQR3 S3C_HSOTG_REG(0x830)
257#define S3C_DTKNQR4 S3C_HSOTG_REG(0x834)
258
259#define S3C_DVBUSDIS S3C_HSOTG_REG(0x828)
260#define S3C_DVBUSPULSE S3C_HSOTG_REG(0x82C)
261
262#define S3C_DIEPCTL0 S3C_HSOTG_REG(0x900)
263#define S3C_DOEPCTL0 S3C_HSOTG_REG(0xB00)
264#define S3C_DIEPCTL(_a) S3C_HSOTG_REG(0x900 + ((_a) * 0x20))
265#define S3C_DOEPCTL(_a) S3C_HSOTG_REG(0xB00 + ((_a) * 0x20))
266
267/* EP0 specialness:
268 * bits[29..28] - reserved (no SetD0PID, SetD1PID)
269 * bits[25..22] - should always be zero, this isn't a periodic endpoint
270 * bits[10..0] - MPS setting differenct for EP0
271*/
272#define S3C_D0EPCTL_MPS_MASK (0x3 << 0)
273#define S3C_D0EPCTL_MPS_SHIFT (0)
274#define S3C_D0EPCTL_MPS_64 (0x0 << 0)
275#define S3C_D0EPCTL_MPS_32 (0x1 << 0)
276#define S3C_D0EPCTL_MPS_16 (0x2 << 0)
277#define S3C_D0EPCTL_MPS_8 (0x3 << 0)
278
279#define S3C_DxEPCTL_EPEna (1 << 31)
280#define S3C_DxEPCTL_EPDis (1 << 30)
281#define S3C_DxEPCTL_SetD1PID (1 << 29)
282#define S3C_DxEPCTL_SetOddFr (1 << 29)
283#define S3C_DxEPCTL_SetD0PID (1 << 28)
284#define S3C_DxEPCTL_SetEvenFr (1 << 28)
285#define S3C_DxEPCTL_SNAK (1 << 27)
286#define S3C_DxEPCTL_CNAK (1 << 26)
287#define S3C_DxEPCTL_TxFNum_MASK (0xf << 22)
288#define S3C_DxEPCTL_TxFNum_SHIFT (22)
289#define S3C_DxEPCTL_TxFNum_LIMIT (0xf)
290#define S3C_DxEPCTL_TxFNum(_x) ((_x) << 22)
291
292#define S3C_DxEPCTL_Stall (1 << 21)
293#define S3C_DxEPCTL_Snp (1 << 20)
294#define S3C_DxEPCTL_EPType_MASK (0x3 << 18)
295#define S3C_DxEPCTL_EPType_SHIFT (18)
296#define S3C_DxEPCTL_EPType_Control (0x0 << 18)
297#define S3C_DxEPCTL_EPType_Iso (0x1 << 18)
298#define S3C_DxEPCTL_EPType_Bulk (0x2 << 18)
299#define S3C_DxEPCTL_EPType_Intterupt (0x3 << 18)
300
301#define S3C_DxEPCTL_NAKsts (1 << 17)
302#define S3C_DxEPCTL_DPID (1 << 16)
303#define S3C_DxEPCTL_EOFrNum (1 << 16)
304#define S3C_DxEPCTL_USBActEp (1 << 15)
305#define S3C_DxEPCTL_NextEp_MASK (0xf << 11)
306#define S3C_DxEPCTL_NextEp_SHIFT (11)
307#define S3C_DxEPCTL_NextEp_LIMIT (0xf)
308#define S3C_DxEPCTL_NextEp(_x) ((_x) << 11)
309
310#define S3C_DxEPCTL_MPS_MASK (0x7ff << 0)
311#define S3C_DxEPCTL_MPS_SHIFT (0)
312#define S3C_DxEPCTL_MPS_LIMIT (0x7ff)
313#define S3C_DxEPCTL_MPS(_x) ((_x) << 0)
314
315#define S3C_DIEPINT(_a) S3C_HSOTG_REG(0x908 + ((_a) * 0x20))
316#define S3C_DOEPINT(_a) S3C_HSOTG_REG(0xB08 + ((_a) * 0x20))
317
318#define S3C_DxEPINT_INEPNakEff (1 << 6)
319#define S3C_DxEPINT_Back2BackSetup (1 << 6)
320#define S3C_DxEPINT_INTknEPMis (1 << 5)
321#define S3C_DxEPINT_INTknTXFEmp (1 << 4)
322#define S3C_DxEPINT_OUTTknEPdis (1 << 4)
323#define S3C_DxEPINT_Timeout (1 << 3)
324#define S3C_DxEPINT_Setup (1 << 3)
325#define S3C_DxEPINT_AHBErr (1 << 2)
326#define S3C_DxEPINT_EPDisbld (1 << 1)
327#define S3C_DxEPINT_XferCompl (1 << 0)
328
329#define S3C_DIEPTSIZ0 S3C_HSOTG_REG(0x910)
330
331#define S3C_DIEPTSIZ0_PktCnt_MASK (0x3 << 19)
332#define S3C_DIEPTSIZ0_PktCnt_SHIFT (19)
333#define S3C_DIEPTSIZ0_PktCnt_LIMIT (0x3)
334#define S3C_DIEPTSIZ0_PktCnt(_x) ((_x) << 19)
335
336#define S3C_DIEPTSIZ0_XferSize_MASK (0x7f << 0)
337#define S3C_DIEPTSIZ0_XferSize_SHIFT (0)
338#define S3C_DIEPTSIZ0_XferSize_LIMIT (0x7f)
339#define S3C_DIEPTSIZ0_XferSize(_x) ((_x) << 0)
340
341
342#define DOEPTSIZ0 S3C_HSOTG_REG(0xB10)
343#define S3C_DOEPTSIZ0_SUPCnt_MASK (0x3 << 29)
344#define S3C_DOEPTSIZ0_SUPCnt_SHIFT (29)
345#define S3C_DOEPTSIZ0_SUPCnt_LIMIT (0x3)
346#define S3C_DOEPTSIZ0_SUPCnt(_x) ((_x) << 29)
347
348#define S3C_DOEPTSIZ0_PktCnt (1 << 19)
349#define S3C_DOEPTSIZ0_XferSize_MASK (0x7f << 0)
350#define S3C_DOEPTSIZ0_XferSize_SHIFT (0)
351
352#define S3C_DIEPTSIZ(_a) S3C_HSOTG_REG(0x910 + ((_a) * 0x20))
353#define S3C_DOEPTSIZ(_a) S3C_HSOTG_REG(0xB10 + ((_a) * 0x20))
354
355#define S3C_DxEPTSIZ_MC_MASK (0x3 << 29)
356#define S3C_DxEPTSIZ_MC_SHIFT (29)
357#define S3C_DxEPTSIZ_MC_LIMIT (0x3)
358#define S3C_DxEPTSIZ_MC(_x) ((_x) << 29)
359
360#define S3C_DxEPTSIZ_PktCnt_MASK (0x3ff << 19)
361#define S3C_DxEPTSIZ_PktCnt_SHIFT (19)
362#define S3C_DxEPTSIZ_PktCnt_GET(_v) (((_v) >> 19) & 0x3ff)
363#define S3C_DxEPTSIZ_PktCnt_LIMIT (0x3ff)
364#define S3C_DxEPTSIZ_PktCnt(_x) ((_x) << 19)
365
366#define S3C_DxEPTSIZ_XferSize_MASK (0x7ffff << 0)
367#define S3C_DxEPTSIZ_XferSize_SHIFT (0)
368#define S3C_DxEPTSIZ_XferSize_GET(_v) (((_v) >> 0) & 0x7ffff)
369#define S3C_DxEPTSIZ_XferSize_LIMIT (0x7ffff)
370#define S3C_DxEPTSIZ_XferSize(_x) ((_x) << 0)
371
372
373#define S3C_DIEPDMA(_a) S3C_HSOTG_REG(0x914 + ((_a) * 0x20))
374#define S3C_DOEPDMA(_a) S3C_HSOTG_REG(0xB14 + ((_a) * 0x20))
375#define S3C_DTXFSTS(_a) S3C_HSOTG_REG(0x918 + ((_a) * 0x20))
376
377#define S3C_EPFIFO(_a) S3C_HSOTG_REG(0x1000 + ((_a) * 0x1000))
378
379#endif /* __PLAT_S3C64XX_REGS_USB_HSOTG_H */
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
index 29a4a5c8ee00..1564e0927c21 100644
--- a/drivers/acpi/glue.c
+++ b/drivers/acpi/glue.c
@@ -69,6 +69,7 @@ static struct acpi_bus_type *acpi_get_bus_type(struct bus_type *type)
69 up_read(&bus_type_sem); 69 up_read(&bus_type_sem);
70 return ret; 70 return ret;
71} 71}
72EXPORT_SYMBOL_GPL(register_acpi_bus_type);
72 73
73static int acpi_find_bridge_device(struct device *dev, acpi_handle * handle) 74static int acpi_find_bridge_device(struct device *dev, acpi_handle * handle)
74{ 75{
@@ -85,6 +86,7 @@ static int acpi_find_bridge_device(struct device *dev, acpi_handle * handle)
85 up_read(&bus_type_sem); 86 up_read(&bus_type_sem);
86 return ret; 87 return ret;
87} 88}
89EXPORT_SYMBOL_GPL(unregister_acpi_bus_type);
88 90
89/* Get device's handler per its address under its parent */ 91/* Get device's handler per its address under its parent */
90struct acpi_find_child { 92struct acpi_find_child {
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index b002a471c5d4..adbbc1c80a26 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -382,3 +382,33 @@ acpi_evaluate_reference(acpi_handle handle,
382} 382}
383 383
384EXPORT_SYMBOL(acpi_evaluate_reference); 384EXPORT_SYMBOL(acpi_evaluate_reference);
385
386acpi_status
387acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld *pld)
388{
389 acpi_status status;
390 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
391 union acpi_object *output;
392
393 status = acpi_evaluate_object(handle, "_PLD", NULL, &buffer);
394
395 if (ACPI_FAILURE(status))
396 return status;
397
398 output = buffer.pointer;
399
400 if (!output || output->type != ACPI_TYPE_PACKAGE
401 || !output->package.count
402 || output->package.elements[0].type != ACPI_TYPE_BUFFER
403 || output->package.elements[0].buffer.length > sizeof(*pld)) {
404 status = AE_TYPE;
405 goto out;
406 }
407
408 memcpy(pld, output->package.elements[0].buffer.pointer,
409 output->package.elements[0].buffer.length);
410out:
411 kfree(buffer.pointer);
412 return status;
413}
414EXPORT_SYMBOL(acpi_get_physical_device_location);
diff --git a/drivers/bcma/scan.c b/drivers/bcma/scan.c
index f94cccccfa56..3bea7fe25b20 100644
--- a/drivers/bcma/scan.c
+++ b/drivers/bcma/scan.c
@@ -297,6 +297,23 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
297 return -EILSEQ; 297 return -EILSEQ;
298 } 298 }
299 299
300 /* First Slave Address Descriptor should be port 0:
301 * the main register space for the core
302 */
303 tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0);
304 if (tmp <= 0) {
305 /* Try again to see if it is a bridge */
306 tmp = bcma_erom_get_addr_desc(bus, eromptr,
307 SCAN_ADDR_TYPE_BRIDGE, 0);
308 if (tmp <= 0) {
309 return -EILSEQ;
310 } else {
311 pr_info("Bridge found\n");
312 return -ENXIO;
313 }
314 }
315 core->addr = tmp;
316
300 /* get & parse slave ports */ 317 /* get & parse slave ports */
301 for (i = 0; i < ports[1]; i++) { 318 for (i = 0; i < ports[1]; i++) {
302 for (j = 0; ; j++) { 319 for (j = 0; ; j++) {
@@ -309,7 +326,7 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
309 break; 326 break;
310 } else { 327 } else {
311 if (i == 0 && j == 0) 328 if (i == 0 && j == 0)
312 core->addr = tmp; 329 core->addr1 = tmp;
313 } 330 }
314 } 331 }
315 } 332 }
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
index 57fd867553d7..2812b152d6e9 100644
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
@@ -439,6 +439,7 @@ static struct usb_driver ath3k_driver = {
439 .probe = ath3k_probe, 439 .probe = ath3k_probe,
440 .disconnect = ath3k_disconnect, 440 .disconnect = ath3k_disconnect,
441 .id_table = ath3k_table, 441 .id_table = ath3k_table,
442 .disable_hub_initiated_lpm = 1,
442}; 443};
443 444
444module_usb_driver(ath3k_driver); 445module_usb_driver(ath3k_driver);
diff --git a/drivers/bluetooth/bcm203x.c b/drivers/bluetooth/bcm203x.c
index 1e742a50e2cd..37ae175162f3 100644
--- a/drivers/bluetooth/bcm203x.c
+++ b/drivers/bluetooth/bcm203x.c
@@ -279,6 +279,7 @@ static struct usb_driver bcm203x_driver = {
279 .probe = bcm203x_probe, 279 .probe = bcm203x_probe,
280 .disconnect = bcm203x_disconnect, 280 .disconnect = bcm203x_disconnect,
281 .id_table = bcm203x_table, 281 .id_table = bcm203x_table,
282 .disable_hub_initiated_lpm = 1,
282}; 283};
283 284
284module_usb_driver(bcm203x_driver); 285module_usb_driver(bcm203x_driver);
diff --git a/drivers/bluetooth/bfusb.c b/drivers/bluetooth/bfusb.c
index b8ac1c549a1c..32e825144fe9 100644
--- a/drivers/bluetooth/bfusb.c
+++ b/drivers/bluetooth/bfusb.c
@@ -749,6 +749,7 @@ static struct usb_driver bfusb_driver = {
749 .probe = bfusb_probe, 749 .probe = bfusb_probe,
750 .disconnect = bfusb_disconnect, 750 .disconnect = bfusb_disconnect,
751 .id_table = bfusb_table, 751 .id_table = bfusb_table,
752 .disable_hub_initiated_lpm = 1,
752}; 753};
753 754
754module_usb_driver(bfusb_driver); 755module_usb_driver(bfusb_driver);
diff --git a/drivers/bluetooth/bpa10x.c b/drivers/bluetooth/bpa10x.c
index d894340a7601..609861a53c28 100644
--- a/drivers/bluetooth/bpa10x.c
+++ b/drivers/bluetooth/bpa10x.c
@@ -508,6 +508,7 @@ static struct usb_driver bpa10x_driver = {
508 .probe = bpa10x_probe, 508 .probe = bpa10x_probe,
509 .disconnect = bpa10x_disconnect, 509 .disconnect = bpa10x_disconnect,
510 .id_table = bpa10x_table, 510 .id_table = bpa10x_table,
511 .disable_hub_initiated_lpm = 1,
511}; 512};
512 513
513module_usb_driver(bpa10x_driver); 514module_usb_driver(bpa10x_driver);
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 9217121362e1..461c68bc4dd7 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -1218,6 +1218,7 @@ static struct usb_driver btusb_driver = {
1218#endif 1218#endif
1219 .id_table = btusb_table, 1219 .id_table = btusb_table,
1220 .supports_autosuspend = 1, 1220 .supports_autosuspend = 1,
1221 .disable_hub_initiated_lpm = 1,
1221}; 1222};
1222 1223
1223module_usb_driver(btusb_driver); 1224module_usb_driver(btusb_driver);
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 5bf91dbad59d..340d6ae646ed 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -203,7 +203,7 @@ static int usbhid_restart_out_queue(struct usbhid_device *usbhid)
203 return 0; 203 return 0;
204 204
205 if ((kicked = (usbhid->outhead != usbhid->outtail))) { 205 if ((kicked = (usbhid->outhead != usbhid->outtail))) {
206 dbg("Kicking head %d tail %d", usbhid->outhead, usbhid->outtail); 206 hid_dbg(hid, "Kicking head %d tail %d", usbhid->outhead, usbhid->outtail);
207 207
208 r = usb_autopm_get_interface_async(usbhid->intf); 208 r = usb_autopm_get_interface_async(usbhid->intf);
209 if (r < 0) 209 if (r < 0)
@@ -230,7 +230,7 @@ static int usbhid_restart_ctrl_queue(struct usbhid_device *usbhid)
230 return 0; 230 return 0;
231 231
232 if ((kicked = (usbhid->ctrlhead != usbhid->ctrltail))) { 232 if ((kicked = (usbhid->ctrlhead != usbhid->ctrltail))) {
233 dbg("Kicking head %d tail %d", usbhid->ctrlhead, usbhid->ctrltail); 233 hid_dbg(hid, "Kicking head %d tail %d", usbhid->ctrlhead, usbhid->ctrltail);
234 234
235 r = usb_autopm_get_interface_async(usbhid->intf); 235 r = usb_autopm_get_interface_async(usbhid->intf);
236 if (r < 0) 236 if (r < 0)
@@ -399,6 +399,16 @@ static int hid_submit_ctrl(struct hid_device *hid)
399 * Output interrupt completion handler. 399 * Output interrupt completion handler.
400 */ 400 */
401 401
402static int irq_out_pump_restart(struct hid_device *hid)
403{
404 struct usbhid_device *usbhid = hid->driver_data;
405
406 if (usbhid->outhead != usbhid->outtail)
407 return hid_submit_out(hid);
408 else
409 return -1;
410}
411
402static void hid_irq_out(struct urb *urb) 412static void hid_irq_out(struct urb *urb)
403{ 413{
404 struct hid_device *hid = urb->context; 414 struct hid_device *hid = urb->context;
@@ -428,7 +438,7 @@ static void hid_irq_out(struct urb *urb)
428 else 438 else
429 usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1); 439 usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1);
430 440
431 if (usbhid->outhead != usbhid->outtail && !hid_submit_out(hid)) { 441 if (!irq_out_pump_restart(hid)) {
432 /* Successfully submitted next urb in queue */ 442 /* Successfully submitted next urb in queue */
433 spin_unlock_irqrestore(&usbhid->lock, flags); 443 spin_unlock_irqrestore(&usbhid->lock, flags);
434 return; 444 return;
@@ -443,6 +453,15 @@ static void hid_irq_out(struct urb *urb)
443/* 453/*
444 * Control pipe completion handler. 454 * Control pipe completion handler.
445 */ 455 */
456static int ctrl_pump_restart(struct hid_device *hid)
457{
458 struct usbhid_device *usbhid = hid->driver_data;
459
460 if (usbhid->ctrlhead != usbhid->ctrltail)
461 return hid_submit_ctrl(hid);
462 else
463 return -1;
464}
446 465
447static void hid_ctrl(struct urb *urb) 466static void hid_ctrl(struct urb *urb)
448{ 467{
@@ -476,7 +495,7 @@ static void hid_ctrl(struct urb *urb)
476 else 495 else
477 usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1); 496 usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1);
478 497
479 if (usbhid->ctrlhead != usbhid->ctrltail && !hid_submit_ctrl(hid)) { 498 if (!ctrl_pump_restart(hid)) {
480 /* Successfully submitted next urb in queue */ 499 /* Successfully submitted next urb in queue */
481 spin_unlock(&usbhid->lock); 500 spin_unlock(&usbhid->lock);
482 return; 501 return;
@@ -535,11 +554,27 @@ static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *re
535 * the queue is known to run 554 * the queue is known to run
536 * but an earlier request may be stuck 555 * but an earlier request may be stuck
537 * we may need to time out 556 * we may need to time out
538 * no race because this is called under 557 * no race because the URB is blocked under
539 * spinlock 558 * spinlock
540 */ 559 */
541 if (time_after(jiffies, usbhid->last_out + HZ * 5)) 560 if (time_after(jiffies, usbhid->last_out + HZ * 5)) {
561 usb_block_urb(usbhid->urbout);
562 /* drop lock to not deadlock if the callback is called */
563 spin_unlock(&usbhid->lock);
542 usb_unlink_urb(usbhid->urbout); 564 usb_unlink_urb(usbhid->urbout);
565 spin_lock(&usbhid->lock);
566 usb_unblock_urb(usbhid->urbout);
567 /*
568 * if the unlinking has already completed
569 * the pump will have been stopped
570 * it must be restarted now
571 */
572 if (!test_bit(HID_OUT_RUNNING, &usbhid->iofl))
573 if (!irq_out_pump_restart(hid))
574 set_bit(HID_OUT_RUNNING, &usbhid->iofl);
575
576
577 }
543 } 578 }
544 return; 579 return;
545 } 580 }
@@ -583,11 +618,25 @@ static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *re
583 * the queue is known to run 618 * the queue is known to run
584 * but an earlier request may be stuck 619 * but an earlier request may be stuck
585 * we may need to time out 620 * we may need to time out
586 * no race because this is called under 621 * no race because the URB is blocked under
587 * spinlock 622 * spinlock
588 */ 623 */
589 if (time_after(jiffies, usbhid->last_ctrl + HZ * 5)) 624 if (time_after(jiffies, usbhid->last_ctrl + HZ * 5)) {
625 usb_block_urb(usbhid->urbctrl);
626 /* drop lock to not deadlock if the callback is called */
627 spin_unlock(&usbhid->lock);
590 usb_unlink_urb(usbhid->urbctrl); 628 usb_unlink_urb(usbhid->urbctrl);
629 spin_lock(&usbhid->lock);
630 usb_unblock_urb(usbhid->urbctrl);
631 /*
632 * if the unlinking has already completed
633 * the pump will have been stopped
634 * it must be restarted now
635 */
636 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
637 if (!ctrl_pump_restart(hid))
638 set_bit(HID_CTRL_RUNNING, &usbhid->iofl);
639 }
591 } 640 }
592} 641}
593 642
diff --git a/drivers/hid/usbhid/usbmouse.c b/drivers/hid/usbhid/usbmouse.c
index 0f6be45d43d5..bf16d72dc370 100644
--- a/drivers/hid/usbhid/usbmouse.c
+++ b/drivers/hid/usbhid/usbmouse.c
@@ -92,9 +92,10 @@ static void usb_mouse_irq(struct urb *urb)
92resubmit: 92resubmit:
93 status = usb_submit_urb (urb, GFP_ATOMIC); 93 status = usb_submit_urb (urb, GFP_ATOMIC);
94 if (status) 94 if (status)
95 err ("can't resubmit intr, %s-%s/input0, status %d", 95 dev_err(&mouse->usbdev->dev,
96 mouse->usbdev->bus->bus_name, 96 "can't resubmit intr, %s-%s/input0, status %d\n",
97 mouse->usbdev->devpath, status); 97 mouse->usbdev->bus->bus_name,
98 mouse->usbdev->devpath, status);
98} 99}
99 100
100static int usb_mouse_open(struct input_dev *dev) 101static int usb_mouse_open(struct input_dev *dev)
diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c
index 405febd94f24..daeeb4c7e3b0 100644
--- a/drivers/input/joystick/iforce/iforce-main.c
+++ b/drivers/input/joystick/iforce/iforce-main.c
@@ -317,7 +317,8 @@ int iforce_init_device(struct iforce *iforce)
317 break; 317 break;
318 318
319 if (i == 20) { /* 5 seconds */ 319 if (i == 20) { /* 5 seconds */
320 err("Timeout waiting for response from device."); 320 dev_err(&input_dev->dev,
321 "Timeout waiting for response from device.\n");
321 error = -ENODEV; 322 error = -ENODEV;
322 goto fail; 323 goto fail;
323 } 324 }
diff --git a/drivers/input/joystick/iforce/iforce-packets.c b/drivers/input/joystick/iforce/iforce-packets.c
index a17b50016009..08f98f2eaf88 100644
--- a/drivers/input/joystick/iforce/iforce-packets.c
+++ b/drivers/input/joystick/iforce/iforce-packets.c
@@ -257,7 +257,8 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet)
257 257
258 status = usb_submit_urb(iforce->ctrl, GFP_ATOMIC); 258 status = usb_submit_urb(iforce->ctrl, GFP_ATOMIC);
259 if (status) { 259 if (status) {
260 err("usb_submit_urb failed %d", status); 260 dev_err(&iforce->intf->dev,
261 "usb_submit_urb failed %d\n", status);
261 return -1; 262 return -1;
262 } 263 }
263 264
@@ -265,12 +266,14 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet)
265 iforce->ctrl->status != -EINPROGRESS, HZ); 266 iforce->ctrl->status != -EINPROGRESS, HZ);
266 267
267 if (iforce->ctrl->status) { 268 if (iforce->ctrl->status) {
268 dbg("iforce->ctrl->status = %d", iforce->ctrl->status); 269 dev_dbg(&iforce->intf->dev,
270 "iforce->ctrl->status = %d\n",
271 iforce->ctrl->status);
269 usb_unlink_urb(iforce->ctrl); 272 usb_unlink_urb(iforce->ctrl);
270 return -1; 273 return -1;
271 } 274 }
272#else 275#else
273 dbg("iforce_get_id_packet: iforce->bus = USB!"); 276 printk(KERN_DEBUG "iforce_get_id_packet: iforce->bus = USB!\n");
274#endif 277#endif
275 } 278 }
276 break; 279 break;
@@ -289,12 +292,15 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet)
289 return -1; 292 return -1;
290 } 293 }
291#else 294#else
292 err("iforce_get_id_packet: iforce->bus = SERIO!"); 295 dev_err(&iforce->dev->dev,
296 "iforce_get_id_packet: iforce->bus = SERIO!\n");
293#endif 297#endif
294 break; 298 break;
295 299
296 default: 300 default:
297 err("iforce_get_id_packet: iforce->bus = %d", iforce->bus); 301 dev_err(&iforce->dev->dev,
302 "iforce_get_id_packet: iforce->bus = %d\n",
303 iforce->bus);
298 break; 304 break;
299 } 305 }
300 306
diff --git a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c
index 6c96631ae5d9..d96aa27dfcdc 100644
--- a/drivers/input/joystick/iforce/iforce-usb.c
+++ b/drivers/input/joystick/iforce/iforce-usb.c
@@ -64,7 +64,7 @@ void iforce_usb_xmit(struct iforce *iforce)
64 64
65 if ( (n=usb_submit_urb(iforce->out, GFP_ATOMIC)) ) { 65 if ( (n=usb_submit_urb(iforce->out, GFP_ATOMIC)) ) {
66 clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); 66 clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags);
67 dev_warn(&iforce->dev->dev, "usb_submit_urb failed %d\n", n); 67 dev_warn(&iforce->intf->dev, "usb_submit_urb failed %d\n", n);
68 } 68 }
69 69
70 /* The IFORCE_XMIT_RUNNING bit is not cleared here. That's intended. 70 /* The IFORCE_XMIT_RUNNING bit is not cleared here. That's intended.
@@ -76,6 +76,7 @@ void iforce_usb_xmit(struct iforce *iforce)
76static void iforce_usb_irq(struct urb *urb) 76static void iforce_usb_irq(struct urb *urb)
77{ 77{
78 struct iforce *iforce = urb->context; 78 struct iforce *iforce = urb->context;
79 struct device *dev = &iforce->intf->dev;
79 int status; 80 int status;
80 81
81 switch (urb->status) { 82 switch (urb->status) {
@@ -86,11 +87,12 @@ static void iforce_usb_irq(struct urb *urb)
86 case -ENOENT: 87 case -ENOENT:
87 case -ESHUTDOWN: 88 case -ESHUTDOWN:
88 /* this urb is terminated, clean up */ 89 /* this urb is terminated, clean up */
89 dbg("%s - urb shutting down with status: %d", 90 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
90 __func__, urb->status); 91 __func__, urb->status);
91 return; 92 return;
92 default: 93 default:
93 dbg("%s - urb has status of: %d", __func__, urb->status); 94 dev_dbg(dev, "%s - urb has status of: %d\n",
95 __func__, urb->status);
94 goto exit; 96 goto exit;
95 } 97 }
96 98
@@ -100,8 +102,8 @@ static void iforce_usb_irq(struct urb *urb)
100exit: 102exit:
101 status = usb_submit_urb (urb, GFP_ATOMIC); 103 status = usb_submit_urb (urb, GFP_ATOMIC);
102 if (status) 104 if (status)
103 err ("%s - usb_submit_urb failed with result %d", 105 dev_err(dev, "%s - usb_submit_urb failed with result %d\n",
104 __func__, status); 106 __func__, status);
105} 107}
106 108
107static void iforce_usb_out(struct urb *urb) 109static void iforce_usb_out(struct urb *urb)
@@ -110,7 +112,8 @@ static void iforce_usb_out(struct urb *urb)
110 112
111 if (urb->status) { 113 if (urb->status) {
112 clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); 114 clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags);
113 dbg("urb->status %d, exiting", urb->status); 115 dev_dbg(&iforce->intf->dev, "urb->status %d, exiting\n",
116 urb->status);
114 return; 117 return;
115 } 118 }
116 119
@@ -155,6 +158,7 @@ static int iforce_usb_probe(struct usb_interface *intf,
155 158
156 iforce->bus = IFORCE_USB; 159 iforce->bus = IFORCE_USB;
157 iforce->usbdev = dev; 160 iforce->usbdev = dev;
161 iforce->intf = intf;
158 162
159 iforce->cr.bRequestType = USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_INTERFACE; 163 iforce->cr.bRequestType = USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_INTERFACE;
160 iforce->cr.wIndex = 0; 164 iforce->cr.wIndex = 0;
diff --git a/drivers/input/joystick/iforce/iforce.h b/drivers/input/joystick/iforce/iforce.h
index 9f494b75848a..b1d7d9b0eb86 100644
--- a/drivers/input/joystick/iforce/iforce.h
+++ b/drivers/input/joystick/iforce/iforce.h
@@ -115,6 +115,7 @@ struct iforce {
115#endif 115#endif
116#ifdef CONFIG_JOYSTICK_IFORCE_USB 116#ifdef CONFIG_JOYSTICK_IFORCE_USB
117 struct usb_device *usbdev; /* USB transfer */ 117 struct usb_device *usbdev; /* USB transfer */
118 struct usb_interface *intf;
118 struct urb *irq, *out, *ctrl; 119 struct urb *irq, *out, *ctrl;
119 struct usb_ctrlrequest cr; 120 struct usb_ctrlrequest cr;
120#endif 121#endif
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index fd7a0d5bc94d..ee16fb67b7ae 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -252,6 +252,7 @@ MODULE_DEVICE_TABLE (usb, xpad_table);
252struct usb_xpad { 252struct usb_xpad {
253 struct input_dev *dev; /* input device interface */ 253 struct input_dev *dev; /* input device interface */
254 struct usb_device *udev; /* usb device */ 254 struct usb_device *udev; /* usb device */
255 struct usb_interface *intf; /* usb interface */
255 256
256 int pad_present; 257 int pad_present;
257 258
@@ -457,6 +458,7 @@ static void xpad360w_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned cha
457static void xpad_irq_in(struct urb *urb) 458static void xpad_irq_in(struct urb *urb)
458{ 459{
459 struct usb_xpad *xpad = urb->context; 460 struct usb_xpad *xpad = urb->context;
461 struct device *dev = &xpad->intf->dev;
460 int retval, status; 462 int retval, status;
461 463
462 status = urb->status; 464 status = urb->status;
@@ -469,11 +471,11 @@ static void xpad_irq_in(struct urb *urb)
469 case -ENOENT: 471 case -ENOENT:
470 case -ESHUTDOWN: 472 case -ESHUTDOWN:
471 /* this urb is terminated, clean up */ 473 /* this urb is terminated, clean up */
472 dbg("%s - urb shutting down with status: %d", 474 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
473 __func__, status); 475 __func__, status);
474 return; 476 return;
475 default: 477 default:
476 dbg("%s - nonzero urb status received: %d", 478 dev_dbg(dev, "%s - nonzero urb status received: %d\n",
477 __func__, status); 479 __func__, status);
478 goto exit; 480 goto exit;
479 } 481 }
@@ -492,12 +494,15 @@ static void xpad_irq_in(struct urb *urb)
492exit: 494exit:
493 retval = usb_submit_urb(urb, GFP_ATOMIC); 495 retval = usb_submit_urb(urb, GFP_ATOMIC);
494 if (retval) 496 if (retval)
495 err ("%s - usb_submit_urb failed with result %d", 497 dev_err(dev, "%s - usb_submit_urb failed with result %d\n",
496 __func__, retval); 498 __func__, retval);
497} 499}
498 500
499static void xpad_bulk_out(struct urb *urb) 501static void xpad_bulk_out(struct urb *urb)
500{ 502{
503 struct usb_xpad *xpad = urb->context;
504 struct device *dev = &xpad->intf->dev;
505
501 switch (urb->status) { 506 switch (urb->status) {
502 case 0: 507 case 0:
503 /* success */ 508 /* success */
@@ -506,16 +511,20 @@ static void xpad_bulk_out(struct urb *urb)
506 case -ENOENT: 511 case -ENOENT:
507 case -ESHUTDOWN: 512 case -ESHUTDOWN:
508 /* this urb is terminated, clean up */ 513 /* this urb is terminated, clean up */
509 dbg("%s - urb shutting down with status: %d", __func__, urb->status); 514 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
515 __func__, urb->status);
510 break; 516 break;
511 default: 517 default:
512 dbg("%s - nonzero urb status received: %d", __func__, urb->status); 518 dev_dbg(dev, "%s - nonzero urb status received: %d\n",
519 __func__, urb->status);
513 } 520 }
514} 521}
515 522
516#if defined(CONFIG_JOYSTICK_XPAD_FF) || defined(CONFIG_JOYSTICK_XPAD_LEDS) 523#if defined(CONFIG_JOYSTICK_XPAD_FF) || defined(CONFIG_JOYSTICK_XPAD_LEDS)
517static void xpad_irq_out(struct urb *urb) 524static void xpad_irq_out(struct urb *urb)
518{ 525{
526 struct usb_xpad *xpad = urb->context;
527 struct device *dev = &xpad->intf->dev;
519 int retval, status; 528 int retval, status;
520 529
521 status = urb->status; 530 status = urb->status;
@@ -529,19 +538,21 @@ static void xpad_irq_out(struct urb *urb)
529 case -ENOENT: 538 case -ENOENT:
530 case -ESHUTDOWN: 539 case -ESHUTDOWN:
531 /* this urb is terminated, clean up */ 540 /* this urb is terminated, clean up */
532 dbg("%s - urb shutting down with status: %d", __func__, status); 541 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
542 __func__, status);
533 return; 543 return;
534 544
535 default: 545 default:
536 dbg("%s - nonzero urb status received: %d", __func__, status); 546 dev_dbg(dev, "%s - nonzero urb status received: %d\n",
547 __func__, status);
537 goto exit; 548 goto exit;
538 } 549 }
539 550
540exit: 551exit:
541 retval = usb_submit_urb(urb, GFP_ATOMIC); 552 retval = usb_submit_urb(urb, GFP_ATOMIC);
542 if (retval) 553 if (retval)
543 err("%s - usb_submit_urb failed with result %d", 554 dev_err(dev, "%s - usb_submit_urb failed with result %d\n",
544 __func__, retval); 555 __func__, retval);
545} 556}
546 557
547static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad) 558static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad)
@@ -654,7 +665,8 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect
654 return usb_submit_urb(xpad->irq_out, GFP_ATOMIC); 665 return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
655 666
656 default: 667 default:
657 dbg("%s - rumble command sent to unsupported xpad type: %d", 668 dev_dbg(&xpad->dev->dev,
669 "%s - rumble command sent to unsupported xpad type: %d\n",
658 __func__, xpad->xtype); 670 __func__, xpad->xtype);
659 return -1; 671 return -1;
660 } 672 }
@@ -844,6 +856,7 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
844 } 856 }
845 857
846 xpad->udev = udev; 858 xpad->udev = udev;
859 xpad->intf = intf;
847 xpad->mapping = xpad_device[i].mapping; 860 xpad->mapping = xpad_device[i].mapping;
848 xpad->xtype = xpad_device[i].xtype; 861 xpad->xtype = xpad_device[i].xtype;
849 862
diff --git a/drivers/input/misc/cm109.c b/drivers/input/misc/cm109.c
index ab860511f016..082684e7f390 100644
--- a/drivers/input/misc/cm109.c
+++ b/drivers/input/misc/cm109.c
@@ -327,7 +327,9 @@ static void cm109_submit_buzz_toggle(struct cm109_dev *dev)
327 327
328 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC); 328 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC);
329 if (error) 329 if (error)
330 err("%s: usb_submit_urb (urb_ctl) failed %d", __func__, error); 330 dev_err(&dev->intf->dev,
331 "%s: usb_submit_urb (urb_ctl) failed %d\n",
332 __func__, error);
331} 333}
332 334
333/* 335/*
@@ -339,7 +341,7 @@ static void cm109_urb_irq_callback(struct urb *urb)
339 const int status = urb->status; 341 const int status = urb->status;
340 int error; 342 int error;
341 343
342 dev_dbg(&urb->dev->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n", 344 dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n",
343 dev->irq_data->byte[0], 345 dev->irq_data->byte[0],
344 dev->irq_data->byte[1], 346 dev->irq_data->byte[1],
345 dev->irq_data->byte[2], 347 dev->irq_data->byte[2],
@@ -349,7 +351,7 @@ static void cm109_urb_irq_callback(struct urb *urb)
349 if (status) { 351 if (status) {
350 if (status == -ESHUTDOWN) 352 if (status == -ESHUTDOWN)
351 return; 353 return;
352 err("%s: urb status %d", __func__, status); 354 dev_err(&dev->intf->dev, "%s: urb status %d\n", __func__, status);
353 } 355 }
354 356
355 /* Special keys */ 357 /* Special keys */
@@ -396,7 +398,8 @@ static void cm109_urb_irq_callback(struct urb *urb)
396 398
397 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC); 399 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC);
398 if (error) 400 if (error)
399 err("%s: usb_submit_urb (urb_ctl) failed %d", 401 dev_err(&dev->intf->dev,
402 "%s: usb_submit_urb (urb_ctl) failed %d\n",
400 __func__, error); 403 __func__, error);
401 } 404 }
402 405
@@ -409,14 +412,14 @@ static void cm109_urb_ctl_callback(struct urb *urb)
409 const int status = urb->status; 412 const int status = urb->status;
410 int error; 413 int error;
411 414
412 dev_dbg(&urb->dev->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n", 415 dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n",
413 dev->ctl_data->byte[0], 416 dev->ctl_data->byte[0],
414 dev->ctl_data->byte[1], 417 dev->ctl_data->byte[1],
415 dev->ctl_data->byte[2], 418 dev->ctl_data->byte[2],
416 dev->ctl_data->byte[3]); 419 dev->ctl_data->byte[3]);
417 420
418 if (status) 421 if (status)
419 err("%s: urb status %d", __func__, status); 422 dev_err(&dev->intf->dev, "%s: urb status %d\n", __func__, status);
420 423
421 spin_lock(&dev->ctl_submit_lock); 424 spin_lock(&dev->ctl_submit_lock);
422 425
@@ -433,7 +436,8 @@ static void cm109_urb_ctl_callback(struct urb *urb)
433 dev->irq_urb_pending = 1; 436 dev->irq_urb_pending = 1;
434 error = usb_submit_urb(dev->urb_irq, GFP_ATOMIC); 437 error = usb_submit_urb(dev->urb_irq, GFP_ATOMIC);
435 if (error) 438 if (error)
436 err("%s: usb_submit_urb (urb_irq) failed %d", 439 dev_err(&dev->intf->dev,
440 "%s: usb_submit_urb (urb_irq) failed %d\n",
437 __func__, error); 441 __func__, error);
438 } 442 }
439 } 443 }
@@ -476,7 +480,8 @@ static void cm109_toggle_buzzer_sync(struct cm109_dev *dev, int on)
476 dev->ctl_data, 480 dev->ctl_data,
477 USB_PKT_LEN, USB_CTRL_SET_TIMEOUT); 481 USB_PKT_LEN, USB_CTRL_SET_TIMEOUT);
478 if (error < 0 && error != -EINTR) 482 if (error < 0 && error != -EINTR)
479 err("%s: usb_control_msg() failed %d", __func__, error); 483 dev_err(&dev->intf->dev, "%s: usb_control_msg() failed %d\n",
484 __func__, error);
480} 485}
481 486
482static void cm109_stop_traffic(struct cm109_dev *dev) 487static void cm109_stop_traffic(struct cm109_dev *dev)
@@ -518,8 +523,8 @@ static int cm109_input_open(struct input_dev *idev)
518 523
519 error = usb_autopm_get_interface(dev->intf); 524 error = usb_autopm_get_interface(dev->intf);
520 if (error < 0) { 525 if (error < 0) {
521 err("%s - cannot autoresume, result %d", 526 dev_err(&idev->dev, "%s - cannot autoresume, result %d\n",
522 __func__, error); 527 __func__, error);
523 return error; 528 return error;
524 } 529 }
525 530
@@ -537,7 +542,8 @@ static int cm109_input_open(struct input_dev *idev)
537 542
538 error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL); 543 error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL);
539 if (error) 544 if (error)
540 err("%s: usb_submit_urb (urb_ctl) failed %d", __func__, error); 545 dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n",
546 __func__, error);
541 else 547 else
542 dev->open = 1; 548 dev->open = 1;
543 549
@@ -573,7 +579,7 @@ static int cm109_input_ev(struct input_dev *idev, unsigned int type,
573{ 579{
574 struct cm109_dev *dev = input_get_drvdata(idev); 580 struct cm109_dev *dev = input_get_drvdata(idev);
575 581
576 dev_dbg(&dev->udev->dev, 582 dev_dbg(&dev->intf->dev,
577 "input_ev: type=%u code=%u value=%d\n", type, code, value); 583 "input_ev: type=%u code=%u value=%d\n", type, code, value);
578 584
579 if (type != EV_SND) 585 if (type != EV_SND)
@@ -710,7 +716,8 @@ static int cm109_usb_probe(struct usb_interface *intf,
710 pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress); 716 pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress);
711 ret = usb_maxpacket(udev, pipe, usb_pipeout(pipe)); 717 ret = usb_maxpacket(udev, pipe, usb_pipeout(pipe));
712 if (ret != USB_PKT_LEN) 718 if (ret != USB_PKT_LEN)
713 err("invalid payload size %d, expected %d", ret, USB_PKT_LEN); 719 dev_err(&intf->dev, "invalid payload size %d, expected %d\n",
720 ret, USB_PKT_LEN);
714 721
715 /* initialise irq urb */ 722 /* initialise irq urb */
716 usb_fill_int_urb(dev->urb_irq, udev, pipe, dev->irq_data, 723 usb_fill_int_urb(dev->urb_irq, udev, pipe, dev->irq_data,
diff --git a/drivers/input/misc/keyspan_remote.c b/drivers/input/misc/keyspan_remote.c
index d99151a8bf10..290fa5f97ded 100644
--- a/drivers/input/misc/keyspan_remote.c
+++ b/drivers/input/misc/keyspan_remote.c
@@ -157,7 +157,7 @@ static int keyspan_load_tester(struct usb_keyspan* dev, int bits_needed)
157 * though so it's not too big a deal 157 * though so it's not too big a deal
158 */ 158 */
159 if (dev->data.pos >= dev->data.len) { 159 if (dev->data.pos >= dev->data.len) {
160 dev_dbg(&dev->udev->dev, 160 dev_dbg(&dev->interface->dev,
161 "%s - Error ran out of data. pos: %d, len: %d\n", 161 "%s - Error ran out of data. pos: %d, len: %d\n",
162 __func__, dev->data.pos, dev->data.len); 162 __func__, dev->data.pos, dev->data.len);
163 return -1; 163 return -1;
@@ -267,7 +267,9 @@ static void keyspan_check_data(struct usb_keyspan *remote)
267 remote->data.tester = remote->data.tester >> 6; 267 remote->data.tester = remote->data.tester >> 6;
268 remote->data.bits_left -= 6; 268 remote->data.bits_left -= 6;
269 } else { 269 } else {
270 err("%s - Unknown sequence found in system data.\n", __func__); 270 dev_err(&remote->interface->dev,
271 "%s - Unknown sequence found in system data.\n",
272 __func__);
271 remote->stage = 0; 273 remote->stage = 0;
272 return; 274 return;
273 } 275 }
@@ -286,7 +288,9 @@ static void keyspan_check_data(struct usb_keyspan *remote)
286 remote->data.tester = remote->data.tester >> 6; 288 remote->data.tester = remote->data.tester >> 6;
287 remote->data.bits_left -= 6; 289 remote->data.bits_left -= 6;
288 } else { 290 } else {
289 err("%s - Unknown sequence found in button data.\n", __func__); 291 dev_err(&remote->interface->dev,
292 "%s - Unknown sequence found in button data.\n",
293 __func__);
290 remote->stage = 0; 294 remote->stage = 0;
291 return; 295 return;
292 } 296 }
@@ -302,7 +306,9 @@ static void keyspan_check_data(struct usb_keyspan *remote)
302 remote->data.tester = remote->data.tester >> 6; 306 remote->data.tester = remote->data.tester >> 6;
303 remote->data.bits_left -= 6; 307 remote->data.bits_left -= 6;
304 } else { 308 } else {
305 err("%s - Error in message, invalid toggle.\n", __func__); 309 dev_err(&remote->interface->dev,
310 "%s - Error in message, invalid toggle.\n",
311 __func__);
306 remote->stage = 0; 312 remote->stage = 0;
307 return; 313 return;
308 } 314 }
@@ -312,10 +318,11 @@ static void keyspan_check_data(struct usb_keyspan *remote)
312 remote->data.tester = remote->data.tester >> 5; 318 remote->data.tester = remote->data.tester >> 5;
313 remote->data.bits_left -= 5; 319 remote->data.bits_left -= 5;
314 } else { 320 } else {
315 err("Bad message received, no stop bit found.\n"); 321 dev_err(&remote->interface->dev,
322 "Bad message received, no stop bit found.\n");
316 } 323 }
317 324
318 dev_dbg(&remote->udev->dev, 325 dev_dbg(&remote->interface->dev,
319 "%s found valid message: system: %d, button: %d, toggle: %d\n", 326 "%s found valid message: system: %d, button: %d, toggle: %d\n",
320 __func__, message.system, message.button, message.toggle); 327 __func__, message.system, message.button, message.toggle);
321 328
@@ -397,7 +404,9 @@ static void keyspan_irq_recv(struct urb *urb)
397resubmit: 404resubmit:
398 retval = usb_submit_urb(urb, GFP_ATOMIC); 405 retval = usb_submit_urb(urb, GFP_ATOMIC);
399 if (retval) 406 if (retval)
400 err ("%s - usb_submit_urb failed with result: %d", __func__, retval); 407 dev_err(&dev->interface->dev,
408 "%s - usb_submit_urb failed with result: %d\n",
409 __func__, retval);
401} 410}
402 411
403static int keyspan_open(struct input_dev *dev) 412static int keyspan_open(struct input_dev *dev)
diff --git a/drivers/input/misc/powermate.c b/drivers/input/misc/powermate.c
index 538f7049ec64..49c0c3ebd321 100644
--- a/drivers/input/misc/powermate.c
+++ b/drivers/input/misc/powermate.c
@@ -65,6 +65,7 @@ struct powermate_device {
65 struct urb *irq, *config; 65 struct urb *irq, *config;
66 struct usb_ctrlrequest *configcr; 66 struct usb_ctrlrequest *configcr;
67 struct usb_device *udev; 67 struct usb_device *udev;
68 struct usb_interface *intf;
68 struct input_dev *input; 69 struct input_dev *input;
69 spinlock_t lock; 70 spinlock_t lock;
70 int static_brightness; 71 int static_brightness;
@@ -85,6 +86,7 @@ static void powermate_config_complete(struct urb *urb);
85static void powermate_irq(struct urb *urb) 86static void powermate_irq(struct urb *urb)
86{ 87{
87 struct powermate_device *pm = urb->context; 88 struct powermate_device *pm = urb->context;
89 struct device *dev = &pm->intf->dev;
88 int retval; 90 int retval;
89 91
90 switch (urb->status) { 92 switch (urb->status) {
@@ -95,10 +97,12 @@ static void powermate_irq(struct urb *urb)
95 case -ENOENT: 97 case -ENOENT:
96 case -ESHUTDOWN: 98 case -ESHUTDOWN:
97 /* this urb is terminated, clean up */ 99 /* this urb is terminated, clean up */
98 dbg("%s - urb shutting down with status: %d", __func__, urb->status); 100 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
101 __func__, urb->status);
99 return; 102 return;
100 default: 103 default:
101 dbg("%s - nonzero urb status received: %d", __func__, urb->status); 104 dev_dbg(dev, "%s - nonzero urb status received: %d\n",
105 __func__, urb->status);
102 goto exit; 106 goto exit;
103 } 107 }
104 108
@@ -110,8 +114,8 @@ static void powermate_irq(struct urb *urb)
110exit: 114exit:
111 retval = usb_submit_urb (urb, GFP_ATOMIC); 115 retval = usb_submit_urb (urb, GFP_ATOMIC);
112 if (retval) 116 if (retval)
113 err ("%s - usb_submit_urb failed with result %d", 117 dev_err(dev, "%s - usb_submit_urb failed with result: %d\n",
114 __func__, retval); 118 __func__, retval);
115} 119}
116 120
117/* Decide if we need to issue a control message and do so. Must be called with pm->lock taken */ 121/* Decide if we need to issue a control message and do so. Must be called with pm->lock taken */
@@ -330,6 +334,7 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i
330 goto fail3; 334 goto fail3;
331 335
332 pm->udev = udev; 336 pm->udev = udev;
337 pm->intf = intf;
333 pm->input = input_dev; 338 pm->input = input_dev;
334 339
335 usb_make_path(udev, pm->phys, sizeof(pm->phys)); 340 usb_make_path(udev, pm->phys, sizeof(pm->phys));
diff --git a/drivers/input/misc/yealink.c b/drivers/input/misc/yealink.c
index f4776e7f8c15..285a5bd6cbc9 100644
--- a/drivers/input/misc/yealink.c
+++ b/drivers/input/misc/yealink.c
@@ -101,6 +101,7 @@ static const struct lcd_segment_map {
101struct yealink_dev { 101struct yealink_dev {
102 struct input_dev *idev; /* input device */ 102 struct input_dev *idev; /* input device */
103 struct usb_device *udev; /* usb device */ 103 struct usb_device *udev; /* usb device */
104 struct usb_interface *intf; /* usb interface */
104 105
105 /* irq input channel */ 106 /* irq input channel */
106 struct yld_ctl_packet *irq_data; 107 struct yld_ctl_packet *irq_data;
@@ -428,7 +429,8 @@ static void urb_irq_callback(struct urb *urb)
428 int ret, status = urb->status; 429 int ret, status = urb->status;
429 430
430 if (status) 431 if (status)
431 err("%s - urb status %d", __func__, status); 432 dev_err(&yld->intf->dev, "%s - urb status %d\n",
433 __func__, status);
432 434
433 switch (yld->irq_data->cmd) { 435 switch (yld->irq_data->cmd) {
434 case CMD_KEYPRESS: 436 case CMD_KEYPRESS:
@@ -437,13 +439,15 @@ static void urb_irq_callback(struct urb *urb)
437 break; 439 break;
438 440
439 case CMD_SCANCODE: 441 case CMD_SCANCODE:
440 dbg("get scancode %x", yld->irq_data->data[0]); 442 dev_dbg(&yld->intf->dev, "get scancode %x\n",
443 yld->irq_data->data[0]);
441 444
442 report_key(yld, map_p1k_to_key(yld->irq_data->data[0])); 445 report_key(yld, map_p1k_to_key(yld->irq_data->data[0]));
443 break; 446 break;
444 447
445 default: 448 default:
446 err("unexpected response %x", yld->irq_data->cmd); 449 dev_err(&yld->intf->dev, "unexpected response %x\n",
450 yld->irq_data->cmd);
447 } 451 }
448 452
449 yealink_do_idle_tasks(yld); 453 yealink_do_idle_tasks(yld);
@@ -451,7 +455,9 @@ static void urb_irq_callback(struct urb *urb)
451 if (!yld->shutdown) { 455 if (!yld->shutdown) {
452 ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC); 456 ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC);
453 if (ret && ret != -EPERM) 457 if (ret && ret != -EPERM)
454 err("%s - usb_submit_urb failed %d", __func__, ret); 458 dev_err(&yld->intf->dev,
459 "%s - usb_submit_urb failed %d\n",
460 __func__, ret);
455 } 461 }
456} 462}
457 463
@@ -461,7 +467,8 @@ static void urb_ctl_callback(struct urb *urb)
461 int ret = 0, status = urb->status; 467 int ret = 0, status = urb->status;
462 468
463 if (status) 469 if (status)
464 err("%s - urb status %d", __func__, status); 470 dev_err(&yld->intf->dev, "%s - urb status %d\n",
471 __func__, status);
465 472
466 switch (yld->ctl_data->cmd) { 473 switch (yld->ctl_data->cmd) {
467 case CMD_KEYPRESS: 474 case CMD_KEYPRESS:
@@ -479,7 +486,8 @@ static void urb_ctl_callback(struct urb *urb)
479 } 486 }
480 487
481 if (ret && ret != -EPERM) 488 if (ret && ret != -EPERM)
482 err("%s - usb_submit_urb failed %d", __func__, ret); 489 dev_err(&yld->intf->dev, "%s - usb_submit_urb failed %d\n",
490 __func__, ret);
483} 491}
484 492
485/******************************************************************************* 493/*******************************************************************************
@@ -511,7 +519,7 @@ static int input_open(struct input_dev *dev)
511 struct yealink_dev *yld = input_get_drvdata(dev); 519 struct yealink_dev *yld = input_get_drvdata(dev);
512 int i, ret; 520 int i, ret;
513 521
514 dbg("%s", __func__); 522 dev_dbg(&yld->intf->dev, "%s\n", __func__);
515 523
516 /* force updates to device */ 524 /* force updates to device */
517 for (i = 0; i<sizeof(yld->master); i++) 525 for (i = 0; i<sizeof(yld->master); i++)
@@ -526,8 +534,9 @@ static int input_open(struct input_dev *dev)
526 yld->ctl_data->size = 10; 534 yld->ctl_data->size = 10;
527 yld->ctl_data->sum = 0x100-CMD_INIT-10; 535 yld->ctl_data->sum = 0x100-CMD_INIT-10;
528 if ((ret = usb_submit_urb(yld->urb_ctl, GFP_KERNEL)) != 0) { 536 if ((ret = usb_submit_urb(yld->urb_ctl, GFP_KERNEL)) != 0) {
529 dbg("%s - usb_submit_urb failed with result %d", 537 dev_dbg(&yld->intf->dev,
530 __func__, ret); 538 "%s - usb_submit_urb failed with result %d\n",
539 __func__, ret);
531 return ret; 540 return ret;
532 } 541 }
533 return 0; 542 return 0;
@@ -876,6 +885,7 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
876 return -ENOMEM; 885 return -ENOMEM;
877 886
878 yld->udev = udev; 887 yld->udev = udev;
888 yld->intf = intf;
879 889
880 yld->idev = input_dev = input_allocate_device(); 890 yld->idev = input_dev = input_allocate_device();
881 if (!input_dev) 891 if (!input_dev)
@@ -909,7 +919,8 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
909 pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress); 919 pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress);
910 ret = usb_maxpacket(udev, pipe, usb_pipeout(pipe)); 920 ret = usb_maxpacket(udev, pipe, usb_pipeout(pipe));
911 if (ret != USB_PKT_LEN) 921 if (ret != USB_PKT_LEN)
912 err("invalid payload size %d, expected %zd", ret, USB_PKT_LEN); 922 dev_err(&intf->dev, "invalid payload size %d, expected %zd\n",
923 ret, USB_PKT_LEN);
913 924
914 /* initialise irq urb */ 925 /* initialise irq urb */
915 usb_fill_int_urb(yld->urb_irq, udev, pipe, yld->irq_data, 926 usb_fill_int_urb(yld->urb_irq, udev, pipe, yld->irq_data,
diff --git a/drivers/input/mouse/appletouch.c b/drivers/input/mouse/appletouch.c
index 0acbc7d50d05..e42f1fa8cdc0 100644
--- a/drivers/input/mouse/appletouch.c
+++ b/drivers/input/mouse/appletouch.c
@@ -195,6 +195,7 @@ enum atp_status_bits {
195struct atp { 195struct atp {
196 char phys[64]; 196 char phys[64];
197 struct usb_device *udev; /* usb device */ 197 struct usb_device *udev; /* usb device */
198 struct usb_interface *intf; /* usb interface */
198 struct urb *urb; /* usb request block */ 199 struct urb *urb; /* usb request block */
199 u8 *data; /* transferred data */ 200 u8 *data; /* transferred data */
200 struct input_dev *input; /* input dev */ 201 struct input_dev *input; /* input dev */
@@ -253,8 +254,9 @@ MODULE_PARM_DESC(debug, "Activate debugging output");
253 * packets (Report ID 2). This code changes device mode, so it 254 * packets (Report ID 2). This code changes device mode, so it
254 * sends raw sensor reports (Report ID 5). 255 * sends raw sensor reports (Report ID 5).
255 */ 256 */
256static int atp_geyser_init(struct usb_device *udev) 257static int atp_geyser_init(struct atp *dev)
257{ 258{
259 struct usb_device *udev = dev->udev;
258 char *data; 260 char *data;
259 int size; 261 int size;
260 int i; 262 int i;
@@ -262,7 +264,7 @@ static int atp_geyser_init(struct usb_device *udev)
262 264
263 data = kmalloc(8, GFP_KERNEL); 265 data = kmalloc(8, GFP_KERNEL);
264 if (!data) { 266 if (!data) {
265 err("Out of memory"); 267 dev_err(&dev->intf->dev, "Out of memory\n");
266 return -ENOMEM; 268 return -ENOMEM;
267 } 269 }
268 270
@@ -277,7 +279,7 @@ static int atp_geyser_init(struct usb_device *udev)
277 for (i = 0; i < 8; i++) 279 for (i = 0; i < 8; i++)
278 dprintk("appletouch[%d]: %d\n", i, data[i]); 280 dprintk("appletouch[%d]: %d\n", i, data[i]);
279 281
280 err("Failed to read mode from device."); 282 dev_err(&dev->intf->dev, "Failed to read mode from device.\n");
281 ret = -EIO; 283 ret = -EIO;
282 goto out_free; 284 goto out_free;
283 } 285 }
@@ -296,7 +298,7 @@ static int atp_geyser_init(struct usb_device *udev)
296 for (i = 0; i < 8; i++) 298 for (i = 0; i < 8; i++)
297 dprintk("appletouch[%d]: %d\n", i, data[i]); 299 dprintk("appletouch[%d]: %d\n", i, data[i]);
298 300
299 err("Failed to request geyser raw mode"); 301 dev_err(&dev->intf->dev, "Failed to request geyser raw mode\n");
300 ret = -EIO; 302 ret = -EIO;
301 goto out_free; 303 goto out_free;
302 } 304 }
@@ -313,16 +315,16 @@ out_free:
313static void atp_reinit(struct work_struct *work) 315static void atp_reinit(struct work_struct *work)
314{ 316{
315 struct atp *dev = container_of(work, struct atp, work); 317 struct atp *dev = container_of(work, struct atp, work);
316 struct usb_device *udev = dev->udev;
317 int retval; 318 int retval;
318 319
319 dprintk("appletouch: putting appletouch to sleep (reinit)\n"); 320 dprintk("appletouch: putting appletouch to sleep (reinit)\n");
320 atp_geyser_init(udev); 321 atp_geyser_init(dev);
321 322
322 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); 323 retval = usb_submit_urb(dev->urb, GFP_ATOMIC);
323 if (retval) 324 if (retval)
324 err("atp_reinit: usb_submit_urb failed with error %d", 325 dev_err(&dev->intf->dev,
325 retval); 326 "atp_reinit: usb_submit_urb failed with error %d\n",
327 retval);
326} 328}
327 329
328static int atp_calculate_abs(int *xy_sensors, int nb_sensors, int fact, 330static int atp_calculate_abs(int *xy_sensors, int nb_sensors, int fact,
@@ -400,6 +402,7 @@ static inline void atp_report_fingers(struct input_dev *input, int fingers)
400static int atp_status_check(struct urb *urb) 402static int atp_status_check(struct urb *urb)
401{ 403{
402 struct atp *dev = urb->context; 404 struct atp *dev = urb->context;
405 struct usb_interface *intf = dev->intf;
403 406
404 switch (urb->status) { 407 switch (urb->status) {
405 case 0: 408 case 0:
@@ -407,8 +410,8 @@ static int atp_status_check(struct urb *urb)
407 break; 410 break;
408 case -EOVERFLOW: 411 case -EOVERFLOW:
409 if (!dev->overflow_warned) { 412 if (!dev->overflow_warned) {
410 printk(KERN_WARNING "appletouch: OVERFLOW with data " 413 dev_warn(&intf->dev,
411 "length %d, actual length is %d\n", 414 "appletouch: OVERFLOW with data length %d, actual length is %d\n",
412 dev->info->datalen, dev->urb->actual_length); 415 dev->info->datalen, dev->urb->actual_length);
413 dev->overflow_warned = true; 416 dev->overflow_warned = true;
414 } 417 }
@@ -416,13 +419,15 @@ static int atp_status_check(struct urb *urb)
416 case -ENOENT: 419 case -ENOENT:
417 case -ESHUTDOWN: 420 case -ESHUTDOWN:
418 /* This urb is terminated, clean up */ 421 /* This urb is terminated, clean up */
419 dbg("atp_complete: urb shutting down with status: %d", 422 dev_dbg(&intf->dev,
420 urb->status); 423 "atp_complete: urb shutting down with status: %d\n",
424 urb->status);
421 return ATP_URB_STATUS_ERROR_FATAL; 425 return ATP_URB_STATUS_ERROR_FATAL;
422 426
423 default: 427 default:
424 dbg("atp_complete: nonzero urb status received: %d", 428 dev_dbg(&intf->dev,
425 urb->status); 429 "atp_complete: nonzero urb status received: %d\n",
430 urb->status);
426 return ATP_URB_STATUS_ERROR; 431 return ATP_URB_STATUS_ERROR;
427 } 432 }
428 433
@@ -445,7 +450,8 @@ static void atp_detect_size(struct atp *dev)
445 for (i = dev->info->xsensors; i < ATP_XSENSORS; i++) { 450 for (i = dev->info->xsensors; i < ATP_XSENSORS; i++) {
446 if (dev->xy_cur[i]) { 451 if (dev->xy_cur[i]) {
447 452
448 printk(KERN_INFO "appletouch: 17\" model detected.\n"); 453 dev_info(&dev->intf->dev,
454 "appletouch: 17\" model detected.\n");
449 455
450 input_set_abs_params(dev->input, ABS_X, 0, 456 input_set_abs_params(dev->input, ABS_X, 0,
451 (dev->info->xsensors_17 - 1) * 457 (dev->info->xsensors_17 - 1) *
@@ -588,8 +594,9 @@ static void atp_complete_geyser_1_2(struct urb *urb)
588 exit: 594 exit:
589 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); 595 retval = usb_submit_urb(dev->urb, GFP_ATOMIC);
590 if (retval) 596 if (retval)
591 err("atp_complete: usb_submit_urb failed with result %d", 597 dev_err(&dev->intf->dev,
592 retval); 598 "atp_complete: usb_submit_urb failed with result %d\n",
599 retval);
593} 600}
594 601
595/* Interrupt function for older touchpads: GEYSER3/GEYSER4 */ 602/* Interrupt function for older touchpads: GEYSER3/GEYSER4 */
@@ -722,8 +729,9 @@ static void atp_complete_geyser_3_4(struct urb *urb)
722 exit: 729 exit:
723 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); 730 retval = usb_submit_urb(dev->urb, GFP_ATOMIC);
724 if (retval) 731 if (retval)
725 err("atp_complete: usb_submit_urb failed with result %d", 732 dev_err(&dev->intf->dev,
726 retval); 733 "atp_complete: usb_submit_urb failed with result %d\n",
734 retval);
727} 735}
728 736
729static int atp_open(struct input_dev *input) 737static int atp_open(struct input_dev *input)
@@ -748,14 +756,12 @@ static void atp_close(struct input_dev *input)
748 756
749static int atp_handle_geyser(struct atp *dev) 757static int atp_handle_geyser(struct atp *dev)
750{ 758{
751 struct usb_device *udev = dev->udev;
752
753 if (dev->info != &fountain_info) { 759 if (dev->info != &fountain_info) {
754 /* switch to raw sensor mode */ 760 /* switch to raw sensor mode */
755 if (atp_geyser_init(udev)) 761 if (atp_geyser_init(dev))
756 return -EIO; 762 return -EIO;
757 763
758 printk(KERN_INFO "appletouch: Geyser mode initialized.\n"); 764 dev_info(&dev->intf->dev, "Geyser mode initialized.\n");
759 } 765 }
760 766
761 return 0; 767 return 0;
@@ -785,7 +791,7 @@ static int atp_probe(struct usb_interface *iface,
785 } 791 }
786 } 792 }
787 if (!int_in_endpointAddr) { 793 if (!int_in_endpointAddr) {
788 err("Could not find int-in endpoint"); 794 dev_err(&iface->dev, "Could not find int-in endpoint\n");
789 return -EIO; 795 return -EIO;
790 } 796 }
791 797
@@ -793,11 +799,12 @@ static int atp_probe(struct usb_interface *iface,
793 dev = kzalloc(sizeof(struct atp), GFP_KERNEL); 799 dev = kzalloc(sizeof(struct atp), GFP_KERNEL);
794 input_dev = input_allocate_device(); 800 input_dev = input_allocate_device();
795 if (!dev || !input_dev) { 801 if (!dev || !input_dev) {
796 err("Out of memory"); 802 dev_err(&iface->dev, "Out of memory\n");
797 goto err_free_devs; 803 goto err_free_devs;
798 } 804 }
799 805
800 dev->udev = udev; 806 dev->udev = udev;
807 dev->intf = iface;
801 dev->input = input_dev; 808 dev->input = input_dev;
802 dev->info = info; 809 dev->info = info;
803 dev->overflow_warned = false; 810 dev->overflow_warned = false;
@@ -886,7 +893,7 @@ static void atp_disconnect(struct usb_interface *iface)
886 usb_free_urb(dev->urb); 893 usb_free_urb(dev->urb);
887 kfree(dev); 894 kfree(dev);
888 } 895 }
889 printk(KERN_INFO "input: appletouch disconnected\n"); 896 dev_info(&iface->dev, "input: appletouch disconnected\n");
890} 897}
891 898
892static int atp_recover(struct atp *dev) 899static int atp_recover(struct atp *dev)
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
index f9e2758b9f46..2cf681d98c0d 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
@@ -584,7 +584,7 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on)
584 int retval = 0, size; 584 int retval = 0, size;
585 585
586 if (!data) { 586 if (!data) {
587 err("bcm5974: out of memory"); 587 dev_err(&dev->intf->dev, "out of memory\n");
588 retval = -ENOMEM; 588 retval = -ENOMEM;
589 goto out; 589 goto out;
590 } 590 }
@@ -597,7 +597,7 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on)
597 BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000); 597 BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000);
598 598
599 if (size != 8) { 599 if (size != 8) {
600 err("bcm5974: could not read from device"); 600 dev_err(&dev->intf->dev, "could not read from device\n");
601 retval = -EIO; 601 retval = -EIO;
602 goto out; 602 goto out;
603 } 603 }
@@ -615,7 +615,7 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on)
615 BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000); 615 BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000);
616 616
617 if (size != 8) { 617 if (size != 8) {
618 err("bcm5974: could not write to device"); 618 dev_err(&dev->intf->dev, "could not write to device\n");
619 retval = -EIO; 619 retval = -EIO;
620 goto out; 620 goto out;
621 } 621 }
@@ -631,6 +631,7 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on)
631static void bcm5974_irq_button(struct urb *urb) 631static void bcm5974_irq_button(struct urb *urb)
632{ 632{
633 struct bcm5974 *dev = urb->context; 633 struct bcm5974 *dev = urb->context;
634 struct usb_interface *intf = dev->intf;
634 int error; 635 int error;
635 636
636 switch (urb->status) { 637 switch (urb->status) {
@@ -640,10 +641,11 @@ static void bcm5974_irq_button(struct urb *urb)
640 case -ECONNRESET: 641 case -ECONNRESET:
641 case -ENOENT: 642 case -ENOENT:
642 case -ESHUTDOWN: 643 case -ESHUTDOWN:
643 dbg("bcm5974: button urb shutting down: %d", urb->status); 644 dev_dbg(&intf->dev, "button urb shutting down: %d\n",
645 urb->status);
644 return; 646 return;
645 default: 647 default:
646 dbg("bcm5974: button urb status: %d", urb->status); 648 dev_dbg(&intf->dev, "button urb status: %d\n", urb->status);
647 goto exit; 649 goto exit;
648 } 650 }
649 651
@@ -654,12 +656,13 @@ static void bcm5974_irq_button(struct urb *urb)
654exit: 656exit:
655 error = usb_submit_urb(dev->bt_urb, GFP_ATOMIC); 657 error = usb_submit_urb(dev->bt_urb, GFP_ATOMIC);
656 if (error) 658 if (error)
657 err("bcm5974: button urb failed: %d", error); 659 dev_err(&intf->dev, "button urb failed: %d\n", error);
658} 660}
659 661
660static void bcm5974_irq_trackpad(struct urb *urb) 662static void bcm5974_irq_trackpad(struct urb *urb)
661{ 663{
662 struct bcm5974 *dev = urb->context; 664 struct bcm5974 *dev = urb->context;
665 struct usb_interface *intf = dev->intf;
663 int error; 666 int error;
664 667
665 switch (urb->status) { 668 switch (urb->status) {
@@ -669,10 +672,11 @@ static void bcm5974_irq_trackpad(struct urb *urb)
669 case -ECONNRESET: 672 case -ECONNRESET:
670 case -ENOENT: 673 case -ENOENT:
671 case -ESHUTDOWN: 674 case -ESHUTDOWN:
672 dbg("bcm5974: trackpad urb shutting down: %d", urb->status); 675 dev_dbg(&intf->dev, "trackpad urb shutting down: %d\n",
676 urb->status);
673 return; 677 return;
674 default: 678 default:
675 dbg("bcm5974: trackpad urb status: %d", urb->status); 679 dev_dbg(&intf->dev, "trackpad urb status: %d\n", urb->status);
676 goto exit; 680 goto exit;
677 } 681 }
678 682
@@ -687,7 +691,7 @@ static void bcm5974_irq_trackpad(struct urb *urb)
687exit: 691exit:
688 error = usb_submit_urb(dev->tp_urb, GFP_ATOMIC); 692 error = usb_submit_urb(dev->tp_urb, GFP_ATOMIC);
689 if (error) 693 if (error)
690 err("bcm5974: trackpad urb failed: %d", error); 694 dev_err(&intf->dev, "trackpad urb failed: %d\n", error);
691} 695}
692 696
693/* 697/*
@@ -833,7 +837,7 @@ static int bcm5974_probe(struct usb_interface *iface,
833 dev = kzalloc(sizeof(struct bcm5974), GFP_KERNEL); 837 dev = kzalloc(sizeof(struct bcm5974), GFP_KERNEL);
834 input_dev = input_allocate_device(); 838 input_dev = input_allocate_device();
835 if (!dev || !input_dev) { 839 if (!dev || !input_dev) {
836 err("bcm5974: out of memory"); 840 dev_err(&iface->dev, "out of memory\n");
837 goto err_free_devs; 841 goto err_free_devs;
838 } 842 }
839 843
diff --git a/drivers/input/tablet/acecad.c b/drivers/input/tablet/acecad.c
index f8b0b1df9138..e062ec899ca1 100644
--- a/drivers/input/tablet/acecad.c
+++ b/drivers/input/tablet/acecad.c
@@ -51,6 +51,7 @@ struct usb_acecad {
51 char name[128]; 51 char name[128];
52 char phys[64]; 52 char phys[64];
53 struct usb_device *usbdev; 53 struct usb_device *usbdev;
54 struct usb_interface *intf;
54 struct input_dev *input; 55 struct input_dev *input;
55 struct urb *irq; 56 struct urb *irq;
56 57
@@ -63,6 +64,7 @@ static void usb_acecad_irq(struct urb *urb)
63 struct usb_acecad *acecad = urb->context; 64 struct usb_acecad *acecad = urb->context;
64 unsigned char *data = acecad->data; 65 unsigned char *data = acecad->data;
65 struct input_dev *dev = acecad->input; 66 struct input_dev *dev = acecad->input;
67 struct usb_interface *intf = acecad->intf;
66 int prox, status; 68 int prox, status;
67 69
68 switch (urb->status) { 70 switch (urb->status) {
@@ -73,10 +75,12 @@ static void usb_acecad_irq(struct urb *urb)
73 case -ENOENT: 75 case -ENOENT:
74 case -ESHUTDOWN: 76 case -ESHUTDOWN:
75 /* this urb is terminated, clean up */ 77 /* this urb is terminated, clean up */
76 dbg("%s - urb shutting down with status: %d", __func__, urb->status); 78 dev_dbg(&intf->dev, "%s - urb shutting down with status: %d\n",
79 __func__, urb->status);
77 return; 80 return;
78 default: 81 default:
79 dbg("%s - nonzero urb status received: %d", __func__, urb->status); 82 dev_dbg(&intf->dev, "%s - nonzero urb status received: %d\n",
83 __func__, urb->status);
80 goto resubmit; 84 goto resubmit;
81 } 85 }
82 86
@@ -105,8 +109,10 @@ static void usb_acecad_irq(struct urb *urb)
105resubmit: 109resubmit:
106 status = usb_submit_urb(urb, GFP_ATOMIC); 110 status = usb_submit_urb(urb, GFP_ATOMIC);
107 if (status) 111 if (status)
108 err("can't resubmit intr, %s-%s/input0, status %d", 112 dev_err(&intf->dev,
109 acecad->usbdev->bus->bus_name, acecad->usbdev->devpath, status); 113 "can't resubmit intr, %s-%s/input0, status %d\n",
114 acecad->usbdev->bus->bus_name,
115 acecad->usbdev->devpath, status);
110} 116}
111 117
112static int usb_acecad_open(struct input_dev *dev) 118static int usb_acecad_open(struct input_dev *dev)
@@ -168,6 +174,7 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
168 } 174 }
169 175
170 acecad->usbdev = dev; 176 acecad->usbdev = dev;
177 acecad->intf = intf;
171 acecad->input = input_dev; 178 acecad->input = input_dev;
172 179
173 if (dev->manufacturer) 180 if (dev->manufacturer)
diff --git a/drivers/input/tablet/aiptek.c b/drivers/input/tablet/aiptek.c
index 205d16aab441..755a39e4c9e9 100644
--- a/drivers/input/tablet/aiptek.c
+++ b/drivers/input/tablet/aiptek.c
@@ -309,6 +309,7 @@ struct aiptek_settings {
309struct aiptek { 309struct aiptek {
310 struct input_dev *inputdev; /* input device struct */ 310 struct input_dev *inputdev; /* input device struct */
311 struct usb_device *usbdev; /* usb device struct */ 311 struct usb_device *usbdev; /* usb device struct */
312 struct usb_interface *intf; /* usb interface struct */
312 struct urb *urb; /* urb for incoming reports */ 313 struct urb *urb; /* urb for incoming reports */
313 dma_addr_t data_dma; /* our dma stuffage */ 314 dma_addr_t data_dma; /* our dma stuffage */
314 struct aiptek_features features; /* tablet's array of features */ 315 struct aiptek_features features; /* tablet's array of features */
@@ -435,6 +436,7 @@ static void aiptek_irq(struct urb *urb)
435 struct aiptek *aiptek = urb->context; 436 struct aiptek *aiptek = urb->context;
436 unsigned char *data = aiptek->data; 437 unsigned char *data = aiptek->data;
437 struct input_dev *inputdev = aiptek->inputdev; 438 struct input_dev *inputdev = aiptek->inputdev;
439 struct usb_interface *intf = aiptek->intf;
438 int jitterable = 0; 440 int jitterable = 0;
439 int retval, macro, x, y, z, left, right, middle, p, dv, tip, bs, pck; 441 int retval, macro, x, y, z, left, right, middle, p, dv, tip, bs, pck;
440 442
@@ -447,13 +449,13 @@ static void aiptek_irq(struct urb *urb)
447 case -ENOENT: 449 case -ENOENT:
448 case -ESHUTDOWN: 450 case -ESHUTDOWN:
449 /* This urb is terminated, clean up */ 451 /* This urb is terminated, clean up */
450 dbg("%s - urb shutting down with status: %d", 452 dev_dbg(&intf->dev, "%s - urb shutting down with status: %d\n",
451 __func__, urb->status); 453 __func__, urb->status);
452 return; 454 return;
453 455
454 default: 456 default:
455 dbg("%s - nonzero urb status received: %d", 457 dev_dbg(&intf->dev, "%s - nonzero urb status received: %d\n",
456 __func__, urb->status); 458 __func__, urb->status);
457 goto exit; 459 goto exit;
458 } 460 }
459 461
@@ -785,7 +787,7 @@ static void aiptek_irq(struct urb *urb)
785 1 | AIPTEK_REPORT_TOOL_UNKNOWN); 787 1 | AIPTEK_REPORT_TOOL_UNKNOWN);
786 input_sync(inputdev); 788 input_sync(inputdev);
787 } else { 789 } else {
788 dbg("Unknown report %d", data[0]); 790 dev_dbg(&intf->dev, "Unknown report %d\n", data[0]);
789 } 791 }
790 792
791 /* Jitter may occur when the user presses a button on the stlyus 793 /* Jitter may occur when the user presses a button on the stlyus
@@ -811,8 +813,9 @@ static void aiptek_irq(struct urb *urb)
811exit: 813exit:
812 retval = usb_submit_urb(urb, GFP_ATOMIC); 814 retval = usb_submit_urb(urb, GFP_ATOMIC);
813 if (retval != 0) { 815 if (retval != 0) {
814 err("%s - usb_submit_urb failed with result %d", 816 dev_err(&intf->dev,
815 __func__, retval); 817 "%s - usb_submit_urb failed with result %d\n",
818 __func__, retval);
816 } 819 }
817} 820}
818 821
@@ -912,8 +915,9 @@ aiptek_command(struct aiptek *aiptek, unsigned char command, unsigned char data)
912 915
913 if ((ret = 916 if ((ret =
914 aiptek_set_report(aiptek, 3, 2, buf, sizeof_buf)) != sizeof_buf) { 917 aiptek_set_report(aiptek, 3, 2, buf, sizeof_buf)) != sizeof_buf) {
915 dbg("aiptek_program: failed, tried to send: 0x%02x 0x%02x", 918 dev_dbg(&aiptek->intf->dev,
916 command, data); 919 "aiptek_program: failed, tried to send: 0x%02x 0x%02x\n",
920 command, data);
917 } 921 }
918 kfree(buf); 922 kfree(buf);
919 return ret < 0 ? ret : 0; 923 return ret < 0 ? ret : 0;
@@ -947,8 +951,9 @@ aiptek_query(struct aiptek *aiptek, unsigned char command, unsigned char data)
947 951
948 if ((ret = 952 if ((ret =
949 aiptek_get_report(aiptek, 3, 2, buf, sizeof_buf)) != sizeof_buf) { 953 aiptek_get_report(aiptek, 3, 2, buf, sizeof_buf)) != sizeof_buf) {
950 dbg("aiptek_query failed: returned 0x%02x 0x%02x 0x%02x", 954 dev_dbg(&aiptek->intf->dev,
951 buf[0], buf[1], buf[2]); 955 "aiptek_query failed: returned 0x%02x 0x%02x 0x%02x\n",
956 buf[0], buf[1], buf[2]);
952 ret = -EIO; 957 ret = -EIO;
953 } else { 958 } else {
954 ret = get_unaligned_le16(buf + 1); 959 ret = get_unaligned_le16(buf + 1);
@@ -1726,6 +1731,7 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
1726 1731
1727 aiptek->inputdev = inputdev; 1732 aiptek->inputdev = inputdev;
1728 aiptek->usbdev = usbdev; 1733 aiptek->usbdev = usbdev;
1734 aiptek->intf = intf;
1729 aiptek->ifnum = intf->altsetting[0].desc.bInterfaceNumber; 1735 aiptek->ifnum = intf->altsetting[0].desc.bInterfaceNumber;
1730 aiptek->inDelay = 0; 1736 aiptek->inDelay = 0;
1731 aiptek->endDelay = 0; 1737 aiptek->endDelay = 0;
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c
index 89a297801dce..29e01ab6859f 100644
--- a/drivers/input/tablet/gtco.c
+++ b/drivers/input/tablet/gtco.c
@@ -2,8 +2,6 @@
2 2
3GTCO digitizer USB driver 3GTCO digitizer USB driver
4 4
5Use the err() and dbg() macros from usb.h for system logging
6
7TO CHECK: Is pressure done right on report 5? 5TO CHECK: Is pressure done right on report 5?
8 6
9Copyright (C) 2006 GTCO CalComp 7Copyright (C) 2006 GTCO CalComp
@@ -108,6 +106,7 @@ struct gtco {
108 106
109 struct input_dev *inputdevice; /* input device struct pointer */ 107 struct input_dev *inputdevice; /* input device struct pointer */
110 struct usb_device *usbdev; /* the usb device for this device */ 108 struct usb_device *usbdev; /* the usb device for this device */
109 struct usb_interface *intf; /* the usb interface for this device */
111 struct urb *urbinfo; /* urb for incoming reports */ 110 struct urb *urbinfo; /* urb for incoming reports */
112 dma_addr_t buf_dma; /* dma addr of the data buffer*/ 111 dma_addr_t buf_dma; /* dma addr of the data buffer*/
113 unsigned char * buffer; /* databuffer for reports */ 112 unsigned char * buffer; /* databuffer for reports */
@@ -202,6 +201,7 @@ struct hid_descriptor
202static void parse_hid_report_descriptor(struct gtco *device, char * report, 201static void parse_hid_report_descriptor(struct gtco *device, char * report,
203 int length) 202 int length)
204{ 203{
204 struct device *ddev = &device->intf->dev;
205 int x, i = 0; 205 int x, i = 0;
206 206
207 /* Tag primitive vars */ 207 /* Tag primitive vars */
@@ -228,7 +228,7 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
228 char indentstr[10] = ""; 228 char indentstr[10] = "";
229 229
230 230
231 dbg("======>>>>>>PARSE<<<<<<======"); 231 dev_dbg(ddev, "======>>>>>>PARSE<<<<<<======\n");
232 232
233 /* Walk this report and pull out the info we need */ 233 /* Walk this report and pull out the info we need */
234 while (i < length) { 234 while (i < length) {
@@ -277,11 +277,11 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
277 else if (data == 3) 277 else if (data == 3)
278 strcpy(globtype, "Var|Const"); 278 strcpy(globtype, "Var|Const");
279 279
280 dbg("::::: Saving Report: %d input #%d Max: 0x%X(%d) Min:0x%X(%d) of %d bits", 280 dev_dbg(ddev, "::::: Saving Report: %d input #%d Max: 0x%X(%d) Min:0x%X(%d) of %d bits\n",
281 globalval[TAG_GLOB_REPORT_ID], inputnum, 281 globalval[TAG_GLOB_REPORT_ID], inputnum,
282 globalval[TAG_GLOB_LOG_MAX], globalval[TAG_GLOB_LOG_MAX], 282 globalval[TAG_GLOB_LOG_MAX], globalval[TAG_GLOB_LOG_MAX],
283 globalval[TAG_GLOB_LOG_MIN], globalval[TAG_GLOB_LOG_MIN], 283 globalval[TAG_GLOB_LOG_MIN], globalval[TAG_GLOB_LOG_MIN],
284 globalval[TAG_GLOB_REPORT_SZ] * globalval[TAG_GLOB_REPORT_CNT]); 284 globalval[TAG_GLOB_REPORT_SZ] * globalval[TAG_GLOB_REPORT_CNT]);
285 285
286 286
287 /* 287 /*
@@ -292,7 +292,7 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
292 */ 292 */
293 switch (inputnum) { 293 switch (inputnum) {
294 case 0: /* X coord */ 294 case 0: /* X coord */
295 dbg("GER: X Usage: 0x%x", usage); 295 dev_dbg(ddev, "GER: X Usage: 0x%x\n", usage);
296 if (device->max_X == 0) { 296 if (device->max_X == 0) {
297 device->max_X = globalval[TAG_GLOB_LOG_MAX]; 297 device->max_X = globalval[TAG_GLOB_LOG_MAX];
298 device->min_X = globalval[TAG_GLOB_LOG_MIN]; 298 device->min_X = globalval[TAG_GLOB_LOG_MIN];
@@ -300,7 +300,7 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
300 break; 300 break;
301 301
302 case 1: /* Y coord */ 302 case 1: /* Y coord */
303 dbg("GER: Y Usage: 0x%x", usage); 303 dev_dbg(ddev, "GER: Y Usage: 0x%x\n", usage);
304 if (device->max_Y == 0) { 304 if (device->max_Y == 0) {
305 device->max_Y = globalval[TAG_GLOB_LOG_MAX]; 305 device->max_Y = globalval[TAG_GLOB_LOG_MAX];
306 device->min_Y = globalval[TAG_GLOB_LOG_MIN]; 306 device->min_Y = globalval[TAG_GLOB_LOG_MIN];
@@ -350,10 +350,10 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
350 maintype = 'S'; 350 maintype = 'S';
351 351
352 if (data == 0) { 352 if (data == 0) {
353 dbg("======>>>>>> Physical"); 353 dev_dbg(ddev, "======>>>>>> Physical\n");
354 strcpy(globtype, "Physical"); 354 strcpy(globtype, "Physical");
355 } else 355 } else
356 dbg("======>>>>>>"); 356 dev_dbg(ddev, "======>>>>>>\n");
357 357
358 /* Indent the debug output */ 358 /* Indent the debug output */
359 indent++; 359 indent++;
@@ -368,7 +368,7 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
368 break; 368 break;
369 369
370 case TAG_MAIN_COL_END: 370 case TAG_MAIN_COL_END:
371 dbg("<<<<<<======"); 371 dev_dbg(ddev, "<<<<<<======\n");
372 maintype = 'E'; 372 maintype = 'E';
373 indent--; 373 indent--;
374 for (x = 0; x < indent; x++) 374 for (x = 0; x < indent; x++)
@@ -384,18 +384,18 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
384 384
385 switch (size) { 385 switch (size) {
386 case 1: 386 case 1:
387 dbg("%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x", 387 dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
388 indentstr, tag, maintype, size, globtype, data); 388 indentstr, tag, maintype, size, globtype, data);
389 break; 389 break;
390 390
391 case 2: 391 case 2:
392 dbg("%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x", 392 dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
393 indentstr, tag, maintype, size, globtype, data16); 393 indentstr, tag, maintype, size, globtype, data16);
394 break; 394 break;
395 395
396 case 4: 396 case 4:
397 dbg("%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x", 397 dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
398 indentstr, tag, maintype, size, globtype, data32); 398 indentstr, tag, maintype, size, globtype, data32);
399 break; 399 break;
400 } 400 }
401 break; 401 break;
@@ -465,26 +465,26 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
465 if (tag < TAG_GLOB_MAX) { 465 if (tag < TAG_GLOB_MAX) {
466 switch (size) { 466 switch (size) {
467 case 1: 467 case 1:
468 dbg("%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x", 468 dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
469 indentstr, globtype, tag, size, data); 469 indentstr, globtype, tag, size, data);
470 globalval[tag] = data; 470 globalval[tag] = data;
471 break; 471 break;
472 472
473 case 2: 473 case 2:
474 dbg("%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x", 474 dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
475 indentstr, globtype, tag, size, data16); 475 indentstr, globtype, tag, size, data16);
476 globalval[tag] = data16; 476 globalval[tag] = data16;
477 break; 477 break;
478 478
479 case 4: 479 case 4:
480 dbg("%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x", 480 dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
481 indentstr, globtype, tag, size, data32); 481 indentstr, globtype, tag, size, data32);
482 globalval[tag] = data32; 482 globalval[tag] = data32;
483 break; 483 break;
484 } 484 }
485 } else { 485 } else {
486 dbg("%sGLOBALTAG: ILLEGAL TAG:%d SIZE: %d ", 486 dev_dbg(ddev, "%sGLOBALTAG: ILLEGAL TAG:%d SIZE: %d\n",
487 indentstr, tag, size); 487 indentstr, tag, size);
488 } 488 }
489 break; 489 break;
490 490
@@ -511,18 +511,18 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
511 511
512 switch (size) { 512 switch (size) {
513 case 1: 513 case 1:
514 dbg("%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x", 514 dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
515 indentstr, tag, globtype, size, data); 515 indentstr, tag, globtype, size, data);
516 break; 516 break;
517 517
518 case 2: 518 case 2:
519 dbg("%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x", 519 dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
520 indentstr, tag, globtype, size, data16); 520 indentstr, tag, globtype, size, data16);
521 break; 521 break;
522 522
523 case 4: 523 case 4:
524 dbg("%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x", 524 dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
525 indentstr, tag, globtype, size, data32); 525 indentstr, tag, globtype, size, data32);
526 break; 526 break;
527 } 527 }
528 528
@@ -714,8 +714,9 @@ static void gtco_urb_callback(struct urb *urbinfo)
714 * the rest as 0 714 * the rest as 0
715 */ 715 */
716 val = device->buffer[5] & MASK_BUTTON; 716 val = device->buffer[5] & MASK_BUTTON;
717 dbg("======>>>>>>REPORT 1: val 0x%X(%d)", 717 dev_dbg(&device->intf->dev,
718 val, val); 718 "======>>>>>>REPORT 1: val 0x%X(%d)\n",
719 val, val);
719 720
720 /* 721 /*
721 * We don't apply any meaning to the button 722 * We don't apply any meaning to the button
@@ -808,7 +809,8 @@ static void gtco_urb_callback(struct urb *urbinfo)
808 resubmit: 809 resubmit:
809 rc = usb_submit_urb(urbinfo, GFP_ATOMIC); 810 rc = usb_submit_urb(urbinfo, GFP_ATOMIC);
810 if (rc != 0) 811 if (rc != 0)
811 err("usb_submit_urb failed rc=0x%x", rc); 812 dev_err(&device->intf->dev,
813 "usb_submit_urb failed rc=0x%x\n", rc);
812} 814}
813 815
814/* 816/*
@@ -838,7 +840,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
838 gtco = kzalloc(sizeof(struct gtco), GFP_KERNEL); 840 gtco = kzalloc(sizeof(struct gtco), GFP_KERNEL);
839 input_dev = input_allocate_device(); 841 input_dev = input_allocate_device();
840 if (!gtco || !input_dev) { 842 if (!gtco || !input_dev) {
841 err("No more memory"); 843 dev_err(&usbinterface->dev, "No more memory\n");
842 error = -ENOMEM; 844 error = -ENOMEM;
843 goto err_free_devs; 845 goto err_free_devs;
844 } 846 }
@@ -848,12 +850,13 @@ static int gtco_probe(struct usb_interface *usbinterface,
848 850
849 /* Save interface information */ 851 /* Save interface information */
850 gtco->usbdev = usb_get_dev(interface_to_usbdev(usbinterface)); 852 gtco->usbdev = usb_get_dev(interface_to_usbdev(usbinterface));
853 gtco->intf = usbinterface;
851 854
852 /* Allocate some data for incoming reports */ 855 /* Allocate some data for incoming reports */
853 gtco->buffer = usb_alloc_coherent(gtco->usbdev, REPORT_MAX_SIZE, 856 gtco->buffer = usb_alloc_coherent(gtco->usbdev, REPORT_MAX_SIZE,
854 GFP_KERNEL, &gtco->buf_dma); 857 GFP_KERNEL, &gtco->buf_dma);
855 if (!gtco->buffer) { 858 if (!gtco->buffer) {
856 err("No more memory for us buffers"); 859 dev_err(&usbinterface->dev, "No more memory for us buffers\n");
857 error = -ENOMEM; 860 error = -ENOMEM;
858 goto err_free_devs; 861 goto err_free_devs;
859 } 862 }
@@ -861,7 +864,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
861 /* Allocate URB for reports */ 864 /* Allocate URB for reports */
862 gtco->urbinfo = usb_alloc_urb(0, GFP_KERNEL); 865 gtco->urbinfo = usb_alloc_urb(0, GFP_KERNEL);
863 if (!gtco->urbinfo) { 866 if (!gtco->urbinfo) {
864 err("Failed to allocate URB"); 867 dev_err(&usbinterface->dev, "Failed to allocate URB\n");
865 error = -ENOMEM; 868 error = -ENOMEM;
866 goto err_free_buf; 869 goto err_free_buf;
867 } 870 }
@@ -873,14 +876,14 @@ static int gtco_probe(struct usb_interface *usbinterface,
873 endpoint = &usbinterface->altsetting[0].endpoint[0].desc; 876 endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
874 877
875 /* Some debug */ 878 /* Some debug */
876 dbg("gtco # interfaces: %d", usbinterface->num_altsetting); 879 dev_dbg(&usbinterface->dev, "gtco # interfaces: %d\n", usbinterface->num_altsetting);
877 dbg("num endpoints: %d", usbinterface->cur_altsetting->desc.bNumEndpoints); 880 dev_dbg(&usbinterface->dev, "num endpoints: %d\n", usbinterface->cur_altsetting->desc.bNumEndpoints);
878 dbg("interface class: %d", usbinterface->cur_altsetting->desc.bInterfaceClass); 881 dev_dbg(&usbinterface->dev, "interface class: %d\n", usbinterface->cur_altsetting->desc.bInterfaceClass);
879 dbg("endpoint: attribute:0x%x type:0x%x", endpoint->bmAttributes, endpoint->bDescriptorType); 882 dev_dbg(&usbinterface->dev, "endpoint: attribute:0x%x type:0x%x\n", endpoint->bmAttributes, endpoint->bDescriptorType);
880 if (usb_endpoint_xfer_int(endpoint)) 883 if (usb_endpoint_xfer_int(endpoint))
881 dbg("endpoint: we have interrupt endpoint\n"); 884 dev_dbg(&usbinterface->dev, "endpoint: we have interrupt endpoint\n");
882 885
883 dbg("endpoint extra len:%d ", usbinterface->altsetting[0].extralen); 886 dev_dbg(&usbinterface->dev, "endpoint extra len:%d\n", usbinterface->altsetting[0].extralen);
884 887
885 /* 888 /*
886 * Find the HID descriptor so we can find out the size of the 889 * Find the HID descriptor so we can find out the size of the
@@ -888,17 +891,19 @@ static int gtco_probe(struct usb_interface *usbinterface,
888 */ 891 */
889 if (usb_get_extra_descriptor(usbinterface->cur_altsetting, 892 if (usb_get_extra_descriptor(usbinterface->cur_altsetting,
890 HID_DEVICE_TYPE, &hid_desc) != 0){ 893 HID_DEVICE_TYPE, &hid_desc) != 0){
891 err("Can't retrieve exta USB descriptor to get hid report descriptor length"); 894 dev_err(&usbinterface->dev,
895 "Can't retrieve exta USB descriptor to get hid report descriptor length\n");
892 error = -EIO; 896 error = -EIO;
893 goto err_free_urb; 897 goto err_free_urb;
894 } 898 }
895 899
896 dbg("Extra descriptor success: type:%d len:%d", 900 dev_dbg(&usbinterface->dev,
897 hid_desc->bDescriptorType, hid_desc->wDescriptorLength); 901 "Extra descriptor success: type:%d len:%d\n",
902 hid_desc->bDescriptorType, hid_desc->wDescriptorLength);
898 903
899 report = kzalloc(le16_to_cpu(hid_desc->wDescriptorLength), GFP_KERNEL); 904 report = kzalloc(le16_to_cpu(hid_desc->wDescriptorLength), GFP_KERNEL);
900 if (!report) { 905 if (!report) {
901 err("No more memory for report"); 906 dev_err(&usbinterface->dev, "No more memory for report\n");
902 error = -ENOMEM; 907 error = -ENOMEM;
903 goto err_free_urb; 908 goto err_free_urb;
904 } 909 }
@@ -915,7 +920,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
915 le16_to_cpu(hid_desc->wDescriptorLength), 920 le16_to_cpu(hid_desc->wDescriptorLength),
916 5000); /* 5 secs */ 921 5000); /* 5 secs */
917 922
918 dbg("usb_control_msg result: %d", result); 923 dev_dbg(&usbinterface->dev, "usb_control_msg result: %d\n", result);
919 if (result == le16_to_cpu(hid_desc->wDescriptorLength)) { 924 if (result == le16_to_cpu(hid_desc->wDescriptorLength)) {
920 parse_hid_report_descriptor(gtco, report, result); 925 parse_hid_report_descriptor(gtco, report, result);
921 break; 926 break;
@@ -926,8 +931,9 @@ static int gtco_probe(struct usb_interface *usbinterface,
926 931
927 /* If we didn't get the report, fail */ 932 /* If we didn't get the report, fail */
928 if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { 933 if (result != le16_to_cpu(hid_desc->wDescriptorLength)) {
929 err("Failed to get HID Report Descriptor of size: %d", 934 dev_err(&usbinterface->dev,
930 hid_desc->wDescriptorLength); 935 "Failed to get HID Report Descriptor of size: %d\n",
936 hid_desc->wDescriptorLength);
931 error = -EIO; 937 error = -EIO;
932 goto err_free_urb; 938 goto err_free_urb;
933 } 939 }
diff --git a/drivers/input/tablet/kbtab.c b/drivers/input/tablet/kbtab.c
index 85a5b40333ac..3fba74b9b602 100644
--- a/drivers/input/tablet/kbtab.c
+++ b/drivers/input/tablet/kbtab.c
@@ -33,6 +33,7 @@ struct kbtab {
33 dma_addr_t data_dma; 33 dma_addr_t data_dma;
34 struct input_dev *dev; 34 struct input_dev *dev;
35 struct usb_device *usbdev; 35 struct usb_device *usbdev;
36 struct usb_interface *intf;
36 struct urb *irq; 37 struct urb *irq;
37 char phys[32]; 38 char phys[32];
38}; 39};
@@ -53,10 +54,14 @@ static void kbtab_irq(struct urb *urb)
53 case -ENOENT: 54 case -ENOENT:
54 case -ESHUTDOWN: 55 case -ESHUTDOWN:
55 /* this urb is terminated, clean up */ 56 /* this urb is terminated, clean up */
56 dbg("%s - urb shutting down with status: %d", __func__, urb->status); 57 dev_dbg(&kbtab->intf->dev,
58 "%s - urb shutting down with status: %d\n",
59 __func__, urb->status);
57 return; 60 return;
58 default: 61 default:
59 dbg("%s - nonzero urb status received: %d", __func__, urb->status); 62 dev_dbg(&kbtab->intf->dev,
63 "%s - nonzero urb status received: %d\n",
64 __func__, urb->status);
60 goto exit; 65 goto exit;
61 } 66 }
62 67
@@ -80,8 +85,9 @@ static void kbtab_irq(struct urb *urb)
80 exit: 85 exit:
81 retval = usb_submit_urb(urb, GFP_ATOMIC); 86 retval = usb_submit_urb(urb, GFP_ATOMIC);
82 if (retval) 87 if (retval)
83 err("%s - usb_submit_urb failed with result %d", 88 dev_err(&kbtab->intf->dev,
84 __func__, retval); 89 "%s - usb_submit_urb failed with result %d\n",
90 __func__, retval);
85} 91}
86 92
87static struct usb_device_id kbtab_ids[] = { 93static struct usb_device_id kbtab_ids[] = {
@@ -131,6 +137,7 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
131 goto fail2; 137 goto fail2;
132 138
133 kbtab->usbdev = dev; 139 kbtab->usbdev = dev;
140 kbtab->intf = intf;
134 kbtab->dev = input_dev; 141 kbtab->dev = input_dev;
135 142
136 usb_make_path(dev, kbtab->phys, sizeof(kbtab->phys)); 143 usb_make_path(dev, kbtab->phys, sizeof(kbtab->phys));
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
index 0d269212931e..79a0509882d4 100644
--- a/drivers/input/tablet/wacom_sys.c
+++ b/drivers/input/tablet/wacom_sys.c
@@ -99,6 +99,7 @@ static int wacom_set_report(struct usb_interface *intf, u8 type, u8 id,
99static void wacom_sys_irq(struct urb *urb) 99static void wacom_sys_irq(struct urb *urb)
100{ 100{
101 struct wacom *wacom = urb->context; 101 struct wacom *wacom = urb->context;
102 struct device *dev = &wacom->intf->dev;
102 int retval; 103 int retval;
103 104
104 switch (urb->status) { 105 switch (urb->status) {
@@ -109,10 +110,12 @@ static void wacom_sys_irq(struct urb *urb)
109 case -ENOENT: 110 case -ENOENT:
110 case -ESHUTDOWN: 111 case -ESHUTDOWN:
111 /* this urb is terminated, clean up */ 112 /* this urb is terminated, clean up */
112 dbg("%s - urb shutting down with status: %d", __func__, urb->status); 113 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
114 __func__, urb->status);
113 return; 115 return;
114 default: 116 default:
115 dbg("%s - nonzero urb status received: %d", __func__, urb->status); 117 dev_dbg(dev, "%s - nonzero urb status received: %d\n",
118 __func__, urb->status);
116 goto exit; 119 goto exit;
117 } 120 }
118 121
@@ -122,8 +125,8 @@ static void wacom_sys_irq(struct urb *urb)
122 usb_mark_last_busy(wacom->usbdev); 125 usb_mark_last_busy(wacom->usbdev);
123 retval = usb_submit_urb(urb, GFP_ATOMIC); 126 retval = usb_submit_urb(urb, GFP_ATOMIC);
124 if (retval) 127 if (retval)
125 err ("%s - usb_submit_urb failed with result %d", 128 dev_err(dev, "%s - usb_submit_urb failed with result %d\n",
126 __func__, retval); 129 __func__, retval);
127} 130}
128 131
129static int wacom_open(struct input_dev *dev) 132static int wacom_open(struct input_dev *dev)
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
index cecd35c8f0b3..b327790e9a0c 100644
--- a/drivers/input/tablet/wacom_wac.c
+++ b/drivers/input/tablet/wacom_wac.c
@@ -76,7 +76,8 @@ static int wacom_pl_irq(struct wacom_wac *wacom)
76 int prox, pressure; 76 int prox, pressure;
77 77
78 if (data[0] != WACOM_REPORT_PENABLED) { 78 if (data[0] != WACOM_REPORT_PENABLED) {
79 dbg("wacom_pl_irq: received unknown report #%d", data[0]); 79 dev_dbg(&input->dev,
80 "wacom_pl_irq: received unknown report #%d\n", data[0]);
80 return 0; 81 return 0;
81 } 82 }
82 83
@@ -175,7 +176,7 @@ static int wacom_dtu_irq(struct wacom_wac *wacom)
175 struct input_dev *input = wacom->input; 176 struct input_dev *input = wacom->input;
176 int prox = data[1] & 0x20, pressure; 177 int prox = data[1] & 0x20, pressure;
177 178
178 dbg("wacom_dtu_irq: received report #%d", data[0]); 179 dev_dbg(&input->dev, "wacom_dtu_irq: received report #%d\n", data[0]);
179 180
180 if (prox) { 181 if (prox) {
181 /* Going into proximity select tool */ 182 /* Going into proximity select tool */
@@ -211,7 +212,9 @@ static int wacom_graphire_irq(struct wacom_wac *wacom)
211 int retval = 0; 212 int retval = 0;
212 213
213 if (data[0] != WACOM_REPORT_PENABLED) { 214 if (data[0] != WACOM_REPORT_PENABLED) {
214 dbg("wacom_graphire_irq: received unknown report #%d", data[0]); 215 dev_dbg(&input->dev,
216 "wacom_graphire_irq: received unknown report #%d\n",
217 data[0]);
215 goto exit; 218 goto exit;
216 } 219 }
217 220
@@ -484,7 +487,9 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
484 487
485 if (data[0] != WACOM_REPORT_PENABLED && data[0] != WACOM_REPORT_INTUOSREAD 488 if (data[0] != WACOM_REPORT_PENABLED && data[0] != WACOM_REPORT_INTUOSREAD
486 && data[0] != WACOM_REPORT_INTUOSWRITE && data[0] != WACOM_REPORT_INTUOSPAD) { 489 && data[0] != WACOM_REPORT_INTUOSWRITE && data[0] != WACOM_REPORT_INTUOSPAD) {
487 dbg("wacom_intuos_irq: received unknown report #%d", data[0]); 490 dev_dbg(&input->dev,
491 "wacom_intuos_irq: received unknown report #%d\n",
492 data[0]);
488 return 0; 493 return 0;
489 } 494 }
490 495
@@ -830,7 +835,8 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
830{ 835{
831 char *data = wacom->data; 836 char *data = wacom->data;
832 837
833 dbg("wacom_tpc_irq: received report #%d", data[0]); 838 dev_dbg(&wacom->input->dev, "wacom_tpc_irq: received report #%d\n",
839 data[0]);
834 840
835 switch (len) { 841 switch (len) {
836 case WACOM_PKGLEN_TPC1FG: 842 case WACOM_PKGLEN_TPC1FG:
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c
index 22cd96f58c99..e32709e0dd65 100644
--- a/drivers/input/touchscreen/usbtouchscreen.c
+++ b/drivers/input/touchscreen/usbtouchscreen.c
@@ -269,8 +269,9 @@ static int e2i_init(struct usbtouch_usb *usbtouch)
269 0x01, 0x02, 0x0000, 0x0081, 269 0x01, 0x02, 0x0000, 0x0081,
270 NULL, 0, USB_CTRL_SET_TIMEOUT); 270 NULL, 0, USB_CTRL_SET_TIMEOUT);
271 271
272 dbg("%s - usb_control_msg - E2I_RESET - bytes|err: %d", 272 dev_dbg(&usbtouch->interface->dev,
273 __func__, ret); 273 "%s - usb_control_msg - E2I_RESET - bytes|err: %d\n",
274 __func__, ret);
274 return ret; 275 return ret;
275} 276}
276 277
@@ -425,8 +426,9 @@ static int mtouch_init(struct usbtouch_usb *usbtouch)
425 MTOUCHUSB_RESET, 426 MTOUCHUSB_RESET,
426 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 427 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
427 1, 0, NULL, 0, USB_CTRL_SET_TIMEOUT); 428 1, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
428 dbg("%s - usb_control_msg - MTOUCHUSB_RESET - bytes|err: %d", 429 dev_dbg(&usbtouch->interface->dev,
429 __func__, ret); 430 "%s - usb_control_msg - MTOUCHUSB_RESET - bytes|err: %d\n",
431 __func__, ret);
430 if (ret < 0) 432 if (ret < 0)
431 return ret; 433 return ret;
432 msleep(150); 434 msleep(150);
@@ -436,8 +438,9 @@ static int mtouch_init(struct usbtouch_usb *usbtouch)
436 MTOUCHUSB_ASYNC_REPORT, 438 MTOUCHUSB_ASYNC_REPORT,
437 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 439 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
438 1, 1, NULL, 0, USB_CTRL_SET_TIMEOUT); 440 1, 1, NULL, 0, USB_CTRL_SET_TIMEOUT);
439 dbg("%s - usb_control_msg - MTOUCHUSB_ASYNC_REPORT - bytes|err: %d", 441 dev_dbg(&usbtouch->interface->dev,
440 __func__, ret); 442 "%s - usb_control_msg - MTOUCHUSB_ASYNC_REPORT - bytes|err: %d\n",
443 __func__, ret);
441 if (ret >= 0) 444 if (ret >= 0)
442 break; 445 break;
443 if (ret != -EPIPE) 446 if (ret != -EPIPE)
@@ -737,27 +740,29 @@ static int jastec_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
737#ifdef CONFIG_TOUCHSCREEN_USB_ZYTRONIC 740#ifdef CONFIG_TOUCHSCREEN_USB_ZYTRONIC
738static int zytronic_read_data(struct usbtouch_usb *dev, unsigned char *pkt) 741static int zytronic_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
739{ 742{
743 struct usb_interface *intf = dev->interface;
744
740 switch (pkt[0]) { 745 switch (pkt[0]) {
741 case 0x3A: /* command response */ 746 case 0x3A: /* command response */
742 dbg("%s: Command response %d", __func__, pkt[1]); 747 dev_dbg(&intf->dev, "%s: Command response %d\n", __func__, pkt[1]);
743 break; 748 break;
744 749
745 case 0xC0: /* down */ 750 case 0xC0: /* down */
746 dev->x = (pkt[1] & 0x7f) | ((pkt[2] & 0x07) << 7); 751 dev->x = (pkt[1] & 0x7f) | ((pkt[2] & 0x07) << 7);
747 dev->y = (pkt[3] & 0x7f) | ((pkt[4] & 0x07) << 7); 752 dev->y = (pkt[3] & 0x7f) | ((pkt[4] & 0x07) << 7);
748 dev->touch = 1; 753 dev->touch = 1;
749 dbg("%s: down %d,%d", __func__, dev->x, dev->y); 754 dev_dbg(&intf->dev, "%s: down %d,%d\n", __func__, dev->x, dev->y);
750 return 1; 755 return 1;
751 756
752 case 0x80: /* up */ 757 case 0x80: /* up */
753 dev->x = (pkt[1] & 0x7f) | ((pkt[2] & 0x07) << 7); 758 dev->x = (pkt[1] & 0x7f) | ((pkt[2] & 0x07) << 7);
754 dev->y = (pkt[3] & 0x7f) | ((pkt[4] & 0x07) << 7); 759 dev->y = (pkt[3] & 0x7f) | ((pkt[4] & 0x07) << 7);
755 dev->touch = 0; 760 dev->touch = 0;
756 dbg("%s: up %d,%d", __func__, dev->x, dev->y); 761 dev_dbg(&intf->dev, "%s: up %d,%d\n", __func__, dev->x, dev->y);
757 return 1; 762 return 1;
758 763
759 default: 764 default:
760 dbg("%s: Unknown return %d", __func__, pkt[0]); 765 dev_dbg(&intf->dev, "%s: Unknown return %d\n", __func__, pkt[0]);
761 break; 766 break;
762 } 767 }
763 768
@@ -812,7 +817,8 @@ static int nexio_alloc(struct usbtouch_usb *usbtouch)
812 817
813 priv->ack = usb_alloc_urb(0, GFP_KERNEL); 818 priv->ack = usb_alloc_urb(0, GFP_KERNEL);
814 if (!priv->ack) { 819 if (!priv->ack) {
815 dbg("%s - usb_alloc_urb failed: usbtouch->ack", __func__); 820 dev_dbg(&usbtouch->interface->dev,
821 "%s - usb_alloc_urb failed: usbtouch->ack\n", __func__);
816 goto err_ack_buf; 822 goto err_ack_buf;
817 } 823 }
818 824
@@ -1349,6 +1355,7 @@ out_flush_buf:
1349static void usbtouch_irq(struct urb *urb) 1355static void usbtouch_irq(struct urb *urb)
1350{ 1356{
1351 struct usbtouch_usb *usbtouch = urb->context; 1357 struct usbtouch_usb *usbtouch = urb->context;
1358 struct device *dev = &usbtouch->interface->dev;
1352 int retval; 1359 int retval;
1353 1360
1354 switch (urb->status) { 1361 switch (urb->status) {
@@ -1357,20 +1364,21 @@ static void usbtouch_irq(struct urb *urb)
1357 break; 1364 break;
1358 case -ETIME: 1365 case -ETIME:
1359 /* this urb is timing out */ 1366 /* this urb is timing out */
1360 dbg("%s - urb timed out - was the device unplugged?", 1367 dev_dbg(dev,
1361 __func__); 1368 "%s - urb timed out - was the device unplugged?\n",
1369 __func__);
1362 return; 1370 return;
1363 case -ECONNRESET: 1371 case -ECONNRESET:
1364 case -ENOENT: 1372 case -ENOENT:
1365 case -ESHUTDOWN: 1373 case -ESHUTDOWN:
1366 case -EPIPE: 1374 case -EPIPE:
1367 /* this urb is terminated, clean up */ 1375 /* this urb is terminated, clean up */
1368 dbg("%s - urb shutting down with status: %d", 1376 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
1369 __func__, urb->status); 1377 __func__, urb->status);
1370 return; 1378 return;
1371 default: 1379 default:
1372 dbg("%s - nonzero urb status received: %d", 1380 dev_dbg(dev, "%s - nonzero urb status received: %d\n",
1373 __func__, urb->status); 1381 __func__, urb->status);
1374 goto exit; 1382 goto exit;
1375 } 1383 }
1376 1384
@@ -1380,8 +1388,8 @@ exit:
1380 usb_mark_last_busy(interface_to_usbdev(usbtouch->interface)); 1388 usb_mark_last_busy(interface_to_usbdev(usbtouch->interface));
1381 retval = usb_submit_urb(urb, GFP_ATOMIC); 1389 retval = usb_submit_urb(urb, GFP_ATOMIC);
1382 if (retval) 1390 if (retval)
1383 err("%s - usb_submit_urb failed with result: %d", 1391 dev_err(dev, "%s - usb_submit_urb failed with result: %d\n",
1384 __func__, retval); 1392 __func__, retval);
1385} 1393}
1386 1394
1387static int usbtouch_open(struct input_dev *input) 1395static int usbtouch_open(struct input_dev *input)
@@ -1456,8 +1464,9 @@ static int usbtouch_reset_resume(struct usb_interface *intf)
1456 if (usbtouch->type->init) { 1464 if (usbtouch->type->init) {
1457 err = usbtouch->type->init(usbtouch); 1465 err = usbtouch->type->init(usbtouch);
1458 if (err) { 1466 if (err) {
1459 dbg("%s - type->init() failed, err: %d", 1467 dev_dbg(&intf->dev,
1460 __func__, err); 1468 "%s - type->init() failed, err: %d\n",
1469 __func__, err);
1461 return err; 1470 return err;
1462 } 1471 }
1463 } 1472 }
@@ -1532,7 +1541,8 @@ static int usbtouch_probe(struct usb_interface *intf,
1532 1541
1533 usbtouch->irq = usb_alloc_urb(0, GFP_KERNEL); 1542 usbtouch->irq = usb_alloc_urb(0, GFP_KERNEL);
1534 if (!usbtouch->irq) { 1543 if (!usbtouch->irq) {
1535 dbg("%s - usb_alloc_urb failed: usbtouch->irq", __func__); 1544 dev_dbg(&intf->dev,
1545 "%s - usb_alloc_urb failed: usbtouch->irq\n", __func__);
1536 goto out_free_buffers; 1546 goto out_free_buffers;
1537 } 1547 }
1538 1548
@@ -1594,7 +1604,9 @@ static int usbtouch_probe(struct usb_interface *intf,
1594 if (type->alloc) { 1604 if (type->alloc) {
1595 err = type->alloc(usbtouch); 1605 err = type->alloc(usbtouch);
1596 if (err) { 1606 if (err) {
1597 dbg("%s - type->alloc() failed, err: %d", __func__, err); 1607 dev_dbg(&intf->dev,
1608 "%s - type->alloc() failed, err: %d\n",
1609 __func__, err);
1598 goto out_free_urb; 1610 goto out_free_urb;
1599 } 1611 }
1600 } 1612 }
@@ -1603,14 +1615,18 @@ static int usbtouch_probe(struct usb_interface *intf,
1603 if (type->init) { 1615 if (type->init) {
1604 err = type->init(usbtouch); 1616 err = type->init(usbtouch);
1605 if (err) { 1617 if (err) {
1606 dbg("%s - type->init() failed, err: %d", __func__, err); 1618 dev_dbg(&intf->dev,
1619 "%s - type->init() failed, err: %d\n",
1620 __func__, err);
1607 goto out_do_exit; 1621 goto out_do_exit;
1608 } 1622 }
1609 } 1623 }
1610 1624
1611 err = input_register_device(usbtouch->input); 1625 err = input_register_device(usbtouch->input);
1612 if (err) { 1626 if (err) {
1613 dbg("%s - input_register_device failed, err: %d", __func__, err); 1627 dev_dbg(&intf->dev,
1628 "%s - input_register_device failed, err: %d\n",
1629 __func__, err);
1614 goto out_do_exit; 1630 goto out_do_exit;
1615 } 1631 }
1616 1632
@@ -1622,8 +1638,9 @@ static int usbtouch_probe(struct usb_interface *intf,
1622 err = usb_submit_urb(usbtouch->irq, GFP_KERNEL); 1638 err = usb_submit_urb(usbtouch->irq, GFP_KERNEL);
1623 if (err) { 1639 if (err) {
1624 usb_autopm_put_interface(intf); 1640 usb_autopm_put_interface(intf);
1625 err("%s - usb_submit_urb failed with result: %d", 1641 dev_err(&intf->dev,
1626 __func__, err); 1642 "%s - usb_submit_urb failed with result: %d\n",
1643 __func__, err);
1627 goto out_unregister_input; 1644 goto out_unregister_input;
1628 } 1645 }
1629 } 1646 }
@@ -1650,12 +1667,12 @@ static void usbtouch_disconnect(struct usb_interface *intf)
1650{ 1667{
1651 struct usbtouch_usb *usbtouch = usb_get_intfdata(intf); 1668 struct usbtouch_usb *usbtouch = usb_get_intfdata(intf);
1652 1669
1653 dbg("%s - called", __func__);
1654
1655 if (!usbtouch) 1670 if (!usbtouch)
1656 return; 1671 return;
1657 1672
1658 dbg("%s - usbtouch is initialized, cleaning up", __func__); 1673 dev_dbg(&intf->dev,
1674 "%s - usbtouch is initialized, cleaning up\n", __func__);
1675
1659 usb_set_intfdata(intf, NULL); 1676 usb_set_intfdata(intf, NULL);
1660 /* this will stop IO via close */ 1677 /* this will stop IO via close */
1661 input_unregister_device(usbtouch->input); 1678 input_unregister_device(usbtouch->input);
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
index 3b9278b333ba..527588708948 100644
--- a/drivers/isdn/gigaset/bas-gigaset.c
+++ b/drivers/isdn/gigaset/bas-gigaset.c
@@ -148,6 +148,7 @@ static struct usb_driver gigaset_usb_driver = {
148 .reset_resume = gigaset_post_reset, 148 .reset_resume = gigaset_post_reset,
149 .pre_reset = gigaset_pre_reset, 149 .pre_reset = gigaset_pre_reset,
150 .post_reset = gigaset_post_reset, 150 .post_reset = gigaset_post_reset,
151 .disable_hub_initiated_lpm = 1,
151}; 152};
152 153
153/* get message text for usb_submit_urb return code 154/* get message text for usb_submit_urb return code
diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c
index bb12d8051732..d0a41cb0cf62 100644
--- a/drivers/isdn/gigaset/usb-gigaset.c
+++ b/drivers/isdn/gigaset/usb-gigaset.c
@@ -124,6 +124,7 @@ static struct usb_driver gigaset_usb_driver = {
124 .reset_resume = gigaset_resume, 124 .reset_resume = gigaset_resume,
125 .pre_reset = gigaset_pre_reset, 125 .pre_reset = gigaset_pre_reset,
126 .post_reset = gigaset_resume, 126 .post_reset = gigaset_resume,
127 .disable_hub_initiated_lpm = 1,
127}; 128};
128 129
129struct usb_cardstate { 130struct usb_cardstate {
diff --git a/drivers/isdn/hardware/mISDN/hfcsusb.c b/drivers/isdn/hardware/mISDN/hfcsusb.c
index 83206e453d4e..c65c3440cd70 100644
--- a/drivers/isdn/hardware/mISDN/hfcsusb.c
+++ b/drivers/isdn/hardware/mISDN/hfcsusb.c
@@ -2126,6 +2126,7 @@ static struct usb_driver hfcsusb_drv = {
2126 .id_table = hfcsusb_idtab, 2126 .id_table = hfcsusb_idtab,
2127 .probe = hfcsusb_probe, 2127 .probe = hfcsusb_probe,
2128 .disconnect = hfcsusb_disconnect, 2128 .disconnect = hfcsusb_disconnect,
2129 .disable_hub_initiated_lpm = 1,
2129}; 2130};
2130 2131
2131module_usb_driver(hfcsusb_drv); 2132module_usb_driver(hfcsusb_drv);
diff --git a/drivers/isdn/hisax/hfc_usb.c b/drivers/isdn/hisax/hfc_usb.c
index 62c65bdefd8a..84f9c8103078 100644
--- a/drivers/isdn/hisax/hfc_usb.c
+++ b/drivers/isdn/hisax/hfc_usb.c
@@ -1568,6 +1568,7 @@ static struct usb_driver hfc_drv = {
1568 .id_table = hfcusb_idtab, 1568 .id_table = hfcusb_idtab,
1569 .probe = hfc_usb_probe, 1569 .probe = hfc_usb_probe,
1570 .disconnect = hfc_usb_disconnect, 1570 .disconnect = hfc_usb_disconnect,
1571 .disable_hub_initiated_lpm = 1,
1571}; 1572};
1572 1573
1573static void __exit 1574static void __exit
diff --git a/drivers/isdn/hisax/st5481_init.c b/drivers/isdn/hisax/st5481_init.c
index 100296e20dc0..54ef9e4f8cbc 100644
--- a/drivers/isdn/hisax/st5481_init.c
+++ b/drivers/isdn/hisax/st5481_init.c
@@ -182,6 +182,7 @@ static struct usb_driver st5481_usb_driver = {
182 .probe = probe_st5481, 182 .probe = probe_st5481,
183 .disconnect = disconnect_st5481, 183 .disconnect = disconnect_st5481,
184 .id_table = st5481_ids, 184 .id_table = st5481_ids,
185 .disable_hub_initiated_lpm = 1,
185}; 186};
186 187
187static int __init st5481_usb_init(void) 188static int __init st5481_usb_init(void)
diff --git a/drivers/media/video/gspca/ov534_9.c b/drivers/media/video/gspca/ov534_9.c
index e6601b886032..b5797308a39b 100644
--- a/drivers/media/video/gspca/ov534_9.c
+++ b/drivers/media/video/gspca/ov534_9.c
@@ -1376,7 +1376,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
1376 ARRAY_SIZE(ov562x_init_2)); 1376 ARRAY_SIZE(ov562x_init_2));
1377 reg_w(gspca_dev, 0xe0, 0x00); 1377 reg_w(gspca_dev, 0xe0, 0x00);
1378 } else { 1378 } else {
1379 err("Unknown sensor %04x", sensor_id); 1379 pr_err("Unknown sensor %04x", sensor_id);
1380 return -EINVAL; 1380 return -EINVAL;
1381 } 1381 }
1382 1382
diff --git a/drivers/media/video/hdpvr/hdpvr-core.c b/drivers/media/video/hdpvr/hdpvr-core.c
index 6510110f53d0..304f43ef59eb 100644
--- a/drivers/media/video/hdpvr/hdpvr-core.c
+++ b/drivers/media/video/hdpvr/hdpvr-core.c
@@ -303,7 +303,7 @@ static int hdpvr_probe(struct usb_interface *interface,
303 /* allocate memory for our device state and initialize it */ 303 /* allocate memory for our device state and initialize it */
304 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 304 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
305 if (!dev) { 305 if (!dev) {
306 err("Out of memory"); 306 dev_err(&interface->dev, "Out of memory\n");
307 goto error; 307 goto error;
308 } 308 }
309 309
@@ -311,7 +311,7 @@ static int hdpvr_probe(struct usb_interface *interface,
311 311
312 /* register v4l2_device early so it can be used for printks */ 312 /* register v4l2_device early so it can be used for printks */
313 if (v4l2_device_register(&interface->dev, &dev->v4l2_dev)) { 313 if (v4l2_device_register(&interface->dev, &dev->v4l2_dev)) {
314 err("v4l2_device_register failed"); 314 dev_err(&interface->dev, "v4l2_device_register failed\n");
315 goto error; 315 goto error;
316 } 316 }
317 317
diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
index 72f687b40d66..f9a86bdb12fa 100644
--- a/drivers/net/irda/irda-usb.c
+++ b/drivers/net/irda/irda-usb.c
@@ -1671,7 +1671,7 @@ static int irda_usb_probe(struct usb_interface *intf,
1671 1671
1672 /* Is this really necessary? (no, except maybe for broken devices) */ 1672 /* Is this really necessary? (no, except maybe for broken devices) */
1673 if (usb_reset_configuration (dev) < 0) { 1673 if (usb_reset_configuration (dev) < 0) {
1674 err("reset_configuration failed"); 1674 dev_err(&intf->dev, "reset_configuration failed\n");
1675 ret = -EIO; 1675 ret = -EIO;
1676 goto err_out_3; 1676 goto err_out_3;
1677 } 1677 }
diff --git a/drivers/net/irda/kingsun-sir.c b/drivers/net/irda/kingsun-sir.c
index 79aebeee928c..7b4833874ef5 100644
--- a/drivers/net/irda/kingsun-sir.c
+++ b/drivers/net/irda/kingsun-sir.c
@@ -134,14 +134,16 @@ static void kingsun_send_irq(struct urb *urb)
134 134
135 /* in process of stopping, just drop data */ 135 /* in process of stopping, just drop data */
136 if (!netif_running(kingsun->netdev)) { 136 if (!netif_running(kingsun->netdev)) {
137 err("kingsun_send_irq: Network not running!"); 137 dev_err(&kingsun->usbdev->dev,
138 "kingsun_send_irq: Network not running!\n");
138 return; 139 return;
139 } 140 }
140 141
141 /* unlink, shutdown, unplug, other nasties */ 142 /* unlink, shutdown, unplug, other nasties */
142 if (urb->status != 0) { 143 if (urb->status != 0) {
143 err("kingsun_send_irq: urb asynchronously failed - %d", 144 dev_err(&kingsun->usbdev->dev,
144 urb->status); 145 "kingsun_send_irq: urb asynchronously failed - %d\n",
146 urb->status);
145 } 147 }
146 netif_wake_queue(netdev); 148 netif_wake_queue(netdev);
147} 149}
@@ -177,7 +179,8 @@ static netdev_tx_t kingsun_hard_xmit(struct sk_buff *skb,
177 kingsun, 1); 179 kingsun, 1);
178 180
179 if ((ret = usb_submit_urb(kingsun->tx_urb, GFP_ATOMIC))) { 181 if ((ret = usb_submit_urb(kingsun->tx_urb, GFP_ATOMIC))) {
180 err("kingsun_hard_xmit: failed tx_urb submit: %d", ret); 182 dev_err(&kingsun->usbdev->dev,
183 "kingsun_hard_xmit: failed tx_urb submit: %d\n", ret);
181 switch (ret) { 184 switch (ret) {
182 case -ENODEV: 185 case -ENODEV:
183 case -EPIPE: 186 case -EPIPE:
@@ -211,8 +214,9 @@ static void kingsun_rcv_irq(struct urb *urb)
211 214
212 /* unlink, shutdown, unplug, other nasties */ 215 /* unlink, shutdown, unplug, other nasties */
213 if (urb->status != 0) { 216 if (urb->status != 0) {
214 err("kingsun_rcv_irq: urb asynchronously failed - %d", 217 dev_err(&kingsun->usbdev->dev,
215 urb->status); 218 "kingsun_rcv_irq: urb asynchronously failed - %d\n",
219 urb->status);
216 kingsun->receiving = 0; 220 kingsun->receiving = 0;
217 return; 221 return;
218 } 222 }
@@ -238,8 +242,9 @@ static void kingsun_rcv_irq(struct urb *urb)
238 ? 1 : 0; 242 ? 1 : 0;
239 } 243 }
240 } else if (urb->actual_length > 0) { 244 } else if (urb->actual_length > 0) {
241 err("%s(): Unexpected response length, expected %d got %d", 245 dev_err(&kingsun->usbdev->dev,
242 __func__, kingsun->max_rx, urb->actual_length); 246 "%s(): Unexpected response length, expected %d got %d\n",
247 __func__, kingsun->max_rx, urb->actual_length);
243 } 248 }
244 /* This urb has already been filled in kingsun_net_open */ 249 /* This urb has already been filled in kingsun_net_open */
245 ret = usb_submit_urb(urb, GFP_ATOMIC); 250 ret = usb_submit_urb(urb, GFP_ATOMIC);
@@ -286,7 +291,7 @@ static int kingsun_net_open(struct net_device *netdev)
286 sprintf(hwname, "usb#%d", kingsun->usbdev->devnum); 291 sprintf(hwname, "usb#%d", kingsun->usbdev->devnum);
287 kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname); 292 kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname);
288 if (!kingsun->irlap) { 293 if (!kingsun->irlap) {
289 err("kingsun-sir: irlap_open failed"); 294 dev_err(&kingsun->usbdev->dev, "irlap_open failed\n");
290 goto free_mem; 295 goto free_mem;
291 } 296 }
292 297
@@ -298,7 +303,8 @@ static int kingsun_net_open(struct net_device *netdev)
298 kingsun->rx_urb->status = 0; 303 kingsun->rx_urb->status = 0;
299 err = usb_submit_urb(kingsun->rx_urb, GFP_KERNEL); 304 err = usb_submit_urb(kingsun->rx_urb, GFP_KERNEL);
300 if (err) { 305 if (err) {
301 err("kingsun-sir: first urb-submit failed: %d", err); 306 dev_err(&kingsun->usbdev->dev,
307 "first urb-submit failed: %d\n", err);
302 goto close_irlap; 308 goto close_irlap;
303 } 309 }
304 310
@@ -446,13 +452,15 @@ static int kingsun_probe(struct usb_interface *intf,
446 */ 452 */
447 interface = intf->cur_altsetting; 453 interface = intf->cur_altsetting;
448 if (interface->desc.bNumEndpoints != 2) { 454 if (interface->desc.bNumEndpoints != 2) {
449 err("kingsun-sir: expected 2 endpoints, found %d", 455 dev_err(&intf->dev,
450 interface->desc.bNumEndpoints); 456 "kingsun-sir: expected 2 endpoints, found %d\n",
457 interface->desc.bNumEndpoints);
451 return -ENODEV; 458 return -ENODEV;
452 } 459 }
453 endpoint = &interface->endpoint[KINGSUN_EP_IN].desc; 460 endpoint = &interface->endpoint[KINGSUN_EP_IN].desc;
454 if (!usb_endpoint_is_int_in(endpoint)) { 461 if (!usb_endpoint_is_int_in(endpoint)) {
455 err("kingsun-sir: endpoint 0 is not interrupt IN"); 462 dev_err(&intf->dev,
463 "kingsun-sir: endpoint 0 is not interrupt IN\n");
456 return -ENODEV; 464 return -ENODEV;
457 } 465 }
458 466
@@ -460,14 +468,16 @@ static int kingsun_probe(struct usb_interface *intf,
460 pipe = usb_rcvintpipe(dev, ep_in); 468 pipe = usb_rcvintpipe(dev, ep_in);
461 maxp_in = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); 469 maxp_in = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
462 if (maxp_in > 255 || maxp_in <= 1) { 470 if (maxp_in > 255 || maxp_in <= 1) {
463 err("%s: endpoint 0 has max packet size %d not in range", 471 dev_err(&intf->dev,
464 __FILE__, maxp_in); 472 "endpoint 0 has max packet size %d not in range\n",
473 maxp_in);
465 return -ENODEV; 474 return -ENODEV;
466 } 475 }
467 476
468 endpoint = &interface->endpoint[KINGSUN_EP_OUT].desc; 477 endpoint = &interface->endpoint[KINGSUN_EP_OUT].desc;
469 if (!usb_endpoint_is_int_out(endpoint)) { 478 if (!usb_endpoint_is_int_out(endpoint)) {
470 err("kingsun-sir: endpoint 1 is not interrupt OUT"); 479 dev_err(&intf->dev,
480 "kingsun-sir: endpoint 1 is not interrupt OUT\n");
471 return -ENODEV; 481 return -ENODEV;
472 } 482 }
473 483
diff --git a/drivers/net/irda/ks959-sir.c b/drivers/net/irda/ks959-sir.c
index abe689dffc72..824e2a93fe8a 100644
--- a/drivers/net/irda/ks959-sir.c
+++ b/drivers/net/irda/ks959-sir.c
@@ -247,8 +247,9 @@ static void ks959_speed_irq(struct urb *urb)
247{ 247{
248 /* unlink, shutdown, unplug, other nasties */ 248 /* unlink, shutdown, unplug, other nasties */
249 if (urb->status != 0) { 249 if (urb->status != 0) {
250 err("ks959_speed_irq: urb asynchronously failed - %d", 250 dev_err(&urb->dev->dev,
251 urb->status); 251 "ks959_speed_irq: urb asynchronously failed - %d\n",
252 urb->status);
252 } 253 }
253} 254}
254 255
@@ -332,14 +333,16 @@ static void ks959_send_irq(struct urb *urb)
332 333
333 /* in process of stopping, just drop data */ 334 /* in process of stopping, just drop data */
334 if (!netif_running(kingsun->netdev)) { 335 if (!netif_running(kingsun->netdev)) {
335 err("ks959_send_irq: Network not running!"); 336 dev_err(&kingsun->usbdev->dev,
337 "ks959_send_irq: Network not running!\n");
336 return; 338 return;
337 } 339 }
338 340
339 /* unlink, shutdown, unplug, other nasties */ 341 /* unlink, shutdown, unplug, other nasties */
340 if (urb->status != 0) { 342 if (urb->status != 0) {
341 err("ks959_send_irq: urb asynchronously failed - %d", 343 dev_err(&kingsun->usbdev->dev,
342 urb->status); 344 "ks959_send_irq: urb asynchronously failed - %d\n",
345 urb->status);
343 return; 346 return;
344 } 347 }
345 348
@@ -358,8 +361,9 @@ static void ks959_send_irq(struct urb *urb)
358 if (kingsun->tx_buf_clear_used > 0) { 361 if (kingsun->tx_buf_clear_used > 0) {
359 /* There is more data to be sent */ 362 /* There is more data to be sent */
360 if ((ret = ks959_submit_tx_fragment(kingsun)) != 0) { 363 if ((ret = ks959_submit_tx_fragment(kingsun)) != 0) {
361 err("ks959_send_irq: failed tx_urb submit: %d", 364 dev_err(&kingsun->usbdev->dev,
362 ret); 365 "ks959_send_irq: failed tx_urb submit: %d\n",
366 ret);
363 switch (ret) { 367 switch (ret) {
364 case -ENODEV: 368 case -ENODEV:
365 case -EPIPE: 369 case -EPIPE:
@@ -407,7 +411,8 @@ static netdev_tx_t ks959_hard_xmit(struct sk_buff *skb,
407 kingsun->tx_buf_clear_used = wraplen; 411 kingsun->tx_buf_clear_used = wraplen;
408 412
409 if ((ret = ks959_submit_tx_fragment(kingsun)) != 0) { 413 if ((ret = ks959_submit_tx_fragment(kingsun)) != 0) {
410 err("ks959_hard_xmit: failed tx_urb submit: %d", ret); 414 dev_err(&kingsun->usbdev->dev,
415 "ks959_hard_xmit: failed tx_urb submit: %d\n", ret);
411 switch (ret) { 416 switch (ret) {
412 case -ENODEV: 417 case -ENODEV:
413 case -EPIPE: 418 case -EPIPE:
@@ -442,8 +447,9 @@ static void ks959_rcv_irq(struct urb *urb)
442 447
443 /* unlink, shutdown, unplug, other nasties */ 448 /* unlink, shutdown, unplug, other nasties */
444 if (urb->status != 0) { 449 if (urb->status != 0) {
445 err("kingsun_rcv_irq: urb asynchronously failed - %d", 450 dev_err(&kingsun->usbdev->dev,
446 urb->status); 451 "kingsun_rcv_irq: urb asynchronously failed - %d\n",
452 urb->status);
447 kingsun->receiving = 0; 453 kingsun->receiving = 0;
448 return; 454 return;
449 } 455 }
@@ -536,7 +542,7 @@ static int ks959_net_open(struct net_device *netdev)
536 sprintf(hwname, "usb#%d", kingsun->usbdev->devnum); 542 sprintf(hwname, "usb#%d", kingsun->usbdev->devnum);
537 kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname); 543 kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname);
538 if (!kingsun->irlap) { 544 if (!kingsun->irlap) {
539 err("ks959-sir: irlap_open failed"); 545 dev_err(&kingsun->usbdev->dev, "irlap_open failed\n");
540 goto free_mem; 546 goto free_mem;
541 } 547 }
542 548
@@ -549,7 +555,8 @@ static int ks959_net_open(struct net_device *netdev)
549 kingsun->rx_urb->status = 0; 555 kingsun->rx_urb->status = 0;
550 err = usb_submit_urb(kingsun->rx_urb, GFP_KERNEL); 556 err = usb_submit_urb(kingsun->rx_urb, GFP_KERNEL);
551 if (err) { 557 if (err) {
552 err("ks959-sir: first urb-submit failed: %d", err); 558 dev_err(&kingsun->usbdev->dev,
559 "first urb-submit failed: %d\n", err);
553 goto close_irlap; 560 goto close_irlap;
554 } 561 }
555 562
diff --git a/drivers/net/irda/ksdazzle-sir.c b/drivers/net/irda/ksdazzle-sir.c
index f8c01088eeb7..5a278ab83c2f 100644
--- a/drivers/net/irda/ksdazzle-sir.c
+++ b/drivers/net/irda/ksdazzle-sir.c
@@ -168,10 +168,10 @@ struct ksdazzle_cb {
168static void ksdazzle_speed_irq(struct urb *urb) 168static void ksdazzle_speed_irq(struct urb *urb)
169{ 169{
170 /* unlink, shutdown, unplug, other nasties */ 170 /* unlink, shutdown, unplug, other nasties */
171 if (urb->status != 0) { 171 if (urb->status != 0)
172 err("ksdazzle_speed_irq: urb asynchronously failed - %d", 172 dev_err(&urb->dev->dev,
173 urb->status); 173 "ksdazzle_speed_irq: urb asynchronously failed - %d\n",
174 } 174 urb->status);
175} 175}
176 176
177/* Send a control request to change speed of the dongle */ 177/* Send a control request to change speed of the dongle */
@@ -245,14 +245,16 @@ static void ksdazzle_send_irq(struct urb *urb)
245 245
246 /* in process of stopping, just drop data */ 246 /* in process of stopping, just drop data */
247 if (!netif_running(kingsun->netdev)) { 247 if (!netif_running(kingsun->netdev)) {
248 err("ksdazzle_send_irq: Network not running!"); 248 dev_err(&kingsun->usbdev->dev,
249 "ksdazzle_send_irq: Network not running!\n");
249 return; 250 return;
250 } 251 }
251 252
252 /* unlink, shutdown, unplug, other nasties */ 253 /* unlink, shutdown, unplug, other nasties */
253 if (urb->status != 0) { 254 if (urb->status != 0) {
254 err("ksdazzle_send_irq: urb asynchronously failed - %d", 255 dev_err(&kingsun->usbdev->dev,
255 urb->status); 256 "ksdazzle_send_irq: urb asynchronously failed - %d\n",
257 urb->status);
256 return; 258 return;
257 } 259 }
258 260
@@ -271,7 +273,9 @@ static void ksdazzle_send_irq(struct urb *urb)
271 if (kingsun->tx_buf_clear_used > 0) { 273 if (kingsun->tx_buf_clear_used > 0) {
272 /* There is more data to be sent */ 274 /* There is more data to be sent */
273 if ((ret = ksdazzle_submit_tx_fragment(kingsun)) != 0) { 275 if ((ret = ksdazzle_submit_tx_fragment(kingsun)) != 0) {
274 err("ksdazzle_send_irq: failed tx_urb submit: %d", ret); 276 dev_err(&kingsun->usbdev->dev,
277 "ksdazzle_send_irq: failed tx_urb submit: %d\n",
278 ret);
275 switch (ret) { 279 switch (ret) {
276 case -ENODEV: 280 case -ENODEV:
277 case -EPIPE: 281 case -EPIPE:
@@ -320,7 +324,8 @@ static netdev_tx_t ksdazzle_hard_xmit(struct sk_buff *skb,
320 kingsun->tx_buf_clear_used = wraplen; 324 kingsun->tx_buf_clear_used = wraplen;
321 325
322 if ((ret = ksdazzle_submit_tx_fragment(kingsun)) != 0) { 326 if ((ret = ksdazzle_submit_tx_fragment(kingsun)) != 0) {
323 err("ksdazzle_hard_xmit: failed tx_urb submit: %d", ret); 327 dev_err(&kingsun->usbdev->dev,
328 "ksdazzle_hard_xmit: failed tx_urb submit: %d\n", ret);
324 switch (ret) { 329 switch (ret) {
325 case -ENODEV: 330 case -ENODEV:
326 case -EPIPE: 331 case -EPIPE:
@@ -355,8 +360,9 @@ static void ksdazzle_rcv_irq(struct urb *urb)
355 360
356 /* unlink, shutdown, unplug, other nasties */ 361 /* unlink, shutdown, unplug, other nasties */
357 if (urb->status != 0) { 362 if (urb->status != 0) {
358 err("ksdazzle_rcv_irq: urb asynchronously failed - %d", 363 dev_err(&kingsun->usbdev->dev,
359 urb->status); 364 "ksdazzle_rcv_irq: urb asynchronously failed - %d\n",
365 urb->status);
360 kingsun->receiving = 0; 366 kingsun->receiving = 0;
361 return; 367 return;
362 } 368 }
@@ -430,7 +436,7 @@ static int ksdazzle_net_open(struct net_device *netdev)
430 sprintf(hwname, "usb#%d", kingsun->usbdev->devnum); 436 sprintf(hwname, "usb#%d", kingsun->usbdev->devnum);
431 kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname); 437 kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname);
432 if (!kingsun->irlap) { 438 if (!kingsun->irlap) {
433 err("ksdazzle-sir: irlap_open failed"); 439 dev_err(&kingsun->usbdev->dev, "irlap_open failed\n");
434 goto free_mem; 440 goto free_mem;
435 } 441 }
436 442
@@ -442,7 +448,7 @@ static int ksdazzle_net_open(struct net_device *netdev)
442 kingsun->rx_urb->status = 0; 448 kingsun->rx_urb->status = 0;
443 err = usb_submit_urb(kingsun->rx_urb, GFP_KERNEL); 449 err = usb_submit_urb(kingsun->rx_urb, GFP_KERNEL);
444 if (err) { 450 if (err) {
445 err("ksdazzle-sir: first urb-submit failed: %d", err); 451 dev_err(&kingsun->usbdev->dev, "first urb-submit failed: %d\n", err);
446 goto close_irlap; 452 goto close_irlap;
447 } 453 }
448 454
@@ -590,13 +596,14 @@ static int ksdazzle_probe(struct usb_interface *intf,
590 */ 596 */
591 interface = intf->cur_altsetting; 597 interface = intf->cur_altsetting;
592 if (interface->desc.bNumEndpoints != 2) { 598 if (interface->desc.bNumEndpoints != 2) {
593 err("ksdazzle: expected 2 endpoints, found %d", 599 dev_err(&intf->dev, "ksdazzle: expected 2 endpoints, found %d\n",
594 interface->desc.bNumEndpoints); 600 interface->desc.bNumEndpoints);
595 return -ENODEV; 601 return -ENODEV;
596 } 602 }
597 endpoint = &interface->endpoint[KINGSUN_EP_IN].desc; 603 endpoint = &interface->endpoint[KINGSUN_EP_IN].desc;
598 if (!usb_endpoint_is_int_in(endpoint)) { 604 if (!usb_endpoint_is_int_in(endpoint)) {
599 err("ksdazzle: endpoint 0 is not interrupt IN"); 605 dev_err(&intf->dev,
606 "ksdazzle: endpoint 0 is not interrupt IN\n");
600 return -ENODEV; 607 return -ENODEV;
601 } 608 }
602 609
@@ -604,13 +611,16 @@ static int ksdazzle_probe(struct usb_interface *intf,
604 pipe = usb_rcvintpipe(dev, ep_in); 611 pipe = usb_rcvintpipe(dev, ep_in);
605 maxp_in = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); 612 maxp_in = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
606 if (maxp_in > 255 || maxp_in <= 1) { 613 if (maxp_in > 255 || maxp_in <= 1) {
607 err("ksdazzle: endpoint 0 has max packet size %d not in range [2..255]", maxp_in); 614 dev_err(&intf->dev,
615 "ksdazzle: endpoint 0 has max packet size %d not in range [2..255]\n",
616 maxp_in);
608 return -ENODEV; 617 return -ENODEV;
609 } 618 }
610 619
611 endpoint = &interface->endpoint[KINGSUN_EP_OUT].desc; 620 endpoint = &interface->endpoint[KINGSUN_EP_OUT].desc;
612 if (!usb_endpoint_is_int_out(endpoint)) { 621 if (!usb_endpoint_is_int_out(endpoint)) {
613 err("ksdazzle: endpoint 1 is not interrupt OUT"); 622 dev_err(&intf->dev,
623 "ksdazzle: endpoint 1 is not interrupt OUT\n");
614 return -ENODEV; 624 return -ENODEV;
615 } 625 }
616 626
diff --git a/drivers/net/irda/stir4200.c b/drivers/net/irda/stir4200.c
index e6e59a078ef4..876e709b65ba 100644
--- a/drivers/net/irda/stir4200.c
+++ b/drivers/net/irda/stir4200.c
@@ -904,7 +904,7 @@ static int stir_net_open(struct net_device *netdev)
904 sprintf(hwname, "usb#%d", stir->usbdev->devnum); 904 sprintf(hwname, "usb#%d", stir->usbdev->devnum);
905 stir->irlap = irlap_open(netdev, &stir->qos, hwname); 905 stir->irlap = irlap_open(netdev, &stir->qos, hwname);
906 if (!stir->irlap) { 906 if (!stir->irlap) {
907 err("stir4200: irlap_open failed"); 907 dev_err(&stir->usbdev->dev, "irlap_open failed\n");
908 goto err_out5; 908 goto err_out5;
909 } 909 }
910 910
@@ -913,7 +913,7 @@ static int stir_net_open(struct net_device *netdev)
913 "%s", stir->netdev->name); 913 "%s", stir->netdev->name);
914 if (IS_ERR(stir->thread)) { 914 if (IS_ERR(stir->thread)) {
915 err = PTR_ERR(stir->thread); 915 err = PTR_ERR(stir->thread);
916 err("stir4200: unable to start kernel thread"); 916 dev_err(&stir->usbdev->dev, "unable to start kernel thread\n");
917 goto err_out6; 917 goto err_out6;
918 } 918 }
919 919
@@ -1042,7 +1042,7 @@ static int stir_probe(struct usb_interface *intf,
1042 1042
1043 ret = usb_reset_configuration(dev); 1043 ret = usb_reset_configuration(dev);
1044 if (ret != 0) { 1044 if (ret != 0) {
1045 err("stir4200: usb reset configuration failed"); 1045 dev_err(&intf->dev, "usb reset configuration failed\n");
1046 goto err_out2; 1046 goto err_out2;
1047 } 1047 }
1048 1048
diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c
index 42b5151aa78a..71e2b0523bc2 100644
--- a/drivers/net/usb/asix.c
+++ b/drivers/net/usb/asix.c
@@ -1647,6 +1647,7 @@ static struct usb_driver asix_driver = {
1647 .resume = usbnet_resume, 1647 .resume = usbnet_resume,
1648 .disconnect = usbnet_disconnect, 1648 .disconnect = usbnet_disconnect,
1649 .supports_autosuspend = 1, 1649 .supports_autosuspend = 1,
1650 .disable_hub_initiated_lpm = 1,
1650}; 1651};
1651 1652
1652module_usb_driver(asix_driver); 1653module_usb_driver(asix_driver);
diff --git a/drivers/net/usb/catc.c b/drivers/net/usb/catc.c
index 182cfb4aeb1d..26c5bebd9eca 100644
--- a/drivers/net/usb/catc.c
+++ b/drivers/net/usb/catc.c
@@ -338,16 +338,18 @@ static void catc_irq_done(struct urb *urb)
338 } else { 338 } else {
339 catc->rx_urb->dev = catc->usbdev; 339 catc->rx_urb->dev = catc->usbdev;
340 if ((res = usb_submit_urb(catc->rx_urb, GFP_ATOMIC)) < 0) { 340 if ((res = usb_submit_urb(catc->rx_urb, GFP_ATOMIC)) < 0) {
341 err("submit(rx_urb) status %d", res); 341 dev_err(&catc->usbdev->dev,
342 "submit(rx_urb) status %d\n", res);
342 } 343 }
343 } 344 }
344 } 345 }
345resubmit: 346resubmit:
346 res = usb_submit_urb (urb, GFP_ATOMIC); 347 res = usb_submit_urb (urb, GFP_ATOMIC);
347 if (res) 348 if (res)
348 err ("can't resubmit intr, %s-%s, status %d", 349 dev_err(&catc->usbdev->dev,
349 catc->usbdev->bus->bus_name, 350 "can't resubmit intr, %s-%s, status %d\n",
350 catc->usbdev->devpath, res); 351 catc->usbdev->bus->bus_name,
352 catc->usbdev->devpath, res);
351} 353}
352 354
353/* 355/*
@@ -366,7 +368,8 @@ static int catc_tx_run(struct catc *catc)
366 catc->tx_urb->dev = catc->usbdev; 368 catc->tx_urb->dev = catc->usbdev;
367 369
368 if ((status = usb_submit_urb(catc->tx_urb, GFP_ATOMIC)) < 0) 370 if ((status = usb_submit_urb(catc->tx_urb, GFP_ATOMIC)) < 0)
369 err("submit(tx_urb), status %d", status); 371 dev_err(&catc->usbdev->dev, "submit(tx_urb), status %d\n",
372 status);
370 373
371 catc->tx_idx = !catc->tx_idx; 374 catc->tx_idx = !catc->tx_idx;
372 catc->tx_ptr = 0; 375 catc->tx_ptr = 0;
@@ -496,7 +499,8 @@ static void catc_ctrl_run(struct catc *catc)
496 memcpy(catc->ctrl_buf, q->buf, q->len); 499 memcpy(catc->ctrl_buf, q->buf, q->len);
497 500
498 if ((status = usb_submit_urb(catc->ctrl_urb, GFP_ATOMIC))) 501 if ((status = usb_submit_urb(catc->ctrl_urb, GFP_ATOMIC)))
499 err("submit(ctrl_urb) status %d", status); 502 dev_err(&catc->usbdev->dev, "submit(ctrl_urb) status %d\n",
503 status);
500} 504}
501 505
502static void catc_ctrl_done(struct urb *urb) 506static void catc_ctrl_done(struct urb *urb)
@@ -555,7 +559,7 @@ static int catc_ctrl_async(struct catc *catc, u8 dir, u8 request, u16 value,
555 catc->ctrl_head = (catc->ctrl_head + 1) & (CTRL_QUEUE - 1); 559 catc->ctrl_head = (catc->ctrl_head + 1) & (CTRL_QUEUE - 1);
556 560
557 if (catc->ctrl_head == catc->ctrl_tail) { 561 if (catc->ctrl_head == catc->ctrl_tail) {
558 err("ctrl queue full"); 562 dev_err(&catc->usbdev->dev, "ctrl queue full\n");
559 catc->ctrl_tail = (catc->ctrl_tail + 1) & (CTRL_QUEUE - 1); 563 catc->ctrl_tail = (catc->ctrl_tail + 1) & (CTRL_QUEUE - 1);
560 retval = -1; 564 retval = -1;
561 } 565 }
@@ -714,7 +718,8 @@ static int catc_open(struct net_device *netdev)
714 718
715 catc->irq_urb->dev = catc->usbdev; 719 catc->irq_urb->dev = catc->usbdev;
716 if ((status = usb_submit_urb(catc->irq_urb, GFP_KERNEL)) < 0) { 720 if ((status = usb_submit_urb(catc->irq_urb, GFP_KERNEL)) < 0) {
717 err("submit(irq_urb) status %d", status); 721 dev_err(&catc->usbdev->dev, "submit(irq_urb) status %d\n",
722 status);
718 return -1; 723 return -1;
719 } 724 }
720 725
@@ -769,7 +774,7 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id
769 774
770 if (usb_set_interface(usbdev, 775 if (usb_set_interface(usbdev,
771 intf->altsetting->desc.bInterfaceNumber, 1)) { 776 intf->altsetting->desc.bInterfaceNumber, 1)) {
772 err("Can't set altsetting 1."); 777 dev_err(&intf->dev, "Can't set altsetting 1.\n");
773 return -EIO; 778 return -EIO;
774 } 779 }
775 780
@@ -799,7 +804,7 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id
799 catc->irq_urb = usb_alloc_urb(0, GFP_KERNEL); 804 catc->irq_urb = usb_alloc_urb(0, GFP_KERNEL);
800 if ((!catc->ctrl_urb) || (!catc->tx_urb) || 805 if ((!catc->ctrl_urb) || (!catc->tx_urb) ||
801 (!catc->rx_urb) || (!catc->irq_urb)) { 806 (!catc->rx_urb) || (!catc->irq_urb)) {
802 err("No free urbs available."); 807 dev_err(&intf->dev, "No free urbs available.\n");
803 usb_free_urb(catc->ctrl_urb); 808 usb_free_urb(catc->ctrl_urb);
804 usb_free_urb(catc->tx_urb); 809 usb_free_urb(catc->tx_urb);
805 usb_free_urb(catc->rx_urb); 810 usb_free_urb(catc->rx_urb);
@@ -947,6 +952,7 @@ static struct usb_driver catc_driver = {
947 .probe = catc_probe, 952 .probe = catc_probe,
948 .disconnect = catc_disconnect, 953 .disconnect = catc_disconnect,
949 .id_table = catc_id_table, 954 .id_table = catc_id_table,
955 .disable_hub_initiated_lpm = 1,
950}; 956};
951 957
952module_usb_driver(catc_driver); 958module_usb_driver(catc_driver);
diff --git a/drivers/net/usb/cdc-phonet.c b/drivers/net/usb/cdc-phonet.c
index 3e41b00c6806..d848d4dd5754 100644
--- a/drivers/net/usb/cdc-phonet.c
+++ b/drivers/net/usb/cdc-phonet.c
@@ -457,6 +457,7 @@ static struct usb_driver usbpn_driver = {
457 .probe = usbpn_probe, 457 .probe = usbpn_probe,
458 .disconnect = usbpn_disconnect, 458 .disconnect = usbpn_disconnect,
459 .id_table = usbpn_ids, 459 .id_table = usbpn_ids,
460 .disable_hub_initiated_lpm = 1,
460}; 461};
461 462
462module_usb_driver(usbpn_driver); 463module_usb_driver(usbpn_driver);
diff --git a/drivers/net/usb/cdc_eem.c b/drivers/net/usb/cdc_eem.c
index 685a4e22c768..434d5af8e6fb 100644
--- a/drivers/net/usb/cdc_eem.c
+++ b/drivers/net/usb/cdc_eem.c
@@ -368,6 +368,7 @@ static struct usb_driver eem_driver = {
368 .disconnect = usbnet_disconnect, 368 .disconnect = usbnet_disconnect,
369 .suspend = usbnet_suspend, 369 .suspend = usbnet_suspend,
370 .resume = usbnet_resume, 370 .resume = usbnet_resume,
371 .disable_hub_initiated_lpm = 1,
371}; 372};
372 373
373module_usb_driver(eem_driver); 374module_usb_driver(eem_driver);
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
index fffee6aee8bb..a03de7197049 100644
--- a/drivers/net/usb/cdc_ether.c
+++ b/drivers/net/usb/cdc_ether.c
@@ -705,6 +705,7 @@ static struct usb_driver cdc_driver = {
705 .resume = usbnet_resume, 705 .resume = usbnet_resume,
706 .reset_resume = usbnet_resume, 706 .reset_resume = usbnet_resume,
707 .supports_autosuspend = 1, 707 .supports_autosuspend = 1,
708 .disable_hub_initiated_lpm = 1,
708}; 709};
709 710
710module_usb_driver(cdc_driver); 711module_usb_driver(cdc_driver);
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index 7adc9f6b0ea1..4b9513fcf275 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -1212,6 +1212,7 @@ static struct usb_driver cdc_ncm_driver = {
1212 .resume = usbnet_resume, 1212 .resume = usbnet_resume,
1213 .reset_resume = usbnet_resume, 1213 .reset_resume = usbnet_resume,
1214 .supports_autosuspend = 1, 1214 .supports_autosuspend = 1,
1215 .disable_hub_initiated_lpm = 1,
1215}; 1216};
1216 1217
1217static const struct ethtool_ops cdc_ncm_ethtool_ops = { 1218static const struct ethtool_ops cdc_ncm_ethtool_ops = {
diff --git a/drivers/net/usb/cdc_subset.c b/drivers/net/usb/cdc_subset.c
index b403d934e4e3..0d1fe89ae0bd 100644
--- a/drivers/net/usb/cdc_subset.c
+++ b/drivers/net/usb/cdc_subset.c
@@ -336,6 +336,7 @@ static struct usb_driver cdc_subset_driver = {
336 .resume = usbnet_resume, 336 .resume = usbnet_resume,
337 .disconnect = usbnet_disconnect, 337 .disconnect = usbnet_disconnect,
338 .id_table = products, 338 .id_table = products,
339 .disable_hub_initiated_lpm = 1,
339}; 340};
340 341
341module_usb_driver(cdc_subset_driver); 342module_usb_driver(cdc_subset_driver);
diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
index 0e0531356e62..49ab45e17fe8 100644
--- a/drivers/net/usb/cx82310_eth.c
+++ b/drivers/net/usb/cx82310_eth.c
@@ -327,6 +327,7 @@ static struct usb_driver cx82310_driver = {
327 .disconnect = usbnet_disconnect, 327 .disconnect = usbnet_disconnect,
328 .suspend = usbnet_suspend, 328 .suspend = usbnet_suspend,
329 .resume = usbnet_resume, 329 .resume = usbnet_resume,
330 .disable_hub_initiated_lpm = 1,
330}; 331};
331 332
332module_usb_driver(cx82310_driver); 333module_usb_driver(cx82310_driver);
diff --git a/drivers/net/usb/dm9601.c b/drivers/net/usb/dm9601.c
index b97226318ea5..e0433ce6ced7 100644
--- a/drivers/net/usb/dm9601.c
+++ b/drivers/net/usb/dm9601.c
@@ -670,6 +670,7 @@ static struct usb_driver dm9601_driver = {
670 .disconnect = usbnet_disconnect, 670 .disconnect = usbnet_disconnect,
671 .suspend = usbnet_suspend, 671 .suspend = usbnet_suspend,
672 .resume = usbnet_resume, 672 .resume = usbnet_resume,
673 .disable_hub_initiated_lpm = 1,
673}; 674};
674 675
675module_usb_driver(dm9601_driver); 676module_usb_driver(dm9601_driver);
diff --git a/drivers/net/usb/gl620a.c b/drivers/net/usb/gl620a.c
index 38266bdae26b..db3c8021f2a3 100644
--- a/drivers/net/usb/gl620a.c
+++ b/drivers/net/usb/gl620a.c
@@ -225,6 +225,7 @@ static struct usb_driver gl620a_driver = {
225 .disconnect = usbnet_disconnect, 225 .disconnect = usbnet_disconnect,
226 .suspend = usbnet_suspend, 226 .suspend = usbnet_suspend,
227 .resume = usbnet_resume, 227 .resume = usbnet_resume,
228 .disable_hub_initiated_lpm = 1,
228}; 229};
229 230
230module_usb_driver(gl620a_driver); 231module_usb_driver(gl620a_driver);
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index 2d2a6882ba33..042c1a99520f 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -3291,6 +3291,7 @@ static struct usb_driver hso_driver = {
3291 .resume = hso_resume, 3291 .resume = hso_resume,
3292 .reset_resume = hso_resume, 3292 .reset_resume = hso_resume,
3293 .supports_autosuspend = 1, 3293 .supports_autosuspend = 1,
3294 .disable_hub_initiated_lpm = 1,
3294}; 3295};
3295 3296
3296static int __init hso_init(void) 3297static int __init hso_init(void)
diff --git a/drivers/net/usb/int51x1.c b/drivers/net/usb/int51x1.c
index 12a22a453ff1..8de641713d5f 100644
--- a/drivers/net/usb/int51x1.c
+++ b/drivers/net/usb/int51x1.c
@@ -236,6 +236,7 @@ static struct usb_driver int51x1_driver = {
236 .disconnect = usbnet_disconnect, 236 .disconnect = usbnet_disconnect,
237 .suspend = usbnet_suspend, 237 .suspend = usbnet_suspend,
238 .resume = usbnet_resume, 238 .resume = usbnet_resume,
239 .disable_hub_initiated_lpm = 1,
239}; 240};
240 241
241module_usb_driver(int51x1_driver); 242module_usb_driver(int51x1_driver);
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
index dd78c4cbd459..964031e3da87 100644
--- a/drivers/net/usb/ipheth.c
+++ b/drivers/net/usb/ipheth.c
@@ -209,7 +209,8 @@ static void ipheth_rcvbulk_callback(struct urb *urb)
209 case 0: 209 case 0:
210 break; 210 break;
211 default: 211 default:
212 err("%s: urb status: %d", __func__, status); 212 dev_err(&dev->intf->dev, "%s: urb status: %d\n",
213 __func__, status);
213 return; 214 return;
214 } 215 }
215 216
@@ -222,7 +223,8 @@ static void ipheth_rcvbulk_callback(struct urb *urb)
222 223
223 skb = dev_alloc_skb(len); 224 skb = dev_alloc_skb(len);
224 if (!skb) { 225 if (!skb) {
225 err("%s: dev_alloc_skb: -ENOMEM", __func__); 226 dev_err(&dev->intf->dev, "%s: dev_alloc_skb: -ENOMEM\n",
227 __func__);
226 dev->net->stats.rx_dropped++; 228 dev->net->stats.rx_dropped++;
227 return; 229 return;
228 } 230 }
@@ -251,7 +253,8 @@ static void ipheth_sndbulk_callback(struct urb *urb)
251 status != -ENOENT && 253 status != -ENOENT &&
252 status != -ECONNRESET && 254 status != -ECONNRESET &&
253 status != -ESHUTDOWN) 255 status != -ESHUTDOWN)
254 err("%s: urb status: %d", __func__, status); 256 dev_err(&dev->intf->dev, "%s: urb status: %d\n",
257 __func__, status);
255 258
256 dev_kfree_skb_irq(dev->tx_skb); 259 dev_kfree_skb_irq(dev->tx_skb);
257 netif_wake_queue(dev->net); 260 netif_wake_queue(dev->net);
@@ -271,7 +274,8 @@ static int ipheth_carrier_set(struct ipheth_device *dev)
271 dev->ctrl_buf, IPHETH_CTRL_BUF_SIZE, 274 dev->ctrl_buf, IPHETH_CTRL_BUF_SIZE,
272 IPHETH_CTRL_TIMEOUT); 275 IPHETH_CTRL_TIMEOUT);
273 if (retval < 0) { 276 if (retval < 0) {
274 err("%s: usb_control_msg: %d", __func__, retval); 277 dev_err(&dev->intf->dev, "%s: usb_control_msg: %d\n",
278 __func__, retval);
275 return retval; 279 return retval;
276 } 280 }
277 281
@@ -308,9 +312,11 @@ static int ipheth_get_macaddr(struct ipheth_device *dev)
308 IPHETH_CTRL_BUF_SIZE, 312 IPHETH_CTRL_BUF_SIZE,
309 IPHETH_CTRL_TIMEOUT); 313 IPHETH_CTRL_TIMEOUT);
310 if (retval < 0) { 314 if (retval < 0) {
311 err("%s: usb_control_msg: %d", __func__, retval); 315 dev_err(&dev->intf->dev, "%s: usb_control_msg: %d\n",
316 __func__, retval);
312 } else if (retval < ETH_ALEN) { 317 } else if (retval < ETH_ALEN) {
313 err("%s: usb_control_msg: short packet: %d bytes", 318 dev_err(&dev->intf->dev,
319 "%s: usb_control_msg: short packet: %d bytes\n",
314 __func__, retval); 320 __func__, retval);
315 retval = -EINVAL; 321 retval = -EINVAL;
316 } else { 322 } else {
@@ -335,7 +341,8 @@ static int ipheth_rx_submit(struct ipheth_device *dev, gfp_t mem_flags)
335 341
336 retval = usb_submit_urb(dev->rx_urb, mem_flags); 342 retval = usb_submit_urb(dev->rx_urb, mem_flags);
337 if (retval) 343 if (retval)
338 err("%s: usb_submit_urb: %d", __func__, retval); 344 dev_err(&dev->intf->dev, "%s: usb_submit_urb: %d\n",
345 __func__, retval);
339 return retval; 346 return retval;
340} 347}
341 348
@@ -396,7 +403,8 @@ static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
396 403
397 retval = usb_submit_urb(dev->tx_urb, GFP_ATOMIC); 404 retval = usb_submit_urb(dev->tx_urb, GFP_ATOMIC);
398 if (retval) { 405 if (retval) {
399 err("%s: usb_submit_urb: %d", __func__, retval); 406 dev_err(&dev->intf->dev, "%s: usb_submit_urb: %d\n",
407 __func__, retval);
400 dev->net->stats.tx_errors++; 408 dev->net->stats.tx_errors++;
401 dev_kfree_skb_irq(skb); 409 dev_kfree_skb_irq(skb);
402 } else { 410 } else {
@@ -414,7 +422,7 @@ static void ipheth_tx_timeout(struct net_device *net)
414{ 422{
415 struct ipheth_device *dev = netdev_priv(net); 423 struct ipheth_device *dev = netdev_priv(net);
416 424
417 err("%s: TX timeout", __func__); 425 dev_err(&dev->intf->dev, "%s: TX timeout\n", __func__);
418 dev->net->stats.tx_errors++; 426 dev->net->stats.tx_errors++;
419 usb_unlink_urb(dev->tx_urb); 427 usb_unlink_urb(dev->tx_urb);
420} 428}
@@ -464,7 +472,7 @@ static int ipheth_probe(struct usb_interface *intf,
464 hintf = usb_altnum_to_altsetting(intf, IPHETH_ALT_INTFNUM); 472 hintf = usb_altnum_to_altsetting(intf, IPHETH_ALT_INTFNUM);
465 if (hintf == NULL) { 473 if (hintf == NULL) {
466 retval = -ENODEV; 474 retval = -ENODEV;
467 err("Unable to find alternate settings interface"); 475 dev_err(&intf->dev, "Unable to find alternate settings interface\n");
468 goto err_endpoints; 476 goto err_endpoints;
469 } 477 }
470 478
@@ -477,7 +485,7 @@ static int ipheth_probe(struct usb_interface *intf,
477 } 485 }
478 if (!(dev->bulk_in && dev->bulk_out)) { 486 if (!(dev->bulk_in && dev->bulk_out)) {
479 retval = -ENODEV; 487 retval = -ENODEV;
480 err("Unable to find endpoints"); 488 dev_err(&intf->dev, "Unable to find endpoints\n");
481 goto err_endpoints; 489 goto err_endpoints;
482 } 490 }
483 491
@@ -495,7 +503,7 @@ static int ipheth_probe(struct usb_interface *intf,
495 503
496 retval = ipheth_alloc_urbs(dev); 504 retval = ipheth_alloc_urbs(dev);
497 if (retval) { 505 if (retval) {
498 err("error allocating urbs: %d", retval); 506 dev_err(&intf->dev, "error allocating urbs: %d\n", retval);
499 goto err_alloc_urbs; 507 goto err_alloc_urbs;
500 } 508 }
501 509
@@ -506,7 +514,7 @@ static int ipheth_probe(struct usb_interface *intf,
506 514
507 retval = register_netdev(netdev); 515 retval = register_netdev(netdev);
508 if (retval) { 516 if (retval) {
509 err("error registering netdev: %d", retval); 517 dev_err(&intf->dev, "error registering netdev: %d\n", retval);
510 retval = -EIO; 518 retval = -EIO;
511 goto err_register_netdev; 519 goto err_register_netdev;
512 } 520 }
@@ -546,6 +554,7 @@ static struct usb_driver ipheth_driver = {
546 .probe = ipheth_probe, 554 .probe = ipheth_probe,
547 .disconnect = ipheth_disconnect, 555 .disconnect = ipheth_disconnect,
548 .id_table = ipheth_table, 556 .id_table = ipheth_table,
557 .disable_hub_initiated_lpm = 1,
549}; 558};
550 559
551module_usb_driver(ipheth_driver); 560module_usb_driver(ipheth_driver);
diff --git a/drivers/net/usb/kalmia.c b/drivers/net/usb/kalmia.c
index 7562649b3d6b..92c49e0a59ec 100644
--- a/drivers/net/usb/kalmia.c
+++ b/drivers/net/usb/kalmia.c
@@ -372,7 +372,8 @@ static struct usb_driver kalmia_driver = {
372 .probe = usbnet_probe, 372 .probe = usbnet_probe,
373 .disconnect = usbnet_disconnect, 373 .disconnect = usbnet_disconnect,
374 .suspend = usbnet_suspend, 374 .suspend = usbnet_suspend,
375 .resume = usbnet_resume 375 .resume = usbnet_resume,
376 .disable_hub_initiated_lpm = 1,
376}; 377};
377 378
378module_usb_driver(kalmia_driver); 379module_usb_driver(kalmia_driver);
diff --git a/drivers/net/usb/kaweth.c b/drivers/net/usb/kaweth.c
index df2a2cf35a99..d8ad55284389 100644
--- a/drivers/net/usb/kaweth.c
+++ b/drivers/net/usb/kaweth.c
@@ -179,6 +179,7 @@ static struct usb_driver kaweth_driver = {
179 .resume = kaweth_resume, 179 .resume = kaweth_resume,
180 .id_table = usb_klsi_table, 180 .id_table = usb_klsi_table,
181 .supports_autosuspend = 1, 181 .supports_autosuspend = 1,
182 .disable_hub_initiated_lpm = 1,
182}; 183};
183 184
184typedef __u8 eth_addr_t[6]; 185typedef __u8 eth_addr_t[6];
@@ -400,12 +401,13 @@ static int kaweth_download_firmware(struct kaweth_device *kaweth,
400 401
401 ret = request_firmware(&fw, fwname, &kaweth->dev->dev); 402 ret = request_firmware(&fw, fwname, &kaweth->dev->dev);
402 if (ret) { 403 if (ret) {
403 err("Firmware request failed\n"); 404 dev_err(&kaweth->intf->dev, "Firmware request failed\n");
404 return ret; 405 return ret;
405 } 406 }
406 407
407 if (fw->size > KAWETH_FIRMWARE_BUF_SIZE) { 408 if (fw->size > KAWETH_FIRMWARE_BUF_SIZE) {
408 err("Firmware too big: %zu", fw->size); 409 dev_err(&kaweth->intf->dev, "Firmware too big: %zu\n",
410 fw->size);
409 release_firmware(fw); 411 release_firmware(fw);
410 return -ENOSPC; 412 return -ENOSPC;
411 } 413 }
@@ -501,9 +503,10 @@ static void kaweth_resubmit_int_urb(struct kaweth_device *kaweth, gfp_t mf)
501 } 503 }
502 504
503 if (status) 505 if (status)
504 err ("can't resubmit intr, %s-%s, status %d", 506 dev_err(&kaweth->intf->dev,
505 kaweth->dev->bus->bus_name, 507 "can't resubmit intr, %s-%s, status %d\n",
506 kaweth->dev->devpath, status); 508 kaweth->dev->bus->bus_name,
509 kaweth->dev->devpath, status);
507} 510}
508 511
509static void int_callback(struct urb *u) 512static void int_callback(struct urb *u)
@@ -576,7 +579,8 @@ static int kaweth_resubmit_rx_urb(struct kaweth_device *kaweth,
576 kaweth->suspend_lowmem_rx = 1; 579 kaweth->suspend_lowmem_rx = 1;
577 schedule_delayed_work(&kaweth->lowmem_work, HZ/4); 580 schedule_delayed_work(&kaweth->lowmem_work, HZ/4);
578 } 581 }
579 err("resubmitting rx_urb %d failed", result); 582 dev_err(&kaweth->intf->dev, "resubmitting rx_urb %d failed\n",
583 result);
580 } else { 584 } else {
581 kaweth->suspend_lowmem_rx = 0; 585 kaweth->suspend_lowmem_rx = 0;
582 } 586 }
@@ -634,20 +638,21 @@ static void kaweth_usb_receive(struct urb *urb)
634 spin_unlock(&kaweth->device_lock); 638 spin_unlock(&kaweth->device_lock);
635 639
636 if(status && status != -EREMOTEIO && count != 1) { 640 if(status && status != -EREMOTEIO && count != 1) {
637 err("%s RX status: %d count: %d packet_len: %d", 641 dev_err(&kaweth->intf->dev,
638 net->name, 642 "%s RX status: %d count: %d packet_len: %d\n",
639 status, 643 net->name, status, count, (int)pkt_len);
640 count,
641 (int)pkt_len);
642 kaweth_resubmit_rx_urb(kaweth, GFP_ATOMIC); 644 kaweth_resubmit_rx_urb(kaweth, GFP_ATOMIC);
643 return; 645 return;
644 } 646 }
645 647
646 if(kaweth->net && (count > 2)) { 648 if(kaweth->net && (count > 2)) {
647 if(pkt_len > (count - 2)) { 649 if(pkt_len > (count - 2)) {
648 err("Packet length too long for USB frame (pkt_len: %x, count: %x)",pkt_len, count); 650 dev_err(&kaweth->intf->dev,
649 err("Packet len & 2047: %x", pkt_len & 2047); 651 "Packet length too long for USB frame (pkt_len: %x, count: %x)\n",
650 err("Count 2: %x", count2); 652 pkt_len, count);
653 dev_err(&kaweth->intf->dev, "Packet len & 2047: %x\n",
654 pkt_len & 2047);
655 dev_err(&kaweth->intf->dev, "Count 2: %x\n", count2);
651 kaweth_resubmit_rx_urb(kaweth, GFP_ATOMIC); 656 kaweth_resubmit_rx_urb(kaweth, GFP_ATOMIC);
652 return; 657 return;
653 } 658 }
@@ -686,7 +691,7 @@ static int kaweth_open(struct net_device *net)
686 691
687 res = usb_autopm_get_interface(kaweth->intf); 692 res = usb_autopm_get_interface(kaweth->intf);
688 if (res) { 693 if (res) {
689 err("Interface cannot be resumed."); 694 dev_err(&kaweth->intf->dev, "Interface cannot be resumed.\n");
690 return -EIO; 695 return -EIO;
691 } 696 }
692 res = kaweth_resubmit_rx_urb(kaweth, GFP_KERNEL); 697 res = kaweth_resubmit_rx_urb(kaweth, GFP_KERNEL);
@@ -907,7 +912,8 @@ static void kaweth_async_set_rx_mode(struct kaweth_device *kaweth)
907 KAWETH_CONTROL_TIMEOUT); 912 KAWETH_CONTROL_TIMEOUT);
908 913
909 if(result < 0) { 914 if(result < 0) {
910 err("Failed to set Rx mode: %d", result); 915 dev_err(&kaweth->intf->dev, "Failed to set Rx mode: %d\n",
916 result);
911 } 917 }
912 else { 918 else {
913 dbg("Set Rx mode to %d", packet_filter_bitmap); 919 dbg("Set Rx mode to %d", packet_filter_bitmap);
@@ -1045,7 +1051,8 @@ static int kaweth_probe(
1045 "kaweth/new_code.bin", 1051 "kaweth/new_code.bin",
1046 100, 1052 100,
1047 2)) < 0) { 1053 2)) < 0) {
1048 err("Error downloading firmware (%d)", result); 1054 dev_err(&intf->dev, "Error downloading firmware (%d)\n",
1055 result);
1049 goto err_fw; 1056 goto err_fw;
1050 } 1057 }
1051 1058
@@ -1053,7 +1060,9 @@ static int kaweth_probe(
1053 "kaweth/new_code_fix.bin", 1060 "kaweth/new_code_fix.bin",
1054 100, 1061 100,
1055 3)) < 0) { 1062 3)) < 0) {
1056 err("Error downloading firmware fix (%d)", result); 1063 dev_err(&intf->dev,
1064 "Error downloading firmware fix (%d)\n",
1065 result);
1057 goto err_fw; 1066 goto err_fw;
1058 } 1067 }
1059 1068
@@ -1061,7 +1070,9 @@ static int kaweth_probe(
1061 "kaweth/trigger_code.bin", 1070 "kaweth/trigger_code.bin",
1062 126, 1071 126,
1063 2)) < 0) { 1072 2)) < 0) {
1064 err("Error downloading trigger code (%d)", result); 1073 dev_err(&intf->dev,
1074 "Error downloading trigger code (%d)\n",
1075 result);
1065 goto err_fw; 1076 goto err_fw;
1066 1077
1067 } 1078 }
@@ -1070,13 +1081,14 @@ static int kaweth_probe(
1070 "kaweth/trigger_code_fix.bin", 1081 "kaweth/trigger_code_fix.bin",
1071 126, 1082 126,
1072 3)) < 0) { 1083 3)) < 0) {
1073 err("Error downloading trigger code fix (%d)", result); 1084 dev_err(&intf->dev, "Error downloading trigger code fix (%d)\n", result);
1074 goto err_fw; 1085 goto err_fw;
1075 } 1086 }
1076 1087
1077 1088
1078 if ((result = kaweth_trigger_firmware(kaweth, 126)) < 0) { 1089 if ((result = kaweth_trigger_firmware(kaweth, 126)) < 0) {
1079 err("Error triggering firmware (%d)", result); 1090 dev_err(&intf->dev, "Error triggering firmware (%d)\n",
1091 result);
1080 goto err_fw; 1092 goto err_fw;
1081 } 1093 }
1082 1094
@@ -1091,7 +1103,7 @@ err_fw:
1091 result = kaweth_read_configuration(kaweth); 1103 result = kaweth_read_configuration(kaweth);
1092 1104
1093 if(result < 0) { 1105 if(result < 0) {
1094 err("Error reading configuration (%d), no net device created", result); 1106 dev_err(&intf->dev, "Error reading configuration (%d), no net device created\n", result);
1095 goto err_free_netdev; 1107 goto err_free_netdev;
1096 } 1108 }
1097 1109
@@ -1103,7 +1115,7 @@ err_fw:
1103 if(!memcmp(&kaweth->configuration.hw_addr, 1115 if(!memcmp(&kaweth->configuration.hw_addr,
1104 &bcast_addr, 1116 &bcast_addr,
1105 sizeof(bcast_addr))) { 1117 sizeof(bcast_addr))) {
1106 err("Firmware not functioning properly, no net device created"); 1118 dev_err(&intf->dev, "Firmware not functioning properly, no net device created\n");
1107 goto err_free_netdev; 1119 goto err_free_netdev;
1108 } 1120 }
1109 1121
@@ -1113,7 +1125,7 @@ err_fw:
1113 } 1125 }
1114 1126
1115 if(kaweth_set_sofs_wait(kaweth, KAWETH_SOFS_TO_WAIT) < 0) { 1127 if(kaweth_set_sofs_wait(kaweth, KAWETH_SOFS_TO_WAIT) < 0) {
1116 err("Error setting SOFS wait"); 1128 dev_err(&intf->dev, "Error setting SOFS wait\n");
1117 goto err_free_netdev; 1129 goto err_free_netdev;
1118 } 1130 }
1119 1131
@@ -1123,7 +1135,7 @@ err_fw:
1123 KAWETH_PACKET_FILTER_MULTICAST); 1135 KAWETH_PACKET_FILTER_MULTICAST);
1124 1136
1125 if(result < 0) { 1137 if(result < 0) {
1126 err("Error setting receive filter"); 1138 dev_err(&intf->dev, "Error setting receive filter\n");
1127 goto err_free_netdev; 1139 goto err_free_netdev;
1128 } 1140 }
1129 1141
@@ -1175,7 +1187,7 @@ err_fw:
1175 1187
1176 SET_NETDEV_DEV(netdev, &intf->dev); 1188 SET_NETDEV_DEV(netdev, &intf->dev);
1177 if (register_netdev(netdev) != 0) { 1189 if (register_netdev(netdev) != 0) {
1178 err("Error registering netdev."); 1190 dev_err(&intf->dev, "Error registering netdev.\n");
1179 goto err_intfdata; 1191 goto err_intfdata;
1180 } 1192 }
1181 1193
diff --git a/drivers/net/usb/lg-vl600.c b/drivers/net/usb/lg-vl600.c
index 45a981fde43f..808d6506da41 100644
--- a/drivers/net/usb/lg-vl600.c
+++ b/drivers/net/usb/lg-vl600.c
@@ -344,6 +344,7 @@ static struct usb_driver lg_vl600_driver = {
344 .disconnect = usbnet_disconnect, 344 .disconnect = usbnet_disconnect,
345 .suspend = usbnet_suspend, 345 .suspend = usbnet_suspend,
346 .resume = usbnet_resume, 346 .resume = usbnet_resume,
347 .disable_hub_initiated_lpm = 1,
347}; 348};
348 349
349module_usb_driver(lg_vl600_driver); 350module_usb_driver(lg_vl600_driver);
diff --git a/drivers/net/usb/mcs7830.c b/drivers/net/usb/mcs7830.c
index c434b6ba0337..add1064f755d 100644
--- a/drivers/net/usb/mcs7830.c
+++ b/drivers/net/usb/mcs7830.c
@@ -690,6 +690,7 @@ static struct usb_driver mcs7830_driver = {
690 .suspend = usbnet_suspend, 690 .suspend = usbnet_suspend,
691 .resume = usbnet_resume, 691 .resume = usbnet_resume,
692 .reset_resume = mcs7830_reset_resume, 692 .reset_resume = mcs7830_reset_resume,
693 .disable_hub_initiated_lpm = 1,
693}; 694};
694 695
695module_usb_driver(mcs7830_driver); 696module_usb_driver(mcs7830_driver);
diff --git a/drivers/net/usb/net1080.c b/drivers/net/usb/net1080.c
index 83f965cb69e7..28c4d513ba85 100644
--- a/drivers/net/usb/net1080.c
+++ b/drivers/net/usb/net1080.c
@@ -587,6 +587,7 @@ static struct usb_driver net1080_driver = {
587 .disconnect = usbnet_disconnect, 587 .disconnect = usbnet_disconnect,
588 .suspend = usbnet_suspend, 588 .suspend = usbnet_suspend,
589 .resume = usbnet_resume, 589 .resume = usbnet_resume,
590 .disable_hub_initiated_lpm = 1,
590}; 591};
591 592
592module_usb_driver(net1080_driver); 593module_usb_driver(net1080_driver);
diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c
index 752393092325..7023220456c5 100644
--- a/drivers/net/usb/pegasus.c
+++ b/drivers/net/usb/pegasus.c
@@ -1489,6 +1489,7 @@ static struct usb_driver pegasus_driver = {
1489 .id_table = pegasus_ids, 1489 .id_table = pegasus_ids,
1490 .suspend = pegasus_suspend, 1490 .suspend = pegasus_suspend,
1491 .resume = pegasus_resume, 1491 .resume = pegasus_resume,
1492 .disable_hub_initiated_lpm = 1,
1492}; 1493};
1493 1494
1494static void __init parse_id(char *id) 1495static void __init parse_id(char *id)
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
index b2b035e29978..4584b9a805b3 100644
--- a/drivers/net/usb/plusb.c
+++ b/drivers/net/usb/plusb.c
@@ -152,6 +152,7 @@ static struct usb_driver plusb_driver = {
152 .disconnect = usbnet_disconnect, 152 .disconnect = usbnet_disconnect,
153 .suspend = usbnet_suspend, 153 .suspend = usbnet_suspend,
154 .resume = usbnet_resume, 154 .resume = usbnet_resume,
155 .disable_hub_initiated_lpm = 1,
155}; 156};
156 157
157module_usb_driver(plusb_driver); 158module_usb_driver(plusb_driver);
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 63cfd0b2c31a..380dbea6109d 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -560,6 +560,7 @@ static struct usb_driver qmi_wwan_driver = {
560 .resume = qmi_wwan_resume, 560 .resume = qmi_wwan_resume,
561 .reset_resume = qmi_wwan_resume, 561 .reset_resume = qmi_wwan_resume,
562 .supports_autosuspend = 1, 562 .supports_autosuspend = 1,
563 .disable_hub_initiated_lpm = 1,
563}; 564};
564 565
565static int __init qmi_wwan_init(void) 566static int __init qmi_wwan_init(void)
diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c
index 0d746b3fdef1..4a4335833c36 100644
--- a/drivers/net/usb/rndis_host.c
+++ b/drivers/net/usb/rndis_host.c
@@ -638,6 +638,7 @@ static struct usb_driver rndis_driver = {
638 .disconnect = usbnet_disconnect, 638 .disconnect = usbnet_disconnect,
639 .suspend = usbnet_suspend, 639 .suspend = usbnet_suspend,
640 .resume = usbnet_resume, 640 .resume = usbnet_resume,
641 .disable_hub_initiated_lpm = 1,
641}; 642};
642 643
643module_usb_driver(rndis_driver); 644module_usb_driver(rndis_driver);
diff --git a/drivers/net/usb/rtl8150.c b/drivers/net/usb/rtl8150.c
index d363b31053da..0e2c92e0e532 100644
--- a/drivers/net/usb/rtl8150.c
+++ b/drivers/net/usb/rtl8150.c
@@ -203,7 +203,8 @@ static int async_set_registers(rtl8150_t * dev, u16 indx, u16 size)
203 if ((ret = usb_submit_urb(dev->ctrl_urb, GFP_ATOMIC))) { 203 if ((ret = usb_submit_urb(dev->ctrl_urb, GFP_ATOMIC))) {
204 if (ret == -ENODEV) 204 if (ret == -ENODEV)
205 netif_device_detach(dev->netdev); 205 netif_device_detach(dev->netdev);
206 err("control request submission failed: %d", ret); 206 dev_err(&dev->udev->dev,
207 "control request submission failed: %d\n", ret);
207 } else 208 } else
208 set_bit(RX_REG_SET, &dev->flags); 209 set_bit(RX_REG_SET, &dev->flags);
209 210
@@ -516,9 +517,9 @@ resubmit:
516 if (res == -ENODEV) 517 if (res == -ENODEV)
517 netif_device_detach(dev->netdev); 518 netif_device_detach(dev->netdev);
518 else if (res) 519 else if (res)
519 err ("can't resubmit intr, %s-%s/input0, status %d", 520 dev_err(&dev->udev->dev,
520 dev->udev->bus->bus_name, 521 "can't resubmit intr, %s-%s/input0, status %d\n",
521 dev->udev->devpath, res); 522 dev->udev->bus->bus_name, dev->udev->devpath, res);
522} 523}
523 524
524static int rtl8150_suspend(struct usb_interface *intf, pm_message_t message) 525static int rtl8150_suspend(struct usb_interface *intf, pm_message_t message)
@@ -890,11 +891,11 @@ static int rtl8150_probe(struct usb_interface *intf,
890 dev->intr_interval = 100; /* 100ms */ 891 dev->intr_interval = 100; /* 100ms */
891 892
892 if (!alloc_all_urbs(dev)) { 893 if (!alloc_all_urbs(dev)) {
893 err("out of memory"); 894 dev_err(&intf->dev, "out of memory\n");
894 goto out; 895 goto out;
895 } 896 }
896 if (!rtl8150_reset(dev)) { 897 if (!rtl8150_reset(dev)) {
897 err("couldn't reset the device"); 898 dev_err(&intf->dev, "couldn't reset the device\n");
898 goto out1; 899 goto out1;
899 } 900 }
900 fill_skb_pool(dev); 901 fill_skb_pool(dev);
@@ -903,7 +904,7 @@ static int rtl8150_probe(struct usb_interface *intf,
903 usb_set_intfdata(intf, dev); 904 usb_set_intfdata(intf, dev);
904 SET_NETDEV_DEV(netdev, &intf->dev); 905 SET_NETDEV_DEV(netdev, &intf->dev);
905 if (register_netdev(netdev) != 0) { 906 if (register_netdev(netdev) != 0) {
906 err("couldn't register the device"); 907 dev_err(&intf->dev, "couldn't register the device\n");
907 goto out2; 908 goto out2;
908 } 909 }
909 910
@@ -947,7 +948,8 @@ static struct usb_driver rtl8150_driver = {
947 .disconnect = rtl8150_disconnect, 948 .disconnect = rtl8150_disconnect,
948 .id_table = rtl8150_table, 949 .id_table = rtl8150_table,
949 .suspend = rtl8150_suspend, 950 .suspend = rtl8150_suspend,
950 .resume = rtl8150_resume 951 .resume = rtl8150_resume,
952 .disable_hub_initiated_lpm = 1,
951}; 953};
952 954
953module_usb_driver(rtl8150_driver); 955module_usb_driver(rtl8150_driver);
diff --git a/drivers/net/usb/sierra_net.c b/drivers/net/usb/sierra_net.c
index b59cf20c7817..3faef5670d1f 100644
--- a/drivers/net/usb/sierra_net.c
+++ b/drivers/net/usb/sierra_net.c
@@ -982,6 +982,7 @@ static struct usb_driver sierra_net_driver = {
982 .suspend = usbnet_suspend, 982 .suspend = usbnet_suspend,
983 .resume = usbnet_resume, 983 .resume = usbnet_resume,
984 .no_dynamic_id = 1, 984 .no_dynamic_id = 1,
985 .disable_hub_initiated_lpm = 1,
985}; 986};
986 987
987module_usb_driver(sierra_net_driver); 988module_usb_driver(sierra_net_driver);
diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
index fb1a087b101d..1c6e51588da7 100644
--- a/drivers/net/usb/smsc75xx.c
+++ b/drivers/net/usb/smsc75xx.c
@@ -1254,6 +1254,7 @@ static struct usb_driver smsc75xx_driver = {
1254 .suspend = usbnet_suspend, 1254 .suspend = usbnet_suspend,
1255 .resume = usbnet_resume, 1255 .resume = usbnet_resume,
1256 .disconnect = usbnet_disconnect, 1256 .disconnect = usbnet_disconnect,
1257 .disable_hub_initiated_lpm = 1,
1257}; 1258};
1258 1259
1259module_usb_driver(smsc75xx_driver); 1260module_usb_driver(smsc75xx_driver);
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 94ae66999f59..b1112e753859 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -1297,6 +1297,7 @@ static struct usb_driver smsc95xx_driver = {
1297 .suspend = usbnet_suspend, 1297 .suspend = usbnet_suspend,
1298 .resume = usbnet_resume, 1298 .resume = usbnet_resume,
1299 .disconnect = usbnet_disconnect, 1299 .disconnect = usbnet_disconnect,
1300 .disable_hub_initiated_lpm = 1,
1300}; 1301};
1301 1302
1302module_usb_driver(smsc95xx_driver); 1303module_usb_driver(smsc95xx_driver);
diff --git a/drivers/net/usb/zaurus.c b/drivers/net/usb/zaurus.c
index 34db195fb8b0..35c90307d473 100644
--- a/drivers/net/usb/zaurus.c
+++ b/drivers/net/usb/zaurus.c
@@ -377,6 +377,7 @@ static struct usb_driver zaurus_driver = {
377 .disconnect = usbnet_disconnect, 377 .disconnect = usbnet_disconnect,
378 .suspend = usbnet_suspend, 378 .suspend = usbnet_suspend,
379 .resume = usbnet_resume, 379 .resume = usbnet_resume,
380 .disable_hub_initiated_lpm = 1,
380}; 381};
381 382
382module_usb_driver(zaurus_driver); 383module_usb_driver(zaurus_driver);
diff --git a/drivers/net/wireless/at76c50x-usb.c b/drivers/net/wireless/at76c50x-usb.c
index 3df0146b797e..efc162e0b511 100644
--- a/drivers/net/wireless/at76c50x-usb.c
+++ b/drivers/net/wireless/at76c50x-usb.c
@@ -1955,7 +1955,7 @@ static int at76_hw_scan(struct ieee80211_hw *hw,
1955 ret = at76_set_card_command(priv->udev, CMD_SCAN, &scan, sizeof(scan)); 1955 ret = at76_set_card_command(priv->udev, CMD_SCAN, &scan, sizeof(scan));
1956 1956
1957 if (ret < 0) { 1957 if (ret < 0) {
1958 err("CMD_SCAN failed: %d", ret); 1958 wiphy_err(priv->hw->wiphy, "CMD_SCAN failed: %d\n", ret);
1959 goto exit; 1959 goto exit;
1960 } 1960 }
1961 1961
@@ -2486,6 +2486,7 @@ static struct usb_driver at76_driver = {
2486 .probe = at76_probe, 2486 .probe = at76_probe,
2487 .disconnect = at76_disconnect, 2487 .disconnect = at76_disconnect,
2488 .id_table = dev_table, 2488 .id_table = dev_table,
2489 .disable_hub_initiated_lpm = 1,
2489}; 2490};
2490 2491
2491static int __init at76_mod_init(void) 2492static int __init at76_mod_init(void)
diff --git a/drivers/net/wireless/ath/ath6kl/usb.c b/drivers/net/wireless/ath/ath6kl/usb.c
index ec7f1f5fd1ca..44a795f14da9 100644
--- a/drivers/net/wireless/ath/ath6kl/usb.c
+++ b/drivers/net/wireless/ath/ath6kl/usb.c
@@ -1182,6 +1182,7 @@ static struct usb_driver ath6kl_usb_driver = {
1182 .disconnect = ath6kl_usb_remove, 1182 .disconnect = ath6kl_usb_remove,
1183 .id_table = ath6kl_usb_ids, 1183 .id_table = ath6kl_usb_ids,
1184 .supports_autosuspend = true, 1184 .supports_autosuspend = true,
1185 .disable_hub_initiated_lpm = 1,
1185}; 1186};
1186 1187
1187static int ath6kl_usb_init(void) 1188static int ath6kl_usb_init(void)
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
index f67cd952e741..aa327adcc3d8 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
@@ -1358,6 +1358,7 @@ static struct usb_driver ath9k_hif_usb_driver = {
1358#endif 1358#endif
1359 .id_table = ath9k_hif_usb_ids, 1359 .id_table = ath9k_hif_usb_ids,
1360 .soft_unbind = 1, 1360 .soft_unbind = 1,
1361 .disable_hub_initiated_lpm = 1,
1361}; 1362};
1362 1363
1363int ath9k_hif_usb_init(void) 1364int ath9k_hif_usb_init(void)
diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c
index 89821e4835c7..888152ce3eca 100644
--- a/drivers/net/wireless/ath/carl9170/usb.c
+++ b/drivers/net/wireless/ath/carl9170/usb.c
@@ -1159,6 +1159,7 @@ static struct usb_driver carl9170_driver = {
1159 .resume = carl9170_usb_resume, 1159 .resume = carl9170_usb_resume,
1160 .reset_resume = carl9170_usb_resume, 1160 .reset_resume = carl9170_usb_resume,
1161#endif /* CONFIG_PM */ 1161#endif /* CONFIG_PM */
1162 .disable_hub_initiated_lpm = 1,
1162}; 1163};
1163 1164
1164module_usb_driver(carl9170_driver); 1165module_usb_driver(carl9170_driver);
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
index 1d67ecf681b7..c5a34ffe6459 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
@@ -1596,7 +1596,8 @@ static struct usb_driver brcmf_usbdrvr = {
1596 .id_table = brcmf_usb_devid_table, 1596 .id_table = brcmf_usb_devid_table,
1597 .suspend = brcmf_usb_suspend, 1597 .suspend = brcmf_usb_suspend,
1598 .resume = brcmf_usb_resume, 1598 .resume = brcmf_usb_resume,
1599 .supports_autosuspend = 1 1599 .supports_autosuspend = 1,
1600 .disable_hub_initiated_lpm = 1,
1600}; 1601};
1601 1602
1602void brcmf_usb_exit(void) 1603void brcmf_usb_exit(void)
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
index 75403e6e3990..cd3b0d400618 100644
--- a/drivers/net/wireless/libertas/if_usb.c
+++ b/drivers/net/wireless/libertas/if_usb.c
@@ -1011,6 +1011,7 @@ static struct usb_driver if_usb_driver = {
1011 .suspend = if_usb_suspend, 1011 .suspend = if_usb_suspend,
1012 .resume = if_usb_resume, 1012 .resume = if_usb_resume,
1013 .reset_resume = if_usb_resume, 1013 .reset_resume = if_usb_resume,
1014 .disable_hub_initiated_lpm = 1,
1014}; 1015};
1015 1016
1016module_usb_driver(if_usb_driver); 1017module_usb_driver(if_usb_driver);
diff --git a/drivers/net/wireless/libertas_tf/if_usb.c b/drivers/net/wireless/libertas_tf/if_usb.c
index 7ced130f4f9e..19a5a92dd779 100644
--- a/drivers/net/wireless/libertas_tf/if_usb.c
+++ b/drivers/net/wireless/libertas_tf/if_usb.c
@@ -920,6 +920,7 @@ static struct usb_driver if_usb_driver = {
920 .id_table = if_usb_table, 920 .id_table = if_usb_table,
921 .suspend = if_usb_suspend, 921 .suspend = if_usb_suspend,
922 .resume = if_usb_resume, 922 .resume = if_usb_resume,
923 .disable_hub_initiated_lpm = 1,
923}; 924};
924 925
925module_usb_driver(if_usb_driver); 926module_usb_driver(if_usb_driver);
diff --git a/drivers/net/wireless/orinoco/orinoco_usb.c b/drivers/net/wireless/orinoco/orinoco_usb.c
index f634d4582bfe..7f53cea2f205 100644
--- a/drivers/net/wireless/orinoco/orinoco_usb.c
+++ b/drivers/net/wireless/orinoco/orinoco_usb.c
@@ -1752,6 +1752,7 @@ static struct usb_driver orinoco_driver = {
1752 .probe = ezusb_probe, 1752 .probe = ezusb_probe,
1753 .disconnect = ezusb_disconnect, 1753 .disconnect = ezusb_disconnect,
1754 .id_table = ezusb_table, 1754 .id_table = ezusb_table,
1755 .disable_hub_initiated_lpm = 1,
1755}; 1756};
1756 1757
1757module_usb_driver(orinoco_driver); 1758module_usb_driver(orinoco_driver);
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
index e1eac830e2fc..7f207b6e9552 100644
--- a/drivers/net/wireless/p54/p54usb.c
+++ b/drivers/net/wireless/p54/p54usb.c
@@ -1140,6 +1140,7 @@ static struct usb_driver p54u_driver = {
1140 .reset_resume = p54u_resume, 1140 .reset_resume = p54u_resume,
1141#endif /* CONFIG_PM */ 1141#endif /* CONFIG_PM */
1142 .soft_unbind = 1, 1142 .soft_unbind = 1,
1143 .disable_hub_initiated_lpm = 1,
1143}; 1144};
1144 1145
1145module_usb_driver(p54u_driver); 1146module_usb_driver(p54u_driver);
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
index b91d1bb30b41..c5404eb82b2f 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -3765,6 +3765,7 @@ static struct usb_driver rndis_wlan_driver = {
3765 .disconnect = usbnet_disconnect, 3765 .disconnect = usbnet_disconnect,
3766 .suspend = usbnet_suspend, 3766 .suspend = usbnet_suspend,
3767 .resume = usbnet_resume, 3767 .resume = usbnet_resume,
3768 .disable_hub_initiated_lpm = 1,
3768}; 3769};
3769 3770
3770module_usb_driver(rndis_wlan_driver); 3771module_usb_driver(rndis_wlan_driver);
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index c88fd3e61090..669aecdb411d 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -1980,6 +1980,7 @@ static struct usb_driver rt2500usb_driver = {
1980 .disconnect = rt2x00usb_disconnect, 1980 .disconnect = rt2x00usb_disconnect,
1981 .suspend = rt2x00usb_suspend, 1981 .suspend = rt2x00usb_suspend,
1982 .resume = rt2x00usb_resume, 1982 .resume = rt2x00usb_resume,
1983 .disable_hub_initiated_lpm = 1,
1983}; 1984};
1984 1985
1985module_usb_driver(rt2500usb_driver); 1986module_usb_driver(rt2500usb_driver);
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 5601302d09ad..bf78317a6adb 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -1302,6 +1302,7 @@ static struct usb_driver rt2800usb_driver = {
1302 .disconnect = rt2x00usb_disconnect, 1302 .disconnect = rt2x00usb_disconnect,
1303 .suspend = rt2x00usb_suspend, 1303 .suspend = rt2x00usb_suspend,
1304 .resume = rt2x00usb_resume, 1304 .resume = rt2x00usb_resume,
1305 .disable_hub_initiated_lpm = 1,
1305}; 1306};
1306 1307
1307module_usb_driver(rt2800usb_driver); 1308module_usb_driver(rt2800usb_driver);
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index 155136691a38..77ccbbc7da41 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -2527,6 +2527,7 @@ static struct usb_driver rt73usb_driver = {
2527 .disconnect = rt2x00usb_disconnect, 2527 .disconnect = rt2x00usb_disconnect,
2528 .suspend = rt2x00usb_suspend, 2528 .suspend = rt2x00usb_suspend,
2529 .resume = rt2x00usb_resume, 2529 .resume = rt2x00usb_resume,
2530 .disable_hub_initiated_lpm = 1,
2530}; 2531};
2531 2532
2532module_usb_driver(rt73usb_driver); 2533module_usb_driver(rt73usb_driver);
diff --git a/drivers/net/wireless/rtl818x/rtl8187/dev.c b/drivers/net/wireless/rtl818x/rtl8187/dev.c
index d8114962b0c9..4fb1ca1b86b9 100644
--- a/drivers/net/wireless/rtl818x/rtl8187/dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8187/dev.c
@@ -1663,6 +1663,7 @@ static struct usb_driver rtl8187_driver = {
1663 .id_table = rtl8187_table, 1663 .id_table = rtl8187_table,
1664 .probe = rtl8187_probe, 1664 .probe = rtl8187_probe,
1665 .disconnect = __devexit_p(rtl8187_disconnect), 1665 .disconnect = __devexit_p(rtl8187_disconnect),
1666 .disable_hub_initiated_lpm = 1,
1666}; 1667};
1667 1668
1668module_usb_driver(rtl8187_driver); 1669module_usb_driver(rtl8187_driver);
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
index 7737fb0c6661..d228358e6a40 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
@@ -373,6 +373,7 @@ static struct usb_driver rtl8192cu_driver = {
373#ifdef CONFIG_AUTOSUSPEND 373#ifdef CONFIG_AUTOSUSPEND
374 .supports_autosuspend = 1, 374 .supports_autosuspend = 1,
375#endif 375#endif
376 .disable_hub_initiated_lpm = 1,
376}; 377};
377 378
378module_usb_driver(rtl8192cu_driver); 379module_usb_driver(rtl8192cu_driver);
diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c
index a66b93b7ff9a..48273dd05b63 100644
--- a/drivers/net/wireless/zd1201.c
+++ b/drivers/net/wireless/zd1201.c
@@ -1905,6 +1905,7 @@ static struct usb_driver zd1201_usb = {
1905 .id_table = zd1201_table, 1905 .id_table = zd1201_table,
1906 .suspend = zd1201_suspend, 1906 .suspend = zd1201_suspend,
1907 .resume = zd1201_resume, 1907 .resume = zd1201_resume,
1908 .disable_hub_initiated_lpm = 1,
1908}; 1909};
1909 1910
1910module_usb_driver(zd1201_usb); 1911module_usb_driver(zd1201_usb);
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index f766b3e67c6d..af83c43bcdb1 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -1542,6 +1542,7 @@ static struct usb_driver driver = {
1542 .disconnect = disconnect, 1542 .disconnect = disconnect,
1543 .pre_reset = pre_reset, 1543 .pre_reset = pre_reset,
1544 .post_reset = post_reset, 1544 .post_reset = post_reset,
1545 .disable_hub_initiated_lpm = 1,
1545}; 1546};
1546 1547
1547struct workqueue_struct *zd_workqueue; 1548struct workqueue_struct *zd_workqueue;
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 97d412d91458..32bd967f4262 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -68,8 +68,6 @@ source "drivers/staging/octeon/Kconfig"
68 68
69source "drivers/staging/serqt_usb2/Kconfig" 69source "drivers/staging/serqt_usb2/Kconfig"
70 70
71source "drivers/staging/quatech_usb2/Kconfig"
72
73source "drivers/staging/vt6655/Kconfig" 71source "drivers/staging/vt6655/Kconfig"
74 72
75source "drivers/staging/vt6656/Kconfig" 73source "drivers/staging/vt6656/Kconfig"
@@ -132,4 +130,6 @@ source "drivers/staging/ramster/Kconfig"
132 130
133source "drivers/staging/ozwpan/Kconfig" 131source "drivers/staging/ozwpan/Kconfig"
134 132
133source "drivers/staging/ccg/Kconfig"
134
135endif # STAGING 135endif # STAGING
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index ffe7d44374e6..eae8a21f46b8 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -25,7 +25,6 @@ obj-$(CONFIG_TRANZPORT) += frontier/
25obj-$(CONFIG_IDE_PHISON) += phison/ 25obj-$(CONFIG_IDE_PHISON) += phison/
26obj-$(CONFIG_LINE6_USB) += line6/ 26obj-$(CONFIG_LINE6_USB) += line6/
27obj-$(CONFIG_USB_SERIAL_QUATECH2) += serqt_usb2/ 27obj-$(CONFIG_USB_SERIAL_QUATECH2) += serqt_usb2/
28obj-$(CONFIG_USB_SERIAL_QUATECH_USB2) += quatech_usb2/
29obj-$(CONFIG_OCTEON_ETHERNET) += octeon/ 28obj-$(CONFIG_OCTEON_ETHERNET) += octeon/
30obj-$(CONFIG_VT6655) += vt6655/ 29obj-$(CONFIG_VT6655) += vt6655/
31obj-$(CONFIG_VT6656) += vt6656/ 30obj-$(CONFIG_VT6656) += vt6656/
@@ -57,3 +56,4 @@ obj-$(CONFIG_ANDROID) += android/
57obj-$(CONFIG_PHONE) += telephony/ 56obj-$(CONFIG_PHONE) += telephony/
58obj-$(CONFIG_RAMSTER) += ramster/ 57obj-$(CONFIG_RAMSTER) += ramster/
59obj-$(CONFIG_USB_WPAN_HCD) += ozwpan/ 58obj-$(CONFIG_USB_WPAN_HCD) += ozwpan/
59obj-$(CONFIG_USB_G_CCG) += ccg/
diff --git a/drivers/staging/asus_oled/asus_oled.c b/drivers/staging/asus_oled/asus_oled.c
index 83549d9cfefc..510d79639217 100644
--- a/drivers/staging/asus_oled/asus_oled.c
+++ b/drivers/staging/asus_oled/asus_oled.c
@@ -782,20 +782,20 @@ static int __init asus_oled_init(void)
782 oled_class = class_create(THIS_MODULE, ASUS_OLED_UNDERSCORE_NAME); 782 oled_class = class_create(THIS_MODULE, ASUS_OLED_UNDERSCORE_NAME);
783 783
784 if (IS_ERR(oled_class)) { 784 if (IS_ERR(oled_class)) {
785 err("Error creating " ASUS_OLED_UNDERSCORE_NAME " class"); 785 printk(KERN_ERR "Error creating " ASUS_OLED_UNDERSCORE_NAME " class\n");
786 return PTR_ERR(oled_class); 786 return PTR_ERR(oled_class);
787 } 787 }
788 788
789 retval = class_create_file(oled_class, &class_attr_version.attr); 789 retval = class_create_file(oled_class, &class_attr_version.attr);
790 if (retval) { 790 if (retval) {
791 err("Error creating class version file"); 791 printk(KERN_ERR "Error creating class version file\n");
792 goto error; 792 goto error;
793 } 793 }
794 794
795 retval = usb_register(&oled_driver); 795 retval = usb_register(&oled_driver);
796 796
797 if (retval) { 797 if (retval) {
798 err("usb_register failed. Error number %d", retval); 798 printk(KERN_ERR "usb_register failed. Error number %d\n", retval);
799 goto error; 799 goto error;
800 } 800 }
801 801
diff --git a/drivers/staging/ccg/Kconfig b/drivers/staging/ccg/Kconfig
new file mode 100644
index 000000000000..ff05e52392bf
--- /dev/null
+++ b/drivers/staging/ccg/Kconfig
@@ -0,0 +1,20 @@
1if USB_GADGET
2
3config USB_G_CCG
4 tristate "Configurable Composite Gadget (STAGING)"
5 depends on STAGING && !USB_ZERO && !USB_ZERO_HNPTEST && !USB_AUDIO && !GADGET_UAC1 && !USB_ETH && !USB_ETH_RNDIS && !USB_ETH_EEM && !USB_G_NCM && !USB_GADGETFS && !USB_FUNCTIONFS && !USB_FUNCTIONFS_ETH && !USB_FUNCTIONFS_RNDIS && !USB_FUNCTIONFS_GENERIC && !USB_FILE_STORAGE && !USB_FILE_STORAGE_TEST && !USB_MASS_STORAGE && !USB_G_SERIAL && !USB_MIDI_GADGET && !USB_G_PRINTER && !USB_CDC_COMPOSITE && !USB_G_NOKIA && !USB_G_ACM_MS && !USB_G_MULTI && !USB_G_MULTI_RNDIS && !USB_G_MULTI_CDC && !USB_G_HID && !USB_G_DBGP && !USB_G_WEBCAM
6 help
7 The Configurable Composite Gadget supports multiple USB
8 functions: acm, mass storage, rndis and FunctionFS.
9 Each function can be configured and enabled/disabled
10 dynamically from userspace through a sysfs interface.
11
12 In order to compile this (either as a module or built-in),
13 "USB Gadget Drivers" and anything under it must not be
14 selected compiled-in in
15 Device Drivers->USB Support->USB Gadget Support.
16 However, you can say "M" there, if you do, the
17 Configurable Composite Gadget can be compiled "M" only
18 or not at all.
19
20endif # USB_GADGET
diff --git a/drivers/staging/ccg/Makefile b/drivers/staging/ccg/Makefile
new file mode 100644
index 000000000000..693da637a6d8
--- /dev/null
+++ b/drivers/staging/ccg/Makefile
@@ -0,0 +1,4 @@
1g_ccg-y := ccg.o
2ccflags-y += -Idrivers/usb/gadget
3
4obj-$(CONFIG_USB_G_CCG) += g_ccg.o
diff --git a/drivers/staging/ccg/TODO b/drivers/staging/ccg/TODO
new file mode 100644
index 000000000000..18612fe70171
--- /dev/null
+++ b/drivers/staging/ccg/TODO
@@ -0,0 +1,6 @@
1TODO:
2 - change configuration interface from sysfs to configfs
3
4Please send patches to Greg Kroah-Hartmann <gregkh@linuxfoundation.org>,
5Andrzej Pietrasiewicz <andrzej.p@samsung.com>, and
6Cc: Mike Lockwood <lockwood@android.com>
diff --git a/drivers/staging/ccg/ccg.c b/drivers/staging/ccg/ccg.c
new file mode 100644
index 000000000000..a5b36a97598d
--- /dev/null
+++ b/drivers/staging/ccg/ccg.c
@@ -0,0 +1,1299 @@
1/*
2 * Configurable Composite Gadget
3 *
4 * Initially contributed as "Android Composite Gdaget" by:
5 *
6 * Copyright (C) 2008 Google, Inc.
7 * Author: Mike Lockwood <lockwood@android.com>
8 * Benoit Goby <benoit@android.com>
9 *
10 * Tailoring it to become a generic Configurable Composite Gadget is
11 *
12 * Copyright (C) 2012 Samsung Electronics
13 * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
14 *
15 * This software is licensed under the terms of the GNU General Public
16 * License version 2, as published by the Free Software Foundation, and
17 * may be copied, distributed, and modified under those terms.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 */
25
26#include <linux/init.h>
27#include <linux/module.h>
28#include <linux/fs.h>
29#include <linux/delay.h>
30#include <linux/kernel.h>
31#include <linux/utsname.h>
32#include <linux/platform_device.h>
33
34#include <linux/usb/ch9.h>
35#include <linux/usb/composite.h>
36#include <linux/usb/gadget.h>
37
38#include "gadget_chips.h"
39
40/*
41 * Kbuild is not very cooperative with respect to linking separately
42 * compiled library objects into one module. So for now we won't use
43 * separate compilation ... ensuring init/exit sections work to shrink
44 * the runtime footprint, and giving us at least some parts of what
45 * a "gcc --combine ... part1.c part2.c part3.c ... " build would.
46 */
47#include "../../usb/gadget/usbstring.c"
48#include "../../usb/gadget/config.c"
49#include "../../usb/gadget/epautoconf.c"
50#include "../../usb/gadget/composite.c"
51
52#include "../../usb/gadget/f_mass_storage.c"
53#include "../../usb/gadget/u_serial.c"
54#include "../../usb/gadget/f_acm.c"
55#define USB_ETH_RNDIS y
56#include "../../usb/gadget/f_rndis.c"
57#include "../../usb/gadget/rndis.c"
58#include "../../usb/gadget/u_ether.c"
59#include "../../usb/gadget/f_fs.c"
60
61MODULE_AUTHOR("Mike Lockwood, Andrzej Pietrasiewicz");
62MODULE_DESCRIPTION("Configurable Composite USB Gadget");
63MODULE_LICENSE("GPL");
64MODULE_VERSION("1.0");
65
66static const char longname[] = "Configurable Composite Gadget";
67
68/* Default vendor and product IDs, overridden by userspace */
69#define VENDOR_ID 0x1d6b /* Linux Foundation */
70#define PRODUCT_ID 0x0107
71#define GFS_MAX_DEVS 10
72
73struct ccg_usb_function {
74 char *name;
75 void *config;
76
77 struct device *dev;
78 char *dev_name;
79 struct device_attribute **attributes;
80
81 /* for ccg_dev.enabled_functions */
82 struct list_head enabled_list;
83
84 /* Optional: initialization during gadget bind */
85 int (*init)(struct ccg_usb_function *, struct usb_composite_dev *);
86 /* Optional: cleanup during gadget unbind */
87 void (*cleanup)(struct ccg_usb_function *);
88
89 int (*bind_config)(struct ccg_usb_function *,
90 struct usb_configuration *);
91
92 /* Optional: called when the configuration is removed */
93 void (*unbind_config)(struct ccg_usb_function *,
94 struct usb_configuration *);
95 /* Optional: handle ctrl requests before the device is configured */
96 int (*ctrlrequest)(struct ccg_usb_function *,
97 struct usb_composite_dev *,
98 const struct usb_ctrlrequest *);
99};
100
101struct ffs_obj {
102 const char *name;
103 bool mounted;
104 bool desc_ready;
105 bool used;
106 struct ffs_data *ffs_data;
107};
108
109struct ccg_dev {
110 struct ccg_usb_function **functions;
111 struct list_head enabled_functions;
112 struct usb_composite_dev *cdev;
113 struct device *dev;
114
115 bool enabled;
116 struct mutex mutex;
117 bool connected;
118 bool sw_connected;
119 struct work_struct work;
120
121 unsigned int max_func_num;
122 unsigned int func_num;
123 struct ffs_obj ffs_tab[GFS_MAX_DEVS];
124};
125
126static struct class *ccg_class;
127static struct ccg_dev *_ccg_dev;
128static int ccg_bind_config(struct usb_configuration *c);
129static void ccg_unbind_config(struct usb_configuration *c);
130
131static char func_names_buf[256];
132
133static struct usb_device_descriptor device_desc = {
134 .bLength = sizeof(device_desc),
135 .bDescriptorType = USB_DT_DEVICE,
136 .bcdUSB = __constant_cpu_to_le16(0x0200),
137 .bDeviceClass = USB_CLASS_PER_INTERFACE,
138 .idVendor = __constant_cpu_to_le16(VENDOR_ID),
139 .idProduct = __constant_cpu_to_le16(PRODUCT_ID),
140 .bcdDevice = __constant_cpu_to_le16(0xffff),
141 .bNumConfigurations = 1,
142};
143
144static struct usb_configuration ccg_config_driver = {
145 .label = "ccg",
146 .unbind = ccg_unbind_config,
147 .bConfigurationValue = 1,
148 .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
149 .bMaxPower = 0xFA, /* 500ma */
150};
151
152static void ccg_work(struct work_struct *data)
153{
154 struct ccg_dev *dev = container_of(data, struct ccg_dev, work);
155 struct usb_composite_dev *cdev = dev->cdev;
156 static char *disconnected[2] = { "USB_STATE=DISCONNECTED", NULL };
157 static char *connected[2] = { "USB_STATE=CONNECTED", NULL };
158 static char *configured[2] = { "USB_STATE=CONFIGURED", NULL };
159 char **uevent_envp = NULL;
160 unsigned long flags;
161
162 spin_lock_irqsave(&cdev->lock, flags);
163 if (cdev->config)
164 uevent_envp = configured;
165 else if (dev->connected != dev->sw_connected)
166 uevent_envp = dev->connected ? connected : disconnected;
167 dev->sw_connected = dev->connected;
168 spin_unlock_irqrestore(&cdev->lock, flags);
169
170 if (uevent_envp) {
171 kobject_uevent_env(&dev->dev->kobj, KOBJ_CHANGE, uevent_envp);
172 pr_info("%s: sent uevent %s\n", __func__, uevent_envp[0]);
173 } else {
174 pr_info("%s: did not send uevent (%d %d %p)\n", __func__,
175 dev->connected, dev->sw_connected, cdev->config);
176 }
177}
178
179
180/*-------------------------------------------------------------------------*/
181/* Supported functions initialization */
182
183static struct ffs_obj *functionfs_find_dev(struct ccg_dev *dev,
184 const char *dev_name)
185{
186 int i;
187
188 for (i = 0; i < dev->max_func_num; i++)
189 if (strcmp(dev->ffs_tab[i].name, dev_name) == 0)
190 return &dev->ffs_tab[i];
191
192 return NULL;
193}
194
195static bool functionfs_all_ready(struct ccg_dev *dev)
196{
197 int i;
198
199 for (i = 0; i < dev->max_func_num; i++)
200 if (dev->ffs_tab[i].used && !dev->ffs_tab[i].desc_ready)
201 return false;
202
203 return true;
204}
205
206static int functionfs_ready_callback(struct ffs_data *ffs)
207{
208 struct ffs_obj *ffs_obj;
209 int ret;
210
211 mutex_lock(&_ccg_dev->mutex);
212
213 ffs_obj = ffs->private_data;
214 if (!ffs_obj) {
215 ret = -EINVAL;
216 goto done;
217 }
218 if (WARN_ON(ffs_obj->desc_ready)) {
219 ret = -EBUSY;
220 goto done;
221 }
222 ffs_obj->ffs_data = ffs;
223
224 if (functionfs_all_ready(_ccg_dev)) {
225 ret = -EBUSY;
226 goto done;
227 }
228 ffs_obj->desc_ready = true;
229
230done:
231 mutex_unlock(&_ccg_dev->mutex);
232 return ret;
233}
234
235static void reset_usb(struct ccg_dev *dev)
236{
237 /* Cancel pending control requests */
238 usb_ep_dequeue(dev->cdev->gadget->ep0, dev->cdev->req);
239 usb_remove_config(dev->cdev, &ccg_config_driver);
240 dev->enabled = false;
241 usb_gadget_disconnect(dev->cdev->gadget);
242}
243
244static void functionfs_closed_callback(struct ffs_data *ffs)
245{
246 struct ffs_obj *ffs_obj;
247
248 mutex_lock(&_ccg_dev->mutex);
249
250 ffs_obj = ffs->private_data;
251 if (!ffs_obj)
252 goto done;
253
254 ffs_obj->desc_ready = false;
255
256 if (_ccg_dev->enabled)
257 reset_usb(_ccg_dev);
258
259done:
260 mutex_unlock(&_ccg_dev->mutex);
261}
262
263static void *functionfs_acquire_dev_callback(const char *dev_name)
264{
265 struct ffs_obj *ffs_dev;
266
267 mutex_lock(&_ccg_dev->mutex);
268
269 ffs_dev = functionfs_find_dev(_ccg_dev, dev_name);
270 if (!ffs_dev) {
271 ffs_dev = ERR_PTR(-ENODEV);
272 goto done;
273 }
274
275 if (ffs_dev->mounted) {
276 ffs_dev = ERR_PTR(-EBUSY);
277 goto done;
278 }
279 ffs_dev->mounted = true;
280
281done:
282 mutex_unlock(&_ccg_dev->mutex);
283 return ffs_dev;
284}
285
286static void functionfs_release_dev_callback(struct ffs_data *ffs_data)
287{
288 struct ffs_obj *ffs_dev;
289
290 mutex_lock(&_ccg_dev->mutex);
291
292 ffs_dev = ffs_data->private_data;
293 if (ffs_dev)
294 ffs_dev->mounted = false;
295
296 mutex_unlock(&_ccg_dev->mutex);
297}
298
299static int functionfs_function_init(struct ccg_usb_function *f,
300 struct usb_composite_dev *cdev)
301{
302 return functionfs_init();
303}
304
305static void functionfs_function_cleanup(struct ccg_usb_function *f)
306{
307 functionfs_cleanup();
308}
309
310static int functionfs_function_bind_config(struct ccg_usb_function *f,
311 struct usb_configuration *c)
312{
313 struct ccg_dev *dev = _ccg_dev;
314 int i, ret;
315
316 for (i = dev->max_func_num; i--; ) {
317 if (!dev->ffs_tab[i].used)
318 continue;
319 ret = functionfs_bind(dev->ffs_tab[i].ffs_data, c->cdev);
320 if (unlikely(ret < 0)) {
321 while (++i < dev->max_func_num)
322 functionfs_unbind(dev->ffs_tab[i].ffs_data);
323 return ret;
324 }
325 }
326
327 for (i = dev->max_func_num; i--; ) {
328 if (!dev->ffs_tab[i].used)
329 continue;
330 ret = functionfs_bind_config(c->cdev, c,
331 dev->ffs_tab[i].ffs_data);
332 if (unlikely(ret < 0))
333 return ret;
334 }
335
336 return 0;
337}
338
339static void functionfs_function_unbind_config(struct ccg_usb_function *f,
340 struct usb_configuration *c)
341{
342 struct ccg_dev *dev = _ccg_dev;
343 int i;
344
345 for (i = dev->max_func_num; i--; )
346 if (dev->ffs_tab[i].ffs_data)
347 functionfs_unbind(dev->ffs_tab[i].ffs_data);
348}
349
350static ssize_t functionfs_user_functions_show(struct device *_dev,
351 struct device_attribute *attr,
352 char *buf)
353{
354 struct ccg_dev *dev = _ccg_dev;
355 char *buff = buf;
356 int i;
357
358 mutex_lock(&dev->mutex);
359
360 for (i = 0; i < dev->max_func_num; i++)
361 buff += snprintf(buff, PAGE_SIZE + buf - buff, "%s,",
362 dev->ffs_tab[i].name);
363
364 mutex_unlock(&dev->mutex);
365
366 if (buff != buf)
367 *(buff - 1) = '\n';
368 return buff - buf;
369}
370
371static ssize_t functionfs_user_functions_store(struct device *_dev,
372 struct device_attribute *attr,
373 const char *buff, size_t size)
374{
375 struct ccg_dev *dev = _ccg_dev;
376 char *name, *b;
377 ssize_t ret = size;
378 int i;
379
380 buff = skip_spaces(buff);
381 if (!*buff)
382 return -EINVAL;
383
384 mutex_lock(&dev->mutex);
385
386 if (dev->enabled) {
387 ret = -EBUSY;
388 goto end;
389 }
390
391 for (i = 0; i < dev->max_func_num; i++)
392 if (dev->ffs_tab[i].mounted) {
393 ret = -EBUSY;
394 goto end;
395 }
396
397 strlcpy(func_names_buf, buff, sizeof(func_names_buf));
398 b = strim(func_names_buf);
399
400 /* replace the list of functions */
401 dev->max_func_num = 0;
402 while (b) {
403 name = strsep(&b, ",");
404 if (dev->max_func_num == GFS_MAX_DEVS) {
405 ret = -ENOSPC;
406 goto end;
407 }
408 if (functionfs_find_dev(dev, name)) {
409 ret = -EEXIST;
410 continue;
411 }
412 dev->ffs_tab[dev->max_func_num++].name = name;
413 }
414
415end:
416 mutex_unlock(&dev->mutex);
417 return ret;
418}
419
420static DEVICE_ATTR(user_functions, S_IRUGO | S_IWUSR,
421 functionfs_user_functions_show,
422 functionfs_user_functions_store);
423
424static ssize_t functionfs_max_user_functions_show(struct device *_dev,
425 struct device_attribute *attr,
426 char *buf)
427{
428 return sprintf(buf, "%d", GFS_MAX_DEVS);
429}
430
431static DEVICE_ATTR(max_user_functions, S_IRUGO,
432 functionfs_max_user_functions_show, NULL);
433
434static struct device_attribute *functionfs_function_attributes[] = {
435 &dev_attr_user_functions,
436 &dev_attr_max_user_functions,
437 NULL
438};
439
440static struct ccg_usb_function functionfs_function = {
441 .name = "fs",
442 .init = functionfs_function_init,
443 .cleanup = functionfs_function_cleanup,
444 .bind_config = functionfs_function_bind_config,
445 .unbind_config = functionfs_function_unbind_config,
446 .attributes = functionfs_function_attributes,
447};
448
449#define MAX_ACM_INSTANCES 4
450struct acm_function_config {
451 int instances;
452};
453
454static int
455acm_function_init(struct ccg_usb_function *f, struct usb_composite_dev *cdev)
456{
457 f->config = kzalloc(sizeof(struct acm_function_config), GFP_KERNEL);
458 if (!f->config)
459 return -ENOMEM;
460
461 return gserial_setup(cdev->gadget, MAX_ACM_INSTANCES);
462}
463
464static void acm_function_cleanup(struct ccg_usb_function *f)
465{
466 gserial_cleanup();
467 kfree(f->config);
468 f->config = NULL;
469}
470
471static int
472acm_function_bind_config(struct ccg_usb_function *f,
473 struct usb_configuration *c)
474{
475 int i;
476 int ret = 0;
477 struct acm_function_config *config = f->config;
478
479 for (i = 0; i < config->instances; i++) {
480 ret = acm_bind_config(c, i);
481 if (ret) {
482 pr_err("Could not bind acm%u config\n", i);
483 break;
484 }
485 }
486
487 return ret;
488}
489
490static ssize_t acm_instances_show(struct device *dev,
491 struct device_attribute *attr, char *buf)
492{
493 struct ccg_usb_function *f = dev_get_drvdata(dev);
494 struct acm_function_config *config = f->config;
495 return sprintf(buf, "%d\n", config->instances);
496}
497
498static ssize_t acm_instances_store(struct device *dev,
499 struct device_attribute *attr, const char *buf, size_t size)
500{
501 struct ccg_usb_function *f = dev_get_drvdata(dev);
502 struct acm_function_config *config = f->config;
503 int value;
504 int ret = 0;
505
506 ret = kstrtoint(buf, 10, &value);
507 if (ret)
508 return ret;
509
510 if (value > MAX_ACM_INSTANCES)
511 return -EINVAL;
512
513 config->instances = value;
514
515 return size;
516}
517
518static DEVICE_ATTR(instances, S_IRUGO | S_IWUSR, acm_instances_show,
519 acm_instances_store);
520static struct device_attribute *acm_function_attributes[] = {
521 &dev_attr_instances,
522 NULL
523};
524
525static struct ccg_usb_function acm_function = {
526 .name = "acm",
527 .init = acm_function_init,
528 .cleanup = acm_function_cleanup,
529 .bind_config = acm_function_bind_config,
530 .attributes = acm_function_attributes,
531};
532
533struct rndis_function_config {
534 u8 ethaddr[ETH_ALEN];
535 u32 vendorID;
536 char manufacturer[256];
537 /* "Wireless" RNDIS; auto-detected by Windows */
538 bool wceis;
539};
540
541static int rndis_function_init(struct ccg_usb_function *f,
542 struct usb_composite_dev *cdev)
543{
544 f->config = kzalloc(sizeof(struct rndis_function_config), GFP_KERNEL);
545 if (!f->config)
546 return -ENOMEM;
547 return 0;
548}
549
550static void rndis_function_cleanup(struct ccg_usb_function *f)
551{
552 kfree(f->config);
553 f->config = NULL;
554}
555
556static int rndis_function_bind_config(struct ccg_usb_function *f,
557 struct usb_configuration *c)
558{
559 int ret;
560 struct rndis_function_config *rndis = f->config;
561
562 if (!rndis) {
563 pr_err("%s: rndis_pdata\n", __func__);
564 return -1;
565 }
566
567 pr_info("%s MAC: %02X:%02X:%02X:%02X:%02X:%02X\n", __func__,
568 rndis->ethaddr[0], rndis->ethaddr[1], rndis->ethaddr[2],
569 rndis->ethaddr[3], rndis->ethaddr[4], rndis->ethaddr[5]);
570
571 ret = gether_setup_name(c->cdev->gadget, rndis->ethaddr, "rndis");
572 if (ret) {
573 pr_err("%s: gether_setup failed\n", __func__);
574 return ret;
575 }
576
577 if (rndis->wceis) {
578 /* "Wireless" RNDIS; auto-detected by Windows */
579 rndis_iad_descriptor.bFunctionClass =
580 USB_CLASS_WIRELESS_CONTROLLER;
581 rndis_iad_descriptor.bFunctionSubClass = 0x01;
582 rndis_iad_descriptor.bFunctionProtocol = 0x03;
583 rndis_control_intf.bInterfaceClass =
584 USB_CLASS_WIRELESS_CONTROLLER;
585 rndis_control_intf.bInterfaceSubClass = 0x01;
586 rndis_control_intf.bInterfaceProtocol = 0x03;
587 }
588
589 return rndis_bind_config_vendor(c, rndis->ethaddr, rndis->vendorID,
590 rndis->manufacturer);
591}
592
593static void rndis_function_unbind_config(struct ccg_usb_function *f,
594 struct usb_configuration *c)
595{
596 gether_cleanup();
597}
598
599static ssize_t rndis_manufacturer_show(struct device *dev,
600 struct device_attribute *attr, char *buf)
601{
602 struct ccg_usb_function *f = dev_get_drvdata(dev);
603 struct rndis_function_config *config = f->config;
604 return sprintf(buf, "%s\n", config->manufacturer);
605}
606
607static ssize_t rndis_manufacturer_store(struct device *dev,
608 struct device_attribute *attr, const char *buf, size_t size)
609{
610 struct ccg_usb_function *f = dev_get_drvdata(dev);
611 struct rndis_function_config *config = f->config;
612
613 if (size >= sizeof(config->manufacturer))
614 return -EINVAL;
615 memcpy(config->manufacturer, buf, size);
616 config->manufacturer[size] = 0;
617
618 return size;
619}
620
621static DEVICE_ATTR(manufacturer, S_IRUGO | S_IWUSR, rndis_manufacturer_show,
622 rndis_manufacturer_store);
623
624static ssize_t rndis_wceis_show(struct device *dev,
625 struct device_attribute *attr, char *buf)
626{
627 struct ccg_usb_function *f = dev_get_drvdata(dev);
628 struct rndis_function_config *config = f->config;
629 return sprintf(buf, "%d\n", config->wceis);
630}
631
632static ssize_t rndis_wceis_store(struct device *dev,
633 struct device_attribute *attr, const char *buf, size_t size)
634{
635 struct ccg_usb_function *f = dev_get_drvdata(dev);
636 struct rndis_function_config *config = f->config;
637 int value;
638 int ret;
639
640 ret = kstrtoint(buf, 10, &value);
641 if (ret)
642 return ret;
643
644 config->wceis = value;
645
646 return size;
647}
648
649static DEVICE_ATTR(wceis, S_IRUGO | S_IWUSR, rndis_wceis_show,
650 rndis_wceis_store);
651
652static ssize_t rndis_ethaddr_show(struct device *dev,
653 struct device_attribute *attr, char *buf)
654{
655 struct ccg_usb_function *f = dev_get_drvdata(dev);
656 struct rndis_function_config *rndis = f->config;
657 return sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x\n",
658 rndis->ethaddr[0], rndis->ethaddr[1], rndis->ethaddr[2],
659 rndis->ethaddr[3], rndis->ethaddr[4], rndis->ethaddr[5]);
660}
661
662static ssize_t rndis_ethaddr_store(struct device *dev,
663 struct device_attribute *attr, const char *buf, size_t size)
664{
665 struct ccg_usb_function *f = dev_get_drvdata(dev);
666 struct rndis_function_config *rndis = f->config;
667 unsigned char tmp[6];
668
669 if (sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
670 tmp + 0, tmp + 1, tmp + 2, tmp + 3, tmp + 4, tmp + 5) !=
671 ETH_ALEN)
672 return -EINVAL;
673
674 memcpy(rndis->ethaddr, tmp, ETH_ALEN);
675
676 return ETH_ALEN;
677
678}
679
680static DEVICE_ATTR(ethaddr, S_IRUGO | S_IWUSR, rndis_ethaddr_show,
681 rndis_ethaddr_store);
682
683static ssize_t rndis_vendorID_show(struct device *dev,
684 struct device_attribute *attr, char *buf)
685{
686 struct ccg_usb_function *f = dev_get_drvdata(dev);
687 struct rndis_function_config *config = f->config;
688 return sprintf(buf, "%04x\n", config->vendorID);
689}
690
691static ssize_t rndis_vendorID_store(struct device *dev,
692 struct device_attribute *attr, const char *buf, size_t size)
693{
694 struct ccg_usb_function *f = dev_get_drvdata(dev);
695 struct rndis_function_config *config = f->config;
696 int value;
697 int ret;
698
699 ret = kstrtou32(buf, 16, &value);
700 if (ret)
701 return ret;
702
703 config->vendorID = value;
704
705 return size;
706}
707
708static DEVICE_ATTR(vendorID, S_IRUGO | S_IWUSR, rndis_vendorID_show,
709 rndis_vendorID_store);
710
711static struct device_attribute *rndis_function_attributes[] = {
712 &dev_attr_manufacturer,
713 &dev_attr_wceis,
714 &dev_attr_ethaddr,
715 &dev_attr_vendorID,
716 NULL
717};
718
719static struct ccg_usb_function rndis_function = {
720 .name = "rndis",
721 .init = rndis_function_init,
722 .cleanup = rndis_function_cleanup,
723 .bind_config = rndis_function_bind_config,
724 .unbind_config = rndis_function_unbind_config,
725 .attributes = rndis_function_attributes,
726};
727
728static int mass_storage_function_init(struct ccg_usb_function *f,
729 struct usb_composite_dev *cdev)
730{
731 struct fsg_config fsg;
732 struct fsg_common *common;
733 int err;
734
735 memset(&fsg, 0, sizeof fsg);
736 fsg.nluns = 1;
737 fsg.luns[0].removable = 1;
738 fsg.vendor_name = iManufacturer;
739 fsg.product_name = iProduct;
740
741 common = fsg_common_init(NULL, cdev, &fsg);
742 if (IS_ERR(common))
743 return PTR_ERR(common);
744
745 err = sysfs_create_link(&f->dev->kobj,
746 &common->luns[0].dev.kobj,
747 "lun");
748 if (err) {
749 fsg_common_put(common);
750 return err;
751 }
752
753 f->config = common;
754 return 0;
755}
756
757static void mass_storage_function_cleanup(struct ccg_usb_function *f)
758{
759 fsg_common_put(f->config);
760 f->config = NULL;
761}
762
763static int mass_storage_function_bind_config(struct ccg_usb_function *f,
764 struct usb_configuration *c)
765{
766 struct fsg_common *common = f->config;
767 return fsg_bind_config(c->cdev, c, common);
768}
769
770static struct ccg_usb_function mass_storage_function = {
771 .name = "mass_storage",
772 .init = mass_storage_function_init,
773 .cleanup = mass_storage_function_cleanup,
774 .bind_config = mass_storage_function_bind_config,
775};
776
777static struct ccg_usb_function *supported_functions[] = {
778 &functionfs_function,
779 &acm_function,
780 &rndis_function,
781 &mass_storage_function,
782 NULL
783};
784
785
786static int ccg_init_functions(struct ccg_usb_function **functions,
787 struct usb_composite_dev *cdev)
788{
789 struct ccg_dev *dev = _ccg_dev;
790 struct ccg_usb_function *f;
791 struct device_attribute **attrs;
792 struct device_attribute *attr;
793 int err;
794 int index = 0;
795
796 for (; (f = *functions++); index++) {
797 f->dev_name = kasprintf(GFP_KERNEL, "f_%s", f->name);
798 if (!f->dev_name) {
799 pr_err("%s: Failed to alloc name %s", __func__,
800 f->name);
801 err = -ENOMEM;
802 goto err_alloc;
803 }
804 f->dev = device_create(ccg_class, dev->dev,
805 MKDEV(0, index), f, f->dev_name);
806 if (IS_ERR(f->dev)) {
807 pr_err("%s: Failed to create dev %s", __func__,
808 f->dev_name);
809 err = PTR_ERR(f->dev);
810 f->dev = NULL;
811 goto err_create;
812 }
813
814 if (f->init) {
815 err = f->init(f, cdev);
816 if (err) {
817 pr_err("%s: Failed to init %s", __func__,
818 f->name);
819 goto err_out;
820 }
821 }
822
823 attrs = f->attributes;
824 if (attrs) {
825 while ((attr = *attrs++) && !err)
826 err = device_create_file(f->dev, attr);
827 }
828 if (err) {
829 pr_err("%s: Failed to create function %s attributes",
830 __func__, f->name);
831 goto err_uninit;
832 }
833 }
834 return 0;
835
836err_uninit:
837 if (f->cleanup)
838 f->cleanup(f);
839err_out:
840 device_destroy(ccg_class, f->dev->devt);
841 f->dev = NULL;
842err_create:
843 kfree(f->dev_name);
844err_alloc:
845 return err;
846}
847
848static void ccg_cleanup_functions(struct ccg_usb_function **functions)
849{
850 struct ccg_usb_function *f;
851
852 while (*functions) {
853 f = *functions++;
854
855 if (f->dev) {
856 if (f->cleanup)
857 f->cleanup(f);
858 device_destroy(ccg_class, f->dev->devt);
859 kfree(f->dev_name);
860 }
861 }
862}
863
864static int ccg_bind_enabled_functions(struct ccg_dev *dev,
865 struct usb_configuration *c)
866{
867 struct ccg_usb_function *f;
868 int ret;
869
870 list_for_each_entry(f, &dev->enabled_functions, enabled_list) {
871 ret = f->bind_config(f, c);
872 if (ret) {
873 pr_err("%s: %s failed", __func__, f->name);
874 return ret;
875 }
876 }
877 return 0;
878}
879
880static void ccg_unbind_enabled_functions(struct ccg_dev *dev,
881 struct usb_configuration *c)
882{
883 struct ccg_usb_function *f;
884
885 list_for_each_entry(f, &dev->enabled_functions, enabled_list)
886 if (f->unbind_config)
887 f->unbind_config(f, c);
888}
889
890static int ccg_enable_function(struct ccg_dev *dev, char *name)
891{
892 struct ccg_usb_function **functions = dev->functions;
893 struct ccg_usb_function *f;
894 while ((f = *functions++)) {
895 if (!strcmp(name, f->name)) {
896 list_add_tail(&f->enabled_list,
897 &dev->enabled_functions);
898 return 0;
899 }
900 }
901 return -EINVAL;
902}
903
904/*-------------------------------------------------------------------------*/
905/* /sys/class/ccg_usb/ccg%d/ interface */
906
907static ssize_t
908functions_show(struct device *pdev, struct device_attribute *attr, char *buf)
909{
910 struct ccg_dev *dev = dev_get_drvdata(pdev);
911 struct ccg_usb_function *f;
912 char *buff = buf;
913 int i;
914
915 mutex_lock(&dev->mutex);
916
917 list_for_each_entry(f, &dev->enabled_functions, enabled_list)
918 buff += sprintf(buff, "%s,", f->name);
919 for (i = 0; i < dev->max_func_num; i++)
920 if (dev->ffs_tab[i].used)
921 buff += sprintf(buff, "%s", dev->ffs_tab[i].name);
922
923 mutex_unlock(&dev->mutex);
924
925 if (buff != buf)
926 *(buff-1) = '\n';
927 return buff - buf;
928}
929
930static ssize_t
931functions_store(struct device *pdev, struct device_attribute *attr,
932 const char *buff, size_t size)
933{
934 struct ccg_dev *dev = dev_get_drvdata(pdev);
935 char *name;
936 char buf[256], *b;
937 int err, i;
938 bool functionfs_enabled;
939
940 buff = skip_spaces(buff);
941 if (!*buff)
942 return -EINVAL;
943
944 mutex_lock(&dev->mutex);
945
946 if (dev->enabled) {
947 mutex_unlock(&dev->mutex);
948 return -EBUSY;
949 }
950
951 INIT_LIST_HEAD(&dev->enabled_functions);
952 functionfs_enabled = false;
953 for (i = 0; i < dev->max_func_num; i++)
954 dev->ffs_tab[i].used = false;
955
956 strlcpy(buf, buff, sizeof(buf));
957 b = strim(buf);
958
959 while (b) {
960 struct ffs_obj *user_func;
961
962 name = strsep(&b, ",");
963 /* handle FunctionFS implicitly */
964 if (!strcmp(name, functionfs_function.name)) {
965 pr_err("ccg_usb: Cannot explicitly enable '%s'", name);
966 continue;
967 }
968 user_func = functionfs_find_dev(dev, name);
969 if (user_func)
970 name = functionfs_function.name;
971 err = 0;
972 if (!user_func || !functionfs_enabled)
973 err = ccg_enable_function(dev, name);
974 if (err)
975 pr_err("ccg_usb: Cannot enable '%s'", name);
976 else if (user_func) {
977 user_func->used = true;
978 dev->func_num++;
979 functionfs_enabled = true;
980 }
981 }
982
983 mutex_unlock(&dev->mutex);
984
985 return size;
986}
987
988static ssize_t enable_show(struct device *pdev, struct device_attribute *attr,
989 char *buf)
990{
991 struct ccg_dev *dev = dev_get_drvdata(pdev);
992 return sprintf(buf, "%d\n", dev->enabled);
993}
994
995static ssize_t enable_store(struct device *pdev, struct device_attribute *attr,
996 const char *buff, size_t size)
997{
998 struct ccg_dev *dev = dev_get_drvdata(pdev);
999 struct usb_composite_dev *cdev = dev->cdev;
1000 int enabled = 0;
1001
1002 mutex_lock(&dev->mutex);
1003 sscanf(buff, "%d", &enabled);
1004 if (enabled && dev->func_num && !functionfs_all_ready(dev)) {
1005 mutex_unlock(&dev->mutex);
1006 return -ENODEV;
1007 }
1008
1009 if (enabled && !dev->enabled) {
1010 int ret;
1011
1012 cdev->next_string_id = 0;
1013 /*
1014 * Update values in composite driver's copy of
1015 * device descriptor.
1016 */
1017 cdev->desc.bDeviceClass = device_desc.bDeviceClass;
1018 cdev->desc.bDeviceSubClass = device_desc.bDeviceSubClass;
1019 cdev->desc.bDeviceProtocol = device_desc.bDeviceProtocol;
1020 cdev->desc.idVendor = idVendor;
1021 cdev->desc.idProduct = idProduct;
1022 cdev->desc.bcdDevice = bcdDevice;
1023
1024 usb_add_config(cdev, &ccg_config_driver, ccg_bind_config);
1025 dev->enabled = true;
1026 ret = usb_gadget_connect(cdev->gadget);
1027 if (ret) {
1028 dev->enabled = false;
1029 usb_remove_config(cdev, &ccg_config_driver);
1030 }
1031 } else if (!enabled && dev->enabled) {
1032 reset_usb(dev);
1033 } else {
1034 pr_err("ccg_usb: already %s\n",
1035 dev->enabled ? "enabled" : "disabled");
1036 }
1037
1038 mutex_unlock(&dev->mutex);
1039 return size;
1040}
1041
1042static ssize_t state_show(struct device *pdev, struct device_attribute *attr,
1043 char *buf)
1044{
1045 struct ccg_dev *dev = dev_get_drvdata(pdev);
1046 struct usb_composite_dev *cdev = dev->cdev;
1047 char *state = "DISCONNECTED";
1048 unsigned long flags;
1049
1050 if (!cdev)
1051 goto out;
1052
1053 spin_lock_irqsave(&cdev->lock, flags);
1054 if (cdev->config)
1055 state = "CONFIGURED";
1056 else if (dev->connected)
1057 state = "CONNECTED";
1058 spin_unlock_irqrestore(&cdev->lock, flags);
1059out:
1060 return sprintf(buf, "%s\n", state);
1061}
1062
1063#define DESCRIPTOR_ATTR(field, format_string) \
1064static ssize_t \
1065field ## _show(struct device *dev, struct device_attribute *attr, \
1066 char *buf) \
1067{ \
1068 return sprintf(buf, format_string, device_desc.field); \
1069} \
1070static ssize_t \
1071field ## _store(struct device *dev, struct device_attribute *attr, \
1072 const char *buf, size_t size) \
1073{ \
1074 int value; \
1075 if (sscanf(buf, format_string, &value) == 1) { \
1076 device_desc.field = value; \
1077 return size; \
1078 } \
1079 return -1; \
1080} \
1081static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, field ## _show, field ## _store);
1082
1083DESCRIPTOR_ATTR(bDeviceClass, "%d\n")
1084DESCRIPTOR_ATTR(bDeviceSubClass, "%d\n")
1085DESCRIPTOR_ATTR(bDeviceProtocol, "%d\n")
1086
1087static DEVICE_ATTR(functions, S_IRUGO | S_IWUSR, functions_show,
1088 functions_store);
1089static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, enable_show, enable_store);
1090static DEVICE_ATTR(state, S_IRUGO, state_show, NULL);
1091
1092static struct device_attribute *ccg_usb_attributes[] = {
1093 &dev_attr_bDeviceClass,
1094 &dev_attr_bDeviceSubClass,
1095 &dev_attr_bDeviceProtocol,
1096 &dev_attr_functions,
1097 &dev_attr_enable,
1098 &dev_attr_state,
1099 NULL
1100};
1101
1102/*-------------------------------------------------------------------------*/
1103/* Composite driver */
1104
1105static int ccg_bind_config(struct usb_configuration *c)
1106{
1107 struct ccg_dev *dev = _ccg_dev;
1108 int ret = 0;
1109
1110 ret = ccg_bind_enabled_functions(dev, c);
1111 if (ret)
1112 return ret;
1113
1114 return 0;
1115}
1116
1117static void ccg_unbind_config(struct usb_configuration *c)
1118{
1119 struct ccg_dev *dev = _ccg_dev;
1120
1121 ccg_unbind_enabled_functions(dev, c);
1122
1123 usb_ep_autoconfig_reset(dev->cdev->gadget);
1124}
1125
1126static int ccg_bind(struct usb_composite_dev *cdev)
1127{
1128 struct ccg_dev *dev = _ccg_dev;
1129 struct usb_gadget *gadget = cdev->gadget;
1130 int gcnum, ret;
1131
1132 /*
1133 * Start disconnected. Userspace will connect the gadget once
1134 * it is done configuring the functions.
1135 */
1136 usb_gadget_disconnect(gadget);
1137
1138 ret = ccg_init_functions(dev->functions, cdev);
1139 if (ret)
1140 return ret;
1141
1142 gcnum = usb_gadget_controller_number(gadget);
1143 if (gcnum >= 0)
1144 device_desc.bcdDevice = cpu_to_le16(0x0200 + gcnum);
1145 else {
1146 pr_warning("%s: controller '%s' not recognized\n",
1147 longname, gadget->name);
1148 device_desc.bcdDevice = __constant_cpu_to_le16(0x9999);
1149 }
1150
1151 usb_gadget_set_selfpowered(gadget);
1152 dev->cdev = cdev;
1153
1154 return 0;
1155}
1156
1157static int ccg_usb_unbind(struct usb_composite_dev *cdev)
1158{
1159 struct ccg_dev *dev = _ccg_dev;
1160
1161 cancel_work_sync(&dev->work);
1162 ccg_cleanup_functions(dev->functions);
1163 return 0;
1164}
1165
1166static struct usb_composite_driver ccg_usb_driver = {
1167 .name = "configurable_usb",
1168 .dev = &device_desc,
1169 .unbind = ccg_usb_unbind,
1170 .needs_serial = true,
1171 .iManufacturer = "Linux Foundation",
1172 .iProduct = longname,
1173 .iSerialNumber = "1234567890123456",
1174};
1175
1176static int ccg_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *c)
1177{
1178 struct ccg_dev *dev = _ccg_dev;
1179 struct usb_composite_dev *cdev = get_gadget_data(gadget);
1180 struct usb_request *req = cdev->req;
1181 struct ccg_usb_function *f;
1182 int value = -EOPNOTSUPP;
1183 unsigned long flags;
1184
1185 req->zero = 0;
1186 req->complete = composite_setup_complete;
1187 req->length = 0;
1188 gadget->ep0->driver_data = cdev;
1189
1190 list_for_each_entry(f, &dev->enabled_functions, enabled_list) {
1191 if (f->ctrlrequest) {
1192 value = f->ctrlrequest(f, cdev, c);
1193 if (value >= 0)
1194 break;
1195 }
1196 }
1197
1198 if (value < 0)
1199 value = composite_setup(gadget, c);
1200
1201 spin_lock_irqsave(&cdev->lock, flags);
1202 if (!dev->connected) {
1203 dev->connected = 1;
1204 schedule_work(&dev->work);
1205 } else if (c->bRequest == USB_REQ_SET_CONFIGURATION &&
1206 cdev->config) {
1207 schedule_work(&dev->work);
1208 }
1209 spin_unlock_irqrestore(&cdev->lock, flags);
1210
1211 return value;
1212}
1213
1214static void ccg_disconnect(struct usb_gadget *gadget)
1215{
1216 struct ccg_dev *dev = _ccg_dev;
1217 struct usb_composite_dev *cdev = get_gadget_data(gadget);
1218 unsigned long flags;
1219
1220 composite_disconnect(gadget);
1221
1222 spin_lock_irqsave(&cdev->lock, flags);
1223 dev->connected = 0;
1224 schedule_work(&dev->work);
1225 spin_unlock_irqrestore(&cdev->lock, flags);
1226}
1227
1228static int ccg_create_device(struct ccg_dev *dev)
1229{
1230 struct device_attribute **attrs = ccg_usb_attributes;
1231 struct device_attribute *attr;
1232 int err;
1233
1234 dev->dev = device_create(ccg_class, NULL, MKDEV(0, 0), NULL, "ccg0");
1235 if (IS_ERR(dev->dev))
1236 return PTR_ERR(dev->dev);
1237
1238 dev_set_drvdata(dev->dev, dev);
1239
1240 while ((attr = *attrs++)) {
1241 err = device_create_file(dev->dev, attr);
1242 if (err) {
1243 device_destroy(ccg_class, dev->dev->devt);
1244 return err;
1245 }
1246 }
1247 return 0;
1248}
1249
1250
1251static int __init init(void)
1252{
1253 struct ccg_dev *dev;
1254 int err;
1255
1256 ccg_class = class_create(THIS_MODULE, "ccg_usb");
1257 if (IS_ERR(ccg_class))
1258 return PTR_ERR(ccg_class);
1259
1260 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1261 if (!dev)
1262 return -ENOMEM;
1263
1264 dev->functions = supported_functions;
1265 INIT_LIST_HEAD(&dev->enabled_functions);
1266 INIT_WORK(&dev->work, ccg_work);
1267 mutex_init(&dev->mutex);
1268
1269 err = ccg_create_device(dev);
1270 if (err) {
1271 class_destroy(ccg_class);
1272 kfree(dev);
1273 return err;
1274 }
1275
1276 _ccg_dev = dev;
1277
1278 /* Override composite driver functions */
1279 composite_driver.setup = ccg_setup;
1280 composite_driver.disconnect = ccg_disconnect;
1281
1282 err = usb_composite_probe(&ccg_usb_driver, ccg_bind);
1283 if (err) {
1284 class_destroy(ccg_class);
1285 kfree(dev);
1286 }
1287
1288 return err;
1289}
1290module_init(init);
1291
1292static void __exit cleanup(void)
1293{
1294 usb_composite_unregister(&ccg_usb_driver);
1295 class_destroy(ccg_class);
1296 kfree(_ccg_dev);
1297 _ccg_dev = NULL;
1298}
1299module_exit(cleanup);
diff --git a/drivers/staging/ccg/sysfs-class-ccg_usb b/drivers/staging/ccg/sysfs-class-ccg_usb
new file mode 100644
index 000000000000..dd12a332fb00
--- /dev/null
+++ b/drivers/staging/ccg/sysfs-class-ccg_usb
@@ -0,0 +1,158 @@
1What: /sys/class/ccg_usb
2Date: May 2012
3KernelVersion: 3.4
4Contact: linux-usb@vger.kernel.org
5Description:
6 The ccg_usb/ class subdirectory belongs to ccg
7 USB gadget.
8
9What: /sys/class/ccg_usb/ccgX
10Date: May 2012
11KernelVersion: 3.4
12Contact: linux-usb@vger.kernel.org
13Description:
14 The /sys/class/ccg_usb/ccg{0,1,2,3...} class
15 subdirectories correspond to each ccg gadget device;
16 at the time of this writing there is only ccg0 and it
17 represents the ccg gadget.
18
19What: /sys/class/ccg_usb/ccgX/functions
20Date: May 2012
21KernelVersion: 3.4
22Contact: linux-usb@vger.kernel.org
23Description:
24 A comma-separated list of USB function names to be activated
25 in this ccg gadget. It includes both the functions provided
26 in-kernel by the ccg gadget and the functions provided from
27 userspace through FunctionFS.
28
29What: /sys/class/ccg_usb/ccgX/enable
30Date: May 2012
31KernelVersion: 3.4
32Contact: linux-usb@vger.kernel.org
33Description:
34 A flag activating/deactivating the ccg usb gadget.
35
36What: /sys/class/ccg_usb/ccgX/state
37Date: May 2012
38KernelVersion: 3.4
39Contact: linux-usb@vger.kernel.org
40Description:
41 Configurable usb gadget state:
42
43 DISCONNECTED
44 CONNECTED
45 CONFIGURED
46
47What: /sys/class/ccg_usb/ccgX/f_acm/
48Date: May 2012
49KernelVersion: 3.4
50Contact: linux-usb@vger.kernel.org
51Description:
52 The /sys/class/ccg_usb/ccgX/f_acm subdirectory
53 corresponds to the gadget's USB CDC serial (ACM) function
54 driver.
55
56What: /sys/class/ccg_usb/ccgX/f_acm/instances
57Date: May 2012
58KernelVersion: 3.4
59Contact: linux-usb@vger.kernel.org
60Description:
61 Maximum number of the /dev/ttyGS<X> interface the driver uses.
62
63What: /sys/class/ccg_usb/ccgX/f_fs
64Date: May 2012
65KernelVersion: 3.4
66Contact: linux-usb@vger.kernel.org
67Description:
68 The /sys/class/ccg_usb/ccgX/f_fs subdirectory
69 corresponds to the gadget's FunctionFS driver.
70
71What: /sys/class/ccg_usb/ccgX/f_fs/user_functions
72Date: May 2012
73KernelVersion: 3.4
74Contact: linux-usb@vger.kernel.org
75Description:
76 A comma-separeted list of USB function names to be supported
77 from userspace. No other userspace FunctionFS functions can
78 be supported than listed here. However, the actual activation
79 of these functions is still done through
80 /sys/class/ccg_usb/ccgX/functions, where it is possible
81 to specify any subset (including maximum and empty) of
82 /sys/class/ccg_usb/ccgX/f_fs/user_functions.
83
84What: /sys/class/ccg_usb/ccgX/f_fs/max_user_functions
85Date: May 2012
86KernelVersion: 3.4
87Contact: linux-usb@vger.kernel.org
88Description:
89 Maximum number of USB functions to be supported from userspace.
90
91What: /sys/class/ccg_usb/ccgX/f_rndis
92Date: May 2012
93KernelVersion: 3.4
94Contact: linux-usb@vger.kernel.org
95Description:
96 The /sys/class/ccg_usb/ccgX/f_rndis subdirectory
97 corresponds to the gadget's RNDIS driver.
98
99What: /sys/class/ccg_usb/ccgX/f_rndis/manufacturer
100Date: May 2012
101KernelVersion: 3.4
102Contact: linux-usb@vger.kernel.org
103Description:
104 RNDIS Ethernet port manufacturer string.
105
106What: /sys/class/ccg_usb/ccgX/f_rndis/wceis
107Date: May 2012
108KernelVersion: 3.4
109Contact: linux-usb@vger.kernel.org
110Description:
111 RNDIS Ethernet port wireless flag.
112
113What: /sys/class/ccg_usb/ccgX/f_rndis/ethaddr
114Date: May 2012
115KernelVersion: 3.4
116Contact: linux-usb@vger.kernel.org
117Description:
118 RNDIS Ethernet port Ethernet address.
119
120What: /sys/class/ccg_usb/ccgX/f_rndis/vendorID
121Date: May 2012
122KernelVersion: 3.4
123Contact: linux-usb@vger.kernel.org
124Description:
125 RNDIS Ethernet port vendor ID.
126
127What: /sys/class/ccg_usb/ccgX/f_mass_storage
128Date: May 2012
129KernelVersion: 3.4
130Contact: linux-usb@vger.kernel.org
131Description:
132 The /sys/class/ccg_usb/ccgX/f_mass_storage subdirectory
133 corresponds to the gadget's USB mass storage driver.
134
135What: /sys/class/ccg_usb/ccgX/f_mass_storage/lun
136Date: May 2012
137KernelVersion: 3.4
138Contact: linux-usb@vger.kernel.org
139Description:
140 The /sys/class/ccg_usb/ccgX/f_mass_storage/lun
141 subdirectory corresponds to the gadget's USB mass storage
142 driver and its underlying storage.
143
144What: /sys/class/ccg_usb/ccgX/f_mass_storage/lun
145Date: May 2012
146KernelVersion: 3.4
147Contact: linux-usb@vger.kernel.org
148Description:
149 The /sys/class/ccg_usb/ccgX/f_mass_storage/lun
150 subdirectory corresponds to the gadget's USB mass storage
151 driver and its underlying storage.
152
153What: /sys/class/ccg_usb/ccgX/f_mass_storage/lun/file
154Date: May 2012
155KernelVersion: 3.4
156Contact: linux-usb@vger.kernel.org
157Description:
158 Gadget's USB mass storage underlying file.
diff --git a/drivers/staging/comedi/drivers/dt9812.c b/drivers/staging/comedi/drivers/dt9812.c
index e86ab5862895..89a49dda4482 100644
--- a/drivers/staging/comedi/drivers/dt9812.c
+++ b/drivers/staging/comedi/drivers/dt9812.c
@@ -547,7 +547,7 @@ static void dt9812_configure_gain(struct usb_dt9812 *dev,
547 rmw->or_value = F020_MASK_ADC0CF_AMP0GN2; 547 rmw->or_value = F020_MASK_ADC0CF_AMP0GN2;
548 break; 548 break;
549 default: 549 default:
550 err("Illegal gain %d\n", gain); 550 dev_err(&dev->interface->dev, "Illegal gain %d\n", gain);
551 551
552 } 552 }
553} 553}
@@ -715,7 +715,7 @@ static int dt9812_probe(struct usb_interface *interface,
715 iface_desc = interface->cur_altsetting; 715 iface_desc = interface->cur_altsetting;
716 716
717 if (iface_desc->desc.bNumEndpoints != 5) { 717 if (iface_desc->desc.bNumEndpoints != 5) {
718 err("Wrong number of endpints."); 718 dev_err(&interface->dev, "Wrong number of endpoints.\n");
719 retval = -ENODEV; 719 retval = -ENODEV;
720 goto error; 720 goto error;
721 } 721 }
@@ -781,22 +781,22 @@ static int dt9812_probe(struct usb_interface *interface,
781 } 781 }
782 782
783 if (dt9812_read_info(dev, 1, &dev->vendor, sizeof(dev->vendor)) != 0) { 783 if (dt9812_read_info(dev, 1, &dev->vendor, sizeof(dev->vendor)) != 0) {
784 err("Failed to read vendor."); 784 dev_err(&interface->dev, "Failed to read vendor.\n");
785 retval = -ENODEV; 785 retval = -ENODEV;
786 goto error; 786 goto error;
787 } 787 }
788 if (dt9812_read_info(dev, 3, &dev->product, sizeof(dev->product)) != 0) { 788 if (dt9812_read_info(dev, 3, &dev->product, sizeof(dev->product)) != 0) {
789 err("Failed to read product."); 789 dev_err(&interface->dev, "Failed to read product.\n");
790 retval = -ENODEV; 790 retval = -ENODEV;
791 goto error; 791 goto error;
792 } 792 }
793 if (dt9812_read_info(dev, 5, &dev->device, sizeof(dev->device)) != 0) { 793 if (dt9812_read_info(dev, 5, &dev->device, sizeof(dev->device)) != 0) {
794 err("Failed to read device."); 794 dev_err(&interface->dev, "Failed to read device.\n");
795 retval = -ENODEV; 795 retval = -ENODEV;
796 goto error; 796 goto error;
797 } 797 }
798 if (dt9812_read_info(dev, 7, &dev->serial, sizeof(dev->serial)) != 0) { 798 if (dt9812_read_info(dev, 7, &dev->serial, sizeof(dev->serial)) != 0) {
799 err("Failed to read serial."); 799 dev_err(&interface->dev, "Failed to read serial.\n");
800 retval = -ENODEV; 800 retval = -ENODEV;
801 goto error; 801 goto error;
802 } 802 }
@@ -1146,7 +1146,9 @@ static int __init usb_dt9812_init(void)
1146 result = comedi_driver_register(&dt9812_comedi_driver); 1146 result = comedi_driver_register(&dt9812_comedi_driver);
1147 if (result) { 1147 if (result) {
1148 usb_deregister(&dt9812_usb_driver); 1148 usb_deregister(&dt9812_usb_driver);
1149 err("comedi_driver_register failed. Error number %d", result); 1149 printk(KERN_ERR KBUILD_MODNAME
1150 ": comedi_driver_register failed. Error number %d\n",
1151 result);
1150 } 1152 }
1151 1153
1152 return result; 1154 return result;
diff --git a/drivers/staging/comedi/drivers/vmk80xx.c b/drivers/staging/comedi/drivers/vmk80xx.c
index 3d13ca6e1670..2dba3efdacfa 100644
--- a/drivers/staging/comedi/drivers/vmk80xx.c
+++ b/drivers/staging/comedi/drivers/vmk80xx.c
@@ -295,7 +295,9 @@ resubmit:
295 if (!usb_submit_urb(urb, GFP_KERNEL)) 295 if (!usb_submit_urb(urb, GFP_KERNEL))
296 goto exit; 296 goto exit;
297 297
298 err("comedi#: vmk80xx: %s - submit urb failed\n", __func__); 298 dev_err(&urb->dev->dev,
299 "comedi#: vmk80xx: %s - submit urb failed\n",
300 __func__);
299 301
300 usb_unanchor_urb(urb); 302 usb_unanchor_urb(urb);
301 } 303 }
diff --git a/drivers/staging/frontier/alphatrack.c b/drivers/staging/frontier/alphatrack.c
index 3bf0f40e97fd..acbb2cc510f9 100644
--- a/drivers/staging/frontier/alphatrack.c
+++ b/drivers/staging/frontier/alphatrack.c
@@ -333,8 +333,8 @@ static int usb_alphatrack_open(struct inode *inode, struct file *file)
333 interface = usb_find_interface(&usb_alphatrack_driver, subminor); 333 interface = usb_find_interface(&usb_alphatrack_driver, subminor);
334 334
335 if (!interface) { 335 if (!interface) {
336 err("%s - error, can't find device for minor %d\n", 336 printk(KERN_ERR "%s - error, can't find device for minor %d\n",
337 __func__, subminor); 337 __func__, subminor);
338 retval = -ENODEV; 338 retval = -ENODEV;
339 goto unlock_disconnect_exit; 339 goto unlock_disconnect_exit;
340 } 340 }
@@ -494,7 +494,8 @@ static ssize_t usb_alphatrack_read(struct file *file, char __user *buffer,
494 /* verify that the device wasn't unplugged */ 494 /* verify that the device wasn't unplugged */
495 if (dev->intf == NULL) { 495 if (dev->intf == NULL) {
496 retval = -ENODEV; 496 retval = -ENODEV;
497 err("No device or device unplugged %d\n", retval); 497 printk(KERN_ERR "%s: No device or device unplugged %d\n",
498 __func__, retval);
498 goto unlock_exit; 499 goto unlock_exit;
499 } 500 }
500 501
@@ -564,7 +565,8 @@ static ssize_t usb_alphatrack_write(struct file *file,
564 /* verify that the device wasn't unplugged */ 565 /* verify that the device wasn't unplugged */
565 if (dev->intf == NULL) { 566 if (dev->intf == NULL) {
566 retval = -ENODEV; 567 retval = -ENODEV;
567 err("No device or device unplugged %d\n", retval); 568 printk(KERN_ERR "%s: No device or device unplugged %d\n",
569 __func__, retval);
568 goto unlock_exit; 570 goto unlock_exit;
569 } 571 }
570 572
@@ -599,7 +601,7 @@ static ssize_t usb_alphatrack_write(struct file *file,
599 } 601 }
600 602
601 if (dev->interrupt_out_endpoint == NULL) { 603 if (dev->interrupt_out_endpoint == NULL) {
602 err("Endpoint should not be be null!\n"); 604 dev_err(&dev->intf->dev, "Endpoint should not be be null!\n");
603 goto unlock_exit; 605 goto unlock_exit;
604 } 606 }
605 607
@@ -619,7 +621,8 @@ static ssize_t usb_alphatrack_write(struct file *file,
619 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL); 621 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL);
620 if (retval) { 622 if (retval) {
621 dev->interrupt_out_busy = 0; 623 dev->interrupt_out_busy = 0;
622 err("Couldn't submit interrupt_out_urb %d\n", retval); 624 dev_err(&dev->intf->dev,
625 "Couldn't submit interrupt_out_urb %d\n", retval);
623 atomic_dec(&dev->writes_pending); 626 atomic_dec(&dev->writes_pending);
624 goto unlock_exit; 627 goto unlock_exit;
625 } 628 }
diff --git a/drivers/staging/frontier/tranzport.c b/drivers/staging/frontier/tranzport.c
index 29e99bbcae48..376706f1c712 100644
--- a/drivers/staging/frontier/tranzport.c
+++ b/drivers/staging/frontier/tranzport.c
@@ -353,7 +353,7 @@ static int usb_tranzport_open(struct inode *inode, struct file *file)
353 interface = usb_find_interface(&usb_tranzport_driver, subminor); 353 interface = usb_find_interface(&usb_tranzport_driver, subminor);
354 354
355 if (!interface) { 355 if (!interface) {
356 err("%s - error, can't find device for minor %d\n", 356 printk(KERN_ERR "%s - error, can't find device for minor %d\n",
357 __func__, subminor); 357 __func__, subminor);
358 retval = -ENODEV; 358 retval = -ENODEV;
359 goto unlock_disconnect_exit; 359 goto unlock_disconnect_exit;
@@ -517,9 +517,11 @@ static ssize_t usb_tranzport_read(struct file *file, char __user *buffer,
517 goto exit; 517 goto exit;
518 } 518 }
519 519
520 /* verify that the device wasn't unplugged */ if (dev->intf == NULL) { 520 /* verify that the device wasn't unplugged */
521 if (dev->intf == NULL) {
521 retval = -ENODEV; 522 retval = -ENODEV;
522 err("No device or device unplugged %d\n", retval); 523 printk(KERN_ERR "%s: No device or device unplugged %d\n",
524 __func__, retval);
523 goto unlock_exit; 525 goto unlock_exit;
524 } 526 }
525 527
@@ -691,7 +693,8 @@ static ssize_t usb_tranzport_write(struct file *file,
691 /* verify that the device wasn't unplugged */ 693 /* verify that the device wasn't unplugged */
692 if (dev->intf == NULL) { 694 if (dev->intf == NULL) {
693 retval = -ENODEV; 695 retval = -ENODEV;
694 err("No device or device unplugged %d\n", retval); 696 printk(KERN_ERR "%s: No device or device unplugged %d\n",
697 __func__, retval);
695 goto unlock_exit; 698 goto unlock_exit;
696 } 699 }
697 700
@@ -726,7 +729,7 @@ static ssize_t usb_tranzport_write(struct file *file,
726 } 729 }
727 730
728 if (dev->interrupt_out_endpoint == NULL) { 731 if (dev->interrupt_out_endpoint == NULL) {
729 err("Endpoint should not be be null!\n"); 732 dev_err(&dev->intf->dev, "Endpoint should not be be null!\n");
730 goto unlock_exit; 733 goto unlock_exit;
731 } 734 }
732 735
@@ -746,7 +749,8 @@ static ssize_t usb_tranzport_write(struct file *file,
746 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL); 749 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL);
747 if (retval) { 750 if (retval) {
748 dev->interrupt_out_busy = 0; 751 dev->interrupt_out_busy = 0;
749 err("Couldn't submit interrupt_out_urb %d\n", retval); 752 dev_err(&dev->intf->dev,
753 "Couldn't submit interrupt_out_urb %d\n", retval);
750 goto unlock_exit; 754 goto unlock_exit;
751 } 755 }
752 retval = bytes_to_write; 756 retval = bytes_to_write;
diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
index e8023afd3656..2e602e192b07 100644
--- a/drivers/staging/line6/driver.c
+++ b/drivers/staging/line6/driver.c
@@ -1307,7 +1307,8 @@ static int __init line6_init(void)
1307 retval = usb_register(&line6_driver); 1307 retval = usb_register(&line6_driver);
1308 1308
1309 if (retval) { 1309 if (retval) {
1310 err("usb_register failed. Error number %d", retval); 1310 printk(KERN_ERR KBUILD_MODNAME
1311 ": usb_register failed. Error number %d\n", retval);
1311 return retval; 1312 return retval;
1312 } 1313 }
1313 1314
@@ -1315,7 +1316,7 @@ static int __init line6_init(void)
1315 GFP_KERNEL); 1316 GFP_KERNEL);
1316 1317
1317 if (line6_request_version == NULL) { 1318 if (line6_request_version == NULL) {
1318 err("Out of memory"); 1319 printk(KERN_ERR KBUILD_MODNAME ":Out of memory\n");
1319 return -ENOMEM; 1320 return -ENOMEM;
1320 } 1321 }
1321 1322
diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c
index b754f69a29c4..31b624b63425 100644
--- a/drivers/staging/line6/toneport.c
+++ b/drivers/staging/line6/toneport.c
@@ -168,7 +168,7 @@ static int toneport_send_cmd(struct usb_device *usbdev, int cmd1, int cmd2)
168 cmd1, cmd2, NULL, 0, LINE6_TIMEOUT * HZ); 168 cmd1, cmd2, NULL, 0, LINE6_TIMEOUT * HZ);
169 169
170 if (ret < 0) { 170 if (ret < 0) {
171 err("send failed (error %d)\n", ret); 171 dev_err(&usbdev->dev, "send failed (error %d)\n", ret);
172 return ret; 172 return ret;
173 } 173 }
174 174
diff --git a/drivers/staging/media/as102/as102_drv.c b/drivers/staging/media/as102/as102_drv.c
index ea4f992de235..ac92eaf6c74b 100644
--- a/drivers/staging/media/as102/as102_drv.c
+++ b/drivers/staging/media/as102/as102_drv.c
@@ -279,40 +279,8 @@ void as102_dvb_unregister(struct as102_dev_t *as102_dev)
279 pr_info("Unregistered device %s", as102_dev->name); 279 pr_info("Unregistered device %s", as102_dev->name);
280} 280}
281 281
282static int __init as102_driver_init(void) 282module_usb_driver(as102_usb_driver);
283{
284 int ret;
285
286 /* register this driver with the low level subsystem */
287 ret = usb_register(&as102_usb_driver);
288 if (ret)
289 err("usb_register failed (ret = %d)", ret);
290
291 return ret;
292}
293
294/*
295 * Mandatory function : Adds a special section to the module indicating
296 * where initialisation function is defined
297 */
298module_init(as102_driver_init);
299
300/**
301 * as102_driver_exit - as102 driver exit point
302 *
303 * This function is called when device has to be removed.
304 */
305static void __exit as102_driver_exit(void)
306{
307 /* deregister this driver with the low level bus subsystem */
308 usb_deregister(&as102_usb_driver);
309}
310 283
311/*
312 * required function for unload: Adds a special section to the module
313 * indicating where unload function is defined
314 */
315module_exit(as102_driver_exit);
316/* modinfo details */ 284/* modinfo details */
317MODULE_DESCRIPTION(DRIVER_FULL_NAME); 285MODULE_DESCRIPTION(DRIVER_FULL_NAME);
318MODULE_LICENSE("GPL"); 286MODULE_LICENSE("GPL");
diff --git a/drivers/staging/media/as102/as102_usb_drv.c b/drivers/staging/media/as102/as102_usb_drv.c
index 0f6bfe7eccba..6875c88e7bec 100644
--- a/drivers/staging/media/as102/as102_usb_drv.c
+++ b/drivers/staging/media/as102/as102_usb_drv.c
@@ -375,7 +375,7 @@ static int as102_usb_probe(struct usb_interface *intf,
375 375
376 as102_dev = kzalloc(sizeof(struct as102_dev_t), GFP_KERNEL); 376 as102_dev = kzalloc(sizeof(struct as102_dev_t), GFP_KERNEL);
377 if (as102_dev == NULL) { 377 if (as102_dev == NULL) {
378 err("%s: kzalloc failed", __func__); 378 dev_err(&intf->dev, "%s: kzalloc failed\n", __func__);
379 return -ENOMEM; 379 return -ENOMEM;
380 } 380 }
381 381
@@ -411,8 +411,9 @@ static int as102_usb_probe(struct usb_interface *intf,
411 ret = usb_register_dev(intf, &as102_usb_class_driver); 411 ret = usb_register_dev(intf, &as102_usb_class_driver);
412 if (ret < 0) { 412 if (ret < 0) {
413 /* something prevented us from registering this driver */ 413 /* something prevented us from registering this driver */
414 err("%s: usb_register_dev() failed (errno = %d)", 414 dev_err(&intf->dev,
415 __func__, ret); 415 "%s: usb_register_dev() failed (errno = %d)\n",
416 __func__, ret);
416 goto failed; 417 goto failed;
417 } 418 }
418 419
diff --git a/drivers/staging/media/easycap/easycap_main.c b/drivers/staging/media/easycap/easycap_main.c
index d0fe34afc2e5..6f83d362ab0d 100644
--- a/drivers/staging/media/easycap/easycap_main.c
+++ b/drivers/staging/media/easycap/easycap_main.c
@@ -3578,7 +3578,8 @@ static int easycap_usb_probe(struct usb_interface *intf,
3578 3578
3579 if (0 != (video_register_device(&(peasycap->video_device), 3579 if (0 != (video_register_device(&(peasycap->video_device),
3580 VFL_TYPE_GRABBER, -1))) { 3580 VFL_TYPE_GRABBER, -1))) {
3581 err("Not able to register with videodev"); 3581 dev_err(&intf->dev,
3582 "Not able to register with videodev\n");
3582 videodev_release(&(peasycap->video_device)); 3583 videodev_release(&(peasycap->video_device));
3583 return -ENODEV; 3584 return -ENODEV;
3584 } 3585 }
@@ -3822,7 +3823,8 @@ static int easycap_usb_probe(struct usb_interface *intf,
3822 3823
3823 rc = easycap_alsa_probe(peasycap); 3824 rc = easycap_alsa_probe(peasycap);
3824 if (rc) { 3825 if (rc) {
3825 err("easycap_alsa_probe() rc = %i\n", rc); 3826 dev_err(&intf->dev, "easycap_alsa_probe() rc = %i\n",
3827 rc);
3826 return -ENODEV; 3828 return -ENODEV;
3827 } 3829 }
3828 3830
diff --git a/drivers/staging/media/go7007/go7007.txt b/drivers/staging/media/go7007/go7007.txt
index 9db1f3952fd2..fcb3e235abbf 100644
--- a/drivers/staging/media/go7007/go7007.txt
+++ b/drivers/staging/media/go7007/go7007.txt
@@ -87,7 +87,6 @@ kernel as built-in or modules:
87 CONFIG_SOUND - Sound card support 87 CONFIG_SOUND - Sound card support
88 CONFIG_SND - Advanced Linux Sound Architecture 88 CONFIG_SND - Advanced Linux Sound Architecture
89 CONFIG_USB - Support for Host-side USB 89 CONFIG_USB - Support for Host-side USB
90 CONFIG_USB_DEVICEFS - USB device filesystem
91 CONFIG_USB_EHCI_HCD - EHCI HCD (USB 2.0) support 90 CONFIG_USB_EHCI_HCD - EHCI HCD (USB 2.0) support
92 91
93Additionally, to use the example application, the following options need to 92Additionally, to use the example application, the following options need to
diff --git a/drivers/staging/media/lirc/lirc_imon.c b/drivers/staging/media/lirc/lirc_imon.c
index 5f7f8cd3a661..d7cf5ef076a5 100644
--- a/drivers/staging/media/lirc/lirc_imon.c
+++ b/drivers/staging/media/lirc/lirc_imon.c
@@ -209,8 +209,9 @@ static void deregister_from_lirc(struct imon_context *context)
209 209
210 retval = lirc_unregister_driver(minor); 210 retval = lirc_unregister_driver(minor);
211 if (retval) 211 if (retval)
212 err("%s: unable to deregister from lirc(%d)", 212 printk(KERN_ERR KBUILD_MODNAME
213 __func__, retval); 213 ": %s: unable to deregister from lirc(%d)",
214 __func__, retval);
214 else 215 else
215 printk(KERN_INFO MOD_NAME ": Deregistered iMON driver " 216 printk(KERN_INFO MOD_NAME ": Deregistered iMON driver "
216 "(minor:%d)\n", minor); 217 "(minor:%d)\n", minor);
@@ -234,16 +235,18 @@ static int display_open(struct inode *inode, struct file *file)
234 subminor = iminor(inode); 235 subminor = iminor(inode);
235 interface = usb_find_interface(&imon_driver, subminor); 236 interface = usb_find_interface(&imon_driver, subminor);
236 if (!interface) { 237 if (!interface) {
237 err("%s: could not find interface for minor %d", 238 printk(KERN_ERR KBUILD_MODNAME
238 __func__, subminor); 239 ": %s: could not find interface for minor %d\n",
240 __func__, subminor);
239 retval = -ENODEV; 241 retval = -ENODEV;
240 goto exit; 242 goto exit;
241 } 243 }
242 context = usb_get_intfdata(interface); 244 context = usb_get_intfdata(interface);
243 245
244 if (!context) { 246 if (!context) {
245 err("%s: no context found for minor %d", 247 dev_err(&interface->dev,
246 __func__, subminor); 248 "%s: no context found for minor %d\n",
249 __func__, subminor);
247 retval = -ENODEV; 250 retval = -ENODEV;
248 goto exit; 251 goto exit;
249 } 252 }
@@ -251,10 +254,12 @@ static int display_open(struct inode *inode, struct file *file)
251 mutex_lock(&context->ctx_lock); 254 mutex_lock(&context->ctx_lock);
252 255
253 if (!context->display) { 256 if (!context->display) {
254 err("%s: display not supported by device", __func__); 257 dev_err(&interface->dev,
258 "%s: display not supported by device\n", __func__);
255 retval = -ENODEV; 259 retval = -ENODEV;
256 } else if (context->display_isopen) { 260 } else if (context->display_isopen) {
257 err("%s: display port is already open", __func__); 261 dev_err(&interface->dev,
262 "%s: display port is already open\n", __func__);
258 retval = -EBUSY; 263 retval = -EBUSY;
259 } else { 264 } else {
260 context->display_isopen = 1; 265 context->display_isopen = 1;
@@ -281,17 +286,20 @@ static int display_close(struct inode *inode, struct file *file)
281 context = file->private_data; 286 context = file->private_data;
282 287
283 if (!context) { 288 if (!context) {
284 err("%s: no context for device", __func__); 289 printk(KERN_ERR KBUILD_MODNAME
290 "%s: no context for device\n", __func__);
285 return -ENODEV; 291 return -ENODEV;
286 } 292 }
287 293
288 mutex_lock(&context->ctx_lock); 294 mutex_lock(&context->ctx_lock);
289 295
290 if (!context->display) { 296 if (!context->display) {
291 err("%s: display not supported by device", __func__); 297 dev_err(&context->usbdev->dev,
298 "%s: display not supported by device\n", __func__);
292 retval = -ENODEV; 299 retval = -ENODEV;
293 } else if (!context->display_isopen) { 300 } else if (!context->display_isopen) {
294 err("%s: display is not open", __func__); 301 dev_err(&context->usbdev->dev,
302 "%s: display is not open\n", __func__);
295 retval = -EIO; 303 retval = -EIO;
296 } else { 304 } else {
297 context->display_isopen = 0; 305 context->display_isopen = 0;
@@ -340,19 +348,23 @@ static int send_packet(struct imon_context *context)
340 retval = usb_submit_urb(context->tx_urb, GFP_KERNEL); 348 retval = usb_submit_urb(context->tx_urb, GFP_KERNEL);
341 if (retval) { 349 if (retval) {
342 atomic_set(&(context->tx.busy), 0); 350 atomic_set(&(context->tx.busy), 0);
343 err("%s: error submitting urb(%d)", __func__, retval); 351 dev_err(&context->usbdev->dev,
352 "%s: error submitting urb(%d)\n", __func__, retval);
344 } else { 353 } else {
345 /* Wait for transmission to complete (or abort) */ 354 /* Wait for transmission to complete (or abort) */
346 mutex_unlock(&context->ctx_lock); 355 mutex_unlock(&context->ctx_lock);
347 retval = wait_for_completion_interruptible( 356 retval = wait_for_completion_interruptible(
348 &context->tx.finished); 357 &context->tx.finished);
349 if (retval) 358 if (retval)
350 err("%s: task interrupted", __func__); 359 dev_err(&context->usbdev->dev,
360 "%s: task interrupted\n", __func__);
351 mutex_lock(&context->ctx_lock); 361 mutex_lock(&context->ctx_lock);
352 362
353 retval = context->tx.status; 363 retval = context->tx.status;
354 if (retval) 364 if (retval)
355 err("%s: packet tx failed (%d)", __func__, retval); 365 dev_err(&context->usbdev->dev,
366 "%s: packet tx failed (%d)\n",
367 __func__, retval);
356 } 368 }
357 369
358 return retval; 370 return retval;
@@ -383,20 +395,23 @@ static ssize_t vfd_write(struct file *file, const char __user *buf,
383 395
384 context = file->private_data; 396 context = file->private_data;
385 if (!context) { 397 if (!context) {
386 err("%s: no context for device", __func__); 398 printk(KERN_ERR KBUILD_MODNAME
399 "%s: no context for device\n", __func__);
387 return -ENODEV; 400 return -ENODEV;
388 } 401 }
389 402
390 mutex_lock(&context->ctx_lock); 403 mutex_lock(&context->ctx_lock);
391 404
392 if (!context->dev_present) { 405 if (!context->dev_present) {
393 err("%s: no iMON device present", __func__); 406 dev_err(&context->usbdev->dev,
407 "%s: no iMON device present\n", __func__);
394 retval = -ENODEV; 408 retval = -ENODEV;
395 goto exit; 409 goto exit;
396 } 410 }
397 411
398 if (n_bytes <= 0 || n_bytes > IMON_DATA_BUF_SZ - 3) { 412 if (n_bytes <= 0 || n_bytes > IMON_DATA_BUF_SZ - 3) {
399 err("%s: invalid payload size", __func__); 413 dev_err(&context->usbdev->dev,
414 "%s: invalid payload size\n", __func__);
400 retval = -EINVAL; 415 retval = -EINVAL;
401 goto exit; 416 goto exit;
402 } 417 }
@@ -425,8 +440,9 @@ static ssize_t vfd_write(struct file *file, const char __user *buf,
425 440
426 retval = send_packet(context); 441 retval = send_packet(context);
427 if (retval) { 442 if (retval) {
428 err("%s: send packet failed for packet #%d", 443 dev_err(&context->usbdev->dev,
429 __func__, seq/2); 444 "%s: send packet failed for packet #%d\n",
445 __func__, seq/2);
430 goto exit; 446 goto exit;
431 } else { 447 } else {
432 seq += 2; 448 seq += 2;
@@ -441,7 +457,8 @@ static ssize_t vfd_write(struct file *file, const char __user *buf,
441 context->usb_tx_buf[7] = (unsigned char) seq; 457 context->usb_tx_buf[7] = (unsigned char) seq;
442 retval = send_packet(context); 458 retval = send_packet(context);
443 if (retval) 459 if (retval)
444 err("%s: send packet failed for packet #%d", 460 dev_err(&context->usbdev->dev,
461 "%s: send packet failed for packet #%d\n",
445 __func__, seq/2); 462 __func__, seq/2);
446 } 463 }
447 464
@@ -508,7 +525,8 @@ static void ir_close(void *data)
508 525
509 context = (struct imon_context *)data; 526 context = (struct imon_context *)data;
510 if (!context) { 527 if (!context) {
511 err("%s: no context for device", __func__); 528 printk(KERN_ERR KBUILD_MODNAME
529 "%s: no context for device\n", __func__);
512 return; 530 return;
513 } 531 }
514 532
@@ -732,7 +750,7 @@ static int imon_probe(struct usb_interface *interface,
732 750
733 context = kzalloc(sizeof(struct imon_context), GFP_KERNEL); 751 context = kzalloc(sizeof(struct imon_context), GFP_KERNEL);
734 if (!context) { 752 if (!context) {
735 err("%s: kzalloc failed for context", __func__); 753 dev_err(dev, "%s: kzalloc failed for context\n", __func__);
736 alloc_status = 1; 754 alloc_status = 1;
737 goto alloc_status_switch; 755 goto alloc_status_switch;
738 } 756 }
@@ -797,7 +815,7 @@ static int imon_probe(struct usb_interface *interface,
797 815
798 /* Input endpoint is mandatory */ 816 /* Input endpoint is mandatory */
799 if (!ir_ep_found) { 817 if (!ir_ep_found) {
800 err("%s: no valid input (IR) endpoint found.", __func__); 818 dev_err(dev, "%s: no valid input (IR) endpoint found.\n", __func__);
801 retval = -ENODEV; 819 retval = -ENODEV;
802 alloc_status = 2; 820 alloc_status = 2;
803 goto alloc_status_switch; 821 goto alloc_status_switch;
@@ -814,30 +832,30 @@ static int imon_probe(struct usb_interface *interface,
814 832
815 driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL); 833 driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
816 if (!driver) { 834 if (!driver) {
817 err("%s: kzalloc failed for lirc_driver", __func__); 835 dev_err(dev, "%s: kzalloc failed for lirc_driver\n", __func__);
818 alloc_status = 2; 836 alloc_status = 2;
819 goto alloc_status_switch; 837 goto alloc_status_switch;
820 } 838 }
821 rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL); 839 rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
822 if (!rbuf) { 840 if (!rbuf) {
823 err("%s: kmalloc failed for lirc_buffer", __func__); 841 dev_err(dev, "%s: kmalloc failed for lirc_buffer\n", __func__);
824 alloc_status = 3; 842 alloc_status = 3;
825 goto alloc_status_switch; 843 goto alloc_status_switch;
826 } 844 }
827 if (lirc_buffer_init(rbuf, BUF_CHUNK_SIZE, BUF_SIZE)) { 845 if (lirc_buffer_init(rbuf, BUF_CHUNK_SIZE, BUF_SIZE)) {
828 err("%s: lirc_buffer_init failed", __func__); 846 dev_err(dev, "%s: lirc_buffer_init failed\n", __func__);
829 alloc_status = 4; 847 alloc_status = 4;
830 goto alloc_status_switch; 848 goto alloc_status_switch;
831 } 849 }
832 rx_urb = usb_alloc_urb(0, GFP_KERNEL); 850 rx_urb = usb_alloc_urb(0, GFP_KERNEL);
833 if (!rx_urb) { 851 if (!rx_urb) {
834 err("%s: usb_alloc_urb failed for IR urb", __func__); 852 dev_err(dev, "%s: usb_alloc_urb failed for IR urb\n", __func__);
835 alloc_status = 5; 853 alloc_status = 5;
836 goto alloc_status_switch; 854 goto alloc_status_switch;
837 } 855 }
838 tx_urb = usb_alloc_urb(0, GFP_KERNEL); 856 tx_urb = usb_alloc_urb(0, GFP_KERNEL);
839 if (!tx_urb) { 857 if (!tx_urb) {
840 err("%s: usb_alloc_urb failed for display urb", 858 dev_err(dev, "%s: usb_alloc_urb failed for display urb\n",
841 __func__); 859 __func__);
842 alloc_status = 6; 860 alloc_status = 6;
843 goto alloc_status_switch; 861 goto alloc_status_switch;
@@ -865,7 +883,7 @@ static int imon_probe(struct usb_interface *interface,
865 883
866 lirc_minor = lirc_register_driver(driver); 884 lirc_minor = lirc_register_driver(driver);
867 if (lirc_minor < 0) { 885 if (lirc_minor < 0) {
868 err("%s: lirc_register_driver failed", __func__); 886 dev_err(dev, "%s: lirc_register_driver failed\n", __func__);
869 alloc_status = 7; 887 alloc_status = 7;
870 goto unlock; 888 goto unlock;
871 } else 889 } else
@@ -900,8 +918,8 @@ static int imon_probe(struct usb_interface *interface,
900 retval = usb_submit_urb(context->rx_urb, GFP_KERNEL); 918 retval = usb_submit_urb(context->rx_urb, GFP_KERNEL);
901 919
902 if (retval) { 920 if (retval) {
903 err("%s: usb_submit_urb failed for intf0 (%d)", 921 dev_err(dev, "%s: usb_submit_urb failed for intf0 (%d)\n",
904 __func__, retval); 922 __func__, retval);
905 mutex_unlock(&context->ctx_lock); 923 mutex_unlock(&context->ctx_lock);
906 goto exit; 924 goto exit;
907 } 925 }
diff --git a/drivers/staging/media/lirc/lirc_sasem.c b/drivers/staging/media/lirc/lirc_sasem.c
index 74421043b954..352a20229ca2 100644
--- a/drivers/staging/media/lirc/lirc_sasem.c
+++ b/drivers/staging/media/lirc/lirc_sasem.c
@@ -185,7 +185,7 @@ static void deregister_from_lirc(struct sasem_context *context)
185 185
186 retval = lirc_unregister_driver(minor); 186 retval = lirc_unregister_driver(minor);
187 if (retval) 187 if (retval)
188 err("%s: unable to deregister from lirc (%d)", 188 printk(KERN_ERR "%s: unable to deregister from lirc (%d)\n",
189 __func__, retval); 189 __func__, retval);
190 else 190 else
191 printk(KERN_INFO "Deregistered Sasem driver (minor:%d)\n", 191 printk(KERN_INFO "Deregistered Sasem driver (minor:%d)\n",
@@ -210,16 +210,18 @@ static int vfd_open(struct inode *inode, struct file *file)
210 subminor = iminor(inode); 210 subminor = iminor(inode);
211 interface = usb_find_interface(&sasem_driver, subminor); 211 interface = usb_find_interface(&sasem_driver, subminor);
212 if (!interface) { 212 if (!interface) {
213 err("%s: could not find interface for minor %d", 213 printk(KERN_ERR KBUILD_MODNAME
214 __func__, subminor); 214 ": %s: could not find interface for minor %d\n",
215 __func__, subminor);
215 retval = -ENODEV; 216 retval = -ENODEV;
216 goto exit; 217 goto exit;
217 } 218 }
218 context = usb_get_intfdata(interface); 219 context = usb_get_intfdata(interface);
219 220
220 if (!context) { 221 if (!context) {
221 err("%s: no context found for minor %d", 222 dev_err(&interface->dev,
222 __func__, subminor); 223 "%s: no context found for minor %d\n",
224 __func__, subminor);
223 retval = -ENODEV; 225 retval = -ENODEV;
224 goto exit; 226 goto exit;
225 } 227 }
@@ -227,12 +229,13 @@ static int vfd_open(struct inode *inode, struct file *file)
227 mutex_lock(&context->ctx_lock); 229 mutex_lock(&context->ctx_lock);
228 230
229 if (context->vfd_isopen) { 231 if (context->vfd_isopen) {
230 err("%s: VFD port is already open", __func__); 232 dev_err(&interface->dev,
233 "%s: VFD port is already open", __func__);
231 retval = -EBUSY; 234 retval = -EBUSY;
232 } else { 235 } else {
233 context->vfd_isopen = 1; 236 context->vfd_isopen = 1;
234 file->private_data = context; 237 file->private_data = context;
235 printk(KERN_INFO "VFD port opened\n"); 238 dev_info(&interface->dev, "VFD port opened\n");
236 } 239 }
237 240
238 mutex_unlock(&context->ctx_lock); 241 mutex_unlock(&context->ctx_lock);
@@ -253,7 +256,8 @@ static long vfd_ioctl(struct file *file, unsigned cmd, unsigned long arg)
253 context = (struct sasem_context *) file->private_data; 256 context = (struct sasem_context *) file->private_data;
254 257
255 if (!context) { 258 if (!context) {
256 err("%s: no context for device", __func__); 259 printk(KERN_ERR KBUILD_MODNAME
260 ": %s: no context for device\n", __func__);
257 return -ENODEV; 261 return -ENODEV;
258 } 262 }
259 263
@@ -287,14 +291,15 @@ static int vfd_close(struct inode *inode, struct file *file)
287 context = (struct sasem_context *) file->private_data; 291 context = (struct sasem_context *) file->private_data;
288 292
289 if (!context) { 293 if (!context) {
290 err("%s: no context for device", __func__); 294 printk(KERN_ERR KBUILD_MODNAME
295 ": %s: no context for device\n", __func__);
291 return -ENODEV; 296 return -ENODEV;
292 } 297 }
293 298
294 mutex_lock(&context->ctx_lock); 299 mutex_lock(&context->ctx_lock);
295 300
296 if (!context->vfd_isopen) { 301 if (!context->vfd_isopen) {
297 err("%s: VFD is not open", __func__); 302 dev_err(&context->dev->dev, "%s: VFD is not open\n", __func__);
298 retval = -EIO; 303 retval = -EIO;
299 } else { 304 } else {
300 context->vfd_isopen = 0; 305 context->vfd_isopen = 0;
@@ -339,7 +344,8 @@ static int send_packet(struct sasem_context *context)
339 retval = usb_submit_urb(context->tx_urb, GFP_KERNEL); 344 retval = usb_submit_urb(context->tx_urb, GFP_KERNEL);
340 if (retval) { 345 if (retval) {
341 atomic_set(&(context->tx.busy), 0); 346 atomic_set(&(context->tx.busy), 0);
342 err("%s: error submitting urb (%d)", __func__, retval); 347 dev_err(&context->dev->dev, "%s: error submitting urb (%d)\n",
348 __func__, retval);
343 } else { 349 } else {
344 /* Wait for transmission to complete (or abort) */ 350 /* Wait for transmission to complete (or abort) */
345 mutex_unlock(&context->ctx_lock); 351 mutex_unlock(&context->ctx_lock);
@@ -348,7 +354,9 @@ static int send_packet(struct sasem_context *context)
348 354
349 retval = context->tx.status; 355 retval = context->tx.status;
350 if (retval) 356 if (retval)
351 err("%s: packet tx failed (%d)", __func__, retval); 357 dev_err(&context->dev->dev,
358 "%s: packet tx failed (%d)\n",
359 __func__, retval);
352 } 360 }
353 361
354 return retval; 362 return retval;
@@ -369,20 +377,23 @@ static ssize_t vfd_write(struct file *file, const char *buf,
369 377
370 context = (struct sasem_context *) file->private_data; 378 context = (struct sasem_context *) file->private_data;
371 if (!context) { 379 if (!context) {
372 err("%s: no context for device", __func__); 380 printk(KERN_ERR KBUILD_MODNAME
381 ": %s: no context for device\n", __func__);
373 return -ENODEV; 382 return -ENODEV;
374 } 383 }
375 384
376 mutex_lock(&context->ctx_lock); 385 mutex_lock(&context->ctx_lock);
377 386
378 if (!context->dev_present) { 387 if (!context->dev_present) {
379 err("%s: no Sasem device present", __func__); 388 printk(KERN_ERR KBUILD_MODNAME
389 ": %s: no Sasem device present\n", __func__);
380 retval = -ENODEV; 390 retval = -ENODEV;
381 goto exit; 391 goto exit;
382 } 392 }
383 393
384 if (n_bytes <= 0 || n_bytes > SASEM_DATA_BUF_SZ) { 394 if (n_bytes <= 0 || n_bytes > SASEM_DATA_BUF_SZ) {
385 err("%s: invalid payload size", __func__); 395 dev_err(&context->dev->dev, "%s: invalid payload size\n",
396 __func__);
386 retval = -EINVAL; 397 retval = -EINVAL;
387 goto exit; 398 goto exit;
388 } 399 }
@@ -440,9 +451,9 @@ static ssize_t vfd_write(struct file *file, const char *buf,
440 } 451 }
441 retval = send_packet(context); 452 retval = send_packet(context);
442 if (retval) { 453 if (retval) {
443 454 dev_err(&context->dev->dev,
444 err("%s: send packet failed for packet #%d", 455 "%s: send packet failed for packet #%d\n",
445 __func__, i); 456 __func__, i);
446 goto exit; 457 goto exit;
447 } 458 }
448 } 459 }
@@ -492,7 +503,8 @@ static int ir_open(void *data)
492 mutex_lock(&context->ctx_lock); 503 mutex_lock(&context->ctx_lock);
493 504
494 if (context->ir_isopen) { 505 if (context->ir_isopen) {
495 err("%s: IR port is already open", __func__); 506 dev_err(&context->dev->dev, "%s: IR port is already open\n",
507 __func__);
496 retval = -EBUSY; 508 retval = -EBUSY;
497 goto exit; 509 goto exit;
498 } 510 }
@@ -506,8 +518,9 @@ static int ir_open(void *data)
506 retval = usb_submit_urb(context->rx_urb, GFP_KERNEL); 518 retval = usb_submit_urb(context->rx_urb, GFP_KERNEL);
507 519
508 if (retval) 520 if (retval)
509 err("%s: usb_submit_urb failed for ir_open (%d)", 521 dev_err(&context->dev->dev,
510 __func__, retval); 522 "%s: usb_submit_urb failed for ir_open (%d)\n",
523 __func__, retval);
511 else { 524 else {
512 context->ir_isopen = 1; 525 context->ir_isopen = 1;
513 printk(KERN_INFO "IR port opened\n"); 526 printk(KERN_INFO "IR port opened\n");
@@ -529,7 +542,8 @@ static void ir_close(void *data)
529 542
530 context = (struct sasem_context *)data; 543 context = (struct sasem_context *)data;
531 if (!context) { 544 if (!context) {
532 err("%s: no context for device", __func__); 545 printk(KERN_ERR KBUILD_MODNAME
546 ": %s: no context for device\n", __func__);
533 return; 547 return;
534 } 548 }
535 549
@@ -687,7 +701,7 @@ static int sasem_probe(struct usb_interface *interface,
687 struct sasem_context *context = NULL; 701 struct sasem_context *context = NULL;
688 int i; 702 int i;
689 703
690 printk(KERN_INFO "%s: found Sasem device\n", __func__); 704 dev_info(&interface->dev, "%s: found Sasem device\n", __func__);
691 705
692 706
693 dev = usb_get_dev(interface_to_usbdev(interface)); 707 dev = usb_get_dev(interface_to_usbdev(interface));
@@ -719,8 +733,8 @@ static int sasem_probe(struct usb_interface *interface,
719 rx_endpoint = ep; 733 rx_endpoint = ep;
720 ir_ep_found = 1; 734 ir_ep_found = 1;
721 if (debug) 735 if (debug)
722 printk(KERN_INFO "%s: found IR endpoint\n", 736 dev_info(&interface->dev,
723 __func__); 737 "%s: found IR endpoint\n", __func__);
724 738
725 } else if (!vfd_ep_found && 739 } else if (!vfd_ep_found &&
726 ep_dir == USB_DIR_OUT && 740 ep_dir == USB_DIR_OUT &&
@@ -729,22 +743,23 @@ static int sasem_probe(struct usb_interface *interface,
729 tx_endpoint = ep; 743 tx_endpoint = ep;
730 vfd_ep_found = 1; 744 vfd_ep_found = 1;
731 if (debug) 745 if (debug)
732 printk(KERN_INFO "%s: found VFD endpoint\n", 746 dev_info(&interface->dev,
733 __func__); 747 "%s: found VFD endpoint\n", __func__);
734 } 748 }
735 } 749 }
736 750
737 /* Input endpoint is mandatory */ 751 /* Input endpoint is mandatory */
738 if (!ir_ep_found) { 752 if (!ir_ep_found) {
739 753 dev_err(&interface->dev,
740 err("%s: no valid input (IR) endpoint found.", __func__); 754 "%s: no valid input (IR) endpoint found.\n", __func__);
741 retval = -ENODEV; 755 retval = -ENODEV;
742 goto exit; 756 goto exit;
743 } 757 }
744 758
745 if (!vfd_ep_found) 759 if (!vfd_ep_found)
746 printk(KERN_INFO "%s: no valid output (VFD) endpoint found.\n", 760 dev_info(&interface->dev,
747 __func__); 761 "%s: no valid output (VFD) endpoint found.\n",
762 __func__);
748 763
749 764
750 /* Allocate memory */ 765 /* Allocate memory */
@@ -752,38 +767,44 @@ static int sasem_probe(struct usb_interface *interface,
752 767
753 context = kzalloc(sizeof(struct sasem_context), GFP_KERNEL); 768 context = kzalloc(sizeof(struct sasem_context), GFP_KERNEL);
754 if (!context) { 769 if (!context) {
755 err("%s: kzalloc failed for context", __func__); 770 dev_err(&interface->dev,
771 "%s: kzalloc failed for context\n", __func__);
756 alloc_status = 1; 772 alloc_status = 1;
757 goto alloc_status_switch; 773 goto alloc_status_switch;
758 } 774 }
759 driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL); 775 driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
760 if (!driver) { 776 if (!driver) {
761 err("%s: kzalloc failed for lirc_driver", __func__); 777 dev_err(&interface->dev,
778 "%s: kzalloc failed for lirc_driver\n", __func__);
762 alloc_status = 2; 779 alloc_status = 2;
763 goto alloc_status_switch; 780 goto alloc_status_switch;
764 } 781 }
765 rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL); 782 rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
766 if (!rbuf) { 783 if (!rbuf) {
767 err("%s: kmalloc failed for lirc_buffer", __func__); 784 dev_err(&interface->dev,
785 "%s: kmalloc failed for lirc_buffer\n", __func__);
768 alloc_status = 3; 786 alloc_status = 3;
769 goto alloc_status_switch; 787 goto alloc_status_switch;
770 } 788 }
771 if (lirc_buffer_init(rbuf, BUF_CHUNK_SIZE, BUF_SIZE)) { 789 if (lirc_buffer_init(rbuf, BUF_CHUNK_SIZE, BUF_SIZE)) {
772 err("%s: lirc_buffer_init failed", __func__); 790 dev_err(&interface->dev,
791 "%s: lirc_buffer_init failed\n", __func__);
773 alloc_status = 4; 792 alloc_status = 4;
774 goto alloc_status_switch; 793 goto alloc_status_switch;
775 } 794 }
776 rx_urb = usb_alloc_urb(0, GFP_KERNEL); 795 rx_urb = usb_alloc_urb(0, GFP_KERNEL);
777 if (!rx_urb) { 796 if (!rx_urb) {
778 err("%s: usb_alloc_urb failed for IR urb", __func__); 797 dev_err(&interface->dev,
798 "%s: usb_alloc_urb failed for IR urb\n", __func__);
779 alloc_status = 5; 799 alloc_status = 5;
780 goto alloc_status_switch; 800 goto alloc_status_switch;
781 } 801 }
782 if (vfd_ep_found) { 802 if (vfd_ep_found) {
783 tx_urb = usb_alloc_urb(0, GFP_KERNEL); 803 tx_urb = usb_alloc_urb(0, GFP_KERNEL);
784 if (!tx_urb) { 804 if (!tx_urb) {
785 err("%s: usb_alloc_urb failed for VFD urb", 805 dev_err(&interface->dev,
786 __func__); 806 "%s: usb_alloc_urb failed for VFD urb",
807 __func__);
787 alloc_status = 6; 808 alloc_status = 6;
788 goto alloc_status_switch; 809 goto alloc_status_switch;
789 } 810 }
@@ -807,7 +828,8 @@ static int sasem_probe(struct usb_interface *interface,
807 828
808 lirc_minor = lirc_register_driver(driver); 829 lirc_minor = lirc_register_driver(driver);
809 if (lirc_minor < 0) { 830 if (lirc_minor < 0) {
810 err("%s: lirc_register_driver failed", __func__); 831 dev_err(&interface->dev,
832 "%s: lirc_register_driver failed\n", __func__);
811 alloc_status = 7; 833 alloc_status = 7;
812 retval = lirc_minor; 834 retval = lirc_minor;
813 goto unlock; 835 goto unlock;
diff --git a/drivers/staging/media/lirc/lirc_ttusbir.c b/drivers/staging/media/lirc/lirc_ttusbir.c
index 7950887ff113..3bb865c02173 100644
--- a/drivers/staging/media/lirc/lirc_ttusbir.c
+++ b/drivers/staging/media/lirc/lirc_ttusbir.c
@@ -113,8 +113,9 @@ static int set_use_inc(void *data)
113 for (i = 0; i < num_urbs; i++) { 113 for (i = 0; i < num_urbs; i++) {
114 retval = usb_submit_urb(ttusbir->urb[i], GFP_KERNEL); 114 retval = usb_submit_urb(ttusbir->urb[i], GFP_KERNEL);
115 if (retval) { 115 if (retval) {
116 err("%s: usb_submit_urb failed on urb %d", 116 dev_err(&ttusbir->interf->dev,
117 __func__, i); 117 "%s: usb_submit_urb failed on urb %d\n",
118 __func__, i);
118 return retval; 119 return retval;
119 } 120 }
120 } 121 }
@@ -278,7 +279,7 @@ static int probe(struct usb_interface *intf, const struct usb_device_id *id)
278 if (ttusbir->alt_setting != -1) 279 if (ttusbir->alt_setting != -1)
279 DPRINTK("alt setting: %d\n", ttusbir->alt_setting); 280 DPRINTK("alt setting: %d\n", ttusbir->alt_setting);
280 else { 281 else {
281 err("Could not find alternate setting\n"); 282 dev_err(&intf->dev, "Could not find alternate setting\n");
282 kfree(ttusbir); 283 kfree(ttusbir);
283 return -EINVAL; 284 return -EINVAL;
284 } 285 }
@@ -291,7 +292,7 @@ static int probe(struct usb_interface *intf, const struct usb_device_id *id)
291 292
292 /* Register as a LIRC driver */ 293 /* Register as a LIRC driver */
293 if (lirc_buffer_init(&ttusbir->rbuf, sizeof(int), 256) < 0) { 294 if (lirc_buffer_init(&ttusbir->rbuf, sizeof(int), 256) < 0) {
294 err("Could not get memory for LIRC data buffer\n"); 295 dev_err(&intf->dev, "Could not get memory for LIRC data buffer\n");
295 usb_set_intfdata(intf, NULL); 296 usb_set_intfdata(intf, NULL);
296 kfree(ttusbir); 297 kfree(ttusbir);
297 return -ENOMEM; 298 return -ENOMEM;
@@ -310,7 +311,7 @@ static int probe(struct usb_interface *intf, const struct usb_device_id *id)
310 ttusbir->driver.features = LIRC_CAN_REC_MODE2; 311 ttusbir->driver.features = LIRC_CAN_REC_MODE2;
311 ttusbir->minor = lirc_register_driver(&ttusbir->driver); 312 ttusbir->minor = lirc_register_driver(&ttusbir->driver);
312 if (ttusbir->minor < 0) { 313 if (ttusbir->minor < 0) {
313 err("Error registering as LIRC driver\n"); 314 dev_err(&intf->dev, "Error registering as LIRC driver\n");
314 usb_set_intfdata(intf, NULL); 315 usb_set_intfdata(intf, NULL);
315 lirc_buffer_free(&ttusbir->rbuf); 316 lirc_buffer_free(&ttusbir->rbuf);
316 kfree(ttusbir); 317 kfree(ttusbir);
@@ -321,7 +322,7 @@ static int probe(struct usb_interface *intf, const struct usb_device_id *id)
321 for (i = 0; i < num_urbs; i++) { 322 for (i = 0; i < num_urbs; i++) {
322 ttusbir->urb[i] = usb_alloc_urb(8, GFP_KERNEL); 323 ttusbir->urb[i] = usb_alloc_urb(8, GFP_KERNEL);
323 if (!ttusbir->urb[i]) { 324 if (!ttusbir->urb[i]) {
324 err("Could not allocate memory for the URB\n"); 325 dev_err(&intf->dev, "Could not allocate memory for the URB\n");
325 for (j = i - 1; j >= 0; j--) 326 for (j = i - 1; j >= 0; j--)
326 kfree(ttusbir->urb[j]); 327 kfree(ttusbir->urb[j]);
327 lirc_buffer_free(&ttusbir->rbuf); 328 lirc_buffer_free(&ttusbir->rbuf);
diff --git a/drivers/staging/quatech_usb2/Kconfig b/drivers/staging/quatech_usb2/Kconfig
deleted file mode 100644
index 1494f42f3da0..000000000000
--- a/drivers/staging/quatech_usb2/Kconfig
+++ /dev/null
@@ -1,15 +0,0 @@
1config USB_SERIAL_QUATECH_USB2
2 tristate "USB Quatech xSU2-[14]00 USB Serial Driver"
3 depends on USB_SERIAL
4 help
5 Say Y here if you want to use a Quatech USB2.0 to serial adaptor. This
6 driver supports the SSU2-100, DSU2-100, DSU2-400, QSU2-100, QSU2-400,
7 ESU2-400 and ESU2-100 USB2.0 to RS232 / 485 / 422 serial adaptors.
8
9 Some hardware has an incorrect product string and announces itself as
10 ESU-100 (which uses the serqt driver) even though it is an ESU2-100.
11 Check the label on the bottom of your device.
12
13 To compile this driver as a module, choose M here: the module will be
14 called quatech_usb2 .
15
diff --git a/drivers/staging/quatech_usb2/Makefile b/drivers/staging/quatech_usb2/Makefile
deleted file mode 100644
index bcd1f890d163..000000000000
--- a/drivers/staging/quatech_usb2/Makefile
+++ /dev/null
@@ -1 +0,0 @@
1obj-$(CONFIG_USB_SERIAL_QUATECH_USB2) += quatech_usb2.o
diff --git a/drivers/staging/quatech_usb2/TODO b/drivers/staging/quatech_usb2/TODO
deleted file mode 100644
index 67f61dbe14ac..000000000000
--- a/drivers/staging/quatech_usb2/TODO
+++ /dev/null
@@ -1,8 +0,0 @@
1Incomplete list of things that this driver does not yet implement completely or
2at all. some of these may not be possible to implement because the hardware
3support does not exist. Others may be possible, but the magic control codes to
4make them happen are unknown, and some may just need the driver support to
5implement them writing.
6
7* Mark/Space parity is not implemented (reported back correctly)
8* IXANY flow control mode is not implemented (flag ignored completely)
diff --git a/drivers/staging/quatech_usb2/quatech_usb2.c b/drivers/staging/quatech_usb2/quatech_usb2.c
deleted file mode 100644
index bb977e00cc86..000000000000
--- a/drivers/staging/quatech_usb2/quatech_usb2.c
+++ /dev/null
@@ -1,1976 +0,0 @@
1/*
2 * Driver for Quatech Inc USB2.0 to serial adaptors. Largely unrelated to the
3 * serqt_usb driver, based on a re-write of the vendor supplied serqt_usb2 code,
4 * which is unrelated to the serqt_usb2 in the staging kernel
5 */
6
7#include <linux/errno.h>
8#include <linux/init.h>
9#include <linux/slab.h>
10#include <linux/tty.h>
11#include <linux/tty_driver.h>
12#include <linux/tty_flip.h>
13#include <linux/module.h>
14#include <linux/serial.h>
15#include <linux/usb.h>
16#include <linux/usb/serial.h>
17#include <linux/uaccess.h>
18
19static bool debug;
20
21/* Version Information */
22#define DRIVER_VERSION "v2.00"
23#define DRIVER_AUTHOR "Tim Gobeli, Quatech, Inc"
24#define DRIVER_DESC "Quatech USB 2.0 to Serial Driver"
25
26/* vendor and device IDs */
27#define USB_VENDOR_ID_QUATECH 0x061d /* Quatech VID */
28#define QUATECH_SSU2_100 0xC120 /* RS232 single port */
29#define QUATECH_DSU2_100 0xC140 /* RS232 dual port */
30#define QUATECH_DSU2_400 0xC150 /* RS232/422/485 dual port */
31#define QUATECH_QSU2_100 0xC160 /* RS232 four port */
32#define QUATECH_QSU2_400 0xC170 /* RS232/422/485 four port */
33#define QUATECH_ESU2_100 0xC1A0 /* RS232 eight port */
34#define QUATECH_ESU2_400 0xC180 /* RS232/422/485 eight port */
35
36/* magic numbers go here, when we find out which ones are needed */
37
38#define QU2BOXPWRON 0x8000 /* magic number to turn FPGA power on */
39#define QU2BOX232 0x40 /* RS232 mode on MEI devices */
40#define QU2BOXSPD9600 0x60 /* set speed to 9600 baud */
41#define QT2_FIFO_DEPTH 1024 /* size of hardware fifos */
42#define QT2_TX_HEADER_LENGTH 5
43/* length of the header sent to the box with each write URB */
44
45/* directions for USB transfers */
46#define USBD_TRANSFER_DIRECTION_IN 0xc0
47#define USBD_TRANSFER_DIRECTION_OUT 0x40
48
49/* special Quatech command IDs. These are pushed down the
50 USB control pipe to get the box on the end to do things */
51#define QT_SET_GET_DEVICE 0xc2
52#define QT_OPEN_CLOSE_CHANNEL 0xca
53/*#define QT_GET_SET_PREBUF_TRIG_LVL 0xcc
54#define QT_SET_ATF 0xcd*/
55#define QT2_GET_SET_REGISTER 0xc0
56#define QT2_GET_SET_UART 0xc1
57#define QT2_HW_FLOW_CONTROL_MASK 0xc5
58#define QT2_SW_FLOW_CONTROL_MASK 0xc6
59#define QT2_SW_FLOW_CONTROL_DISABLE 0xc7
60#define QT2_BREAK_CONTROL 0xc8
61#define QT2_STOP_RECEIVE 0xe0
62#define QT2_FLUSH_DEVICE 0xc4
63#define QT2_GET_SET_QMCR 0xe1
64
65/* sorts of flush we can do on */
66#define QT2_FLUSH_RX 0x00
67#define QT2_FLUSH_TX 0x01
68
69/* port setting constants, used to set up serial port speeds, flow
70 * control and so on */
71#define QT2_SERIAL_MCR_DTR 0x01
72#define QT2_SERIAL_MCR_RTS 0x02
73#define QT2_SERIAL_MCR_LOOP 0x10
74
75#define QT2_SERIAL_MSR_CTS 0x10
76#define QT2_SERIAL_MSR_CD 0x80
77#define QT2_SERIAL_MSR_RI 0x40
78#define QT2_SERIAL_MSR_DSR 0x20
79#define QT2_SERIAL_MSR_MASK 0xf0
80
81#define QT2_SERIAL_8_DATA 0x03
82#define QT2_SERIAL_7_DATA 0x02
83#define QT2_SERIAL_6_DATA 0x01
84#define QT2_SERIAL_5_DATA 0x00
85
86#define QT2_SERIAL_ODD_PARITY 0x08
87#define QT2_SERIAL_EVEN_PARITY 0x18
88#define QT2_SERIAL_TWO_STOPB 0x04
89#define QT2_SERIAL_ONE_STOPB 0x00
90
91#define QT2_MAX_BAUD_RATE 921600
92#define QT2_MAX_BAUD_REMAINDER 4608
93
94#define QT2_SERIAL_LSR_OE 0x02
95#define QT2_SERIAL_LSR_PE 0x04
96#define QT2_SERIAL_LSR_FE 0x08
97#define QT2_SERIAL_LSR_BI 0x10
98
99/* value of Line Status Register when UART has completed
100 * emptying data out on the line */
101#define QT2_LSR_TEMT 0x40
102
103/* register numbers on each UART, for use with qt2_box_[get|set]_register*/
104#define QT2_XMT_HOLD_REGISTER 0x00
105#define QT2_XVR_BUFFER_REGISTER 0x00
106#define QT2_FIFO_CONTROL_REGISTER 0x02
107#define QT2_LINE_CONTROL_REGISTER 0x03
108#define QT2_MODEM_CONTROL_REGISTER 0x04
109#define QT2_LINE_STATUS_REGISTER 0x05
110#define QT2_MODEM_STATUS_REGISTER 0x06
111
112/* handy macros for doing escape sequence parsing on data reads */
113#define THISCHAR ((unsigned char *)(urb->transfer_buffer))[i]
114#define NEXTCHAR ((unsigned char *)(urb->transfer_buffer))[i + 1]
115#define THIRDCHAR ((unsigned char *)(urb->transfer_buffer))[i + 2]
116#define FOURTHCHAR ((unsigned char *)(urb->transfer_buffer))[i + 3]
117#define FIFTHCHAR ((unsigned char *)(urb->transfer_buffer))[i + 4]
118
119static const struct usb_device_id quausb2_id_table[] = {
120 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU2_100)},
121 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_100)},
122 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_400)},
123 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU2_100)},
124 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU2_400)},
125 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_100)},
126 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_400)},
127 {} /* Terminating entry */
128};
129
130MODULE_DEVICE_TABLE(usb, quausb2_id_table);
131
132/* custom structures we need go here */
133static struct usb_driver quausb2_usb_driver = {
134 .name = "quatech-usb2-serial",
135 .probe = usb_serial_probe,
136 .disconnect = usb_serial_disconnect,
137 .id_table = quausb2_id_table,
138};
139
140/**
141 * quatech2_port: Structure in which to keep all the messy stuff that this
142 * driver needs alongside the usb_serial_port structure
143 * @read_urb_busy: Flag indicating that port->read_urb is in use
144 * @close_pending: flag indicating that this port is in the process of
145 * being closed (and so no new reads / writes should be started).
146 * @shadowLSR: Last received state of the line status register, holds the
147 * value of the line status flags from the port
148 * @shadowMSR: Last received state of the modem status register, holds
149 * the value of the modem status received from the port
150 * @rcv_flush: Flag indicating that a receive flush has occurred on
151 * the hardware.
152 * @xmit_flush: Flag indicating that a transmit flush has been processed by
153 * the hardware.
154 * @tx_pending_bytes: Number of bytes waiting to be sent. This total
155 * includes the size (excluding header) of URBs that have been submitted but
156 * have not yet been sent to to the device, and bytes that have been sent out
157 * of the port but not yet reported sent by the "xmit_empty" messages (which
158 * indicate the number of bytes sent each time they are received, despite the
159 * misleading name).
160 * - Starts at zero when port is initialised.
161 * - is incremented by the size of the data to be written (no headers)
162 * each time a write urb is dispatched.
163 * - is decremented each time a "transmit empty" message is received
164 * by the driver in the data stream.
165 * @lock: Mutex to lock access to this structure when we need to ensure that
166 * races don't occur to access bits of it.
167 * @open_count: The number of uses of the port currently having
168 * it open, i.e. the reference count.
169 */
170struct quatech2_port {
171 int magic;
172 bool read_urb_busy;
173 bool close_pending;
174 __u8 shadowLSR;
175 __u8 shadowMSR;
176 bool rcv_flush;
177 bool xmit_flush;
178 int tx_pending_bytes;
179 struct mutex modelock;
180 int open_count;
181
182 char active; /* someone has this device open */
183 unsigned char *xfer_to_tty_buffer;
184 wait_queue_head_t wait;
185 __u8 shadowLCR; /* last LCR value received */
186 __u8 shadowMCR; /* last MCR value received */
187 char RxHolding;
188 struct semaphore pend_xmit_sem; /* locks this structure */
189 spinlock_t lock;
190};
191
192/**
193 * Structure to hold device-wide internal status information
194 * @param ReadBulkStopped The last bulk read attempt ended in tears
195 * @param open_ports The number of serial ports currently in use on the box
196 * @param current_port Pointer to the serial port structure of the port which
197 * the read stream is currently directed to. Escape sequences in the read
198 * stream will change this around as data arrives from different ports on the
199 * box
200 * @buffer_size: The max size buffer each URB can take, used to set the size of
201 * the buffers allocated for writing to each port on the device (we need to
202 * store this because it is known only to the endpoint, but used each time a
203 * port is opened and a new buffer is allocated.
204 */
205struct quatech2_dev {
206 bool ReadBulkStopped;
207 char open_ports;
208 struct usb_serial_port *current_port;
209 int buffer_size;
210};
211
212/* structure which holds line and modem status flags */
213struct qt2_status_data {
214 __u8 line_status;
215 __u8 modem_status;
216};
217
218/* Function prototypes */
219static int qt2_boxpoweron(struct usb_serial *serial);
220static int qt2_boxsetQMCR(struct usb_serial *serial, __u16 Uart_Number,
221 __u8 QMCR_Value);
222static int port_paranoia_check(struct usb_serial_port *port,
223 const char *function);
224static int serial_paranoia_check(struct usb_serial *serial,
225 const char *function);
226static inline struct quatech2_port *qt2_get_port_private(struct usb_serial_port
227 *port);
228static inline void qt2_set_port_private(struct usb_serial_port *port,
229 struct quatech2_port *data);
230static inline struct quatech2_dev *qt2_get_dev_private(struct usb_serial
231 *serial);
232static inline void qt2_set_dev_private(struct usb_serial *serial,
233 struct quatech2_dev *data);
234static int qt2_openboxchannel(struct usb_serial *serial, __u16
235 Uart_Number, struct qt2_status_data *pDeviceData);
236static int qt2_closeboxchannel(struct usb_serial *serial, __u16
237 Uart_Number);
238static int qt2_conf_uart(struct usb_serial *serial, unsigned short Uart_Number,
239 unsigned short divisor, unsigned char LCR);
240static void qt2_read_bulk_callback(struct urb *urb);
241static void qt2_write_bulk_callback(struct urb *urb);
242static void qt2_process_line_status(struct usb_serial_port *port,
243 unsigned char LineStatus);
244static void qt2_process_modem_status(struct usb_serial_port *port,
245 unsigned char ModemStatus);
246static void qt2_process_xmit_empty(struct usb_serial_port *port,
247 unsigned char fourth_char, unsigned char fifth_char);
248static void qt2_process_port_change(struct usb_serial_port *port,
249 unsigned char New_Current_Port);
250static void qt2_process_rcv_flush(struct usb_serial_port *port);
251static void qt2_process_xmit_flush(struct usb_serial_port *port);
252static void qt2_process_rx_char(struct usb_serial_port *port,
253 unsigned char data);
254static int qt2_box_get_register(struct usb_serial *serial,
255 unsigned char uart_number, unsigned short register_num,
256 __u8 *pValue);
257static int qt2_box_set_register(struct usb_serial *serial,
258 unsigned short Uart_Number, unsigned short Register_Num,
259 unsigned short Value);
260static int qt2_boxsetuart(struct usb_serial *serial, unsigned short Uart_Number,
261 unsigned short default_divisor, unsigned char default_LCR);
262static int qt2_boxsethw_flowctl(struct usb_serial *serial,
263 unsigned int UartNumber, bool bSet);
264static int qt2_boxsetsw_flowctl(struct usb_serial *serial, __u16 UartNumber,
265 unsigned char stop_char, unsigned char start_char);
266static int qt2_boxunsetsw_flowctl(struct usb_serial *serial, __u16 UartNumber);
267static int qt2_boxstoprx(struct usb_serial *serial, unsigned short uart_number,
268 unsigned short stop);
269
270/* implementation functions, roughly in order of use, are here */
271static int qt2_calc_num_ports(struct usb_serial *serial)
272{
273 int num_ports;
274 int flag_as_400;
275 switch (serial->dev->descriptor.idProduct) {
276 case QUATECH_SSU2_100:
277 num_ports = 1;
278 break;
279
280 case QUATECH_DSU2_400:
281 flag_as_400 = true;
282 case QUATECH_DSU2_100:
283 num_ports = 2;
284 break;
285
286 case QUATECH_QSU2_400:
287 flag_as_400 = true;
288 case QUATECH_QSU2_100:
289 num_ports = 4;
290 break;
291
292 case QUATECH_ESU2_400:
293 flag_as_400 = true;
294 case QUATECH_ESU2_100:
295 num_ports = 8;
296 break;
297 default:
298 num_ports = 1;
299 break;
300 }
301 return num_ports;
302}
303
304static int qt2_attach(struct usb_serial *serial)
305{
306 struct usb_serial_port *port;
307 struct quatech2_port *qt2_port; /* port-specific private data pointer */
308 struct quatech2_dev *qt2_dev; /* dev-specific private data pointer */
309 int i;
310 /* stuff for storing endpoint addresses now */
311 struct usb_endpoint_descriptor *endpoint;
312 struct usb_host_interface *iface_desc;
313 struct usb_serial_port *port0; /* first port structure on device */
314
315 /* check how many endpoints there are on the device, for
316 * sanity's sake */
317 dbg("%s(): Endpoints: %d bulk in, %d bulk out, %d interrupt in",
318 __func__, serial->num_bulk_in,
319 serial->num_bulk_out, serial->num_interrupt_in);
320 if ((serial->num_bulk_in != 1) || (serial->num_bulk_out != 1)) {
321 dbg("Device has wrong number of bulk endpoints!");
322 return -ENODEV;
323 }
324 iface_desc = serial->interface->cur_altsetting;
325
326 /* Set up per-device private data, storing extra data alongside
327 * struct usb_serial */
328 qt2_dev = kzalloc(sizeof(*qt2_dev), GFP_KERNEL);
329 if (!qt2_dev) {
330 dbg("%s: kmalloc for quatech2_dev failed!",
331 __func__);
332 return -ENOMEM;
333 }
334 qt2_dev->open_ports = 0; /* no ports open */
335 qt2_set_dev_private(serial, qt2_dev); /* store private data */
336
337 /* Now setup per port private data, which replaces all the things
338 * that quatech added to standard kernel structures in their driver */
339 for (i = 0; i < serial->num_ports; i++) {
340 port = serial->port[i];
341 qt2_port = kzalloc(sizeof(*qt2_port), GFP_KERNEL);
342 if (!qt2_port) {
343 dbg("%s: kmalloc for quatech2_port (%d) failed!.",
344 __func__, i);
345 return -ENOMEM;
346 }
347 /* initialise stuff in the structure */
348 qt2_port->open_count = 0; /* port is not open */
349 spin_lock_init(&qt2_port->lock);
350 mutex_init(&qt2_port->modelock);
351 qt2_set_port_private(port, qt2_port);
352 }
353
354 /* gain access to port[0]'s structure because we want to store
355 * device-level stuff in it */
356 if (serial_paranoia_check(serial, __func__))
357 return -ENODEV;
358 port0 = serial->port[0]; /* get the first port's device structure */
359
360 /* print endpoint addresses so we can check them later
361 * by hand */
362 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
363 endpoint = &iface_desc->endpoint[i].desc;
364 if ((endpoint->bEndpointAddress & 0x80) &&
365 ((endpoint->bmAttributes & 3) == 0x02)) {
366 /* we found a bulk in endpoint */
367 dbg("found bulk in at %#.2x",
368 endpoint->bEndpointAddress);
369 }
370
371 if (((endpoint->bEndpointAddress & 0x80) == 0x00) &&
372 ((endpoint->bmAttributes & 3) == 0x02)) {
373 /* we found a bulk out endpoint */
374 dbg("found bulk out at %#.2x",
375 endpoint->bEndpointAddress);
376 qt2_dev->buffer_size = endpoint->wMaxPacketSize;
377 /* max size of URB needs recording for the device */
378 }
379 } /* end printing endpoint addresses */
380
381 /* switch on power to the hardware */
382 if (qt2_boxpoweron(serial) < 0) {
383 dbg("qt2_boxpoweron() failed");
384 goto startup_error;
385 }
386 /* set all ports to RS232 mode */
387 for (i = 0; i < serial->num_ports; ++i) {
388 if (qt2_boxsetQMCR(serial, i, QU2BOX232) < 0) {
389 dbg("qt2_boxsetQMCR() on port %d failed",
390 i);
391 goto startup_error;
392 }
393 }
394
395 return 0;
396
397startup_error:
398 for (i = 0; i < serial->num_ports; i++) {
399 port = serial->port[i];
400 qt2_port = qt2_get_port_private(port);
401 kfree(qt2_port);
402 qt2_set_port_private(port, NULL);
403 }
404 qt2_dev = qt2_get_dev_private(serial);
405 kfree(qt2_dev);
406 qt2_set_dev_private(serial, NULL);
407
408 dbg("Exit fail %s\n", __func__);
409 return -EIO;
410}
411
412static void qt2_release(struct usb_serial *serial)
413{
414 struct usb_serial_port *port;
415 struct quatech2_port *qt_port;
416 int i;
417
418 dbg("enterting %s", __func__);
419
420 for (i = 0; i < serial->num_ports; i++) {
421 port = serial->port[i];
422 if (!port)
423 continue;
424
425 qt_port = usb_get_serial_port_data(port);
426 kfree(qt_port);
427 usb_set_serial_port_data(port, NULL);
428 }
429}
430/* This function is called once per serial port on the device, when
431 * that port is opened by a userspace application.
432 * The tty_struct and the usb_serial_port belong to this port,
433 * i.e. there are multiple ones for a multi-port device.
434 * However the usb_serial_port structure has a back-pointer
435 * to the parent usb_serial structure which belongs to the device,
436 * so we can access either the device-wide information or
437 * any other port's information (because there are also forward
438 * pointers) via that pointer.
439 * This is most helpful if the device shares resources (e.g. end
440 * points) between different ports
441 */
442int qt2_open(struct tty_struct *tty, struct usb_serial_port *port)
443{
444 struct usb_serial *serial; /* device structure */
445 struct usb_serial_port *port0; /* first port structure on device */
446 struct quatech2_port *port_extra; /* extra data for this port */
447 struct quatech2_port *port0_extra; /* extra data for first port */
448 struct quatech2_dev *dev_extra; /* extra data for the device */
449 struct qt2_status_data ChannelData;
450 unsigned short default_divisor = QU2BOXSPD9600;
451 unsigned char default_LCR = QT2_SERIAL_8_DATA;
452 int status;
453 int result;
454
455 if (port_paranoia_check(port, __func__))
456 return -ENODEV;
457
458 dbg("%s(): port %d", __func__, port->number);
459
460 serial = port->serial; /* get the parent device structure */
461 if (serial_paranoia_check(serial, __func__)) {
462 dbg("usb_serial struct failed sanity check");
463 return -ENODEV;
464 }
465 dev_extra = qt2_get_dev_private(serial);
466 /* get the device private data */
467 if (dev_extra == NULL) {
468 dbg("device extra data pointer is null");
469 return -ENODEV;
470 }
471 port0 = serial->port[0]; /* get the first port's device structure */
472 if (port_paranoia_check(port0, __func__)) {
473 dbg("port0 usb_serial_port struct failed sanity check");
474 return -ENODEV;
475 }
476
477 port_extra = qt2_get_port_private(port);
478 port0_extra = qt2_get_port_private(port0);
479 if (port_extra == NULL || port0_extra == NULL) {
480 dbg("failed to get private data for port or port0");
481 return -ENODEV;
482 }
483
484 /* FIXME: are these needed? Does it even do anything useful? */
485 /* get the modem and line status values from the UART */
486 status = qt2_openboxchannel(serial, port->number,
487 &ChannelData);
488 if (status < 0) {
489 dbg("qt2_openboxchannel on channel %d failed",
490 port->number);
491 return status;
492 }
493 port_extra->shadowLSR = ChannelData.line_status &
494 (QT2_SERIAL_LSR_OE | QT2_SERIAL_LSR_PE |
495 QT2_SERIAL_LSR_FE | QT2_SERIAL_LSR_BI);
496 port_extra->shadowMSR = ChannelData.modem_status &
497 (QT2_SERIAL_MSR_CTS | QT2_SERIAL_MSR_DSR |
498 QT2_SERIAL_MSR_RI | QT2_SERIAL_MSR_CD);
499
500/* port_extra->fifo_empty_flag = true;*/
501 dbg("qt2_openboxchannel on channel %d completed.",
502 port->number);
503
504 /* Set Baud rate to default and turn off flow control here */
505 status = qt2_conf_uart(serial, port->number, default_divisor,
506 default_LCR);
507 if (status < 0) {
508 dbg("qt2_conf_uart() failed on channel %d",
509 port->number);
510 return status;
511 }
512 dbg("qt2_conf_uart() completed on channel %d",
513 port->number);
514
515 /*
516 * At this point we will need some end points to make further progress.
517 * Handlily, the correct endpoint addresses have been filled out into
518 * the usb_serial_port structure for us by the driver core, so we
519 * already have access to them.
520 * As there is only one bulk in and one bulk out end-point, these are in
521 * port[0]'s structure, and the rest are uninitialised. Handily,
522 * when we do a write to a port, we will use the same endpoint
523 * regardless of the port, with a 5-byte header added on to
524 * tell the box which port it should eventually come out of, so we only
525 * need the one set of endpoints. We will have one URB per port for
526 * writing, so that multiple ports can be writing at once.
527 * Finally we need a bulk in URB to use for background reads from the
528 * device, which will deal with uplink data from the box to host.
529 */
530 dbg("port0 bulk in endpoint is %#.2x", port0->bulk_in_endpointAddress);
531 dbg("port0 bulk out endpoint is %#.2x",
532 port0->bulk_out_endpointAddress);
533
534 /* set up write_urb for bulk out transfers on this port. The USB
535 * serial framework will have allocated a blank URB, buffer etc for
536 * port0 when it put the endpoints there, but not for any of the other
537 * ports on the device because there are no more endpoints. Thus we
538 * have to allocate our own URBs for ports 1-7
539 */
540 if (port->write_urb == NULL) {
541 dbg("port->write_urb == NULL, allocating one");
542 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
543 if (!port->write_urb) {
544 err("Allocating write URB failed");
545 return -ENOMEM;
546 }
547 /* buffer same size as port0 */
548 port->bulk_out_size = dev_extra->buffer_size;
549 port->bulk_out_buffer = kmalloc(port->bulk_out_size,
550 GFP_KERNEL);
551 if (!port->bulk_out_buffer) {
552 err("Couldn't allocate bulk_out_buffer");
553 return -ENOMEM;
554 }
555 }
556 if (serial->dev == NULL)
557 dbg("serial->dev == NULL");
558 dbg("port->bulk_out_size is %d", port->bulk_out_size);
559
560 usb_fill_bulk_urb(port->write_urb, serial->dev,
561 usb_sndbulkpipe(serial->dev,
562 port0->bulk_out_endpointAddress),
563 port->bulk_out_buffer,
564 port->bulk_out_size,
565 qt2_write_bulk_callback,
566 port);
567 port_extra->tx_pending_bytes = 0;
568
569 if (dev_extra->open_ports == 0) {
570 /* this is first port to be opened, so need the read URB
571 * initialised for bulk in transfers (this is shared amongst
572 * all the ports on the device) */
573 usb_fill_bulk_urb(port0->read_urb, serial->dev,
574 usb_rcvbulkpipe(serial->dev,
575 port0->bulk_in_endpointAddress),
576 port0->bulk_in_buffer,
577 port0->bulk_in_size,
578 qt2_read_bulk_callback, serial);
579 dbg("port0 bulk in URB initialised");
580
581 /* submit URB, i.e. start reading from device (async) */
582 dev_extra->ReadBulkStopped = false;
583 port_extra->read_urb_busy = true;
584 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
585 if (result) {
586 dev_err(&port->dev,
587 "%s(): Error %d submitting bulk in urb",
588 __func__, result);
589 port_extra->read_urb_busy = false;
590 dev_extra->ReadBulkStopped = true;
591 }
592
593 /* When the first port is opened, initialise the value of
594 * current_port in dev_extra to this port, so it is set
595 * to something. Once the box sends data it will send the
596 * relevant escape sequences to get it to the right port anyway
597 */
598 dev_extra->current_port = port;
599 }
600
601 /* initialize our wait queues */
602 init_waitqueue_head(&port_extra->wait);
603 /* increment the count of openings of this port by one */
604 port_extra->open_count++;
605
606 /* remember to store dev_extra, port_extra and port0_extra back again at
607 * end !*/
608 qt2_set_port_private(port, port_extra);
609 qt2_set_port_private(serial->port[0], port0_extra);
610 qt2_set_dev_private(serial, dev_extra);
611
612 dev_extra->open_ports++; /* one more port opened */
613
614 return 0;
615}
616
617/* called when a port is closed by userspace. It won't be called, however,
618 * until calls to chars_in_buffer() reveal that the port has completed
619 * sending buffered data, and there is nothing else to do. Thus we don't have
620 * to rely on forcing data through in this function. */
621/* Setting close_pending should keep new data from being written out,
622 * once all the data in the enpoint buffers is moved out we won't get
623 * any more. */
624/* BoxStopReceive would keep any more data from coming from a given
625 * port, but isn't called by the vendor driver, although their comments
626 * mention it. Should it be used here to stop the inbound data
627 * flow?
628 */
629static void qt2_close(struct usb_serial_port *port)
630{
631 /* time out value for flush loops */
632 unsigned long jift;
633 struct quatech2_port *port_extra; /* extra data for this port */
634 struct usb_serial *serial; /* device structure */
635 struct quatech2_dev *dev_extra; /* extra data for the device */
636 __u8 lsr_value = 0; /* value of Line Status Register */
637 int status; /* result of last USB comms function */
638
639 dbg("%s(): port %d", __func__, port->number);
640 serial = port->serial; /* get the parent device structure */
641 dev_extra = qt2_get_dev_private(serial);
642 /* get the device private data */
643 port_extra = qt2_get_port_private(port); /* port private data */
644
645 /* we can now (and only now) stop reading data */
646 port_extra->close_pending = true;
647 dbg("%s(): port_extra->close_pending = true", __func__);
648 /* although the USB side is now empty, the UART itself may
649 * still be pushing characters out over the line, so we have to
650 * wait testing the actual line status until the lines change
651 * indicating that the data is done transferring. */
652 /* FIXME: slow this polling down so it doesn't run the USB bus flat out
653 * if it actually has to spend any time in this loop (which it normally
654 * doesn't because the buffer is nearly empty) */
655 jift = jiffies + (10 * HZ); /* 10 sec timeout */
656 do {
657 status = qt2_box_get_register(serial, port->number,
658 QT2_LINE_STATUS_REGISTER, &lsr_value);
659 if (status < 0) {
660 dbg("%s(): qt2_box_get_register failed", __func__);
661 break;
662 }
663 if ((lsr_value & QT2_LSR_TEMT)) {
664 dbg("UART done sending");
665 break;
666 }
667 schedule();
668 } while (jiffies <= jift);
669
670 status = qt2_closeboxchannel(serial, port->number);
671 if (status < 0)
672 dbg("%s(): port %d qt2_box_open_close_channel failed",
673 __func__, port->number);
674 /* to avoid leaking URBs, we should now free the write_urb for this
675 * port and set the pointer to null so that next time the port is opened
676 * a new URB is allocated. This avoids leaking URBs when the device is
677 * removed */
678 usb_free_urb(port->write_urb);
679 kfree(port->bulk_out_buffer);
680 port->bulk_out_buffer = NULL;
681 port->bulk_out_size = 0;
682
683 /* decrement the count of openings of this port by one */
684 port_extra->open_count--;
685 /* one less overall open as well */
686 dev_extra->open_ports--;
687 dbg("%s(): Exit, dev_extra->open_ports = %d", __func__,
688 dev_extra->open_ports);
689}
690
691/**
692 * qt2_write - write bytes from the tty layer out to the USB device.
693 * @buf: The data to be written, size at least count.
694 * @count: The number of bytes requested for transmission.
695 * @return The number of bytes actually accepted for transmission to the device.
696 */
697static int qt2_write(struct tty_struct *tty, struct usb_serial_port *port,
698 const unsigned char *buf, int count)
699{
700 struct usb_serial *serial; /* parent device struct */
701 __u8 header_array[5]; /* header used to direct writes to the correct
702 port on the device */
703 struct quatech2_port *port_extra; /* extra data for this port */
704 int result;
705
706 serial = port->serial; /* get the parent device of the port */
707 port_extra = qt2_get_port_private(port); /* port extra info */
708 if (serial == NULL)
709 return -ENODEV;
710 dbg("%s(): port %d, requested to write %d bytes, %d already pending",
711 __func__, port->number, count, port_extra->tx_pending_bytes);
712
713 if (count <= 0) {
714 dbg("%s(): write request of <= 0 bytes", __func__);
715 return 0; /* no bytes written */
716 }
717
718 /* check if the write urb is already in use, i.e. data already being
719 * sent to this port */
720 if ((port->write_urb->status == -EINPROGRESS)) {
721 /* Fifo hasn't been emptied since last write to this port */
722 dbg("%s(): already writing, port->write_urb->status == "
723 "-EINPROGRESS", __func__);
724 /* schedule_work(&port->work); commented in vendor driver */
725 return 0;
726 } else if (port_extra->tx_pending_bytes >= QT2_FIFO_DEPTH) {
727 /* buffer is full (==). > should not occur, but would indicate
728 * that an overflow had occurred */
729 dbg("%s(): port transmit buffer is full!", __func__);
730 /* schedule_work(&port->work); commented in vendor driver */
731 return 0;
732 }
733
734 /* We must fill the first 5 bytes of anything we sent with a transmit
735 * header which directes the data to the correct port. The maximum
736 * size we can send out in one URB is port->bulk_out_size, which caps
737 * the number of bytes of real data we can send in each write. As the
738 * semantics of write allow us to write less than we were give, we cap
739 * the maximum we will ever write to the device as 5 bytes less than
740 * one URB's worth, by reducing the value of the count argument
741 * appropriately*/
742 if (count > port->bulk_out_size - QT2_TX_HEADER_LENGTH) {
743 count = port->bulk_out_size - QT2_TX_HEADER_LENGTH;
744 dbg("%s(): write request bigger than urb, only accepting "
745 "%d bytes", __func__, count);
746 }
747 /* we must also ensure that the FIFO at the other end can cope with the
748 * URB we send it, otherwise it will have problems. As above, we can
749 * restrict the write size by just shrinking count.*/
750 if (count > (QT2_FIFO_DEPTH - port_extra->tx_pending_bytes)) {
751 count = QT2_FIFO_DEPTH - port_extra->tx_pending_bytes;
752 dbg("%s(): not enough room in buffer, only accepting %d bytes",
753 __func__, count);
754 }
755 /* now build the header for transmission */
756 header_array[0] = 0x1b;
757 header_array[1] = 0x1b;
758 header_array[2] = (__u8)port->number;
759 header_array[3] = (__u8)count;
760 header_array[4] = (__u8)count >> 8;
761 /* copy header into URB */
762 memcpy(port->write_urb->transfer_buffer, header_array,
763 QT2_TX_HEADER_LENGTH);
764 /* and actual data to write */
765 memcpy(port->write_urb->transfer_buffer + 5, buf, count);
766
767 dbg("%s(): first data byte to send = %#.2x", __func__, *buf);
768
769 /* set up our urb */
770 usb_fill_bulk_urb(port->write_urb, serial->dev,
771 usb_sndbulkpipe(serial->dev,
772 port->bulk_out_endpointAddress),
773 port->write_urb->transfer_buffer, count + 5,
774 (qt2_write_bulk_callback), port);
775 /* send the data out the bulk port */
776 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
777 if (result) {
778 /* error couldn't submit urb */
779 result = 0; /* return 0 as nothing got written */
780 dbg("%s(): failed submitting write urb, error %d",
781 __func__, result);
782 } else {
783 port_extra->tx_pending_bytes += count;
784 result = count; /* return number of bytes written, i.e. count */
785 dbg("%s(): submitted write urb, wrote %d bytes, "
786 "total pending bytes %d",
787 __func__, result, port_extra->tx_pending_bytes);
788 }
789 return result;
790}
791
792/* This is used by the next layer up to know how much space is available
793 * in the buffer on the device. It is used on a device closure to avoid
794 * calling close() until the buffer is reported to be empty.
795 * The returned value must never go down by more than the number of bytes
796 * written for correct behaviour further up the driver stack, i.e. if I call
797 * it, then write 6 bytes, then call again I should get 6 less, or possibly
798 * only 5 less if one was written in the meantime, etc. I should never get 7
799 * less (or any bigger number) because I only wrote 6 bytes.
800 */
801static int qt2_write_room(struct tty_struct *tty)
802{
803 struct usb_serial_port *port = tty->driver_data;
804 /* parent usb_serial_port pointer */
805 struct quatech2_port *port_extra; /* extra data for this port */
806 int room = 0;
807 port_extra = qt2_get_port_private(port);
808
809 if (port_extra->close_pending == true) {
810 dbg("%s(): port_extra->close_pending == true", __func__);
811 return -ENODEV;
812 }
813 /* Q: how many bytes would a write() call actually succeed in writing
814 * if it happened now?
815 * A: one QT2_FIFO_DEPTH, less the number of bytes waiting to be sent
816 * out of the port, unless this is more than the size of the
817 * write_urb output buffer less the header, which is the maximum
818 * size write we can do.
819
820 * Most of the implementation of this is done when writes to the device
821 * are started or terminate. When we send a write to the device, we
822 * reduce the free space count by the size of the dispatched write.
823 * When a "transmit empty" message comes back up the USB read stream,
824 * we decrement the count by the number of bytes reported sent, thus
825 * keeping track of the difference between sent and received bytes.
826 */
827
828 room = (QT2_FIFO_DEPTH - port_extra->tx_pending_bytes);
829 /* space in FIFO */
830 if (room > port->bulk_out_size - QT2_TX_HEADER_LENGTH)
831 room = port->bulk_out_size - QT2_TX_HEADER_LENGTH;
832 /* if more than the URB can hold, then cap to that limit */
833
834 dbg("%s(): port %d: write room is %d", __func__, port->number, room);
835 return room;
836}
837
838static int qt2_chars_in_buffer(struct tty_struct *tty)
839{
840 struct usb_serial_port *port = tty->driver_data;
841 /* parent usb_serial_port pointer */
842 struct quatech2_port *port_extra; /* extra data for this port */
843 port_extra = qt2_get_port_private(port);
844
845 dbg("%s(): port %d: chars_in_buffer = %d", __func__,
846 port->number, port_extra->tx_pending_bytes);
847 return port_extra->tx_pending_bytes;
848}
849
850/* called when userspace does an ioctl() on the device. Note that
851 * TIOCMGET and TIOCMSET are filtered off to their own methods before they get
852 * here, so we don't have to handle them.
853 */
854static int qt2_ioctl(struct tty_struct *tty,
855 unsigned int cmd, unsigned long arg)
856{
857 struct usb_serial_port *port = tty->driver_data;
858 struct usb_serial *serial = port->serial;
859 __u8 mcr_value; /* Modem Control Register value */
860 __u8 msr_value; /* Modem Status Register value */
861 unsigned short prev_msr_value; /* Previous value of Modem Status
862 * Register used to implement waiting for a line status change to
863 * occur */
864 struct quatech2_port *port_extra; /* extra data for this port */
865 DECLARE_WAITQUEUE(wait, current);
866 /* Declare a wait queue named "wait" */
867
868 unsigned int value;
869 unsigned int UartNumber;
870
871 if (serial == NULL)
872 return -ENODEV;
873 UartNumber = tty->index - serial->minor;
874 port_extra = qt2_get_port_private(port);
875
876 dbg("%s(): port %d, UartNumber %d, tty =0x%p", __func__,
877 port->number, UartNumber, tty);
878
879 if (cmd == TIOCMBIS || cmd == TIOCMBIC) {
880 if (qt2_box_get_register(port->serial, UartNumber,
881 QT2_MODEM_CONTROL_REGISTER, &mcr_value) < 0)
882 return -ESPIPE;
883 if (copy_from_user(&value, (unsigned int *)arg,
884 sizeof(value)))
885 return -EFAULT;
886
887 switch (cmd) {
888 case TIOCMBIS:
889 if (value & TIOCM_RTS)
890 mcr_value |= QT2_SERIAL_MCR_RTS;
891 if (value & TIOCM_DTR)
892 mcr_value |= QT2_SERIAL_MCR_DTR;
893 if (value & TIOCM_LOOP)
894 mcr_value |= QT2_SERIAL_MCR_LOOP;
895 break;
896 case TIOCMBIC:
897 if (value & TIOCM_RTS)
898 mcr_value &= ~QT2_SERIAL_MCR_RTS;
899 if (value & TIOCM_DTR)
900 mcr_value &= ~QT2_SERIAL_MCR_DTR;
901 if (value & TIOCM_LOOP)
902 mcr_value &= ~QT2_SERIAL_MCR_LOOP;
903 break;
904 default:
905 break;
906 } /* end of local switch on cmd */
907 if (qt2_box_set_register(port->serial, UartNumber,
908 QT2_MODEM_CONTROL_REGISTER, mcr_value) < 0) {
909 return -ESPIPE;
910 } else {
911 port_extra->shadowMCR = mcr_value;
912 return 0;
913 }
914 } else if (cmd == TIOCMIWAIT) {
915 dbg("%s() port %d, cmd == TIOCMIWAIT enter",
916 __func__, port->number);
917 prev_msr_value = port_extra->shadowMSR & QT2_SERIAL_MSR_MASK;
918 barrier();
919 __set_current_state(TASK_INTERRUPTIBLE);
920 while (1) {
921 add_wait_queue(&port_extra->wait, &wait);
922 schedule();
923 dbg("%s(): port %d, cmd == TIOCMIWAIT here\n",
924 __func__, port->number);
925 remove_wait_queue(&port_extra->wait, &wait);
926 /* see if a signal woke us up */
927 if (signal_pending(current))
928 return -ERESTARTSYS;
929 set_current_state(TASK_INTERRUPTIBLE);
930 msr_value = port_extra->shadowMSR & QT2_SERIAL_MSR_MASK;
931 if (msr_value == prev_msr_value) {
932 __set_current_state(TASK_RUNNING);
933 return -EIO; /* no change - error */
934 }
935 if ((arg & TIOCM_RNG &&
936 ((prev_msr_value & QT2_SERIAL_MSR_RI) ==
937 (msr_value & QT2_SERIAL_MSR_RI))) ||
938 (arg & TIOCM_DSR &&
939 ((prev_msr_value & QT2_SERIAL_MSR_DSR) ==
940 (msr_value & QT2_SERIAL_MSR_DSR))) ||
941 (arg & TIOCM_CD &&
942 ((prev_msr_value & QT2_SERIAL_MSR_CD) ==
943 (msr_value & QT2_SERIAL_MSR_CD))) ||
944 (arg & TIOCM_CTS &&
945 ((prev_msr_value & QT2_SERIAL_MSR_CTS) ==
946 (msr_value & QT2_SERIAL_MSR_CTS)))) {
947 __set_current_state(TASK_RUNNING);
948 return 0;
949 }
950 } /* end inifinite while */
951 /* FIXME: This while loop needs a way to break out if the device
952 * is disconnected while a process is waiting for the MSR to
953 * change, because once it's disconnected, it isn't going to
954 * change state ... */
955 } else {
956 /* any other ioctls we don't know about come here */
957 dbg("%s(): No ioctl for that one. port = %d", __func__,
958 port->number);
959 return -ENOIOCTLCMD;
960 }
961}
962
963/* Called when the user wishes to change the port settings using the termios
964 * userspace interface */
965static void qt2_set_termios(struct tty_struct *tty,
966 struct usb_serial_port *port, struct ktermios *old_termios)
967{
968 struct usb_serial *serial; /* parent serial device */
969 int baud, divisor, remainder;
970 unsigned char LCR_change_to = 0;
971 int status;
972 __u16 UartNumber;
973
974 dbg("%s(): port %d", __func__, port->number);
975
976 serial = port->serial;
977
978 UartNumber = port->number;
979
980 if (old_termios && !tty_termios_hw_change(old_termios, tty->termios))
981 return;
982
983 switch (tty->termios->c_cflag) {
984 case CS5:
985 LCR_change_to |= QT2_SERIAL_5_DATA;
986 break;
987 case CS6:
988 LCR_change_to |= QT2_SERIAL_6_DATA;
989 break;
990 case CS7:
991 LCR_change_to |= QT2_SERIAL_7_DATA;
992 break;
993 default:
994 case CS8:
995 LCR_change_to |= QT2_SERIAL_8_DATA;
996 break;
997 }
998
999 /* Parity stuff */
1000 if (tty->termios->c_cflag & PARENB) {
1001 if (tty->termios->c_cflag & PARODD)
1002 LCR_change_to |= QT2_SERIAL_ODD_PARITY;
1003 else
1004 LCR_change_to |= QT2_SERIAL_EVEN_PARITY;
1005 }
1006 /* Because LCR_change_to is initialised to zero, we don't have to worry
1007 * about the case where PARENB is not set or clearing bits, because by
1008 * default all of them are cleared, turning parity off.
1009 * as we don't support mark/space parity, we should clear the
1010 * mark/space parity bit in c_cflag, so the caller can tell we have
1011 * ignored the request */
1012 tty->termios->c_cflag &= ~CMSPAR;
1013
1014 if (tty->termios->c_cflag & CSTOPB)
1015 LCR_change_to |= QT2_SERIAL_TWO_STOPB;
1016 else
1017 LCR_change_to |= QT2_SERIAL_ONE_STOPB;
1018
1019 /* Thats the LCR stuff, next we need to work out the divisor as the
1020 * LCR and the divisor are set together */
1021 baud = tty_get_baud_rate(tty);
1022 if (!baud) {
1023 /* pick a default, any default... */
1024 baud = 9600;
1025 }
1026 dbg("%s(): got baud = %d", __func__, baud);
1027
1028 divisor = QT2_MAX_BAUD_RATE / baud;
1029 remainder = QT2_MAX_BAUD_RATE % baud;
1030 /* Round to nearest divisor */
1031 if (((remainder * 2) >= baud) && (baud != 110))
1032 divisor++;
1033 dbg("%s(): setting divisor = %d, QT2_MAX_BAUD_RATE = %d , LCR = %#.2x",
1034 __func__, divisor, QT2_MAX_BAUD_RATE, LCR_change_to);
1035
1036 status = qt2_boxsetuart(serial, UartNumber, (unsigned short) divisor,
1037 LCR_change_to);
1038 if (status < 0) {
1039 dbg("qt2_boxsetuart() failed");
1040 return;
1041 } else {
1042 /* now encode the baud rate we actually set, which may be
1043 * different to the request */
1044 baud = QT2_MAX_BAUD_RATE / divisor;
1045 tty_encode_baud_rate(tty, baud, baud);
1046 }
1047
1048 /* Now determine flow control */
1049 if (tty->termios->c_cflag & CRTSCTS) {
1050 dbg("%s(): Enabling HW flow control port %d", __func__,
1051 port->number);
1052 /* Enable RTS/CTS flow control */
1053 status = qt2_boxsethw_flowctl(serial, UartNumber, true);
1054 if (status < 0) {
1055 dbg("qt2_boxsethw_flowctl() failed");
1056 return;
1057 }
1058 } else {
1059 /* Disable RTS/CTS flow control */
1060 dbg("%s(): disabling HW flow control port %d", __func__,
1061 port->number);
1062 status = qt2_boxsethw_flowctl(serial, UartNumber, false);
1063 if (status < 0) {
1064 dbg("qt2_boxsethw_flowctl failed");
1065 return;
1066 }
1067 }
1068 /* if we are implementing XON/XOFF, set the start and stop character
1069 * in the device */
1070 if (I_IXOFF(tty) || I_IXON(tty)) {
1071 unsigned char stop_char = STOP_CHAR(tty);
1072 unsigned char start_char = START_CHAR(tty);
1073 status = qt2_boxsetsw_flowctl(serial, UartNumber, stop_char,
1074 start_char);
1075 if (status < 0)
1076 dbg("qt2_boxsetsw_flowctl (enabled) failed");
1077 } else {
1078 /* disable SW flow control */
1079 status = qt2_boxunsetsw_flowctl(serial, UartNumber);
1080 if (status < 0)
1081 dbg("qt2_boxunsetsw_flowctl (disabling) failed");
1082 }
1083}
1084
1085static int qt2_tiocmget(struct tty_struct *tty)
1086{
1087 struct usb_serial_port *port = tty->driver_data;
1088 struct usb_serial *serial = port->serial;
1089
1090 __u8 mcr_value; /* Modem Control Register value */
1091 __u8 msr_value; /* Modem Status Register value */
1092 unsigned int result = 0;
1093 int status;
1094 unsigned int UartNumber;
1095
1096 if (serial == NULL)
1097 return -ENODEV;
1098
1099 dbg("%s(): port %d, tty =0x%p", __func__, port->number, tty);
1100 UartNumber = tty->index - serial->minor;
1101 dbg("UartNumber is %d", UartNumber);
1102
1103 status = qt2_box_get_register(port->serial, UartNumber,
1104 QT2_MODEM_CONTROL_REGISTER, &mcr_value);
1105 if (status >= 0) {
1106 status = qt2_box_get_register(port->serial, UartNumber,
1107 QT2_MODEM_STATUS_REGISTER, &msr_value);
1108 }
1109 if (status >= 0) {
1110 result = ((mcr_value & QT2_SERIAL_MCR_DTR) ? TIOCM_DTR : 0)
1111 /*DTR set */
1112 | ((mcr_value & QT2_SERIAL_MCR_RTS) ? TIOCM_RTS : 0)
1113 /*RTS set */
1114 | ((msr_value & QT2_SERIAL_MSR_CTS) ? TIOCM_CTS : 0)
1115 /* CTS set */
1116 | ((msr_value & QT2_SERIAL_MSR_CD) ? TIOCM_CAR : 0)
1117 /*Carrier detect set */
1118 | ((msr_value & QT2_SERIAL_MSR_RI) ? TIOCM_RI : 0)
1119 /* Ring indicator set */
1120 | ((msr_value & QT2_SERIAL_MSR_DSR) ? TIOCM_DSR : 0);
1121 /* DSR set */
1122 return result;
1123 } else {
1124 return -ESPIPE;
1125 }
1126}
1127
1128static int qt2_tiocmset(struct tty_struct *tty,
1129 unsigned int set, unsigned int clear)
1130{
1131 struct usb_serial_port *port = tty->driver_data;
1132 struct usb_serial *serial = port->serial;
1133 __u8 mcr_value; /* Modem Control Register value */
1134 int status;
1135 unsigned int UartNumber;
1136
1137 if (serial == NULL)
1138 return -ENODEV;
1139
1140 UartNumber = tty->index - serial->minor;
1141 dbg("%s(): port %d, UartNumber %d", __func__, port->number, UartNumber);
1142
1143 status = qt2_box_get_register(port->serial, UartNumber,
1144 QT2_MODEM_CONTROL_REGISTER, &mcr_value);
1145 if (status < 0)
1146 return -ESPIPE;
1147
1148 /* Turn off RTS, DTR and loopback, then only turn on what was asked
1149 * for */
1150 mcr_value &= ~(QT2_SERIAL_MCR_RTS | QT2_SERIAL_MCR_DTR |
1151 QT2_SERIAL_MCR_LOOP);
1152 if (set & TIOCM_RTS)
1153 mcr_value |= QT2_SERIAL_MCR_RTS;
1154 if (set & TIOCM_DTR)
1155 mcr_value |= QT2_SERIAL_MCR_DTR;
1156 if (set & TIOCM_LOOP)
1157 mcr_value |= QT2_SERIAL_MCR_LOOP;
1158
1159 status = qt2_box_set_register(port->serial, UartNumber,
1160 QT2_MODEM_CONTROL_REGISTER, mcr_value);
1161 if (status < 0)
1162 return -ESPIPE;
1163 else
1164 return 0;
1165}
1166
1167/** qt2_break - Turn BREAK on and off on the UARTs
1168 */
1169static void qt2_break(struct tty_struct *tty, int break_state)
1170{
1171 struct usb_serial_port *port = tty->driver_data; /* parent port */
1172 struct usb_serial *serial = port->serial; /* parent device */
1173 struct quatech2_port *port_extra; /* extra data for this port */
1174 __u16 break_value;
1175 unsigned int result;
1176
1177 port_extra = qt2_get_port_private(port);
1178 if (!serial) {
1179 dbg("%s(): port %d: no serial object", __func__, port->number);
1180 return;
1181 }
1182
1183 if (break_state == -1)
1184 break_value = 1;
1185 else
1186 break_value = 0;
1187 dbg("%s(): port %d, break_value %d", __func__, port->number,
1188 break_value);
1189
1190 mutex_lock(&port_extra->modelock);
1191 if (!port_extra->open_count) {
1192 dbg("%s(): port not open", __func__);
1193 goto exit;
1194 }
1195
1196 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1197 QT2_BREAK_CONTROL, 0x40, break_value,
1198 port->number, NULL, 0, 300);
1199exit:
1200 mutex_unlock(&port_extra->modelock);
1201 dbg("%s(): exit port %d", __func__, port->number);
1202
1203}
1204/**
1205 * qt2_throttle: - stop reading new data from the port
1206 */
1207static void qt2_throttle(struct tty_struct *tty)
1208{
1209 struct usb_serial_port *port = tty->driver_data;
1210 struct usb_serial *serial = port->serial;
1211 struct quatech2_port *port_extra; /* extra data for this port */
1212 dbg("%s(): port %d", __func__, port->number);
1213
1214 port_extra = qt2_get_port_private(port);
1215 if (!serial) {
1216 dbg("%s(): enter port %d no serial object", __func__,
1217 port->number);
1218 return;
1219 }
1220
1221 mutex_lock(&port_extra->modelock); /* lock structure */
1222 if (!port_extra->open_count) {
1223 dbg("%s(): port not open", __func__);
1224 goto exit;
1225 }
1226 /* Send command to box to stop receiving stuff. This will stop this
1227 * particular UART from filling the endpoint - in the multiport case the
1228 * FPGA UART will handle any flow control implemented, but for the single
1229 * port it's handed differently and we just quit submitting urbs
1230 */
1231 if (serial->dev->descriptor.idProduct != QUATECH_SSU2_100)
1232 qt2_boxstoprx(serial, port->number, 1);
1233
1234 port->throttled = 1;
1235exit:
1236 mutex_unlock(&port_extra->modelock);
1237 dbg("%s(): port %d: setting port->throttled", __func__, port->number);
1238 return;
1239}
1240
1241/**
1242 * qt2_unthrottle: - start receiving data through the port again after being
1243 * throttled
1244 */
1245static void qt2_unthrottle(struct tty_struct *tty)
1246{
1247 struct usb_serial_port *port = tty->driver_data;
1248 struct usb_serial *serial = port->serial;
1249 struct quatech2_port *port_extra; /* extra data for this port */
1250 struct usb_serial_port *port0; /* first port structure on device */
1251 struct quatech2_dev *dev_extra; /* extra data for the device */
1252
1253 if (!serial) {
1254 dbg("%s() enter port %d no serial object!", __func__,
1255 port->number);
1256 return;
1257 }
1258 dbg("%s(): enter port %d", __func__, port->number);
1259 dev_extra = qt2_get_dev_private(serial);
1260 port_extra = qt2_get_port_private(port);
1261 port0 = serial->port[0]; /* get the first port's device structure */
1262
1263 mutex_lock(&port_extra->modelock);
1264 if (!port_extra->open_count) {
1265 dbg("%s(): port %d not open", __func__, port->number);
1266 goto exit;
1267 }
1268
1269 if (port->throttled != 0) {
1270 dbg("%s(): port %d: unsetting port->throttled", __func__,
1271 port->number);
1272 port->throttled = 0;
1273 /* Send command to box to start receiving stuff */
1274 if (serial->dev->descriptor.idProduct != QUATECH_SSU2_100) {
1275 qt2_boxstoprx(serial, port->number, 0);
1276 } else if (dev_extra->ReadBulkStopped == true) {
1277 usb_fill_bulk_urb(port0->read_urb, serial->dev,
1278 usb_rcvbulkpipe(serial->dev,
1279 port0->bulk_in_endpointAddress),
1280 port0->bulk_in_buffer,
1281 port0->bulk_in_size,
1282 qt2_read_bulk_callback,
1283 serial);
1284 }
1285 }
1286exit:
1287 mutex_unlock(&port_extra->modelock);
1288 dbg("%s(): exit port %d", __func__, port->number);
1289 return;
1290}
1291
1292/* internal, private helper functions for the driver */
1293
1294/* Power up the FPGA in the box to get it working */
1295static int qt2_boxpoweron(struct usb_serial *serial)
1296{
1297 int result;
1298 __u8 Direcion;
1299 unsigned int pipe;
1300 Direcion = USBD_TRANSFER_DIRECTION_OUT;
1301 pipe = usb_rcvctrlpipe(serial->dev, 0);
1302 result = usb_control_msg(serial->dev, pipe, QT_SET_GET_DEVICE,
1303 Direcion, QU2BOXPWRON, 0x00, NULL, 0x00,
1304 5000);
1305 return result;
1306}
1307
1308/*
1309 * qt2_boxsetQMCR Issue a QT2_GET_SET_QMCR vendor-spcific request on the
1310 * default control pipe. If successful return the number of bytes written,
1311 * otherwise return a negative error number of the problem.
1312 */
1313static int qt2_boxsetQMCR(struct usb_serial *serial, __u16 Uart_Number,
1314 __u8 QMCR_Value)
1315{
1316 int result;
1317 __u16 PortSettings;
1318
1319 PortSettings = (__u16)(QMCR_Value);
1320
1321 dbg("%s(): Port = %d, PortSettings = 0x%x", __func__,
1322 Uart_Number, PortSettings);
1323
1324 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1325 QT2_GET_SET_QMCR, 0x40, PortSettings,
1326 (__u16)Uart_Number, NULL, 0, 5000);
1327 return result;
1328}
1329
1330static int port_paranoia_check(struct usb_serial_port *port,
1331 const char *function)
1332{
1333 if (!port) {
1334 dbg("%s - port == NULL", function);
1335 return -1;
1336 }
1337 if (!port->serial) {
1338 dbg("%s - port->serial == NULL\n", function);
1339 return -1;
1340 }
1341 return 0;
1342}
1343
1344static int serial_paranoia_check(struct usb_serial *serial,
1345 const char *function)
1346{
1347 if (!serial) {
1348 dbg("%s - serial == NULL\n", function);
1349 return -1;
1350 }
1351
1352 if (!serial->type) {
1353 dbg("%s - serial->type == NULL!", function);
1354 return -1;
1355 }
1356
1357 return 0;
1358}
1359
1360static inline struct quatech2_port *qt2_get_port_private(struct usb_serial_port
1361 *port)
1362{
1363 return (struct quatech2_port *)usb_get_serial_port_data(port);
1364}
1365
1366static inline void qt2_set_port_private(struct usb_serial_port *port,
1367 struct quatech2_port *data)
1368{
1369 usb_set_serial_port_data(port, (void *)data);
1370}
1371
1372static inline struct quatech2_dev *qt2_get_dev_private(struct usb_serial
1373 *serial)
1374{
1375 return (struct quatech2_dev *)usb_get_serial_data(serial);
1376}
1377static inline void qt2_set_dev_private(struct usb_serial *serial,
1378 struct quatech2_dev *data)
1379{
1380 usb_set_serial_data(serial, (void *)data);
1381}
1382
1383static int qt2_openboxchannel(struct usb_serial *serial, __u16
1384 Uart_Number, struct qt2_status_data *status)
1385{
1386 int result;
1387 __u16 length;
1388 __u8 Direcion;
1389 unsigned int pipe;
1390 length = sizeof(struct qt2_status_data);
1391 Direcion = USBD_TRANSFER_DIRECTION_IN;
1392 pipe = usb_rcvctrlpipe(serial->dev, 0);
1393 result = usb_control_msg(serial->dev, pipe, QT_OPEN_CLOSE_CHANNEL,
1394 Direcion, 0x00, Uart_Number, status, length, 5000);
1395 return result;
1396}
1397static int qt2_closeboxchannel(struct usb_serial *serial, __u16 Uart_Number)
1398{
1399 int result;
1400 __u8 direcion;
1401 unsigned int pipe;
1402 direcion = USBD_TRANSFER_DIRECTION_OUT;
1403 pipe = usb_sndctrlpipe(serial->dev, 0);
1404 result = usb_control_msg(serial->dev, pipe, QT_OPEN_CLOSE_CHANNEL,
1405 direcion, 0, Uart_Number, NULL, 0, 5000);
1406 return result;
1407}
1408
1409/* qt2_conf_uart Issue a SET_UART vendor-spcific request on the default
1410 * control pipe. If successful sets baud rate divisor and LCR value
1411 */
1412static int qt2_conf_uart(struct usb_serial *serial, unsigned short Uart_Number,
1413 unsigned short divisor, unsigned char LCR)
1414{
1415 int result;
1416 unsigned short UartNumandLCR;
1417
1418 UartNumandLCR = (LCR << 8) + Uart_Number;
1419
1420 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1421 QT2_GET_SET_UART, 0x40, divisor, UartNumandLCR,
1422 NULL, 0, 300);
1423 return result;
1424}
1425
1426/** @brief Callback for asynchronous submission of read URBs on bulk in
1427 * endpoints
1428 *
1429 * Registered in qt2_open_port(), used to deal with incomming data
1430 * from the box.
1431 */
1432static void qt2_read_bulk_callback(struct urb *urb)
1433{
1434 /* Get the device pointer (struct usb_serial) back out of the URB */
1435 struct usb_serial *serial = urb->context;
1436 /* get the extra struct for the device */
1437 struct quatech2_dev *dev_extra = qt2_get_dev_private(serial);
1438 /* Get first port structure from the device */
1439 struct usb_serial_port *port0 = serial->port[0];
1440 /* Get the currently active port structure from serial struct */
1441 struct usb_serial_port *active = dev_extra->current_port;
1442 /* get the extra struct for port 0 */
1443 struct quatech2_port *port0_extra = qt2_get_port_private(port0);
1444 /* and for the currently active port */
1445 struct quatech2_port *active_extra = qt2_get_port_private(active);
1446 /* When we finally get to doing some tty stuff, we will need this */
1447 struct tty_struct *tty_st;
1448 unsigned int RxCount; /* the length of the data to process */
1449 unsigned int i; /* loop counter over the data to process */
1450 int result; /* return value cache variable */
1451 bool escapeflag; /* flag set to true if this loop iteration is
1452 * parsing an escape sequence, rather than
1453 * ordinary data */
1454 dbg("%s(): callback running, active port is %d", __func__,
1455 active->number);
1456
1457 if (urb->status) {
1458 /* read didn't go well */
1459 dev_extra->ReadBulkStopped = true;
1460 dbg("%s(): nonzero bulk read status received: %d",
1461 __func__, urb->status);
1462 return;
1463 }
1464
1465 /* inline port_sofrint() here */
1466 if (port_paranoia_check(port0, __func__) != 0) {
1467 dbg("%s - port_paranoia_check on port0 failed, exiting\n",
1468__func__);
1469 return;
1470 }
1471 if (port_paranoia_check(active, __func__) != 0) {
1472 dbg("%s - port_paranoia_check on current_port "
1473 "failed, exiting", __func__);
1474 return;
1475 }
1476
1477/* This single callback function has to do for all the ports on
1478 * the device. Data being read up the USB can contain certain
1479 * escape sequences which are used to communicate out-of-band
1480 * information from the serial port in-band over the USB.
1481 * These escapes include sending modem and flow control line
1482 * status, and switching the port. The concept of a "Current Port"
1483 * is used, which is where data is going until a port change
1484 * escape seqence is received. This Current Port is kept between
1485 * callbacks so that when this function enters we know which the
1486 * currently active port is and can get to work right away without
1487 * the box having to send repeat escape sequences (anyway, how
1488 * would it know to do so?).
1489 */
1490
1491 if (active_extra->close_pending == true) {
1492 /* We are closing , stop reading */
1493 dbg("%s - (active->close_pending == true", __func__);
1494 if (dev_extra->open_ports <= 0) {
1495 /* If this is the only port left open - stop the
1496 * bulk read */
1497 dev_extra->ReadBulkStopped = true;
1498 dbg("%s - (ReadBulkStopped == true;", __func__);
1499 return;
1500 }
1501 }
1502
1503 /*
1504 * RxHolding is asserted by throttle, if we assert it, we're not
1505 * receiving any more characters and let the box handle the flow
1506 * control
1507 */
1508 if ((port0_extra->RxHolding == true) &&
1509 (serial->dev->descriptor.idProduct == QUATECH_SSU2_100)) {
1510 /* single port device, input is already stopped, so we don't
1511 * need any more input data */
1512 dev_extra->ReadBulkStopped = true;
1513 return;
1514 }
1515 /* finally, we are in a situation where we might consider the data
1516 * that is contained within the URB, and what to do about it.
1517 * This is likely to involved communicating up to the TTY layer, so
1518 * we will need to get hold of the tty for the port we are currently
1519 * dealing with */
1520
1521 /* active is a usb_serial_port. It has a member port which is a
1522 * tty_port. From this we get a tty_struct pointer which is what we
1523 * actually wanted, and keep it on tty_st */
1524 tty_st = tty_port_tty_get(&active->port);
1525 if (!tty_st) {
1526 dbg("%s - bad tty pointer - exiting", __func__);
1527 return;
1528 }
1529 RxCount = urb->actual_length; /* grab length of data handy */
1530
1531 if (RxCount) {
1532 /* skip all this if no data to process */
1533 for (i = 0; i < RxCount ; ++i) {
1534 /* Look ahead code here -works on several bytes at onc*/
1535 if ((i <= (RxCount - 3)) && (THISCHAR == 0x1b)
1536 && (NEXTCHAR == 0x1b)) {
1537 /* we are in an escape sequence, type
1538 * determined by the 3rd char */
1539 escapeflag = false;
1540 switch (THIRDCHAR) {
1541 case 0x00:
1542 /* Line status change 4th byte must
1543 * follow */
1544 if (i > (RxCount - 4)) {
1545 dbg("Illegal escape sequences "
1546 "in received data");
1547 break;
1548 }
1549 qt2_process_line_status(active,
1550 FOURTHCHAR);
1551 i += 3;
1552 escapeflag = true;
1553 break;
1554 case 0x01:
1555 /* Modem status status change 4th byte
1556 * must follow */
1557 if (i > (RxCount - 4)) {
1558 dbg("Illegal escape sequences "
1559 "in received data");
1560 break;
1561 }
1562 qt2_process_modem_status(active,
1563 FOURTHCHAR);
1564 i += 3;
1565 escapeflag = true;
1566 break;
1567 case 0x02:
1568 /* xmit hold empty 4th byte
1569 * must follow */
1570 if (i > (RxCount - 4)) {
1571 dbg("Illegal escape sequences "
1572 "in received data");
1573 break;
1574 }
1575 qt2_process_xmit_empty(active,
1576 FOURTHCHAR, FIFTHCHAR);
1577 i += 4;
1578 escapeflag = true;
1579 break;
1580 case 0x03:
1581 /* Port number change 4th byte
1582 * must follow */
1583 if (i > (RxCount - 4)) {
1584 dbg("Illegal escape sequences "
1585 "in received data");
1586 break;
1587 }
1588 /* Port change. If port open push
1589 * current data up to tty layer */
1590 if (active_extra->open_count > 0)
1591 tty_flip_buffer_push(tty_st);
1592
1593 dbg("Port Change: new port = %d",
1594 FOURTHCHAR);
1595 qt2_process_port_change(active,
1596 FOURTHCHAR);
1597 i += 3;
1598 escapeflag = true;
1599 /* having changed port, the pointers for
1600 * the currently active port are all out
1601 * of date and need updating */
1602 active = dev_extra->current_port;
1603 active_extra =
1604 qt2_get_port_private(active);
1605 tty_st = tty_port_tty_get(
1606 &active->port);
1607 break;
1608 case 0x04:
1609 /* Recv flush 3rd byte must
1610 * follow */
1611 if (i > (RxCount - 3)) {
1612 dbg("Illegal escape sequences "
1613 "in received data");
1614 break;
1615 }
1616 qt2_process_rcv_flush(active);
1617 i += 2;
1618 escapeflag = true;
1619 break;
1620 case 0x05:
1621 /* xmit flush 3rd byte must follow */
1622 if (i > (RxCount - 3)) {
1623 dbg("Illegal escape sequences "
1624 "in received data");
1625 break;
1626 }
1627 qt2_process_xmit_flush(active);
1628 i += 2;
1629 escapeflag = true;
1630 break;
1631 case 0xff:
1632 dbg("No status sequence");
1633 qt2_process_rx_char(active, THISCHAR);
1634 qt2_process_rx_char(active, NEXTCHAR);
1635 i += 2;
1636 break;
1637 default:
1638 qt2_process_rx_char(active, THISCHAR);
1639 i += 1;
1640 break;
1641 } /*end switch*/
1642 if (escapeflag == true)
1643 continue;
1644 /* if we did an escape char, we don't need
1645 * to mess around pushing data through the
1646 * tty layer, and can go round again */
1647 } /*endif*/
1648 if (tty_st && urb->actual_length) {
1649 tty_buffer_request_room(tty_st, 1);
1650 tty_insert_flip_string(tty_st, &(
1651 (unsigned char *)
1652 (urb->transfer_buffer)
1653 )[i], 1);
1654 }
1655 } /*endfor*/
1656 tty_flip_buffer_push(tty_st);
1657 } /*endif*/
1658
1659 /* at this point we have complete dealing with the data for this
1660 * callback. All we have to do now is to start the async read process
1661 * back off again. */
1662
1663 usb_fill_bulk_urb(port0->read_urb, serial->dev,
1664 usb_rcvbulkpipe(serial->dev, port0->bulk_in_endpointAddress),
1665 port0->bulk_in_buffer, port0->bulk_in_size,
1666 qt2_read_bulk_callback, serial);
1667 result = usb_submit_urb(port0->read_urb, GFP_ATOMIC);
1668 if (result) {
1669 dbg("%s(): failed resubmitting read urb, error %d",
1670 __func__, result);
1671 } else {
1672 dbg("%s() successfully resubmitted read urb", __func__);
1673 if (tty_st && RxCount) {
1674 /* if some inbound data was processed, then
1675 * we need to push that through the tty layer
1676 */
1677 tty_flip_buffer_push(tty_st);
1678 tty_schedule_flip(tty_st);
1679 }
1680 }
1681
1682 /* cribbed from serqt_usb2 driver, but not sure which work needs
1683 * scheduling - port0 or currently active port? */
1684 /* schedule_work(&port->work); */
1685 dbg("%s() completed", __func__);
1686 return;
1687}
1688
1689/** @brief Callback for asynchronous submission of write URBs on bulk in
1690 * endpoints
1691 *
1692 * Registered in qt2_write(), used to deal with outgoing data
1693 * to the box.
1694 */
1695static void qt2_write_bulk_callback(struct urb *urb)
1696{
1697 struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
1698 struct usb_serial *serial = port->serial;
1699 dbg("%s(): port %d", __func__, port->number);
1700 if (!serial) {
1701 dbg("%s(): bad serial pointer, exiting", __func__);
1702 return;
1703 }
1704 if (urb->status) {
1705 dbg("%s(): nonzero write bulk status received: %d",
1706 __func__, urb->status);
1707 return;
1708 }
1709 /* FIXME What is supposed to be going on here?
1710 * does this actually do anything useful, and should it?
1711 */
1712 /*port_softint((void *) serial); commented in vendor driver */
1713 schedule_work(&port->work);
1714 dbg("%s(): port %d exit", __func__, port->number);
1715 return;
1716}
1717
1718static void qt2_process_line_status(struct usb_serial_port *port,
1719 unsigned char LineStatus)
1720{
1721 /* obtain the private structure for the port */
1722 struct quatech2_port *port_extra = qt2_get_port_private(port);
1723 port_extra->shadowLSR = LineStatus & (QT2_SERIAL_LSR_OE |
1724 QT2_SERIAL_LSR_PE | QT2_SERIAL_LSR_FE | QT2_SERIAL_LSR_BI);
1725}
1726static void qt2_process_modem_status(struct usb_serial_port *port,
1727 unsigned char ModemStatus)
1728{
1729 /* obtain the private structure for the port */
1730 struct quatech2_port *port_extra = qt2_get_port_private(port);
1731 port_extra->shadowMSR = ModemStatus;
1732 wake_up_interruptible(&port_extra->wait);
1733 /* this wakes up the otherwise indefinitely waiting code for
1734 * the TIOCMIWAIT ioctl, so that it can notice that
1735 * port_extra->shadowMSR has changed and the ioctl needs to return.
1736 */
1737}
1738
1739static void qt2_process_xmit_empty(struct usb_serial_port *port,
1740 unsigned char fourth_char, unsigned char fifth_char)
1741{
1742 int byte_count;
1743 /* obtain the private structure for the port */
1744 struct quatech2_port *port_extra = qt2_get_port_private(port);
1745
1746 byte_count = (int)(fifth_char * 16);
1747 byte_count += (int)fourth_char;
1748 /* byte_count indicates how many bytes the device has written out. This
1749 * message appears to occur regularly, and is used in the vendor driver
1750 * to keep track of the fill state of the port transmit buffer */
1751 port_extra->tx_pending_bytes -= byte_count;
1752 /* reduce the stored data queue length by the known number of bytes
1753 * sent */
1754 dbg("port %d: %d bytes reported sent, %d still pending", port->number,
1755 byte_count, port_extra->tx_pending_bytes);
1756
1757 /*port_extra->xmit_fifo_room_bytes = FIFO_DEPTH; ???*/
1758}
1759
1760static void qt2_process_port_change(struct usb_serial_port *port,
1761 unsigned char New_Current_Port)
1762{
1763 /* obtain the parent usb serial device structure */
1764 struct usb_serial *serial = port->serial;
1765 /* obtain the private structure for the device */
1766 struct quatech2_dev *dev_extra = qt2_get_dev_private(serial);
1767 dev_extra->current_port = serial->port[New_Current_Port];
1768 /* what should I do with this? commented out in upstream
1769 * driver */
1770 /*schedule_work(&port->work);*/
1771}
1772
1773static void qt2_process_rcv_flush(struct usb_serial_port *port)
1774{
1775 /* obtain the private structure for the port */
1776 struct quatech2_port *port_extra = qt2_get_port_private(port);
1777 port_extra->rcv_flush = true;
1778}
1779static void qt2_process_xmit_flush(struct usb_serial_port *port)
1780{
1781 /* obtain the private structure for the port */
1782 struct quatech2_port *port_extra = qt2_get_port_private(port);
1783 port_extra->xmit_flush = true;
1784}
1785
1786static void qt2_process_rx_char(struct usb_serial_port *port,
1787 unsigned char data)
1788{
1789 /* get the tty_struct for this port */
1790 struct tty_struct *tty = tty_port_tty_get(&(port->port));
1791 /* get the URB with the data in to push */
1792 struct urb *urb = port->serial->port[0]->read_urb;
1793
1794 if (tty && urb->actual_length) {
1795 tty_buffer_request_room(tty, 1);
1796 tty_insert_flip_string(tty, &data, 1);
1797 /* should this be commented out here? */
1798 /*tty_flip_buffer_push(tty);*/
1799 }
1800}
1801
1802/** @brief Retrieve the value of a register from the device
1803 *
1804 * Issues a GET_REGISTER vendor-spcific request over the USB control
1805 * pipe to obtain a value back from a specific register on a specific
1806 * UART
1807 * @param serial Serial device handle to access the device through
1808 * @param uart_number Which UART the value is wanted from
1809 * @param register_num Which register to read the value from
1810 * @param pValue Pointer to somewhere to put the retrieved value
1811 */
1812static int qt2_box_get_register(struct usb_serial *serial,
1813 unsigned char uart_number, unsigned short register_num,
1814 __u8 *pValue)
1815{
1816 int result;
1817 result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
1818 QT2_GET_SET_REGISTER, 0xC0, register_num,
1819 uart_number, (void *)pValue, sizeof(*pValue), 300);
1820 return result;
1821}
1822
1823/** qt2_box_set_register
1824 * Issue a SET_REGISTER vendor-specific request on the default control pipe
1825 */
1826static int qt2_box_set_register(struct usb_serial *serial,
1827 unsigned short Uart_Number, unsigned short Register_Num,
1828 unsigned short Value)
1829{
1830 int result;
1831 unsigned short reg_and_byte;
1832
1833 reg_and_byte = Value;
1834 reg_and_byte = reg_and_byte << 8;
1835 reg_and_byte = reg_and_byte + Register_Num;
1836
1837 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1838 QT2_GET_SET_REGISTER, 0x40, reg_and_byte,
1839 Uart_Number, NULL, 0, 300);
1840 return result;
1841}
1842
1843/** qt2_boxsetuart - Issue a SET_UART vendor-spcific request on the default
1844 * control pipe. If successful sets baud rate divisor and LCR value.
1845 */
1846static int qt2_boxsetuart(struct usb_serial *serial, unsigned short Uart_Number,
1847 unsigned short default_divisor, unsigned char default_LCR)
1848{
1849 unsigned short UartNumandLCR;
1850
1851 UartNumandLCR = (default_LCR << 8) + Uart_Number;
1852
1853 return usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1854 QT2_GET_SET_UART, 0x40, default_divisor, UartNumandLCR,
1855 NULL, 0, 300);
1856}
1857
1858/** qt2_boxsethw_flowctl - Turn hardware (RTS/CTS) flow control on and off for
1859 * a hardware UART.
1860 */
1861static int qt2_boxsethw_flowctl(struct usb_serial *serial,
1862 unsigned int UartNumber, bool bSet)
1863{
1864 __u8 MCR_Value = 0;
1865 __u8 MSR_Value = 0;
1866 __u16 MOUT_Value = 0;
1867
1868 if (bSet == true) {
1869 MCR_Value = QT2_SERIAL_MCR_RTS;
1870 /* flow control, box will clear RTS line to prevent remote
1871 * device from transmitting more chars */
1872 } else {
1873 /* no flow control to remote device */
1874 MCR_Value = 0;
1875 }
1876 MOUT_Value = MCR_Value << 8;
1877
1878 if (bSet == true) {
1879 MSR_Value = QT2_SERIAL_MSR_CTS;
1880 /* flow control on, box will inhibit tx data if CTS line is
1881 * asserted */
1882 } else {
1883 /* Box will not inhibit tx data due to CTS line */
1884 MSR_Value = 0;
1885 }
1886 MOUT_Value |= MSR_Value;
1887 return usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1888 QT2_HW_FLOW_CONTROL_MASK, 0x40, MOUT_Value, UartNumber,
1889 NULL, 0, 300);
1890}
1891
1892/** qt2_boxsetsw_flowctl - Turn software (XON/XOFF) flow control on for
1893 * a hardware UART, and set the XON and XOFF characters.
1894 */
1895static int qt2_boxsetsw_flowctl(struct usb_serial *serial, __u16 UartNumber,
1896 unsigned char stop_char, unsigned char start_char)
1897{
1898 __u16 nSWflowout;
1899
1900 nSWflowout = start_char << 8;
1901 nSWflowout = (unsigned short)stop_char;
1902 return usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1903 QT2_SW_FLOW_CONTROL_MASK, 0x40, nSWflowout, UartNumber,
1904 NULL, 0, 300);
1905}
1906
1907/** qt2_boxunsetsw_flowctl - Turn software (XON/XOFF) flow control off for
1908 * a hardware UART.
1909 */
1910static int qt2_boxunsetsw_flowctl(struct usb_serial *serial, __u16 UartNumber)
1911{
1912 return usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1913 QT2_SW_FLOW_CONTROL_DISABLE, 0x40, 0, UartNumber, NULL,
1914 0, 300);
1915}
1916
1917/**
1918 * qt2_boxstoprx - Start and stop reception of data by the FPGA UART in
1919 * response to requests from the tty layer
1920 * @serial: pointer to the usb_serial structure for the parent device
1921 * @uart_number: which UART on the device we are addressing
1922 * @stop: Whether to start or stop data reception. Set to 1 to stop data being
1923 * received, and to 0 to start it being received.
1924 */
1925static int qt2_boxstoprx(struct usb_serial *serial, unsigned short uart_number,
1926 unsigned short stop)
1927{
1928 return usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1929 QT2_STOP_RECEIVE, 0x40, stop, uart_number, NULL, 0, 300);
1930}
1931
1932
1933/*
1934 * last things in file: stuff to register this driver into the generic
1935 * USB serial framework.
1936 */
1937
1938static struct usb_serial_driver quatech2_device = {
1939 .driver = {
1940 .owner = THIS_MODULE,
1941 .name = "quatech_usb2",
1942 },
1943 .description = DRIVER_DESC,
1944 .id_table = quausb2_id_table,
1945 .num_ports = 8,
1946 .open = qt2_open,
1947 .close = qt2_close,
1948 .write = qt2_write,
1949 .write_room = qt2_write_room,
1950 .chars_in_buffer = qt2_chars_in_buffer,
1951 .throttle = qt2_throttle,
1952 .unthrottle = qt2_unthrottle,
1953 .calc_num_ports = qt2_calc_num_ports,
1954 .ioctl = qt2_ioctl,
1955 .set_termios = qt2_set_termios,
1956 .break_ctl = qt2_break,
1957 .tiocmget = qt2_tiocmget,
1958 .tiocmset = qt2_tiocmset,
1959 .attach = qt2_attach,
1960 .release = qt2_release,
1961 .read_bulk_callback = qt2_read_bulk_callback,
1962 .write_bulk_callback = qt2_write_bulk_callback,
1963};
1964
1965static struct usb_serial_driver * const serial_drivers[] = {
1966 &quatech2_device, NULL
1967};
1968
1969module_usb_serial_driver(quausb2_usb_driver, serial_drivers);
1970
1971MODULE_AUTHOR(DRIVER_AUTHOR);
1972MODULE_DESCRIPTION(DRIVER_DESC);
1973MODULE_LICENSE("GPL");
1974
1975module_param(debug, bool, S_IRUGO | S_IWUSR);
1976MODULE_PARM_DESC(debug, "Debug enabled or not");
diff --git a/drivers/staging/serqt_usb2/serqt_usb2.c b/drivers/staging/serqt_usb2/serqt_usb2.c
index ae1d815e2a53..43045db982d4 100644
--- a/drivers/staging/serqt_usb2/serqt_usb2.c
+++ b/drivers/staging/serqt_usb2/serqt_usb2.c
@@ -41,13 +41,6 @@ static bool debug;
41#define QUATECH_HSU200B 0xC0B1 /* HSU200B */ 41#define QUATECH_HSU200B 0xC0B1 /* HSU200B */
42#define QUATECH_HSU200C 0xC0B2 /* HSU200C */ 42#define QUATECH_HSU200C 0xC0B2 /* HSU200C */
43#define QUATECH_HSU200D 0xC0B3 /* HSU200D */ 43#define QUATECH_HSU200D 0xC0B3 /* HSU200D */
44#define QUATECH_SSU100_2 0xC120 /* SSU100_2 */
45#define QUATECH_DSU100_2 0xC140 /* DSU100_2 */
46#define QUATECH_DSU400_2 0xC150 /* DSU400_2 */
47#define QUATECH_QSU100_2 0xC160 /* QSU100_2 */
48#define QUATECH_QSU400_2 0xC170 /* QSU400_2 */
49#define QUATECH_ESU400_2 0xC180 /* ESU400_2 */
50#define QUATECH_ESU100_2 0xC1A0 /* ESU100_2 */
51 44
52#define QT_SET_GET_DEVICE 0xc2 45#define QT_SET_GET_DEVICE 0xc2
53#define QT_OPEN_CLOSE_CHANNEL 0xca 46#define QT_OPEN_CLOSE_CHANNEL 0xca
@@ -125,7 +118,7 @@ static bool debug;
125#define MODEM_CTRL 0x40 118#define MODEM_CTRL 0x40
126#define RS232_MODE 0x00 119#define RS232_MODE 0x00
127 120
128static const struct usb_device_id serqt_id_table[] = { 121static const struct usb_device_id id_table[] = {
129 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU200)}, 122 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU200)},
130 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU100)}, 123 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU100)},
131 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU200)}, 124 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU200)},
@@ -143,17 +136,9 @@ static const struct usb_device_id serqt_id_table[] = {
143 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200B)}, 136 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200B)},
144 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200C)}, 137 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200C)},
145 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200D)}, 138 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200D)},
146 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU100_2)},
147 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU100_2)},
148 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU400_2)},
149 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU100_2)},
150 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU400_2)},
151 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU400_2)},
152 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU100_2)},
153 {} /* Terminating entry */ 139 {} /* Terminating entry */
154}; 140};
155 141MODULE_DEVICE_TABLE(usb, id_table);
156MODULE_DEVICE_TABLE(usb, serqt_id_table);
157 142
158struct qt_get_device_data { 143struct qt_get_device_data {
159 __u8 porta; 144 __u8 porta;
@@ -195,13 +180,6 @@ struct quatech_port {
195 char closePending; 180 char closePending;
196}; 181};
197 182
198static struct usb_driver serqt_usb_driver = {
199 .name = "quatech-usb-serial",
200 .probe = usb_serial_probe,
201 .disconnect = usb_serial_disconnect,
202 .id_table = serqt_id_table,
203};
204
205static int port_paranoia_check(struct usb_serial_port *port, 183static int port_paranoia_check(struct usb_serial_port *port,
206 const char *function) 184 const char *function)
207{ 185{
@@ -304,8 +282,6 @@ static void qt_write_bulk_callback(struct urb *urb)
304 282
305 quatech_port = urb->context; 283 quatech_port = urb->context;
306 284
307 dbg("%s - port %d\n", __func__, quatech_port->port_num);
308
309 tty = tty_port_tty_get(&quatech_port->port->port); 285 tty = tty_port_tty_get(&quatech_port->port->port);
310 286
311 if (tty) 287 if (tty)
@@ -351,7 +327,6 @@ static void qt_read_bulk_callback(struct urb *urb)
351 /* index = MINOR(port->tty->device) - serial->minor; */ 327 /* index = MINOR(port->tty->device) - serial->minor; */
352 index = tty->index - serial->minor; 328 index = tty->index - serial->minor;
353 329
354 dbg("%s - port %d\n", __func__, port->number);
355 dbg("%s - port->RxHolding = %d\n", __func__, qt_port->RxHolding); 330 dbg("%s - port->RxHolding = %d\n", __func__, qt_port->RxHolding);
356 331
357 if (port_paranoia_check(port, __func__) != 0) { 332 if (port_paranoia_check(port, __func__) != 0) {
@@ -726,8 +701,6 @@ static int qt_startup(struct usb_serial *serial)
726 int i; 701 int i;
727 int status; 702 int status;
728 703
729 dbg("enterting %s", __func__);
730
731 /* Now setup per port private data */ 704 /* Now setup per port private data */
732 for (i = 0; i < serial->num_ports; i++) { 705 for (i = 0; i < serial->num_ports; i++) {
733 port = serial->port[i]; 706 port = serial->port[i];
@@ -855,8 +828,6 @@ static void qt_release(struct usb_serial *serial)
855 struct quatech_port *qt_port; 828 struct quatech_port *qt_port;
856 int i; 829 int i;
857 830
858 dbg("enterting %s", __func__);
859
860 for (i = 0; i < serial->num_ports; i++) { 831 for (i = 0; i < serial->num_ports; i++) {
861 port = serial->port[i]; 832 port = serial->port[i];
862 if (!port) 833 if (!port)
@@ -882,8 +853,6 @@ static int qt_open(struct tty_struct *tty,
882 if (port_paranoia_check(port, __func__)) 853 if (port_paranoia_check(port, __func__))
883 return -ENODEV; 854 return -ENODEV;
884 855
885 dbg("%s - port %d\n", __func__, port->number);
886
887 serial = port->serial; 856 serial = port->serial;
888 857
889 if (serial_paranoia_check(serial, __func__)) 858 if (serial_paranoia_check(serial, __func__))
@@ -1006,8 +975,6 @@ static int qt_chars_in_buffer(struct tty_struct *tty)
1006 975
1007 serial = get_usb_serial(port, __func__); 976 serial = get_usb_serial(port, __func__);
1008 977
1009 dbg("%s - port %d\n", __func__, port->number);
1010
1011 if (serial->num_bulk_out) { 978 if (serial->num_bulk_out) {
1012 if (port->write_urb->status == -EINPROGRESS) 979 if (port->write_urb->status == -EINPROGRESS)
1013 chars = port->write_urb->transfer_buffer_length; 980 chars = port->write_urb->transfer_buffer_length;
@@ -1054,8 +1021,6 @@ static void qt_close(struct usb_serial_port *port)
1054 unsigned int index; 1021 unsigned int index;
1055 status = 0; 1022 status = 0;
1056 1023
1057 dbg("%s - port %d\n", __func__, port->number);
1058
1059 tty = tty_port_tty_get(&port->port); 1024 tty = tty_port_tty_get(&port->port);
1060 index = tty->index - serial->minor; 1025 index = tty->index - serial->minor;
1061 1026
@@ -1109,8 +1074,6 @@ static int qt_write(struct tty_struct *tty, struct usb_serial_port *port,
1109 if (serial == NULL) 1074 if (serial == NULL)
1110 return -ENODEV; 1075 return -ENODEV;
1111 1076
1112 dbg("%s - port %d\n", __func__, port->number);
1113
1114 if (count == 0) { 1077 if (count == 0) {
1115 dbg("%s - write request of 0 bytes\n", __func__); 1078 dbg("%s - write request of 0 bytes\n", __func__);
1116 return 0; 1079 return 0;
@@ -1173,8 +1136,6 @@ static int qt_write_room(struct tty_struct *tty)
1173 1136
1174 mutex_lock(&qt_port->lock); 1137 mutex_lock(&qt_port->lock);
1175 1138
1176 dbg("%s - port %d\n", __func__, port->number);
1177
1178 if (serial->num_bulk_out) { 1139 if (serial->num_bulk_out) {
1179 if (port->write_urb->status != -EINPROGRESS) 1140 if (port->write_urb->status != -EINPROGRESS)
1180 retval = port->bulk_out_size; 1141 retval = port->bulk_out_size;
@@ -1241,8 +1202,6 @@ static void qt_set_termios(struct tty_struct *tty,
1241 int baud, divisor, remainder; 1202 int baud, divisor, remainder;
1242 int status; 1203 int status;
1243 1204
1244 dbg("%s", __func__);
1245
1246 index = tty->index - port->serial->minor; 1205 index = tty->index - port->serial->minor;
1247 1206
1248 switch (cflag) { 1207 switch (cflag) {
@@ -1365,8 +1324,6 @@ static void qt_break(struct tty_struct *tty, int break_state)
1365 1324
1366 mutex_lock(&qt_port->lock); 1325 mutex_lock(&qt_port->lock);
1367 1326
1368 dbg("%s - port %d\n", __func__, port->number);
1369
1370 result = 1327 result =
1371 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 1328 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1372 QT_BREAK_CONTROL, 0x40, onoff, index, NULL, 0, 300); 1329 QT_BREAK_CONTROL, 0x40, onoff, index, NULL, 0, 300);
@@ -1385,8 +1342,6 @@ static inline int qt_real_tiocmget(struct tty_struct *tty,
1385 int status; 1342 int status;
1386 unsigned int index; 1343 unsigned int index;
1387 1344
1388 dbg("%s - port %d, tty =0x%p\n", __func__, port->number, tty);
1389
1390 index = tty->index - serial->minor; 1345 index = tty->index - serial->minor;
1391 status = 1346 status =
1392 BoxGetRegister(port->serial, index, MODEM_CONTROL_REGISTER, &mcr); 1347 BoxGetRegister(port->serial, index, MODEM_CONTROL_REGISTER, &mcr);
@@ -1426,8 +1381,6 @@ static inline int qt_real_tiocmset(struct tty_struct *tty,
1426 int status; 1381 int status;
1427 unsigned int index; 1382 unsigned int index;
1428 1383
1429 dbg("%s - port %d\n", __func__, port->number);
1430
1431 index = tty->index - serial->minor; 1384 index = tty->index - serial->minor;
1432 status = 1385 status =
1433 BoxGetRegister(port->serial, index, MODEM_CONTROL_REGISTER, &mcr); 1386 BoxGetRegister(port->serial, index, MODEM_CONTROL_REGISTER, &mcr);
@@ -1461,18 +1414,11 @@ static int qt_tiocmget(struct tty_struct *tty)
1461 struct quatech_port *qt_port = qt_get_port_private(port); 1414 struct quatech_port *qt_port = qt_get_port_private(port);
1462 int retval = -ENODEV; 1415 int retval = -ENODEV;
1463 1416
1464 dbg("In %s\n", __func__);
1465
1466 if (!serial) 1417 if (!serial)
1467 return -ENODEV; 1418 return -ENODEV;
1468 1419
1469 mutex_lock(&qt_port->lock); 1420 mutex_lock(&qt_port->lock);
1470
1471 dbg("%s - port %d\n", __func__, port->number);
1472 dbg("%s - port->RxHolding = %d\n", __func__, qt_port->RxHolding);
1473
1474 retval = qt_real_tiocmget(tty, port, serial); 1421 retval = qt_real_tiocmget(tty, port, serial);
1475
1476 mutex_unlock(&qt_port->lock); 1422 mutex_unlock(&qt_port->lock);
1477 return retval; 1423 return retval;
1478} 1424}
@@ -1486,18 +1432,11 @@ static int qt_tiocmset(struct tty_struct *tty,
1486 struct quatech_port *qt_port = qt_get_port_private(port); 1432 struct quatech_port *qt_port = qt_get_port_private(port);
1487 int retval = -ENODEV; 1433 int retval = -ENODEV;
1488 1434
1489 dbg("In %s\n", __func__);
1490
1491 if (!serial) 1435 if (!serial)
1492 return -ENODEV; 1436 return -ENODEV;
1493 1437
1494 mutex_lock(&qt_port->lock); 1438 mutex_lock(&qt_port->lock);
1495
1496 dbg("%s - port %d\n", __func__, port->number);
1497 dbg("%s - qt_port->RxHolding = %d\n", __func__, qt_port->RxHolding);
1498
1499 retval = qt_real_tiocmset(tty, port, serial, set); 1439 retval = qt_real_tiocmset(tty, port, serial, set);
1500
1501 mutex_unlock(&qt_port->lock); 1440 mutex_unlock(&qt_port->lock);
1502 return retval; 1441 return retval;
1503} 1442}
@@ -1508,8 +1447,6 @@ static void qt_throttle(struct tty_struct *tty)
1508 struct usb_serial *serial = get_usb_serial(port, __func__); 1447 struct usb_serial *serial = get_usb_serial(port, __func__);
1509 struct quatech_port *qt_port; 1448 struct quatech_port *qt_port;
1510 1449
1511 dbg("%s - port %d\n", __func__, port->number);
1512
1513 if (!serial) 1450 if (!serial)
1514 return; 1451 return;
1515 1452
@@ -1519,7 +1456,6 @@ static void qt_throttle(struct tty_struct *tty)
1519 1456
1520 /* pass on to the driver specific version of this function */ 1457 /* pass on to the driver specific version of this function */
1521 qt_port->RxHolding = 1; 1458 qt_port->RxHolding = 1;
1522 dbg("%s - port->RxHolding = 1\n", __func__);
1523 1459
1524 mutex_unlock(&qt_port->lock); 1460 mutex_unlock(&qt_port->lock);
1525 return; 1461 return;
@@ -1539,8 +1475,6 @@ static void qt_unthrottle(struct tty_struct *tty)
1539 1475
1540 mutex_lock(&qt_port->lock); 1476 mutex_lock(&qt_port->lock);
1541 1477
1542 dbg("%s - port %d\n", __func__, port->number);
1543
1544 if (qt_port->RxHolding == 1) { 1478 if (qt_port->RxHolding == 1) {
1545 dbg("%s -qt_port->RxHolding == 1\n", __func__); 1479 dbg("%s -qt_port->RxHolding == 1\n", __func__);
1546 1480
@@ -1559,8 +1493,9 @@ static void qt_unthrottle(struct tty_struct *tty)
1559 qt_read_bulk_callback, port); 1493 qt_read_bulk_callback, port);
1560 result = usb_submit_urb(port->read_urb, GFP_ATOMIC); 1494 result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
1561 if (result) 1495 if (result)
1562 err("%s - failed restarting read urb, error %d", 1496 dev_err(&port->dev,
1563 __func__, result); 1497 "%s - failed restarting read urb, error %d\n",
1498 __func__, result);
1564 } 1499 }
1565 } 1500 }
1566 mutex_unlock(&qt_port->lock); 1501 mutex_unlock(&qt_port->lock);
@@ -1589,7 +1524,7 @@ static struct usb_serial_driver quatech_device = {
1589 .name = "serqt", 1524 .name = "serqt",
1590 }, 1525 },
1591 .description = DRIVER_DESC, 1526 .description = DRIVER_DESC,
1592 .id_table = serqt_id_table, 1527 .id_table = id_table,
1593 .num_ports = 8, 1528 .num_ports = 8,
1594 .open = qt_open, 1529 .open = qt_open,
1595 .close = qt_close, 1530 .close = qt_close,
@@ -1612,7 +1547,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
1612 &quatech_device, NULL 1547 &quatech_device, NULL
1613}; 1548};
1614 1549
1615module_usb_serial_driver(serqt_usb_driver, serial_drivers); 1550module_usb_serial_driver(serial_drivers, id_table);
1616 1551
1617MODULE_AUTHOR(DRIVER_AUTHOR); 1552MODULE_AUTHOR(DRIVER_AUTHOR);
1618MODULE_DESCRIPTION(DRIVER_DESC); 1553MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
index 76316a33061b..a7773a3e02b1 100644
--- a/drivers/usb/Kconfig
+++ b/drivers/usb/Kconfig
@@ -133,6 +133,8 @@ source "drivers/usb/host/Kconfig"
133 133
134source "drivers/usb/musb/Kconfig" 134source "drivers/usb/musb/Kconfig"
135 135
136source "drivers/usb/chipidea/Kconfig"
137
136source "drivers/usb/renesas_usbhs/Kconfig" 138source "drivers/usb/renesas_usbhs/Kconfig"
137 139
138source "drivers/usb/class/Kconfig" 140source "drivers/usb/class/Kconfig"
@@ -177,6 +179,8 @@ source "drivers/usb/serial/Kconfig"
177 179
178source "drivers/usb/misc/Kconfig" 180source "drivers/usb/misc/Kconfig"
179 181
182source "drivers/usb/phy/Kconfig"
183
180source "drivers/usb/atm/Kconfig" 184source "drivers/usb/atm/Kconfig"
181 185
182source "drivers/usb/gadget/Kconfig" 186source "drivers/usb/gadget/Kconfig"
diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
index 53a7bc07dd8d..c691eea51537 100644
--- a/drivers/usb/Makefile
+++ b/drivers/usb/Makefile
@@ -46,12 +46,14 @@ obj-$(CONFIG_USB_MICROTEK) += image/
46obj-$(CONFIG_USB_SERIAL) += serial/ 46obj-$(CONFIG_USB_SERIAL) += serial/
47 47
48obj-$(CONFIG_USB) += misc/ 48obj-$(CONFIG_USB) += misc/
49obj-$(CONFIG_USB) += phy/
49obj-$(CONFIG_EARLY_PRINTK_DBGP) += early/ 50obj-$(CONFIG_EARLY_PRINTK_DBGP) += early/
50 51
51obj-$(CONFIG_USB_ATM) += atm/ 52obj-$(CONFIG_USB_ATM) += atm/
52obj-$(CONFIG_USB_SPEEDTOUCH) += atm/ 53obj-$(CONFIG_USB_SPEEDTOUCH) += atm/
53 54
54obj-$(CONFIG_USB_MUSB_HDRC) += musb/ 55obj-$(CONFIG_USB_MUSB_HDRC) += musb/
56obj-$(CONFIG_USB_CHIPIDEA) += chipidea/
55obj-$(CONFIG_USB_RENESAS_USBHS) += renesas_usbhs/ 57obj-$(CONFIG_USB_RENESAS_USBHS) += renesas_usbhs/
56obj-$(CONFIG_USB_GADGET) += gadget/ 58obj-$(CONFIG_USB_GADGET) += gadget/
57 59
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index 98b89fe19867..b7eb86ad6bf2 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -674,7 +674,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
674 } 674 }
675 675
676 ret = offd; 676 ret = offd;
677 dbg("cm %#x", cm); 677 usb_dbg(instance->usbatm, "cm %#x\n", cm);
678fail: 678fail:
679 mutex_unlock(&instance->cm_serialize); 679 mutex_unlock(&instance->cm_serialize);
680err: 680err:
@@ -733,7 +733,7 @@ static int cxacru_card_status(struct cxacru_data *instance)
733{ 733{
734 int ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); 734 int ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0);
735 if (ret < 0) { /* firmware not loaded */ 735 if (ret < 0) { /* firmware not loaded */
736 dbg("cxacru_adsl_start: CARD_GET_STATUS returned %d", ret); 736 usb_dbg(instance->usbatm, "cxacru_adsl_start: CARD_GET_STATUS returned %d\n", ret);
737 return ret; 737 return ret;
738 } 738 }
739 return 0; 739 return 0;
@@ -758,7 +758,7 @@ static int cxacru_atm_start(struct usbatm_data *usbatm_instance,
758 int ret; 758 int ret;
759 int start_polling = 1; 759 int start_polling = 1;
760 760
761 dbg("cxacru_atm_start"); 761 dev_dbg(&intf->dev, "%s\n", __func__);
762 762
763 /* Read MAC address */ 763 /* Read MAC address */
764 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_MAC_ADDRESS, NULL, 0, 764 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_MAC_ADDRESS, NULL, 0,
@@ -962,13 +962,13 @@ static int cxacru_fw(struct usb_device *usb_dev, enum cxacru_fw_request fw,
962 ret = usb_bulk_msg(usb_dev, usb_sndbulkpipe(usb_dev, CXACRU_EP_CMD), 962 ret = usb_bulk_msg(usb_dev, usb_sndbulkpipe(usb_dev, CXACRU_EP_CMD),
963 buf, offb, NULL, CMD_TIMEOUT); 963 buf, offb, NULL, CMD_TIMEOUT);
964 if (ret < 0) { 964 if (ret < 0) {
965 dbg("sending fw %#x failed", fw); 965 dev_dbg(&usb_dev->dev, "sending fw %#x failed\n", fw);
966 goto cleanup; 966 goto cleanup;
967 } 967 }
968 offb = 0; 968 offb = 0;
969 } 969 }
970 } while (offd < size); 970 } while (offd < size);
971 dbg("sent fw %#x", fw); 971 dev_dbg(&usb_dev->dev, "sent fw %#x\n", fw);
972 972
973 ret = 0; 973 ret = 0;
974 974
@@ -988,7 +988,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance,
988 usb_dev->descriptor.idProduct }; 988 usb_dev->descriptor.idProduct };
989 __le32 val; 989 __le32 val;
990 990
991 dbg("cxacru_upload_firmware"); 991 usb_dbg(usbatm, "%s\n", __func__);
992 992
993 /* FirmwarePllFClkValue */ 993 /* FirmwarePllFClkValue */
994 val = cpu_to_le32(instance->modem_type->pll_f_clk); 994 val = cpu_to_le32(instance->modem_type->pll_f_clk);
@@ -1074,7 +1074,7 @@ static int cxacru_find_firmware(struct cxacru_data *instance,
1074 char buf[16]; 1074 char buf[16];
1075 1075
1076 sprintf(buf, "cxacru-%s.bin", phase); 1076 sprintf(buf, "cxacru-%s.bin", phase);
1077 dbg("cxacru_find_firmware: looking for %s", buf); 1077 usb_dbg(usbatm, "cxacru_find_firmware: looking for %s\n", buf);
1078 1078
1079 if (request_firmware(fw_p, buf, dev)) { 1079 if (request_firmware(fw_p, buf, dev)) {
1080 usb_dbg(usbatm, "no stage %s firmware found\n", phase); 1080 usb_dbg(usbatm, "no stage %s firmware found\n", phase);
@@ -1115,9 +1115,9 @@ static int cxacru_heavy_init(struct usbatm_data *usbatm_instance,
1115 1115
1116 ret = cxacru_card_status(instance); 1116 ret = cxacru_card_status(instance);
1117 if (ret) 1117 if (ret)
1118 dbg("modem initialisation failed"); 1118 usb_dbg(usbatm_instance, "modem initialisation failed\n");
1119 else 1119 else
1120 dbg("done setting up the modem"); 1120 usb_dbg(usbatm_instance, "done setting up the modem\n");
1121 1121
1122 return ret; 1122 return ret;
1123} 1123}
@@ -1133,7 +1133,7 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,
1133 /* instance init */ 1133 /* instance init */
1134 instance = kzalloc(sizeof(*instance), GFP_KERNEL); 1134 instance = kzalloc(sizeof(*instance), GFP_KERNEL);
1135 if (!instance) { 1135 if (!instance) {
1136 dbg("cxacru_bind: no memory for instance data"); 1136 usb_dbg(usbatm_instance, "cxacru_bind: no memory for instance data\n");
1137 return -ENOMEM; 1137 return -ENOMEM;
1138 } 1138 }
1139 1139
@@ -1149,31 +1149,31 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,
1149 1149
1150 instance->rcv_buf = (u8 *) __get_free_page(GFP_KERNEL); 1150 instance->rcv_buf = (u8 *) __get_free_page(GFP_KERNEL);
1151 if (!instance->rcv_buf) { 1151 if (!instance->rcv_buf) {
1152 dbg("cxacru_bind: no memory for rcv_buf"); 1152 usb_dbg(usbatm_instance, "cxacru_bind: no memory for rcv_buf\n");
1153 ret = -ENOMEM; 1153 ret = -ENOMEM;
1154 goto fail; 1154 goto fail;
1155 } 1155 }
1156 instance->snd_buf = (u8 *) __get_free_page(GFP_KERNEL); 1156 instance->snd_buf = (u8 *) __get_free_page(GFP_KERNEL);
1157 if (!instance->snd_buf) { 1157 if (!instance->snd_buf) {
1158 dbg("cxacru_bind: no memory for snd_buf"); 1158 usb_dbg(usbatm_instance, "cxacru_bind: no memory for snd_buf\n");
1159 ret = -ENOMEM; 1159 ret = -ENOMEM;
1160 goto fail; 1160 goto fail;
1161 } 1161 }
1162 instance->rcv_urb = usb_alloc_urb(0, GFP_KERNEL); 1162 instance->rcv_urb = usb_alloc_urb(0, GFP_KERNEL);
1163 if (!instance->rcv_urb) { 1163 if (!instance->rcv_urb) {
1164 dbg("cxacru_bind: no memory for rcv_urb"); 1164 usb_dbg(usbatm_instance, "cxacru_bind: no memory for rcv_urb\n");
1165 ret = -ENOMEM; 1165 ret = -ENOMEM;
1166 goto fail; 1166 goto fail;
1167 } 1167 }
1168 instance->snd_urb = usb_alloc_urb(0, GFP_KERNEL); 1168 instance->snd_urb = usb_alloc_urb(0, GFP_KERNEL);
1169 if (!instance->snd_urb) { 1169 if (!instance->snd_urb) {
1170 dbg("cxacru_bind: no memory for snd_urb"); 1170 usb_dbg(usbatm_instance, "cxacru_bind: no memory for snd_urb\n");
1171 ret = -ENOMEM; 1171 ret = -ENOMEM;
1172 goto fail; 1172 goto fail;
1173 } 1173 }
1174 1174
1175 if (!cmd_ep) { 1175 if (!cmd_ep) {
1176 dbg("cxacru_bind: no command endpoint"); 1176 usb_dbg(usbatm_instance, "cxacru_bind: no command endpoint\n");
1177 ret = -ENODEV; 1177 ret = -ENODEV;
1178 goto fail; 1178 goto fail;
1179 } 1179 }
@@ -1227,10 +1227,10 @@ static void cxacru_unbind(struct usbatm_data *usbatm_instance,
1227 struct cxacru_data *instance = usbatm_instance->driver_data; 1227 struct cxacru_data *instance = usbatm_instance->driver_data;
1228 int is_polling = 1; 1228 int is_polling = 1;
1229 1229
1230 dbg("cxacru_unbind entered"); 1230 usb_dbg(usbatm_instance, "cxacru_unbind entered\n");
1231 1231
1232 if (!instance) { 1232 if (!instance) {
1233 dbg("cxacru_unbind: NULL instance!"); 1233 usb_dbg(usbatm_instance, "cxacru_unbind: NULL instance!\n");
1234 return; 1234 return;
1235 } 1235 }
1236 1236
diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c
index 98dd9e49b684..975e9c6691d6 100644
--- a/drivers/usb/atm/speedtch.c
+++ b/drivers/usb/atm/speedtch.c
@@ -170,7 +170,7 @@ static void speedtch_set_swbuff(struct speedtch_instance_data *instance, int sta
170 "%sabling SW buffering: usb_control_msg returned %d\n", 170 "%sabling SW buffering: usb_control_msg returned %d\n",
171 state ? "En" : "Dis", ret); 171 state ? "En" : "Dis", ret);
172 else 172 else
173 dbg("speedtch_set_swbuff: %sbled SW buffering", state ? "En" : "Dis"); 173 usb_dbg(usbatm, "speedtch_set_swbuff: %sbled SW buffering\n", state ? "En" : "Dis");
174} 174}
175 175
176static void speedtch_test_sequence(struct speedtch_instance_data *instance) 176static void speedtch_test_sequence(struct speedtch_instance_data *instance)
diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c
index 01ea5d7421d4..d7e422dc0ef7 100644
--- a/drivers/usb/atm/ueagle-atm.c
+++ b/drivers/usb/atm/ueagle-atm.c
@@ -1357,10 +1357,8 @@ static int uea_stat_e1(struct uea_softc *sc)
1357 /* release the dsp firmware as it is not needed until 1357 /* release the dsp firmware as it is not needed until
1358 * the next failure 1358 * the next failure
1359 */ 1359 */
1360 if (sc->dsp_firm) { 1360 release_firmware(sc->dsp_firm);
1361 release_firmware(sc->dsp_firm); 1361 sc->dsp_firm = NULL;
1362 sc->dsp_firm = NULL;
1363 }
1364 } 1362 }
1365 1363
1366 /* always update it as atm layer could not be init when we switch to 1364 /* always update it as atm layer could not be init when we switch to
@@ -1496,10 +1494,8 @@ static int uea_stat_e4(struct uea_softc *sc)
1496 /* release the dsp firmware as it is not needed until 1494 /* release the dsp firmware as it is not needed until
1497 * the next failure 1495 * the next failure
1498 */ 1496 */
1499 if (sc->dsp_firm) { 1497 release_firmware(sc->dsp_firm);
1500 release_firmware(sc->dsp_firm); 1498 sc->dsp_firm = NULL;
1501 sc->dsp_firm = NULL;
1502 }
1503 } 1499 }
1504 1500
1505 /* always update it as atm layer could not be init when we switch to 1501 /* always update it as atm layer could not be init when we switch to
@@ -2240,8 +2236,7 @@ static void uea_stop(struct uea_softc *sc)
2240 /* flush the work item, when no one can schedule it */ 2236 /* flush the work item, when no one can schedule it */
2241 flush_work_sync(&sc->task); 2237 flush_work_sync(&sc->task);
2242 2238
2243 if (sc->dsp_firm) 2239 release_firmware(sc->dsp_firm);
2244 release_firmware(sc->dsp_firm);
2245 uea_leaves(INS_TO_USBDEV(sc)); 2240 uea_leaves(INS_TO_USBDEV(sc));
2246} 2241}
2247 2242
diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c
index d3448ca110ce..ee62b3576f94 100644
--- a/drivers/usb/atm/usbatm.c
+++ b/drivers/usb/atm/usbatm.c
@@ -86,7 +86,7 @@
86#ifdef VERBOSE_DEBUG 86#ifdef VERBOSE_DEBUG
87static int usbatm_print_packet(const unsigned char *data, int len); 87static int usbatm_print_packet(const unsigned char *data, int len);
88#define PACKETDEBUG(arg...) usbatm_print_packet(arg) 88#define PACKETDEBUG(arg...) usbatm_print_packet(arg)
89#define vdbg(arg...) dbg(arg) 89#define vdbg(arg...) dev_dbg(arg)
90#else 90#else
91#define PACKETDEBUG(arg...) 91#define PACKETDEBUG(arg...)
92#define vdbg(arg...) 92#define vdbg(arg...)
@@ -714,7 +714,7 @@ static void usbatm_destroy_instance(struct kref *kref)
714{ 714{
715 struct usbatm_data *instance = container_of(kref, struct usbatm_data, refcount); 715 struct usbatm_data *instance = container_of(kref, struct usbatm_data, refcount);
716 716
717 dbg("%s", __func__); 717 usb_dbg(instance, "%s\n", __func__);
718 718
719 tasklet_kill(&instance->rx_channel.tasklet); 719 tasklet_kill(&instance->rx_channel.tasklet);
720 tasklet_kill(&instance->tx_channel.tasklet); 720 tasklet_kill(&instance->tx_channel.tasklet);
@@ -724,14 +724,14 @@ static void usbatm_destroy_instance(struct kref *kref)
724 724
725static void usbatm_get_instance(struct usbatm_data *instance) 725static void usbatm_get_instance(struct usbatm_data *instance)
726{ 726{
727 dbg("%s", __func__); 727 usb_dbg(instance, "%s\n", __func__);
728 728
729 kref_get(&instance->refcount); 729 kref_get(&instance->refcount);
730} 730}
731 731
732static void usbatm_put_instance(struct usbatm_data *instance) 732static void usbatm_put_instance(struct usbatm_data *instance)
733{ 733{
734 dbg("%s", __func__); 734 usb_dbg(instance, "%s\n", __func__);
735 735
736 kref_put(&instance->refcount, usbatm_destroy_instance); 736 kref_put(&instance->refcount, usbatm_destroy_instance);
737} 737}
@@ -745,11 +745,10 @@ static void usbatm_atm_dev_close(struct atm_dev *atm_dev)
745{ 745{
746 struct usbatm_data *instance = atm_dev->dev_data; 746 struct usbatm_data *instance = atm_dev->dev_data;
747 747
748 dbg("%s", __func__);
749
750 if (!instance) 748 if (!instance)
751 return; 749 return;
752 750
751 usb_dbg(instance, "%s\n", __func__);
753 atm_dev->dev_data = NULL; /* catch bugs */ 752 atm_dev->dev_data = NULL; /* catch bugs */
754 usbatm_put_instance(instance); /* taken in usbatm_atm_init */ 753 usbatm_put_instance(instance); /* taken in usbatm_atm_init */
755} 754}
@@ -759,10 +758,8 @@ static int usbatm_atm_proc_read(struct atm_dev *atm_dev, loff_t * pos, char *pag
759 struct usbatm_data *instance = atm_dev->dev_data; 758 struct usbatm_data *instance = atm_dev->dev_data;
760 int left = *pos; 759 int left = *pos;
761 760
762 if (!instance) { 761 if (!instance)
763 dbg("%s: NULL instance!", __func__);
764 return -ENODEV; 762 return -ENODEV;
765 }
766 763
767 if (!left--) 764 if (!left--)
768 return sprintf(page, "%s\n", instance->description); 765 return sprintf(page, "%s\n", instance->description);
@@ -804,10 +801,8 @@ static int usbatm_atm_open(struct atm_vcc *vcc)
804 int vci = vcc->vci; 801 int vci = vcc->vci;
805 short vpi = vcc->vpi; 802 short vpi = vcc->vpi;
806 803
807 if (!instance) { 804 if (!instance)
808 dbg("%s: NULL data!", __func__);
809 return -ENODEV; 805 return -ENODEV;
810 }
811 806
812 atm_dbg(instance, "%s: vpi %hd, vci %d\n", __func__, vpi, vci); 807 atm_dbg(instance, "%s: vpi %hd, vci %d\n", __func__, vpi, vci);
813 808
@@ -884,10 +879,8 @@ static void usbatm_atm_close(struct atm_vcc *vcc)
884 struct usbatm_data *instance = vcc->dev->dev_data; 879 struct usbatm_data *instance = vcc->dev->dev_data;
885 struct usbatm_vcc_data *vcc_data = vcc->dev_data; 880 struct usbatm_vcc_data *vcc_data = vcc->dev_data;
886 881
887 if (!instance || !vcc_data) { 882 if (!instance || !vcc_data)
888 dbg("%s: NULL data!", __func__);
889 return; 883 return;
890 }
891 884
892 atm_dbg(instance, "%s entered\n", __func__); 885 atm_dbg(instance, "%s entered\n", __func__);
893 886
@@ -929,10 +922,8 @@ static int usbatm_atm_ioctl(struct atm_dev *atm_dev, unsigned int cmd,
929{ 922{
930 struct usbatm_data *instance = atm_dev->dev_data; 923 struct usbatm_data *instance = atm_dev->dev_data;
931 924
932 if (!instance || instance->disconnected) { 925 if (!instance || instance->disconnected)
933 dbg("%s: %s!", __func__, instance ? "disconnected" : "NULL instance");
934 return -ENODEV; 926 return -ENODEV;
935 }
936 927
937 switch (cmd) { 928 switch (cmd) {
938 case ATM_QUERYLOOP: 929 case ATM_QUERYLOOP:
@@ -1336,8 +1327,6 @@ EXPORT_SYMBOL_GPL(usbatm_usb_disconnect);
1336 1327
1337static int __init usbatm_usb_init(void) 1328static int __init usbatm_usb_init(void)
1338{ 1329{
1339 dbg("%s: driver version %s", __func__, DRIVER_VERSION);
1340
1341 if (sizeof(struct usbatm_control) > FIELD_SIZEOF(struct sk_buff, cb)) { 1330 if (sizeof(struct usbatm_control) > FIELD_SIZEOF(struct sk_buff, cb)) {
1342 printk(KERN_ERR "%s unusable with this kernel!\n", usbatm_driver_name); 1331 printk(KERN_ERR "%s unusable with this kernel!\n", usbatm_driver_name);
1343 return -EIO; 1332 return -EIO;
@@ -1357,7 +1346,6 @@ module_init(usbatm_usb_init);
1357 1346
1358static void __exit usbatm_usb_exit(void) 1347static void __exit usbatm_usb_exit(void)
1359{ 1348{
1360 dbg("%s", __func__);
1361} 1349}
1362module_exit(usbatm_usb_exit); 1350module_exit(usbatm_usb_exit);
1363 1351
diff --git a/drivers/usb/atm/xusbatm.c b/drivers/usb/atm/xusbatm.c
index 48ee0c5ff282..14ec9f0c5924 100644
--- a/drivers/usb/atm/xusbatm.c
+++ b/drivers/usb/atm/xusbatm.c
@@ -187,8 +187,6 @@ static int __init xusbatm_init(void)
187{ 187{
188 int i; 188 int i;
189 189
190 dbg("xusbatm_init");
191
192 if (!num_vendor || 190 if (!num_vendor ||
193 num_vendor != num_product || 191 num_vendor != num_product ||
194 num_vendor != num_rx_endpoint || 192 num_vendor != num_rx_endpoint ||
@@ -221,8 +219,6 @@ module_init(xusbatm_init);
221 219
222static void __exit xusbatm_exit(void) 220static void __exit xusbatm_exit(void)
223{ 221{
224 dbg("xusbatm_exit entered");
225
226 usb_deregister(&xusbatm_usb_driver); 222 usb_deregister(&xusbatm_usb_driver);
227} 223}
228module_exit(xusbatm_exit); 224module_exit(xusbatm_exit);
diff --git a/drivers/usb/chipidea/Kconfig b/drivers/usb/chipidea/Kconfig
new file mode 100644
index 000000000000..fd36dc8b889b
--- /dev/null
+++ b/drivers/usb/chipidea/Kconfig
@@ -0,0 +1,32 @@
1config USB_CHIPIDEA
2 tristate "ChipIdea Highspeed Dual Role Controller"
3 depends on USB
4 help
5 Say Y here if your system has a dual role high speed USB
6 controller based on ChipIdea silicon IP. Currently, only the
7 peripheral mode is supported.
8
9 When compiled dynamically, the module will be called ci-hdrc.ko.
10
11if USB_CHIPIDEA
12
13config USB_CHIPIDEA_UDC
14 bool "ChipIdea device controller"
15 depends on USB_GADGET
16 select USB_GADGET_DUALSPEED
17 help
18 Say Y here to enable device controller functionality of the
19 ChipIdea driver.
20
21config USB_CHIPIDEA_HOST
22 bool "ChipIdea host controller"
23 help
24 Say Y here to enable host controller functionality of the
25 ChipIdea driver.
26
27config USB_CHIPIDEA_DEBUG
28 bool "ChipIdea driver debug"
29 help
30 Say Y here to enable debugging output of the ChipIdea driver.
31
32endif
diff --git a/drivers/usb/chipidea/Makefile b/drivers/usb/chipidea/Makefile
new file mode 100644
index 000000000000..cc3493769724
--- /dev/null
+++ b/drivers/usb/chipidea/Makefile
@@ -0,0 +1,14 @@
1obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc.o
2
3ci_hdrc-y := core.o
4ci_hdrc-$(CONFIG_USB_CHIPIDEA_UDC) += udc.o
5ci_hdrc-$(CONFIG_USB_CHIPIDEA_HOST) += host.o
6ci_hdrc-$(CONFIG_USB_CHIPIDEA_DEBUG) += debug.o
7
8ifneq ($(CONFIG_PCI),)
9 obj-$(CONFIG_USB_CHIPIDEA) += ci13xxx_pci.o
10endif
11
12ifneq ($(CONFIG_ARCH_MSM),)
13 obj-$(CONFIG_USB_CHIPIDEA) += ci13xxx_msm.o
14endif
diff --git a/drivers/usb/chipidea/bits.h b/drivers/usb/chipidea/bits.h
new file mode 100644
index 000000000000..050de8562a04
--- /dev/null
+++ b/drivers/usb/chipidea/bits.h
@@ -0,0 +1,90 @@
1/*
2 * bits.h - register bits of the ChipIdea USB IP core
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#ifndef __DRIVERS_USB_CHIPIDEA_BITS_H
14#define __DRIVERS_USB_CHIPIDEA_BITS_H
15
16#include <linux/usb/ehci_def.h>
17
18/* HCCPARAMS */
19#define HCCPARAMS_LEN BIT(17)
20
21/* DCCPARAMS */
22#define DCCPARAMS_DEN (0x1F << 0)
23#define DCCPARAMS_DC BIT(7)
24#define DCCPARAMS_HC BIT(8)
25
26/* TESTMODE */
27#define TESTMODE_FORCE BIT(0)
28
29/* USBCMD */
30#define USBCMD_RS BIT(0)
31#define USBCMD_RST BIT(1)
32#define USBCMD_SUTW BIT(13)
33#define USBCMD_ATDTW BIT(14)
34
35/* USBSTS & USBINTR */
36#define USBi_UI BIT(0)
37#define USBi_UEI BIT(1)
38#define USBi_PCI BIT(2)
39#define USBi_URI BIT(6)
40#define USBi_SLI BIT(8)
41
42/* DEVICEADDR */
43#define DEVICEADDR_USBADRA BIT(24)
44#define DEVICEADDR_USBADR (0x7FUL << 25)
45
46/* PORTSC */
47#define PORTSC_FPR BIT(6)
48#define PORTSC_SUSP BIT(7)
49#define PORTSC_HSP BIT(9)
50#define PORTSC_PTC (0x0FUL << 16)
51
52/* DEVLC */
53#define DEVLC_PSPD (0x03UL << 25)
54#define DEVLC_PSPD_HS (0x02UL << 25)
55
56/* OTGSC */
57#define OTGSC_IDPU BIT(5)
58#define OTGSC_ID BIT(8)
59#define OTGSC_AVV BIT(9)
60#define OTGSC_ASV BIT(10)
61#define OTGSC_BSV BIT(11)
62#define OTGSC_BSE BIT(12)
63#define OTGSC_IDIS BIT(16)
64#define OTGSC_AVVIS BIT(17)
65#define OTGSC_ASVIS BIT(18)
66#define OTGSC_BSVIS BIT(19)
67#define OTGSC_BSEIS BIT(20)
68#define OTGSC_IDIE BIT(24)
69#define OTGSC_AVVIE BIT(25)
70#define OTGSC_ASVIE BIT(26)
71#define OTGSC_BSVIE BIT(27)
72#define OTGSC_BSEIE BIT(28)
73
74/* USBMODE */
75#define USBMODE_CM (0x03UL << 0)
76#define USBMODE_CM_DC (0x02UL << 0)
77#define USBMODE_SLOM BIT(3)
78#define USBMODE_CI_SDIS BIT(4)
79
80/* ENDPTCTRL */
81#define ENDPTCTRL_RXS BIT(0)
82#define ENDPTCTRL_RXT (0x03UL << 2)
83#define ENDPTCTRL_RXR BIT(6) /* reserved for port 0 */
84#define ENDPTCTRL_RXE BIT(7)
85#define ENDPTCTRL_TXS BIT(16)
86#define ENDPTCTRL_TXT (0x03UL << 18)
87#define ENDPTCTRL_TXR BIT(22) /* reserved for port 0 */
88#define ENDPTCTRL_TXE BIT(23)
89
90#endif /* __DRIVERS_USB_CHIPIDEA_BITS_H */
diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
new file mode 100644
index 000000000000..50911f8490d4
--- /dev/null
+++ b/drivers/usb/chipidea/ci.h
@@ -0,0 +1,313 @@
1/*
2 * ci.h - common structures, functions, and macros of the ChipIdea driver
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#ifndef __DRIVERS_USB_CHIPIDEA_CI_H
14#define __DRIVERS_USB_CHIPIDEA_CI_H
15
16#include <linux/list.h>
17#include <linux/irqreturn.h>
18#include <linux/usb.h>
19#include <linux/usb/gadget.h>
20
21/******************************************************************************
22 * DEFINE
23 *****************************************************************************/
24#define CI13XXX_PAGE_SIZE 4096ul /* page size for TD's */
25#define ENDPT_MAX 32
26
27/******************************************************************************
28 * STRUCTURES
29 *****************************************************************************/
30/**
31 * struct ci13xxx_ep - endpoint representation
32 * @ep: endpoint structure for gadget drivers
33 * @dir: endpoint direction (TX/RX)
34 * @num: endpoint number
35 * @type: endpoint type
36 * @name: string description of the endpoint
37 * @qh: queue head for this endpoint
38 * @wedge: is the endpoint wedged
39 * @udc: pointer to the controller
40 * @lock: pointer to controller's spinlock
41 * @td_pool: pointer to controller's TD pool
42 */
43struct ci13xxx_ep {
44 struct usb_ep ep;
45 u8 dir;
46 u8 num;
47 u8 type;
48 char name[16];
49 struct {
50 struct list_head queue;
51 struct ci13xxx_qh *ptr;
52 dma_addr_t dma;
53 } qh;
54 int wedge;
55
56 /* global resources */
57 struct ci13xxx *udc;
58 spinlock_t *lock;
59 struct dma_pool *td_pool;
60};
61
62enum ci_role {
63 CI_ROLE_HOST = 0,
64 CI_ROLE_GADGET,
65 CI_ROLE_END,
66};
67
68/**
69 * struct ci_role_driver - host/gadget role driver
70 * start: start this role
71 * stop: stop this role
72 * irq: irq handler for this role
73 * name: role name string (host/gadget)
74 */
75struct ci_role_driver {
76 int (*start)(struct ci13xxx *);
77 void (*stop)(struct ci13xxx *);
78 irqreturn_t (*irq)(struct ci13xxx *);
79 const char *name;
80};
81
82/**
83 * struct hw_bank - hardware register mapping representation
84 * @lpm: set if the device is LPM capable
85 * @phys: physical address of the controller's registers
86 * @abs: absolute address of the beginning of register window
87 * @cap: capability registers
88 * @op: operational registers
89 * @size: size of the register window
90 * @regmap: register lookup table
91 */
92struct hw_bank {
93 unsigned lpm;
94 resource_size_t phys;
95 void __iomem *abs;
96 void __iomem *cap;
97 void __iomem *op;
98 size_t size;
99 void __iomem **regmap;
100};
101
102/**
103 * struct ci13xxx - chipidea device representation
104 * @dev: pointer to parent device
105 * @lock: access synchronization
106 * @hw_bank: hardware register mapping
107 * @irq: IRQ number
108 * @roles: array of supported roles for this controller
109 * @role: current role
110 * @is_otg: if the device is otg-capable
111 * @work: work for role changing
112 * @wq: workqueue thread
113 * @qh_pool: allocation pool for queue heads
114 * @td_pool: allocation pool for transfer descriptors
115 * @gadget: device side representation for peripheral controller
116 * @driver: gadget driver
117 * @hw_ep_max: total number of endpoints supported by hardware
118 * @ci13xxx_ep: array of endpoints
119 * @ep0_dir: ep0 direction
120 * @ep0out: pointer to ep0 OUT endpoint
121 * @ep0in: pointer to ep0 IN endpoint
122 * @status: ep0 status request
123 * @setaddr: if we should set the address on status completion
124 * @address: usb address received from the host
125 * @remote_wakeup: host-enabled remote wakeup
126 * @suspended: suspended by host
127 * @test_mode: the selected test mode
128 * @udc_driver: platform specific information supplied by parent device
129 * @vbus_active: is VBUS active
130 * @transceiver: pointer to USB PHY, if any
131 * @hcd: pointer to usb_hcd for ehci host driver
132 */
133struct ci13xxx {
134 struct device *dev;
135 spinlock_t lock;
136 struct hw_bank hw_bank;
137 int irq;
138 struct ci_role_driver *roles[CI_ROLE_END];
139 enum ci_role role;
140 bool is_otg;
141 struct work_struct work;
142 struct workqueue_struct *wq;
143
144 struct dma_pool *qh_pool;
145 struct dma_pool *td_pool;
146
147 struct usb_gadget gadget;
148 struct usb_gadget_driver *driver;
149 unsigned hw_ep_max;
150 struct ci13xxx_ep ci13xxx_ep[ENDPT_MAX];
151 u32 ep0_dir;
152 struct ci13xxx_ep *ep0out, *ep0in;
153
154 struct usb_request *status;
155 bool setaddr;
156 u8 address;
157 u8 remote_wakeup;
158 u8 suspended;
159 u8 test_mode;
160
161 struct ci13xxx_udc_driver *udc_driver;
162 int vbus_active;
163 struct usb_phy *transceiver;
164 struct usb_hcd *hcd;
165};
166
167static inline struct ci_role_driver *ci_role(struct ci13xxx *ci)
168{
169 BUG_ON(ci->role >= CI_ROLE_END || !ci->roles[ci->role]);
170 return ci->roles[ci->role];
171}
172
173static inline int ci_role_start(struct ci13xxx *ci, enum ci_role role)
174{
175 int ret;
176
177 if (role >= CI_ROLE_END)
178 return -EINVAL;
179
180 if (!ci->roles[role])
181 return -ENXIO;
182
183 ret = ci->roles[role]->start(ci);
184 if (!ret)
185 ci->role = role;
186 return ret;
187}
188
189static inline void ci_role_stop(struct ci13xxx *ci)
190{
191 enum ci_role role = ci->role;
192
193 if (role == CI_ROLE_END)
194 return;
195
196 ci->role = CI_ROLE_END;
197
198 ci->roles[role]->stop(ci);
199}
200
201/******************************************************************************
202 * REGISTERS
203 *****************************************************************************/
204/* register size */
205#define REG_BITS (32)
206
207/* register indices */
208enum ci13xxx_regs {
209 CAP_CAPLENGTH,
210 CAP_HCCPARAMS,
211 CAP_DCCPARAMS,
212 CAP_TESTMODE,
213 CAP_LAST = CAP_TESTMODE,
214 OP_USBCMD,
215 OP_USBSTS,
216 OP_USBINTR,
217 OP_DEVICEADDR,
218 OP_ENDPTLISTADDR,
219 OP_PORTSC,
220 OP_DEVLC,
221 OP_OTGSC,
222 OP_USBMODE,
223 OP_ENDPTSETUPSTAT,
224 OP_ENDPTPRIME,
225 OP_ENDPTFLUSH,
226 OP_ENDPTSTAT,
227 OP_ENDPTCOMPLETE,
228 OP_ENDPTCTRL,
229 /* endptctrl1..15 follow */
230 OP_LAST = OP_ENDPTCTRL + ENDPT_MAX / 2,
231};
232
233/**
234 * ffs_nr: find first (least significant) bit set
235 * @x: the word to search
236 *
237 * This function returns bit number (instead of position)
238 */
239static inline int ffs_nr(u32 x)
240{
241 int n = ffs(x);
242
243 return n ? n-1 : 32;
244}
245
246/**
247 * hw_read: reads from a hw register
248 * @reg: register index
249 * @mask: bitfield mask
250 *
251 * This function returns register contents
252 */
253static inline u32 hw_read(struct ci13xxx *udc, enum ci13xxx_regs reg, u32 mask)
254{
255 return ioread32(udc->hw_bank.regmap[reg]) & mask;
256}
257
258/**
259 * hw_write: writes to a hw register
260 * @reg: register index
261 * @mask: bitfield mask
262 * @data: new value
263 */
264static inline void hw_write(struct ci13xxx *udc, enum ci13xxx_regs reg,
265 u32 mask, u32 data)
266{
267 if (~mask)
268 data = (ioread32(udc->hw_bank.regmap[reg]) & ~mask)
269 | (data & mask);
270
271 iowrite32(data, udc->hw_bank.regmap[reg]);
272}
273
274/**
275 * hw_test_and_clear: tests & clears a hw register
276 * @reg: register index
277 * @mask: bitfield mask
278 *
279 * This function returns register contents
280 */
281static inline u32 hw_test_and_clear(struct ci13xxx *udc, enum ci13xxx_regs reg,
282 u32 mask)
283{
284 u32 val = ioread32(udc->hw_bank.regmap[reg]) & mask;
285
286 iowrite32(val, udc->hw_bank.regmap[reg]);
287 return val;
288}
289
290/**
291 * hw_test_and_write: tests & writes a hw register
292 * @reg: register index
293 * @mask: bitfield mask
294 * @data: new value
295 *
296 * This function returns register contents
297 */
298static inline u32 hw_test_and_write(struct ci13xxx *udc, enum ci13xxx_regs reg,
299 u32 mask, u32 data)
300{
301 u32 val = hw_read(udc, reg, ~0);
302
303 hw_write(udc, reg, mask, data);
304 return (val & mask) >> ffs_nr(mask);
305}
306
307int hw_device_reset(struct ci13xxx *ci, u32 mode);
308
309int hw_port_test_set(struct ci13xxx *ci, u8 mode);
310
311u8 hw_port_test_get(struct ci13xxx *ci);
312
313#endif /* __DRIVERS_USB_CHIPIDEA_CI_H */
diff --git a/drivers/usb/gadget/ci13xxx_msm.c b/drivers/usb/chipidea/ci13xxx_msm.c
index d07e44c05e9b..958069ef95e3 100644
--- a/drivers/usb/gadget/ci13xxx_msm.c
+++ b/drivers/usb/chipidea/ci13xxx_msm.c
@@ -10,15 +10,12 @@
10#include <linux/pm_runtime.h> 10#include <linux/pm_runtime.h>
11#include <linux/usb/msm_hsusb_hw.h> 11#include <linux/usb/msm_hsusb_hw.h>
12#include <linux/usb/ulpi.h> 12#include <linux/usb/ulpi.h>
13#include <linux/usb/gadget.h>
14#include <linux/usb/chipidea.h>
13 15
14#include "ci13xxx_udc.c" 16#include "ci.h"
15 17
16#define MSM_USB_BASE (udc->regs) 18#define MSM_USB_BASE (udc->hw_bank.abs)
17
18static irqreturn_t msm_udc_irq(int irq, void *data)
19{
20 return udc_irq();
21}
22 19
23static void ci13xxx_msm_notify_event(struct ci13xxx *udc, unsigned event) 20static void ci13xxx_msm_notify_event(struct ci13xxx *udc, unsigned event)
24{ 21{
@@ -60,53 +57,40 @@ static struct ci13xxx_udc_driver ci13xxx_msm_udc_driver = {
60 57
61static int ci13xxx_msm_probe(struct platform_device *pdev) 58static int ci13xxx_msm_probe(struct platform_device *pdev)
62{ 59{
63 struct resource *res; 60 struct platform_device *plat_ci;
64 void __iomem *regs;
65 int irq;
66 int ret; 61 int ret;
67 62
68 dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n"); 63 dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n");
69 64
70 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 65 plat_ci = platform_device_alloc("ci_hdrc", -1);
71 if (!res) { 66 if (!plat_ci) {
72 dev_err(&pdev->dev, "failed to get platform resource mem\n"); 67 dev_err(&pdev->dev, "can't allocate ci_hdrc platform device\n");
73 return -ENXIO;
74 }
75
76 regs = ioremap(res->start, resource_size(res));
77 if (!regs) {
78 dev_err(&pdev->dev, "ioremap failed\n");
79 return -ENOMEM; 68 return -ENOMEM;
80 } 69 }
81 70
82 ret = udc_probe(&ci13xxx_msm_udc_driver, &pdev->dev, regs); 71 ret = platform_device_add_resources(plat_ci, pdev->resource,
83 if (ret < 0) { 72 pdev->num_resources);
84 dev_err(&pdev->dev, "udc_probe failed\n"); 73 if (ret) {
85 goto iounmap; 74 dev_err(&pdev->dev, "can't add resources to platform device\n");
75 goto put_platform;
86 } 76 }
87 77
88 irq = platform_get_irq(pdev, 0); 78 ret = platform_device_add_data(plat_ci, &ci13xxx_msm_udc_driver,
89 if (irq < 0) { 79 sizeof(ci13xxx_msm_udc_driver));
90 dev_err(&pdev->dev, "IRQ not found\n"); 80 if (ret)
91 ret = -ENXIO; 81 goto put_platform;
92 goto udc_remove;
93 }
94 82
95 ret = request_irq(irq, msm_udc_irq, IRQF_SHARED, pdev->name, pdev); 83 ret = platform_device_add(plat_ci);
96 if (ret < 0) { 84 if (ret)
97 dev_err(&pdev->dev, "request_irq failed\n"); 85 goto put_platform;
98 goto udc_remove;
99 }
100 86
101 pm_runtime_no_callbacks(&pdev->dev); 87 pm_runtime_no_callbacks(&pdev->dev);
102 pm_runtime_enable(&pdev->dev); 88 pm_runtime_enable(&pdev->dev);
103 89
104 return 0; 90 return 0;
105 91
106udc_remove: 92put_platform:
107 udc_remove(); 93 platform_device_put(plat_ci);
108iounmap:
109 iounmap(regs);
110 94
111 return ret; 95 return ret;
112} 96}
diff --git a/drivers/usb/gadget/ci13xxx_pci.c b/drivers/usb/chipidea/ci13xxx_pci.c
index 883ab5e832d1..e3dab27f5c75 100644
--- a/drivers/usb/gadget/ci13xxx_pci.c
+++ b/drivers/usb/chipidea/ci13xxx_pci.c
@@ -10,10 +10,12 @@
10 * published by the Free Software Foundation. 10 * published by the Free Software Foundation.
11 */ 11 */
12 12
13#include <linux/platform_device.h>
13#include <linux/module.h> 14#include <linux/module.h>
14#include <linux/pci.h> 15#include <linux/pci.h>
15 16#include <linux/interrupt.h>
16#include "ci13xxx_udc.c" 17#include <linux/usb/gadget.h>
18#include <linux/usb/chipidea.h>
17 19
18/* driver name */ 20/* driver name */
19#define UDC_DRIVER_NAME "ci13xxx_pci" 21#define UDC_DRIVER_NAME "ci13xxx_pci"
@@ -21,25 +23,20 @@
21/****************************************************************************** 23/******************************************************************************
22 * PCI block 24 * PCI block
23 *****************************************************************************/ 25 *****************************************************************************/
24/** 26struct ci13xxx_udc_driver pci_driver = {
25 * ci13xxx_pci_irq: interrut handler 27 .name = UDC_DRIVER_NAME,
26 * @irq: irq number 28 .capoffset = DEF_CAPOFFSET,
27 * @pdev: USB Device Controller interrupt source 29};
28 *
29 * This function returns IRQ_HANDLED if the IRQ has been handled
30 * This is an ISR don't trace, use attribute interface instead
31 */
32static irqreturn_t ci13xxx_pci_irq(int irq, void *pdev)
33{
34 if (irq == 0) {
35 dev_err(&((struct pci_dev *)pdev)->dev, "Invalid IRQ0 usage!");
36 return IRQ_HANDLED;
37 }
38 return udc_irq();
39}
40 30
41static struct ci13xxx_udc_driver ci13xxx_pci_udc_driver = { 31struct ci13xxx_udc_driver langwell_pci_driver = {
42 .name = UDC_DRIVER_NAME, 32 .name = UDC_DRIVER_NAME,
33 .capoffset = 0,
34};
35
36struct ci13xxx_udc_driver penwell_pci_driver = {
37 .name = UDC_DRIVER_NAME,
38 .capoffset = 0,
39 .power_budget = 200,
43}; 40};
44 41
45/** 42/**
@@ -54,11 +51,15 @@ static struct ci13xxx_udc_driver ci13xxx_pci_udc_driver = {
54static int __devinit ci13xxx_pci_probe(struct pci_dev *pdev, 51static int __devinit ci13xxx_pci_probe(struct pci_dev *pdev,
55 const struct pci_device_id *id) 52 const struct pci_device_id *id)
56{ 53{
57 void __iomem *regs = NULL; 54 struct ci13xxx_udc_driver *driver = (void *)id->driver_data;
58 int retval = 0; 55 struct platform_device *plat_ci;
59 56 struct resource res[3];
60 if (id == NULL) 57 int retval = 0, nres = 2;
61 return -EINVAL; 58
59 if (!driver) {
60 dev_err(&pdev->dev, "device doesn't provide driver data\n");
61 return -ENODEV;
62 }
62 63
63 retval = pci_enable_device(pdev); 64 retval = pci_enable_device(pdev);
64 if (retval) 65 if (retval)
@@ -70,41 +71,50 @@ static int __devinit ci13xxx_pci_probe(struct pci_dev *pdev,
70 goto disable_device; 71 goto disable_device;
71 } 72 }
72 73
73 retval = pci_request_regions(pdev, UDC_DRIVER_NAME); 74 pci_set_power_state(pdev, PCI_D0);
74 if (retval) 75 pci_set_master(pdev);
75 goto disable_device; 76 pci_try_set_mwi(pdev);
76 77
77 /* BAR 0 holds all the registers */ 78 plat_ci = platform_device_alloc("ci_hdrc", -1);
78 regs = pci_iomap(pdev, 0, 0); 79 if (!plat_ci) {
79 if (!regs) { 80 dev_err(&pdev->dev, "can't allocate ci_hdrc platform device\n");
80 dev_err(&pdev->dev, "Error mapping memory!"); 81 retval = -ENOMEM;
81 retval = -EFAULT; 82 goto disable_device;
82 goto release_regions;
83 } 83 }
84 pci_set_drvdata(pdev, (__force void *)regs);
85 84
86 pci_set_master(pdev); 85 memset(res, 0, sizeof(res));
87 pci_try_set_mwi(pdev); 86 res[0].start = pci_resource_start(pdev, 0);
87 res[0].end = pci_resource_end(pdev, 0);
88 res[0].flags = IORESOURCE_MEM;
89 res[1].start = pdev->irq;
90 res[1].flags = IORESOURCE_IRQ;
91
92 retval = platform_device_add_resources(plat_ci, res, nres);
93 if (retval) {
94 dev_err(&pdev->dev, "can't add resources to platform device\n");
95 goto put_platform;
96 }
88 97
89 retval = udc_probe(&ci13xxx_pci_udc_driver, &pdev->dev, regs); 98 retval = platform_device_add_data(plat_ci, driver, sizeof(*driver));
90 if (retval) 99 if (retval)
91 goto iounmap; 100 goto put_platform;
101
102 dma_set_coherent_mask(&plat_ci->dev, pdev->dev.coherent_dma_mask);
103 plat_ci->dev.dma_mask = pdev->dev.dma_mask;
104 plat_ci->dev.dma_parms = pdev->dev.dma_parms;
105 plat_ci->dev.parent = &pdev->dev;
92 106
93 /* our device does not have MSI capability */ 107 pci_set_drvdata(pdev, plat_ci);
94 108
95 retval = request_irq(pdev->irq, ci13xxx_pci_irq, IRQF_SHARED, 109 retval = platform_device_add(plat_ci);
96 UDC_DRIVER_NAME, pdev);
97 if (retval) 110 if (retval)
98 goto gadget_remove; 111 goto put_platform;
99 112
100 return 0; 113 return 0;
101 114
102 gadget_remove: 115 put_platform:
103 udc_remove(); 116 pci_set_drvdata(pdev, NULL);
104 iounmap: 117 platform_device_put(plat_ci);
105 pci_iounmap(pdev, regs);
106 release_regions:
107 pci_release_regions(pdev);
108 disable_device: 118 disable_device:
109 pci_disable_device(pdev); 119 pci_disable_device(pdev);
110 done: 120 done:
@@ -121,10 +131,10 @@ static int __devinit ci13xxx_pci_probe(struct pci_dev *pdev,
121 */ 131 */
122static void __devexit ci13xxx_pci_remove(struct pci_dev *pdev) 132static void __devexit ci13xxx_pci_remove(struct pci_dev *pdev)
123{ 133{
124 free_irq(pdev->irq, pdev); 134 struct platform_device *plat_ci = pci_get_drvdata(pdev);
125 udc_remove(); 135
126 pci_iounmap(pdev, (__force void __iomem *)pci_get_drvdata(pdev)); 136 platform_device_unregister(plat_ci);
127 pci_release_regions(pdev); 137 pci_set_drvdata(pdev, NULL);
128 pci_disable_device(pdev); 138 pci_disable_device(pdev);
129} 139}
130 140
@@ -135,8 +145,22 @@ static void __devexit ci13xxx_pci_remove(struct pci_dev *pdev)
135 * Check "pci.h" for details 145 * Check "pci.h" for details
136 */ 146 */
137static DEFINE_PCI_DEVICE_TABLE(ci13xxx_pci_id_table) = { 147static DEFINE_PCI_DEVICE_TABLE(ci13xxx_pci_id_table) = {
138 { PCI_DEVICE(0x153F, 0x1004) }, 148 {
139 { PCI_DEVICE(0x153F, 0x1006) }, 149 PCI_DEVICE(0x153F, 0x1004),
150 .driver_data = (kernel_ulong_t)&pci_driver,
151 },
152 {
153 PCI_DEVICE(0x153F, 0x1006),
154 .driver_data = (kernel_ulong_t)&pci_driver,
155 },
156 {
157 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0811),
158 .driver_data = (kernel_ulong_t)&langwell_pci_driver,
159 },
160 {
161 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0829),
162 .driver_data = (kernel_ulong_t)&penwell_pci_driver,
163 },
140 { 0, 0, 0, 0, 0, 0, 0 /* end: all zeroes */ } 164 { 0, 0, 0, 0, 0, 0, 0 /* end: all zeroes */ }
141}; 165};
142MODULE_DEVICE_TABLE(pci, ci13xxx_pci_id_table); 166MODULE_DEVICE_TABLE(pci, ci13xxx_pci_id_table);
@@ -148,27 +172,7 @@ static struct pci_driver ci13xxx_pci_driver = {
148 .remove = __devexit_p(ci13xxx_pci_remove), 172 .remove = __devexit_p(ci13xxx_pci_remove),
149}; 173};
150 174
151/** 175module_pci_driver(ci13xxx_pci_driver);
152 * ci13xxx_pci_init: module init
153 *
154 * Driver load
155 */
156static int __init ci13xxx_pci_init(void)
157{
158 return pci_register_driver(&ci13xxx_pci_driver);
159}
160module_init(ci13xxx_pci_init);
161
162/**
163 * ci13xxx_pci_exit: module exit
164 *
165 * Driver unload
166 */
167static void __exit ci13xxx_pci_exit(void)
168{
169 pci_unregister_driver(&ci13xxx_pci_driver);
170}
171module_exit(ci13xxx_pci_exit);
172 176
173MODULE_AUTHOR("MIPS - David Lopo <dlopo@chipidea.mips.com>"); 177MODULE_AUTHOR("MIPS - David Lopo <dlopo@chipidea.mips.com>");
174MODULE_DESCRIPTION("MIPS CI13XXX USB Peripheral Controller"); 178MODULE_DESCRIPTION("MIPS CI13XXX USB Peripheral Controller");
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
new file mode 100644
index 000000000000..15e03b308f8a
--- /dev/null
+++ b/drivers/usb/chipidea/core.c
@@ -0,0 +1,474 @@
1/*
2 * core.c - ChipIdea USB IP core family device controller
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13/*
14 * Description: ChipIdea USB IP core family device controller
15 *
16 * This driver is composed of several blocks:
17 * - HW: hardware interface
18 * - DBG: debug facilities (optional)
19 * - UTIL: utilities
20 * - ISR: interrupts handling
21 * - ENDPT: endpoint operations (Gadget API)
22 * - GADGET: gadget operations (Gadget API)
23 * - BUS: bus glue code, bus abstraction layer
24 *
25 * Compile Options
26 * - CONFIG_USB_GADGET_DEBUG_FILES: enable debug facilities
27 * - STALL_IN: non-empty bulk-in pipes cannot be halted
28 * if defined mass storage compliance succeeds but with warnings
29 * => case 4: Hi > Dn
30 * => case 5: Hi > Di
31 * => case 8: Hi <> Do
32 * if undefined usbtest 13 fails
33 * - TRACE: enable function tracing (depends on DEBUG)
34 *
35 * Main Features
36 * - Chapter 9 & Mass Storage Compliance with Gadget File Storage
37 * - Chapter 9 Compliance with Gadget Zero (STALL_IN undefined)
38 * - Normal & LPM support
39 *
40 * USBTEST Report
41 * - OK: 0-12, 13 (STALL_IN defined) & 14
42 * - Not Supported: 15 & 16 (ISO)
43 *
44 * TODO List
45 * - OTG
46 * - Isochronous & Interrupt Traffic
47 * - Handle requests which spawns into several TDs
48 * - GET_STATUS(device) - always reports 0
49 * - Gadget API (majority of optional features)
50 * - Suspend & Remote Wakeup
51 */
52#include <linux/delay.h>
53#include <linux/device.h>
54#include <linux/dmapool.h>
55#include <linux/dma-mapping.h>
56#include <linux/init.h>
57#include <linux/platform_device.h>
58#include <linux/module.h>
59#include <linux/interrupt.h>
60#include <linux/io.h>
61#include <linux/irq.h>
62#include <linux/kernel.h>
63#include <linux/slab.h>
64#include <linux/pm_runtime.h>
65#include <linux/usb/ch9.h>
66#include <linux/usb/gadget.h>
67#include <linux/usb/otg.h>
68#include <linux/usb/chipidea.h>
69
70#include "ci.h"
71#include "udc.h"
72#include "bits.h"
73#include "host.h"
74#include "debug.h"
75
76/* Controller register map */
77static uintptr_t ci_regs_nolpm[] = {
78 [CAP_CAPLENGTH] = 0x000UL,
79 [CAP_HCCPARAMS] = 0x008UL,
80 [CAP_DCCPARAMS] = 0x024UL,
81 [CAP_TESTMODE] = 0x038UL,
82 [OP_USBCMD] = 0x000UL,
83 [OP_USBSTS] = 0x004UL,
84 [OP_USBINTR] = 0x008UL,
85 [OP_DEVICEADDR] = 0x014UL,
86 [OP_ENDPTLISTADDR] = 0x018UL,
87 [OP_PORTSC] = 0x044UL,
88 [OP_DEVLC] = 0x084UL,
89 [OP_OTGSC] = 0x064UL,
90 [OP_USBMODE] = 0x068UL,
91 [OP_ENDPTSETUPSTAT] = 0x06CUL,
92 [OP_ENDPTPRIME] = 0x070UL,
93 [OP_ENDPTFLUSH] = 0x074UL,
94 [OP_ENDPTSTAT] = 0x078UL,
95 [OP_ENDPTCOMPLETE] = 0x07CUL,
96 [OP_ENDPTCTRL] = 0x080UL,
97};
98
99static uintptr_t ci_regs_lpm[] = {
100 [CAP_CAPLENGTH] = 0x000UL,
101 [CAP_HCCPARAMS] = 0x008UL,
102 [CAP_DCCPARAMS] = 0x024UL,
103 [CAP_TESTMODE] = 0x0FCUL,
104 [OP_USBCMD] = 0x000UL,
105 [OP_USBSTS] = 0x004UL,
106 [OP_USBINTR] = 0x008UL,
107 [OP_DEVICEADDR] = 0x014UL,
108 [OP_ENDPTLISTADDR] = 0x018UL,
109 [OP_PORTSC] = 0x044UL,
110 [OP_DEVLC] = 0x084UL,
111 [OP_OTGSC] = 0x0C4UL,
112 [OP_USBMODE] = 0x0C8UL,
113 [OP_ENDPTSETUPSTAT] = 0x0D8UL,
114 [OP_ENDPTPRIME] = 0x0DCUL,
115 [OP_ENDPTFLUSH] = 0x0E0UL,
116 [OP_ENDPTSTAT] = 0x0E4UL,
117 [OP_ENDPTCOMPLETE] = 0x0E8UL,
118 [OP_ENDPTCTRL] = 0x0ECUL,
119};
120
121static int hw_alloc_regmap(struct ci13xxx *ci, bool is_lpm)
122{
123 int i;
124
125 kfree(ci->hw_bank.regmap);
126
127 ci->hw_bank.regmap = kzalloc((OP_LAST + 1) * sizeof(void *),
128 GFP_KERNEL);
129 if (!ci->hw_bank.regmap)
130 return -ENOMEM;
131
132 for (i = 0; i < OP_ENDPTCTRL; i++)
133 ci->hw_bank.regmap[i] =
134 (i <= CAP_LAST ? ci->hw_bank.cap : ci->hw_bank.op) +
135 (is_lpm ? ci_regs_lpm[i] : ci_regs_nolpm[i]);
136
137 for (; i <= OP_LAST; i++)
138 ci->hw_bank.regmap[i] = ci->hw_bank.op +
139 4 * (i - OP_ENDPTCTRL) +
140 (is_lpm
141 ? ci_regs_lpm[OP_ENDPTCTRL]
142 : ci_regs_nolpm[OP_ENDPTCTRL]);
143
144 return 0;
145}
146
147/**
148 * hw_port_test_set: writes port test mode (execute without interruption)
149 * @mode: new value
150 *
151 * This function returns an error code
152 */
153int hw_port_test_set(struct ci13xxx *ci, u8 mode)
154{
155 const u8 TEST_MODE_MAX = 7;
156
157 if (mode > TEST_MODE_MAX)
158 return -EINVAL;
159
160 hw_write(ci, OP_PORTSC, PORTSC_PTC, mode << ffs_nr(PORTSC_PTC));
161 return 0;
162}
163
164/**
165 * hw_port_test_get: reads port test mode value
166 *
167 * This function returns port test mode value
168 */
169u8 hw_port_test_get(struct ci13xxx *ci)
170{
171 return hw_read(ci, OP_PORTSC, PORTSC_PTC) >> ffs_nr(PORTSC_PTC);
172}
173
174static int hw_device_init(struct ci13xxx *ci, void __iomem *base)
175{
176 u32 reg;
177
178 /* bank is a module variable */
179 ci->hw_bank.abs = base;
180
181 ci->hw_bank.cap = ci->hw_bank.abs;
182 ci->hw_bank.cap += ci->udc_driver->capoffset;
183 ci->hw_bank.op = ci->hw_bank.cap + ioread8(ci->hw_bank.cap);
184
185 hw_alloc_regmap(ci, false);
186 reg = hw_read(ci, CAP_HCCPARAMS, HCCPARAMS_LEN) >>
187 ffs_nr(HCCPARAMS_LEN);
188 ci->hw_bank.lpm = reg;
189 hw_alloc_regmap(ci, !!reg);
190 ci->hw_bank.size = ci->hw_bank.op - ci->hw_bank.abs;
191 ci->hw_bank.size += OP_LAST;
192 ci->hw_bank.size /= sizeof(u32);
193
194 reg = hw_read(ci, CAP_DCCPARAMS, DCCPARAMS_DEN) >>
195 ffs_nr(DCCPARAMS_DEN);
196 ci->hw_ep_max = reg * 2; /* cache hw ENDPT_MAX */
197
198 if (ci->hw_ep_max > ENDPT_MAX)
199 return -ENODEV;
200
201 dev_dbg(ci->dev, "ChipIdea HDRC found, lpm: %d; cap: %p op: %p\n",
202 ci->hw_bank.lpm, ci->hw_bank.cap, ci->hw_bank.op);
203
204 /* setup lock mode ? */
205
206 /* ENDPTSETUPSTAT is '0' by default */
207
208 /* HCSPARAMS.bf.ppc SHOULD BE zero for device */
209
210 return 0;
211}
212
213/**
214 * hw_device_reset: resets chip (execute without interruption)
215 * @ci: the controller
216 *
217 * This function returns an error code
218 */
219int hw_device_reset(struct ci13xxx *ci, u32 mode)
220{
221 /* should flush & stop before reset */
222 hw_write(ci, OP_ENDPTFLUSH, ~0, ~0);
223 hw_write(ci, OP_USBCMD, USBCMD_RS, 0);
224
225 hw_write(ci, OP_USBCMD, USBCMD_RST, USBCMD_RST);
226 while (hw_read(ci, OP_USBCMD, USBCMD_RST))
227 udelay(10); /* not RTOS friendly */
228
229
230 if (ci->udc_driver->notify_event)
231 ci->udc_driver->notify_event(ci,
232 CI13XXX_CONTROLLER_RESET_EVENT);
233
234 if (ci->udc_driver->flags & CI13XXX_DISABLE_STREAMING)
235 hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS, USBMODE_CI_SDIS);
236
237 /* USBMODE should be configured step by step */
238 hw_write(ci, OP_USBMODE, USBMODE_CM, USBMODE_CM_IDLE);
239 hw_write(ci, OP_USBMODE, USBMODE_CM, mode);
240 /* HW >= 2.3 */
241 hw_write(ci, OP_USBMODE, USBMODE_SLOM, USBMODE_SLOM);
242
243 if (hw_read(ci, OP_USBMODE, USBMODE_CM) != mode) {
244 pr_err("cannot enter in %s mode", ci_role(ci)->name);
245 pr_err("lpm = %i", ci->hw_bank.lpm);
246 return -ENODEV;
247 }
248
249 return 0;
250}
251
252/**
253 * ci_otg_role - pick role based on ID pin state
254 * @ci: the controller
255 */
256static enum ci_role ci_otg_role(struct ci13xxx *ci)
257{
258 u32 sts = hw_read(ci, OP_OTGSC, ~0);
259 enum ci_role role = sts & OTGSC_ID
260 ? CI_ROLE_GADGET
261 : CI_ROLE_HOST;
262
263 return role;
264}
265
266/**
267 * ci_role_work - perform role changing based on ID pin
268 * @work: work struct
269 */
270static void ci_role_work(struct work_struct *work)
271{
272 struct ci13xxx *ci = container_of(work, struct ci13xxx, work);
273 enum ci_role role = ci_otg_role(ci);
274
275 hw_write(ci, OP_OTGSC, OTGSC_IDIS, OTGSC_IDIS);
276
277 if (role != ci->role) {
278 dev_dbg(ci->dev, "switching from %s to %s\n",
279 ci_role(ci)->name, ci->roles[role]->name);
280
281 ci_role_stop(ci);
282 ci_role_start(ci, role);
283 }
284}
285
286static ssize_t show_role(struct device *dev, struct device_attribute *attr,
287 char *buf)
288{
289 struct ci13xxx *ci = dev_get_drvdata(dev);
290
291 return sprintf(buf, "%s\n", ci_role(ci)->name);
292}
293
294static ssize_t store_role(struct device *dev, struct device_attribute *attr,
295 const char *buf, size_t count)
296{
297 struct ci13xxx *ci = dev_get_drvdata(dev);
298 enum ci_role role;
299 int ret;
300
301 for (role = CI_ROLE_HOST; role < CI_ROLE_END; role++)
302 if (ci->roles[role] && !strcmp(buf, ci->roles[role]->name))
303 break;
304
305 if (role == CI_ROLE_END || role == ci->role)
306 return -EINVAL;
307
308 ci_role_stop(ci);
309 ret = ci_role_start(ci, role);
310 if (ret)
311 return ret;
312
313 return count;
314}
315
316static DEVICE_ATTR(role, S_IRUSR | S_IWUSR, show_role, store_role);
317
318static irqreturn_t ci_irq(int irq, void *data)
319{
320 struct ci13xxx *ci = data;
321 irqreturn_t ret = IRQ_NONE;
322
323 if (ci->is_otg) {
324 u32 sts = hw_read(ci, OP_OTGSC, ~0);
325
326 if (sts & OTGSC_IDIS) {
327 queue_work(ci->wq, &ci->work);
328 ret = IRQ_HANDLED;
329 }
330 }
331
332 return ci->role == CI_ROLE_END ? ret : ci_role(ci)->irq(ci);
333}
334
335static int __devinit ci_hdrc_probe(struct platform_device *pdev)
336{
337 struct device *dev = &pdev->dev;
338 struct ci13xxx *ci;
339 struct resource *res;
340 void __iomem *base;
341 int ret;
342
343 if (!dev->platform_data) {
344 dev_err(dev, "platform data missing\n");
345 return -ENODEV;
346 }
347
348 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
349 if (!res) {
350 dev_err(dev, "missing resource\n");
351 return -ENODEV;
352 }
353
354 base = devm_request_and_ioremap(dev, res);
355 if (!res) {
356 dev_err(dev, "can't request and ioremap resource\n");
357 return -ENOMEM;
358 }
359
360 ci = devm_kzalloc(dev, sizeof(*ci), GFP_KERNEL);
361 if (!ci) {
362 dev_err(dev, "can't allocate device\n");
363 return -ENOMEM;
364 }
365
366 ci->dev = dev;
367 ci->udc_driver = dev->platform_data;
368
369 ret = hw_device_init(ci, base);
370 if (ret < 0) {
371 dev_err(dev, "can't initialize hardware\n");
372 return -ENODEV;
373 }
374
375 ci->hw_bank.phys = res->start;
376
377 ci->irq = platform_get_irq(pdev, 0);
378 if (ci->irq < 0) {
379 dev_err(dev, "missing IRQ\n");
380 return -ENODEV;
381 }
382
383 INIT_WORK(&ci->work, ci_role_work);
384 ci->wq = create_singlethread_workqueue("ci_otg");
385 if (!ci->wq) {
386 dev_err(dev, "can't create workqueue\n");
387 return -ENODEV;
388 }
389
390 /* initialize role(s) before the interrupt is requested */
391 ret = ci_hdrc_host_init(ci);
392 if (ret)
393 dev_info(dev, "doesn't support host\n");
394
395 ret = ci_hdrc_gadget_init(ci);
396 if (ret)
397 dev_info(dev, "doesn't support gadget\n");
398
399 if (!ci->roles[CI_ROLE_HOST] && !ci->roles[CI_ROLE_GADGET]) {
400 dev_err(dev, "no supported roles\n");
401 ret = -ENODEV;
402 goto rm_wq;
403 }
404
405 if (ci->roles[CI_ROLE_HOST] && ci->roles[CI_ROLE_GADGET]) {
406 ci->is_otg = true;
407 ci->role = ci_otg_role(ci);
408 } else {
409 ci->role = ci->roles[CI_ROLE_HOST]
410 ? CI_ROLE_HOST
411 : CI_ROLE_GADGET;
412 }
413
414 ret = ci_role_start(ci, ci->role);
415 if (ret) {
416 dev_err(dev, "can't start %s role\n", ci_role(ci)->name);
417 ret = -ENODEV;
418 goto rm_wq;
419 }
420
421 platform_set_drvdata(pdev, ci);
422 ret = request_irq(ci->irq, ci_irq, IRQF_SHARED, ci->udc_driver->name,
423 ci);
424 if (ret)
425 goto stop;
426
427 ret = device_create_file(dev, &dev_attr_role);
428 if (ret)
429 goto rm_attr;
430
431 if (ci->is_otg)
432 hw_write(ci, OP_OTGSC, OTGSC_IDIE, OTGSC_IDIE);
433
434 return ret;
435
436rm_attr:
437 device_remove_file(dev, &dev_attr_role);
438stop:
439 ci_role_stop(ci);
440rm_wq:
441 flush_workqueue(ci->wq);
442 destroy_workqueue(ci->wq);
443
444 return ret;
445}
446
447static int __devexit ci_hdrc_remove(struct platform_device *pdev)
448{
449 struct ci13xxx *ci = platform_get_drvdata(pdev);
450
451 flush_workqueue(ci->wq);
452 destroy_workqueue(ci->wq);
453 device_remove_file(ci->dev, &dev_attr_role);
454 free_irq(ci->irq, ci);
455 ci_role_stop(ci);
456
457 return 0;
458}
459
460static struct platform_driver ci_hdrc_driver = {
461 .probe = ci_hdrc_probe,
462 .remove = __devexit_p(ci_hdrc_remove),
463 .driver = {
464 .name = "ci_hdrc",
465 },
466};
467
468module_platform_driver(ci_hdrc_driver);
469
470MODULE_ALIAS("platform:ci_hdrc");
471MODULE_ALIAS("platform:ci13xxx");
472MODULE_LICENSE("GPL v2");
473MODULE_AUTHOR("David Lopo <dlopo@chipidea.mips.com>");
474MODULE_DESCRIPTION("ChipIdea HDRC Driver");
diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
new file mode 100644
index 000000000000..c4b3e15532db
--- /dev/null
+++ b/drivers/usb/chipidea/debug.c
@@ -0,0 +1,804 @@
1#include <linux/delay.h>
2#include <linux/device.h>
3#include <linux/dmapool.h>
4#include <linux/dma-mapping.h>
5#include <linux/init.h>
6#include <linux/platform_device.h>
7#include <linux/module.h>
8#include <linux/interrupt.h>
9#include <linux/io.h>
10#include <linux/irq.h>
11#include <linux/kernel.h>
12#include <linux/slab.h>
13#include <linux/pm_runtime.h>
14#include <linux/usb/ch9.h>
15#include <linux/usb/gadget.h>
16#include <linux/usb/otg.h>
17#include <linux/usb/chipidea.h>
18
19#include "ci.h"
20#include "udc.h"
21#include "bits.h"
22#include "debug.h"
23
24/* Interrupt statistics */
25#define ISR_MASK 0x1F
26static struct isr_statistics {
27 u32 test;
28 u32 ui;
29 u32 uei;
30 u32 pci;
31 u32 uri;
32 u32 sli;
33 u32 none;
34 struct {
35 u32 cnt;
36 u32 buf[ISR_MASK+1];
37 u32 idx;
38 } hndl;
39} isr_statistics;
40
41void dbg_interrupt(u32 intmask)
42{
43 if (!intmask) {
44 isr_statistics.none++;
45 return;
46 }
47
48 isr_statistics.hndl.buf[isr_statistics.hndl.idx++] = intmask;
49 isr_statistics.hndl.idx &= ISR_MASK;
50 isr_statistics.hndl.cnt++;
51
52 if (USBi_URI & intmask)
53 isr_statistics.uri++;
54 if (USBi_PCI & intmask)
55 isr_statistics.pci++;
56 if (USBi_UEI & intmask)
57 isr_statistics.uei++;
58 if (USBi_UI & intmask)
59 isr_statistics.ui++;
60 if (USBi_SLI & intmask)
61 isr_statistics.sli++;
62}
63
64/**
65 * hw_register_read: reads all device registers (execute without interruption)
66 * @buf: destination buffer
67 * @size: buffer size
68 *
69 * This function returns number of registers read
70 */
71static size_t hw_register_read(struct ci13xxx *udc, u32 *buf, size_t size)
72{
73 unsigned i;
74
75 if (size > udc->hw_bank.size)
76 size = udc->hw_bank.size;
77
78 for (i = 0; i < size; i++)
79 buf[i] = hw_read(udc, i * sizeof(u32), ~0);
80
81 return size;
82}
83
84/**
85 * hw_register_write: writes to register
86 * @addr: register address
87 * @data: register value
88 *
89 * This function returns an error code
90 */
91static int hw_register_write(struct ci13xxx *udc, u16 addr, u32 data)
92{
93 /* align */
94 addr /= sizeof(u32);
95
96 if (addr >= udc->hw_bank.size)
97 return -EINVAL;
98
99 /* align */
100 addr *= sizeof(u32);
101
102 hw_write(udc, addr, ~0, data);
103 return 0;
104}
105
106/**
107 * hw_intr_clear: disables interrupt & clears interrupt status (execute without
108 * interruption)
109 * @n: interrupt bit
110 *
111 * This function returns an error code
112 */
113static int hw_intr_clear(struct ci13xxx *udc, int n)
114{
115 if (n >= REG_BITS)
116 return -EINVAL;
117
118 hw_write(udc, OP_USBINTR, BIT(n), 0);
119 hw_write(udc, OP_USBSTS, BIT(n), BIT(n));
120 return 0;
121}
122
123/**
124 * hw_intr_force: enables interrupt & forces interrupt status (execute without
125 * interruption)
126 * @n: interrupt bit
127 *
128 * This function returns an error code
129 */
130static int hw_intr_force(struct ci13xxx *udc, int n)
131{
132 if (n >= REG_BITS)
133 return -EINVAL;
134
135 hw_write(udc, CAP_TESTMODE, TESTMODE_FORCE, TESTMODE_FORCE);
136 hw_write(udc, OP_USBINTR, BIT(n), BIT(n));
137 hw_write(udc, OP_USBSTS, BIT(n), BIT(n));
138 hw_write(udc, CAP_TESTMODE, TESTMODE_FORCE, 0);
139 return 0;
140}
141
142/**
143 * show_device: prints information about device capabilities and status
144 *
145 * Check "device.h" for details
146 */
147static ssize_t show_device(struct device *dev, struct device_attribute *attr,
148 char *buf)
149{
150 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
151 struct usb_gadget *gadget = &udc->gadget;
152 int n = 0;
153
154 if (attr == NULL || buf == NULL) {
155 dev_err(udc->dev, "[%s] EINVAL\n", __func__);
156 return 0;
157 }
158
159 n += scnprintf(buf + n, PAGE_SIZE - n, "speed = %d\n",
160 gadget->speed);
161 n += scnprintf(buf + n, PAGE_SIZE - n, "max_speed = %d\n",
162 gadget->max_speed);
163 /* TODO: Scheduled for removal in 3.8. */
164 n += scnprintf(buf + n, PAGE_SIZE - n, "is_dualspeed = %d\n",
165 gadget_is_dualspeed(gadget));
166 n += scnprintf(buf + n, PAGE_SIZE - n, "is_otg = %d\n",
167 gadget->is_otg);
168 n += scnprintf(buf + n, PAGE_SIZE - n, "is_a_peripheral = %d\n",
169 gadget->is_a_peripheral);
170 n += scnprintf(buf + n, PAGE_SIZE - n, "b_hnp_enable = %d\n",
171 gadget->b_hnp_enable);
172 n += scnprintf(buf + n, PAGE_SIZE - n, "a_hnp_support = %d\n",
173 gadget->a_hnp_support);
174 n += scnprintf(buf + n, PAGE_SIZE - n, "a_alt_hnp_support = %d\n",
175 gadget->a_alt_hnp_support);
176 n += scnprintf(buf + n, PAGE_SIZE - n, "name = %s\n",
177 (gadget->name ? gadget->name : ""));
178
179 return n;
180}
181static DEVICE_ATTR(device, S_IRUSR, show_device, NULL);
182
183/**
184 * show_driver: prints information about attached gadget (if any)
185 *
186 * Check "device.h" for details
187 */
188static ssize_t show_driver(struct device *dev, struct device_attribute *attr,
189 char *buf)
190{
191 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
192 struct usb_gadget_driver *driver = udc->driver;
193 int n = 0;
194
195 if (attr == NULL || buf == NULL) {
196 dev_err(dev, "[%s] EINVAL\n", __func__);
197 return 0;
198 }
199
200 if (driver == NULL)
201 return scnprintf(buf, PAGE_SIZE,
202 "There is no gadget attached!\n");
203
204 n += scnprintf(buf + n, PAGE_SIZE - n, "function = %s\n",
205 (driver->function ? driver->function : ""));
206 n += scnprintf(buf + n, PAGE_SIZE - n, "max speed = %d\n",
207 driver->max_speed);
208
209 return n;
210}
211static DEVICE_ATTR(driver, S_IRUSR, show_driver, NULL);
212
213/* Maximum event message length */
214#define DBG_DATA_MSG 64UL
215
216/* Maximum event messages */
217#define DBG_DATA_MAX 128UL
218
219/* Event buffer descriptor */
220static struct {
221 char (buf[DBG_DATA_MAX])[DBG_DATA_MSG]; /* buffer */
222 unsigned idx; /* index */
223 unsigned tty; /* print to console? */
224 rwlock_t lck; /* lock */
225} dbg_data = {
226 .idx = 0,
227 .tty = 0,
228 .lck = __RW_LOCK_UNLOCKED(lck)
229};
230
231/**
232 * dbg_dec: decrements debug event index
233 * @idx: buffer index
234 */
235static void dbg_dec(unsigned *idx)
236{
237 *idx = (*idx - 1) & (DBG_DATA_MAX-1);
238}
239
240/**
241 * dbg_inc: increments debug event index
242 * @idx: buffer index
243 */
244static void dbg_inc(unsigned *idx)
245{
246 *idx = (*idx + 1) & (DBG_DATA_MAX-1);
247}
248
249/**
250 * dbg_print: prints the common part of the event
251 * @addr: endpoint address
252 * @name: event name
253 * @status: status
254 * @extra: extra information
255 */
256static void dbg_print(u8 addr, const char *name, int status, const char *extra)
257{
258 struct timeval tval;
259 unsigned int stamp;
260 unsigned long flags;
261
262 write_lock_irqsave(&dbg_data.lck, flags);
263
264 do_gettimeofday(&tval);
265 stamp = tval.tv_sec & 0xFFFF; /* 2^32 = 4294967296. Limit to 4096s */
266 stamp = stamp * 1000000 + tval.tv_usec;
267
268 scnprintf(dbg_data.buf[dbg_data.idx], DBG_DATA_MSG,
269 "%04X\t? %02X %-7.7s %4i ?\t%s\n",
270 stamp, addr, name, status, extra);
271
272 dbg_inc(&dbg_data.idx);
273
274 write_unlock_irqrestore(&dbg_data.lck, flags);
275
276 if (dbg_data.tty != 0)
277 pr_notice("%04X\t? %02X %-7.7s %4i ?\t%s\n",
278 stamp, addr, name, status, extra);
279}
280
281/**
282 * dbg_done: prints a DONE event
283 * @addr: endpoint address
284 * @td: transfer descriptor
285 * @status: status
286 */
287void dbg_done(u8 addr, const u32 token, int status)
288{
289 char msg[DBG_DATA_MSG];
290
291 scnprintf(msg, sizeof(msg), "%d %02X",
292 (int)(token & TD_TOTAL_BYTES) >> ffs_nr(TD_TOTAL_BYTES),
293 (int)(token & TD_STATUS) >> ffs_nr(TD_STATUS));
294 dbg_print(addr, "DONE", status, msg);
295}
296
297/**
298 * dbg_event: prints a generic event
299 * @addr: endpoint address
300 * @name: event name
301 * @status: status
302 */
303void dbg_event(u8 addr, const char *name, int status)
304{
305 if (name != NULL)
306 dbg_print(addr, name, status, "");
307}
308
309/*
310 * dbg_queue: prints a QUEUE event
311 * @addr: endpoint address
312 * @req: USB request
313 * @status: status
314 */
315void dbg_queue(u8 addr, const struct usb_request *req, int status)
316{
317 char msg[DBG_DATA_MSG];
318
319 if (req != NULL) {
320 scnprintf(msg, sizeof(msg),
321 "%d %d", !req->no_interrupt, req->length);
322 dbg_print(addr, "QUEUE", status, msg);
323 }
324}
325
326/**
327 * dbg_setup: prints a SETUP event
328 * @addr: endpoint address
329 * @req: setup request
330 */
331void dbg_setup(u8 addr, const struct usb_ctrlrequest *req)
332{
333 char msg[DBG_DATA_MSG];
334
335 if (req != NULL) {
336 scnprintf(msg, sizeof(msg),
337 "%02X %02X %04X %04X %d", req->bRequestType,
338 req->bRequest, le16_to_cpu(req->wValue),
339 le16_to_cpu(req->wIndex), le16_to_cpu(req->wLength));
340 dbg_print(addr, "SETUP", 0, msg);
341 }
342}
343
344/**
345 * show_events: displays the event buffer
346 *
347 * Check "device.h" for details
348 */
349static ssize_t show_events(struct device *dev, struct device_attribute *attr,
350 char *buf)
351{
352 unsigned long flags;
353 unsigned i, j, n = 0;
354
355 if (attr == NULL || buf == NULL) {
356 dev_err(dev->parent, "[%s] EINVAL\n", __func__);
357 return 0;
358 }
359
360 read_lock_irqsave(&dbg_data.lck, flags);
361
362 i = dbg_data.idx;
363 for (dbg_dec(&i); i != dbg_data.idx; dbg_dec(&i)) {
364 n += strlen(dbg_data.buf[i]);
365 if (n >= PAGE_SIZE) {
366 n -= strlen(dbg_data.buf[i]);
367 break;
368 }
369 }
370 for (j = 0, dbg_inc(&i); j < n; dbg_inc(&i))
371 j += scnprintf(buf + j, PAGE_SIZE - j,
372 "%s", dbg_data.buf[i]);
373
374 read_unlock_irqrestore(&dbg_data.lck, flags);
375
376 return n;
377}
378
379/**
380 * store_events: configure if events are going to be also printed to console
381 *
382 * Check "device.h" for details
383 */
384static ssize_t store_events(struct device *dev, struct device_attribute *attr,
385 const char *buf, size_t count)
386{
387 unsigned tty;
388
389 if (attr == NULL || buf == NULL) {
390 dev_err(dev, "[%s] EINVAL\n", __func__);
391 goto done;
392 }
393
394 if (sscanf(buf, "%u", &tty) != 1 || tty > 1) {
395 dev_err(dev, "<1|0>: enable|disable console log\n");
396 goto done;
397 }
398
399 dbg_data.tty = tty;
400 dev_info(dev, "tty = %u", dbg_data.tty);
401
402 done:
403 return count;
404}
405static DEVICE_ATTR(events, S_IRUSR | S_IWUSR, show_events, store_events);
406
407/**
408 * show_inters: interrupt status, enable status and historic
409 *
410 * Check "device.h" for details
411 */
412static ssize_t show_inters(struct device *dev, struct device_attribute *attr,
413 char *buf)
414{
415 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
416 unsigned long flags;
417 u32 intr;
418 unsigned i, j, n = 0;
419
420 if (attr == NULL || buf == NULL) {
421 dev_err(udc->dev, "[%s] EINVAL\n", __func__);
422 return 0;
423 }
424
425 spin_lock_irqsave(&udc->lock, flags);
426
427 /*n += scnprintf(buf + n, PAGE_SIZE - n,
428 "status = %08x\n", hw_read_intr_status(udc));
429 n += scnprintf(buf + n, PAGE_SIZE - n,
430 "enable = %08x\n", hw_read_intr_enable(udc));*/
431
432 n += scnprintf(buf + n, PAGE_SIZE - n, "*test = %d\n",
433 isr_statistics.test);
434 n += scnprintf(buf + n, PAGE_SIZE - n, "? ui = %d\n",
435 isr_statistics.ui);
436 n += scnprintf(buf + n, PAGE_SIZE - n, "? uei = %d\n",
437 isr_statistics.uei);
438 n += scnprintf(buf + n, PAGE_SIZE - n, "? pci = %d\n",
439 isr_statistics.pci);
440 n += scnprintf(buf + n, PAGE_SIZE - n, "? uri = %d\n",
441 isr_statistics.uri);
442 n += scnprintf(buf + n, PAGE_SIZE - n, "? sli = %d\n",
443 isr_statistics.sli);
444 n += scnprintf(buf + n, PAGE_SIZE - n, "*none = %d\n",
445 isr_statistics.none);
446 n += scnprintf(buf + n, PAGE_SIZE - n, "*hndl = %d\n",
447 isr_statistics.hndl.cnt);
448
449 for (i = isr_statistics.hndl.idx, j = 0; j <= ISR_MASK; j++, i++) {
450 i &= ISR_MASK;
451 intr = isr_statistics.hndl.buf[i];
452
453 if (USBi_UI & intr)
454 n += scnprintf(buf + n, PAGE_SIZE - n, "ui ");
455 intr &= ~USBi_UI;
456 if (USBi_UEI & intr)
457 n += scnprintf(buf + n, PAGE_SIZE - n, "uei ");
458 intr &= ~USBi_UEI;
459 if (USBi_PCI & intr)
460 n += scnprintf(buf + n, PAGE_SIZE - n, "pci ");
461 intr &= ~USBi_PCI;
462 if (USBi_URI & intr)
463 n += scnprintf(buf + n, PAGE_SIZE - n, "uri ");
464 intr &= ~USBi_URI;
465 if (USBi_SLI & intr)
466 n += scnprintf(buf + n, PAGE_SIZE - n, "sli ");
467 intr &= ~USBi_SLI;
468 if (intr)
469 n += scnprintf(buf + n, PAGE_SIZE - n, "??? ");
470 if (isr_statistics.hndl.buf[i])
471 n += scnprintf(buf + n, PAGE_SIZE - n, "\n");
472 }
473
474 spin_unlock_irqrestore(&udc->lock, flags);
475
476 return n;
477}
478
479/**
480 * store_inters: enable & force or disable an individual interrutps
481 * (to be used for test purposes only)
482 *
483 * Check "device.h" for details
484 */
485static ssize_t store_inters(struct device *dev, struct device_attribute *attr,
486 const char *buf, size_t count)
487{
488 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
489 unsigned long flags;
490 unsigned en, bit;
491
492 if (attr == NULL || buf == NULL) {
493 dev_err(udc->dev, "EINVAL\n");
494 goto done;
495 }
496
497 if (sscanf(buf, "%u %u", &en, &bit) != 2 || en > 1) {
498 dev_err(udc->dev, "<1|0> <bit>: enable|disable interrupt\n");
499 goto done;
500 }
501
502 spin_lock_irqsave(&udc->lock, flags);
503 if (en) {
504 if (hw_intr_force(udc, bit))
505 dev_err(dev, "invalid bit number\n");
506 else
507 isr_statistics.test++;
508 } else {
509 if (hw_intr_clear(udc, bit))
510 dev_err(dev, "invalid bit number\n");
511 }
512 spin_unlock_irqrestore(&udc->lock, flags);
513
514 done:
515 return count;
516}
517static DEVICE_ATTR(inters, S_IRUSR | S_IWUSR, show_inters, store_inters);
518
519/**
520 * show_port_test: reads port test mode
521 *
522 * Check "device.h" for details
523 */
524static ssize_t show_port_test(struct device *dev,
525 struct device_attribute *attr, char *buf)
526{
527 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
528 unsigned long flags;
529 unsigned mode;
530
531 if (attr == NULL || buf == NULL) {
532 dev_err(udc->dev, "EINVAL\n");
533 return 0;
534 }
535
536 spin_lock_irqsave(&udc->lock, flags);
537 mode = hw_port_test_get(udc);
538 spin_unlock_irqrestore(&udc->lock, flags);
539
540 return scnprintf(buf, PAGE_SIZE, "mode = %u\n", mode);
541}
542
543/**
544 * store_port_test: writes port test mode
545 *
546 * Check "device.h" for details
547 */
548static ssize_t store_port_test(struct device *dev,
549 struct device_attribute *attr,
550 const char *buf, size_t count)
551{
552 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
553 unsigned long flags;
554 unsigned mode;
555
556 if (attr == NULL || buf == NULL) {
557 dev_err(udc->dev, "[%s] EINVAL\n", __func__);
558 goto done;
559 }
560
561 if (sscanf(buf, "%u", &mode) != 1) {
562 dev_err(udc->dev, "<mode>: set port test mode");
563 goto done;
564 }
565
566 spin_lock_irqsave(&udc->lock, flags);
567 if (hw_port_test_set(udc, mode))
568 dev_err(udc->dev, "invalid mode\n");
569 spin_unlock_irqrestore(&udc->lock, flags);
570
571 done:
572 return count;
573}
574static DEVICE_ATTR(port_test, S_IRUSR | S_IWUSR,
575 show_port_test, store_port_test);
576
577/**
578 * show_qheads: DMA contents of all queue heads
579 *
580 * Check "device.h" for details
581 */
582static ssize_t show_qheads(struct device *dev, struct device_attribute *attr,
583 char *buf)
584{
585 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
586 unsigned long flags;
587 unsigned i, j, n = 0;
588
589 if (attr == NULL || buf == NULL) {
590 dev_err(udc->dev, "[%s] EINVAL\n", __func__);
591 return 0;
592 }
593
594 spin_lock_irqsave(&udc->lock, flags);
595 for (i = 0; i < udc->hw_ep_max/2; i++) {
596 struct ci13xxx_ep *mEpRx = &udc->ci13xxx_ep[i];
597 struct ci13xxx_ep *mEpTx =
598 &udc->ci13xxx_ep[i + udc->hw_ep_max/2];
599 n += scnprintf(buf + n, PAGE_SIZE - n,
600 "EP=%02i: RX=%08X TX=%08X\n",
601 i, (u32)mEpRx->qh.dma, (u32)mEpTx->qh.dma);
602 for (j = 0; j < (sizeof(struct ci13xxx_qh)/sizeof(u32)); j++) {
603 n += scnprintf(buf + n, PAGE_SIZE - n,
604 " %04X: %08X %08X\n", j,
605 *((u32 *)mEpRx->qh.ptr + j),
606 *((u32 *)mEpTx->qh.ptr + j));
607 }
608 }
609 spin_unlock_irqrestore(&udc->lock, flags);
610
611 return n;
612}
613static DEVICE_ATTR(qheads, S_IRUSR, show_qheads, NULL);
614
615/**
616 * show_registers: dumps all registers
617 *
618 * Check "device.h" for details
619 */
620#define DUMP_ENTRIES 512
621static ssize_t show_registers(struct device *dev,
622 struct device_attribute *attr, char *buf)
623{
624 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
625 unsigned long flags;
626 u32 *dump;
627 unsigned i, k, n = 0;
628
629 if (attr == NULL || buf == NULL) {
630 dev_err(udc->dev, "[%s] EINVAL\n", __func__);
631 return 0;
632 }
633
634 dump = kmalloc(sizeof(u32) * DUMP_ENTRIES, GFP_KERNEL);
635 if (!dump) {
636 dev_err(udc->dev, "%s: out of memory\n", __func__);
637 return 0;
638 }
639
640 spin_lock_irqsave(&udc->lock, flags);
641 k = hw_register_read(udc, dump, DUMP_ENTRIES);
642 spin_unlock_irqrestore(&udc->lock, flags);
643
644 for (i = 0; i < k; i++) {
645 n += scnprintf(buf + n, PAGE_SIZE - n,
646 "reg[0x%04X] = 0x%08X\n",
647 i * (unsigned)sizeof(u32), dump[i]);
648 }
649 kfree(dump);
650
651 return n;
652}
653
654/**
655 * store_registers: writes value to register address
656 *
657 * Check "device.h" for details
658 */
659static ssize_t store_registers(struct device *dev,
660 struct device_attribute *attr,
661 const char *buf, size_t count)
662{
663 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
664 unsigned long addr, data, flags;
665
666 if (attr == NULL || buf == NULL) {
667 dev_err(udc->dev, "[%s] EINVAL\n", __func__);
668 goto done;
669 }
670
671 if (sscanf(buf, "%li %li", &addr, &data) != 2) {
672 dev_err(udc->dev,
673 "<addr> <data>: write data to register address\n");
674 goto done;
675 }
676
677 spin_lock_irqsave(&udc->lock, flags);
678 if (hw_register_write(udc, addr, data))
679 dev_err(udc->dev, "invalid address range\n");
680 spin_unlock_irqrestore(&udc->lock, flags);
681
682 done:
683 return count;
684}
685static DEVICE_ATTR(registers, S_IRUSR | S_IWUSR,
686 show_registers, store_registers);
687
688/**
689 * show_requests: DMA contents of all requests currently queued (all endpts)
690 *
691 * Check "device.h" for details
692 */
693static ssize_t show_requests(struct device *dev, struct device_attribute *attr,
694 char *buf)
695{
696 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
697 unsigned long flags;
698 struct list_head *ptr = NULL;
699 struct ci13xxx_req *req = NULL;
700 unsigned i, j, n = 0, qSize = sizeof(struct ci13xxx_td)/sizeof(u32);
701
702 if (attr == NULL || buf == NULL) {
703 dev_err(udc->dev, "[%s] EINVAL\n", __func__);
704 return 0;
705 }
706
707 spin_lock_irqsave(&udc->lock, flags);
708 for (i = 0; i < udc->hw_ep_max; i++)
709 list_for_each(ptr, &udc->ci13xxx_ep[i].qh.queue)
710 {
711 req = list_entry(ptr, struct ci13xxx_req, queue);
712
713 n += scnprintf(buf + n, PAGE_SIZE - n,
714 "EP=%02i: TD=%08X %s\n",
715 i % udc->hw_ep_max/2, (u32)req->dma,
716 ((i < udc->hw_ep_max/2) ? "RX" : "TX"));
717
718 for (j = 0; j < qSize; j++)
719 n += scnprintf(buf + n, PAGE_SIZE - n,
720 " %04X: %08X\n", j,
721 *((u32 *)req->ptr + j));
722 }
723 spin_unlock_irqrestore(&udc->lock, flags);
724
725 return n;
726}
727static DEVICE_ATTR(requests, S_IRUSR, show_requests, NULL);
728
729/**
730 * dbg_create_files: initializes the attribute interface
731 * @dev: device
732 *
733 * This function returns an error code
734 */
735int dbg_create_files(struct device *dev)
736{
737 int retval = 0;
738
739 if (dev == NULL)
740 return -EINVAL;
741 retval = device_create_file(dev, &dev_attr_device);
742 if (retval)
743 goto done;
744 retval = device_create_file(dev, &dev_attr_driver);
745 if (retval)
746 goto rm_device;
747 retval = device_create_file(dev, &dev_attr_events);
748 if (retval)
749 goto rm_driver;
750 retval = device_create_file(dev, &dev_attr_inters);
751 if (retval)
752 goto rm_events;
753 retval = device_create_file(dev, &dev_attr_port_test);
754 if (retval)
755 goto rm_inters;
756 retval = device_create_file(dev, &dev_attr_qheads);
757 if (retval)
758 goto rm_port_test;
759 retval = device_create_file(dev, &dev_attr_registers);
760 if (retval)
761 goto rm_qheads;
762 retval = device_create_file(dev, &dev_attr_requests);
763 if (retval)
764 goto rm_registers;
765 return 0;
766
767 rm_registers:
768 device_remove_file(dev, &dev_attr_registers);
769 rm_qheads:
770 device_remove_file(dev, &dev_attr_qheads);
771 rm_port_test:
772 device_remove_file(dev, &dev_attr_port_test);
773 rm_inters:
774 device_remove_file(dev, &dev_attr_inters);
775 rm_events:
776 device_remove_file(dev, &dev_attr_events);
777 rm_driver:
778 device_remove_file(dev, &dev_attr_driver);
779 rm_device:
780 device_remove_file(dev, &dev_attr_device);
781 done:
782 return retval;
783}
784
785/**
786 * dbg_remove_files: destroys the attribute interface
787 * @dev: device
788 *
789 * This function returns an error code
790 */
791int dbg_remove_files(struct device *dev)
792{
793 if (dev == NULL)
794 return -EINVAL;
795 device_remove_file(dev, &dev_attr_requests);
796 device_remove_file(dev, &dev_attr_registers);
797 device_remove_file(dev, &dev_attr_qheads);
798 device_remove_file(dev, &dev_attr_port_test);
799 device_remove_file(dev, &dev_attr_inters);
800 device_remove_file(dev, &dev_attr_events);
801 device_remove_file(dev, &dev_attr_driver);
802 device_remove_file(dev, &dev_attr_device);
803 return 0;
804}
diff --git a/drivers/usb/chipidea/debug.h b/drivers/usb/chipidea/debug.h
new file mode 100644
index 000000000000..80d96865775c
--- /dev/null
+++ b/drivers/usb/chipidea/debug.h
@@ -0,0 +1,56 @@
1/*
2 * debug.h - ChipIdea USB driver debug interfaces
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#ifndef __DRIVERS_USB_CHIPIDEA_DEBUG_H
14#define __DRIVERS_USB_CHIPIDEA_DEBUG_H
15
16#ifdef CONFIG_USB_CHIPIDEA_DEBUG
17void dbg_interrupt(u32 intmask);
18void dbg_done(u8 addr, const u32 token, int status);
19void dbg_event(u8 addr, const char *name, int status);
20void dbg_queue(u8 addr, const struct usb_request *req, int status);
21void dbg_setup(u8 addr, const struct usb_ctrlrequest *req);
22int dbg_create_files(struct device *dev);
23int dbg_remove_files(struct device *dev);
24#else
25static inline void dbg_interrupt(u32 intmask)
26{
27}
28
29static inline void dbg_done(u8 addr, const u32 token, int status)
30{
31}
32
33static inline void dbg_event(u8 addr, const char *name, int status)
34{
35}
36
37static inline void dbg_queue(u8 addr, const struct usb_request *req, int status)
38{
39}
40
41static inline void dbg_setup(u8 addr, const struct usb_ctrlrequest *req)
42{
43}
44
45static inline int dbg_create_files(struct device *dev)
46{
47 return 0;
48}
49
50static inline int dbg_remove_files(struct device *dev)
51{
52 return 0;
53}
54#endif
55
56#endif /* __DRIVERS_USB_CHIPIDEA_DEBUG_H */
diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
new file mode 100644
index 000000000000..9eacd21c0cd9
--- /dev/null
+++ b/drivers/usb/chipidea/host.c
@@ -0,0 +1,160 @@
1/*
2 * host.c - ChipIdea USB host controller driver
3 *
4 * Copyright (c) 2012 Intel Corporation
5 *
6 * Author: Alexander Shishkin
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#include <linux/kernel.h>
23#include <linux/usb.h>
24#include <linux/usb/hcd.h>
25#include <linux/usb/chipidea.h>
26
27#define CHIPIDEA_EHCI
28#include "../host/ehci-hcd.c"
29
30#include "ci.h"
31#include "bits.h"
32#include "host.h"
33
34static int ci_ehci_setup(struct usb_hcd *hcd)
35{
36 struct ehci_hcd *ehci = hcd_to_ehci(hcd);
37 int ret;
38
39 hcd->has_tt = 1;
40
41 ret = ehci_setup(hcd);
42 if (ret)
43 return ret;
44
45 ehci_port_power(ehci, 0);
46
47 return ret;
48}
49
50static const struct hc_driver ci_ehci_hc_driver = {
51 .description = "ehci_hcd",
52 .product_desc = "ChipIdea HDRC EHCI",
53 .hcd_priv_size = sizeof(struct ehci_hcd),
54
55 /*
56 * generic hardware linkage
57 */
58 .irq = ehci_irq,
59 .flags = HCD_MEMORY | HCD_USB2,
60
61 /*
62 * basic lifecycle operations
63 */
64 .reset = ci_ehci_setup,
65 .start = ehci_run,
66 .stop = ehci_stop,
67 .shutdown = ehci_shutdown,
68
69 /*
70 * managing i/o requests and associated device resources
71 */
72 .urb_enqueue = ehci_urb_enqueue,
73 .urb_dequeue = ehci_urb_dequeue,
74 .endpoint_disable = ehci_endpoint_disable,
75 .endpoint_reset = ehci_endpoint_reset,
76
77 /*
78 * scheduling support
79 */
80 .get_frame_number = ehci_get_frame,
81
82 /*
83 * root hub support
84 */
85 .hub_status_data = ehci_hub_status_data,
86 .hub_control = ehci_hub_control,
87 .bus_suspend = ehci_bus_suspend,
88 .bus_resume = ehci_bus_resume,
89 .relinquish_port = ehci_relinquish_port,
90 .port_handed_over = ehci_port_handed_over,
91
92 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
93};
94
95static irqreturn_t host_irq(struct ci13xxx *ci)
96{
97 return usb_hcd_irq(ci->irq, ci->hcd);
98}
99
100static int host_start(struct ci13xxx *ci)
101{
102 struct usb_hcd *hcd;
103 struct ehci_hcd *ehci;
104 int ret;
105
106 if (usb_disabled())
107 return -ENODEV;
108
109 hcd = usb_create_hcd(&ci_ehci_hc_driver, ci->dev, dev_name(ci->dev));
110 if (!hcd)
111 return -ENOMEM;
112
113 dev_set_drvdata(ci->dev, ci);
114 hcd->rsrc_start = ci->hw_bank.phys;
115 hcd->rsrc_len = ci->hw_bank.size;
116 hcd->regs = ci->hw_bank.abs;
117 hcd->has_tt = 1;
118
119 hcd->power_budget = ci->udc_driver->power_budget;
120
121 ehci = hcd_to_ehci(hcd);
122 ehci->caps = ci->hw_bank.cap;
123 ehci->has_hostpc = ci->hw_bank.lpm;
124
125 ret = usb_add_hcd(hcd, 0, 0);
126 if (ret)
127 usb_put_hcd(hcd);
128 else
129 ci->hcd = hcd;
130
131 return ret;
132}
133
134static void host_stop(struct ci13xxx *ci)
135{
136 struct usb_hcd *hcd = ci->hcd;
137
138 usb_remove_hcd(hcd);
139 usb_put_hcd(hcd);
140}
141
142int ci_hdrc_host_init(struct ci13xxx *ci)
143{
144 struct ci_role_driver *rdrv;
145
146 if (!hw_read(ci, CAP_DCCPARAMS, DCCPARAMS_HC))
147 return -ENXIO;
148
149 rdrv = devm_kzalloc(ci->dev, sizeof(struct ci_role_driver), GFP_KERNEL);
150 if (!rdrv)
151 return -ENOMEM;
152
153 rdrv->start = host_start;
154 rdrv->stop = host_stop;
155 rdrv->irq = host_irq;
156 rdrv->name = "host";
157 ci->roles[CI_ROLE_HOST] = rdrv;
158
159 return 0;
160}
diff --git a/drivers/usb/chipidea/host.h b/drivers/usb/chipidea/host.h
new file mode 100644
index 000000000000..761fb1fd6d99
--- /dev/null
+++ b/drivers/usb/chipidea/host.h
@@ -0,0 +1,17 @@
1#ifndef __DRIVERS_USB_CHIPIDEA_HOST_H
2#define __DRIVERS_USB_CHIPIDEA_HOST_H
3
4#ifdef CONFIG_USB_CHIPIDEA_HOST
5
6int ci_hdrc_host_init(struct ci13xxx *ci);
7
8#else
9
10static inline int ci_hdrc_host_init(struct ci13xxx *ci)
11{
12 return -ENXIO;
13}
14
15#endif
16
17#endif /* __DRIVERS_USB_CHIPIDEA_HOST_H */
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
new file mode 100644
index 000000000000..51f96942dc5e
--- /dev/null
+++ b/drivers/usb/chipidea/udc.c
@@ -0,0 +1,1809 @@
1/*
2 * udc.c - ChipIdea UDC driver
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/delay.h>
14#include <linux/device.h>
15#include <linux/dmapool.h>
16#include <linux/dma-mapping.h>
17#include <linux/init.h>
18#include <linux/platform_device.h>
19#include <linux/module.h>
20#include <linux/interrupt.h>
21#include <linux/io.h>
22#include <linux/irq.h>
23#include <linux/kernel.h>
24#include <linux/slab.h>
25#include <linux/pm_runtime.h>
26#include <linux/usb/ch9.h>
27#include <linux/usb/gadget.h>
28#include <linux/usb/otg.h>
29#include <linux/usb/chipidea.h>
30
31#include "ci.h"
32#include "udc.h"
33#include "bits.h"
34#include "debug.h"
35
36/* control endpoint description */
37static const struct usb_endpoint_descriptor
38ctrl_endpt_out_desc = {
39 .bLength = USB_DT_ENDPOINT_SIZE,
40 .bDescriptorType = USB_DT_ENDPOINT,
41
42 .bEndpointAddress = USB_DIR_OUT,
43 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
44 .wMaxPacketSize = cpu_to_le16(CTRL_PAYLOAD_MAX),
45};
46
47static const struct usb_endpoint_descriptor
48ctrl_endpt_in_desc = {
49 .bLength = USB_DT_ENDPOINT_SIZE,
50 .bDescriptorType = USB_DT_ENDPOINT,
51
52 .bEndpointAddress = USB_DIR_IN,
53 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
54 .wMaxPacketSize = cpu_to_le16(CTRL_PAYLOAD_MAX),
55};
56
57/**
58 * hw_ep_bit: calculates the bit number
59 * @num: endpoint number
60 * @dir: endpoint direction
61 *
62 * This function returns bit number
63 */
64static inline int hw_ep_bit(int num, int dir)
65{
66 return num + (dir ? 16 : 0);
67}
68
69static inline int ep_to_bit(struct ci13xxx *udc, int n)
70{
71 int fill = 16 - udc->hw_ep_max / 2;
72
73 if (n >= udc->hw_ep_max / 2)
74 n += fill;
75
76 return n;
77}
78
79/**
80 * hw_device_state: enables/disables interrupts & starts/stops device (execute
81 * without interruption)
82 * @dma: 0 => disable, !0 => enable and set dma engine
83 *
84 * This function returns an error code
85 */
86static int hw_device_state(struct ci13xxx *udc, u32 dma)
87{
88 if (dma) {
89 hw_write(udc, OP_ENDPTLISTADDR, ~0, dma);
90 /* interrupt, error, port change, reset, sleep/suspend */
91 hw_write(udc, OP_USBINTR, ~0,
92 USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI);
93 hw_write(udc, OP_USBCMD, USBCMD_RS, USBCMD_RS);
94 } else {
95 hw_write(udc, OP_USBCMD, USBCMD_RS, 0);
96 hw_write(udc, OP_USBINTR, ~0, 0);
97 }
98 return 0;
99}
100
101/**
102 * hw_ep_flush: flush endpoint fifo (execute without interruption)
103 * @num: endpoint number
104 * @dir: endpoint direction
105 *
106 * This function returns an error code
107 */
108static int hw_ep_flush(struct ci13xxx *udc, int num, int dir)
109{
110 int n = hw_ep_bit(num, dir);
111
112 do {
113 /* flush any pending transfer */
114 hw_write(udc, OP_ENDPTFLUSH, BIT(n), BIT(n));
115 while (hw_read(udc, OP_ENDPTFLUSH, BIT(n)))
116 cpu_relax();
117 } while (hw_read(udc, OP_ENDPTSTAT, BIT(n)));
118
119 return 0;
120}
121
122/**
123 * hw_ep_disable: disables endpoint (execute without interruption)
124 * @num: endpoint number
125 * @dir: endpoint direction
126 *
127 * This function returns an error code
128 */
129static int hw_ep_disable(struct ci13xxx *udc, int num, int dir)
130{
131 hw_ep_flush(udc, num, dir);
132 hw_write(udc, OP_ENDPTCTRL + num,
133 dir ? ENDPTCTRL_TXE : ENDPTCTRL_RXE, 0);
134 return 0;
135}
136
137/**
138 * hw_ep_enable: enables endpoint (execute without interruption)
139 * @num: endpoint number
140 * @dir: endpoint direction
141 * @type: endpoint type
142 *
143 * This function returns an error code
144 */
145static int hw_ep_enable(struct ci13xxx *udc, int num, int dir, int type)
146{
147 u32 mask, data;
148
149 if (dir) {
150 mask = ENDPTCTRL_TXT; /* type */
151 data = type << ffs_nr(mask);
152
153 mask |= ENDPTCTRL_TXS; /* unstall */
154 mask |= ENDPTCTRL_TXR; /* reset data toggle */
155 data |= ENDPTCTRL_TXR;
156 mask |= ENDPTCTRL_TXE; /* enable */
157 data |= ENDPTCTRL_TXE;
158 } else {
159 mask = ENDPTCTRL_RXT; /* type */
160 data = type << ffs_nr(mask);
161
162 mask |= ENDPTCTRL_RXS; /* unstall */
163 mask |= ENDPTCTRL_RXR; /* reset data toggle */
164 data |= ENDPTCTRL_RXR;
165 mask |= ENDPTCTRL_RXE; /* enable */
166 data |= ENDPTCTRL_RXE;
167 }
168 hw_write(udc, OP_ENDPTCTRL + num, mask, data);
169 return 0;
170}
171
172/**
173 * hw_ep_get_halt: return endpoint halt status
174 * @num: endpoint number
175 * @dir: endpoint direction
176 *
177 * This function returns 1 if endpoint halted
178 */
179static int hw_ep_get_halt(struct ci13xxx *udc, int num, int dir)
180{
181 u32 mask = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
182
183 return hw_read(udc, OP_ENDPTCTRL + num, mask) ? 1 : 0;
184}
185
186/**
187 * hw_test_and_clear_setup_status: test & clear setup status (execute without
188 * interruption)
189 * @n: endpoint number
190 *
191 * This function returns setup status
192 */
193static int hw_test_and_clear_setup_status(struct ci13xxx *udc, int n)
194{
195 n = ep_to_bit(udc, n);
196 return hw_test_and_clear(udc, OP_ENDPTSETUPSTAT, BIT(n));
197}
198
199/**
200 * hw_ep_prime: primes endpoint (execute without interruption)
201 * @num: endpoint number
202 * @dir: endpoint direction
203 * @is_ctrl: true if control endpoint
204 *
205 * This function returns an error code
206 */
207static int hw_ep_prime(struct ci13xxx *udc, int num, int dir, int is_ctrl)
208{
209 int n = hw_ep_bit(num, dir);
210
211 if (is_ctrl && dir == RX && hw_read(udc, OP_ENDPTSETUPSTAT, BIT(num)))
212 return -EAGAIN;
213
214 hw_write(udc, OP_ENDPTPRIME, BIT(n), BIT(n));
215
216 while (hw_read(udc, OP_ENDPTPRIME, BIT(n)))
217 cpu_relax();
218 if (is_ctrl && dir == RX && hw_read(udc, OP_ENDPTSETUPSTAT, BIT(num)))
219 return -EAGAIN;
220
221 /* status shoult be tested according with manual but it doesn't work */
222 return 0;
223}
224
225/**
226 * hw_ep_set_halt: configures ep halt & resets data toggle after clear (execute
227 * without interruption)
228 * @num: endpoint number
229 * @dir: endpoint direction
230 * @value: true => stall, false => unstall
231 *
232 * This function returns an error code
233 */
234static int hw_ep_set_halt(struct ci13xxx *udc, int num, int dir, int value)
235{
236 if (value != 0 && value != 1)
237 return -EINVAL;
238
239 do {
240 enum ci13xxx_regs reg = OP_ENDPTCTRL + num;
241 u32 mask_xs = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
242 u32 mask_xr = dir ? ENDPTCTRL_TXR : ENDPTCTRL_RXR;
243
244 /* data toggle - reserved for EP0 but it's in ESS */
245 hw_write(udc, reg, mask_xs|mask_xr,
246 value ? mask_xs : mask_xr);
247 } while (value != hw_ep_get_halt(udc, num, dir));
248
249 return 0;
250}
251
252/**
253 * hw_is_port_high_speed: test if port is high speed
254 *
255 * This function returns true if high speed port
256 */
257static int hw_port_is_high_speed(struct ci13xxx *udc)
258{
259 return udc->hw_bank.lpm ? hw_read(udc, OP_DEVLC, DEVLC_PSPD) :
260 hw_read(udc, OP_PORTSC, PORTSC_HSP);
261}
262
263/**
264 * hw_read_intr_enable: returns interrupt enable register
265 *
266 * This function returns register data
267 */
268static u32 hw_read_intr_enable(struct ci13xxx *udc)
269{
270 return hw_read(udc, OP_USBINTR, ~0);
271}
272
273/**
274 * hw_read_intr_status: returns interrupt status register
275 *
276 * This function returns register data
277 */
278static u32 hw_read_intr_status(struct ci13xxx *udc)
279{
280 return hw_read(udc, OP_USBSTS, ~0);
281}
282
283/**
284 * hw_test_and_clear_complete: test & clear complete status (execute without
285 * interruption)
286 * @n: endpoint number
287 *
288 * This function returns complete status
289 */
290static int hw_test_and_clear_complete(struct ci13xxx *udc, int n)
291{
292 n = ep_to_bit(udc, n);
293 return hw_test_and_clear(udc, OP_ENDPTCOMPLETE, BIT(n));
294}
295
296/**
297 * hw_test_and_clear_intr_active: test & clear active interrupts (execute
298 * without interruption)
299 *
300 * This function returns active interrutps
301 */
302static u32 hw_test_and_clear_intr_active(struct ci13xxx *udc)
303{
304 u32 reg = hw_read_intr_status(udc) & hw_read_intr_enable(udc);
305
306 hw_write(udc, OP_USBSTS, ~0, reg);
307 return reg;
308}
309
310/**
311 * hw_test_and_clear_setup_guard: test & clear setup guard (execute without
312 * interruption)
313 *
314 * This function returns guard value
315 */
316static int hw_test_and_clear_setup_guard(struct ci13xxx *udc)
317{
318 return hw_test_and_write(udc, OP_USBCMD, USBCMD_SUTW, 0);
319}
320
321/**
322 * hw_test_and_set_setup_guard: test & set setup guard (execute without
323 * interruption)
324 *
325 * This function returns guard value
326 */
327static int hw_test_and_set_setup_guard(struct ci13xxx *udc)
328{
329 return hw_test_and_write(udc, OP_USBCMD, USBCMD_SUTW, USBCMD_SUTW);
330}
331
332/**
333 * hw_usb_set_address: configures USB address (execute without interruption)
334 * @value: new USB address
335 *
336 * This function explicitly sets the address, without the "USBADRA" (advance)
337 * feature, which is not supported by older versions of the controller.
338 */
339static void hw_usb_set_address(struct ci13xxx *udc, u8 value)
340{
341 hw_write(udc, OP_DEVICEADDR, DEVICEADDR_USBADR,
342 value << ffs_nr(DEVICEADDR_USBADR));
343}
344
345/**
346 * hw_usb_reset: restart device after a bus reset (execute without
347 * interruption)
348 *
349 * This function returns an error code
350 */
351static int hw_usb_reset(struct ci13xxx *udc)
352{
353 hw_usb_set_address(udc, 0);
354
355 /* ESS flushes only at end?!? */
356 hw_write(udc, OP_ENDPTFLUSH, ~0, ~0);
357
358 /* clear setup token semaphores */
359 hw_write(udc, OP_ENDPTSETUPSTAT, 0, 0);
360
361 /* clear complete status */
362 hw_write(udc, OP_ENDPTCOMPLETE, 0, 0);
363
364 /* wait until all bits cleared */
365 while (hw_read(udc, OP_ENDPTPRIME, ~0))
366 udelay(10); /* not RTOS friendly */
367
368 /* reset all endpoints ? */
369
370 /* reset internal status and wait for further instructions
371 no need to verify the port reset status (ESS does it) */
372
373 return 0;
374}
375
376/******************************************************************************
377 * UTIL block
378 *****************************************************************************/
379/**
380 * _usb_addr: calculates endpoint address from direction & number
381 * @ep: endpoint
382 */
383static inline u8 _usb_addr(struct ci13xxx_ep *ep)
384{
385 return ((ep->dir == TX) ? USB_ENDPOINT_DIR_MASK : 0) | ep->num;
386}
387
388/**
389 * _hardware_queue: configures a request at hardware level
390 * @gadget: gadget
391 * @mEp: endpoint
392 *
393 * This function returns an error code
394 */
395static int _hardware_enqueue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
396{
397 struct ci13xxx *udc = mEp->udc;
398 unsigned i;
399 int ret = 0;
400 unsigned length = mReq->req.length;
401
402 /* don't queue twice */
403 if (mReq->req.status == -EALREADY)
404 return -EALREADY;
405
406 mReq->req.status = -EALREADY;
407
408 if (mReq->req.zero && length && (length % mEp->ep.maxpacket == 0)) {
409 mReq->zptr = dma_pool_alloc(mEp->td_pool, GFP_ATOMIC,
410 &mReq->zdma);
411 if (mReq->zptr == NULL)
412 return -ENOMEM;
413
414 memset(mReq->zptr, 0, sizeof(*mReq->zptr));
415 mReq->zptr->next = TD_TERMINATE;
416 mReq->zptr->token = TD_STATUS_ACTIVE;
417 if (!mReq->req.no_interrupt)
418 mReq->zptr->token |= TD_IOC;
419 }
420 ret = usb_gadget_map_request(&udc->gadget, &mReq->req, mEp->dir);
421 if (ret)
422 return ret;
423
424 /*
425 * TD configuration
426 * TODO - handle requests which spawns into several TDs
427 */
428 memset(mReq->ptr, 0, sizeof(*mReq->ptr));
429 mReq->ptr->token = length << ffs_nr(TD_TOTAL_BYTES);
430 mReq->ptr->token &= TD_TOTAL_BYTES;
431 mReq->ptr->token |= TD_STATUS_ACTIVE;
432 if (mReq->zptr) {
433 mReq->ptr->next = mReq->zdma;
434 } else {
435 mReq->ptr->next = TD_TERMINATE;
436 if (!mReq->req.no_interrupt)
437 mReq->ptr->token |= TD_IOC;
438 }
439 mReq->ptr->page[0] = mReq->req.dma;
440 for (i = 1; i < 5; i++)
441 mReq->ptr->page[i] =
442 (mReq->req.dma + i * CI13XXX_PAGE_SIZE) & ~TD_RESERVED_MASK;
443
444 if (!list_empty(&mEp->qh.queue)) {
445 struct ci13xxx_req *mReqPrev;
446 int n = hw_ep_bit(mEp->num, mEp->dir);
447 int tmp_stat;
448
449 mReqPrev = list_entry(mEp->qh.queue.prev,
450 struct ci13xxx_req, queue);
451 if (mReqPrev->zptr)
452 mReqPrev->zptr->next = mReq->dma & TD_ADDR_MASK;
453 else
454 mReqPrev->ptr->next = mReq->dma & TD_ADDR_MASK;
455 wmb();
456 if (hw_read(udc, OP_ENDPTPRIME, BIT(n)))
457 goto done;
458 do {
459 hw_write(udc, OP_USBCMD, USBCMD_ATDTW, USBCMD_ATDTW);
460 tmp_stat = hw_read(udc, OP_ENDPTSTAT, BIT(n));
461 } while (!hw_read(udc, OP_USBCMD, USBCMD_ATDTW));
462 hw_write(udc, OP_USBCMD, USBCMD_ATDTW, 0);
463 if (tmp_stat)
464 goto done;
465 }
466
467 /* QH configuration */
468 mEp->qh.ptr->td.next = mReq->dma; /* TERMINATE = 0 */
469 mEp->qh.ptr->td.token &= ~TD_STATUS; /* clear status */
470 mEp->qh.ptr->cap |= QH_ZLT;
471
472 wmb(); /* synchronize before ep prime */
473
474 ret = hw_ep_prime(udc, mEp->num, mEp->dir,
475 mEp->type == USB_ENDPOINT_XFER_CONTROL);
476done:
477 return ret;
478}
479
480/**
481 * _hardware_dequeue: handles a request at hardware level
482 * @gadget: gadget
483 * @mEp: endpoint
484 *
485 * This function returns an error code
486 */
487static int _hardware_dequeue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
488{
489 if (mReq->req.status != -EALREADY)
490 return -EINVAL;
491
492 if ((TD_STATUS_ACTIVE & mReq->ptr->token) != 0)
493 return -EBUSY;
494
495 if (mReq->zptr) {
496 if ((TD_STATUS_ACTIVE & mReq->zptr->token) != 0)
497 return -EBUSY;
498 dma_pool_free(mEp->td_pool, mReq->zptr, mReq->zdma);
499 mReq->zptr = NULL;
500 }
501
502 mReq->req.status = 0;
503
504 usb_gadget_unmap_request(&mEp->udc->gadget, &mReq->req, mEp->dir);
505
506 mReq->req.status = mReq->ptr->token & TD_STATUS;
507 if ((TD_STATUS_HALTED & mReq->req.status) != 0)
508 mReq->req.status = -1;
509 else if ((TD_STATUS_DT_ERR & mReq->req.status) != 0)
510 mReq->req.status = -1;
511 else if ((TD_STATUS_TR_ERR & mReq->req.status) != 0)
512 mReq->req.status = -1;
513
514 mReq->req.actual = mReq->ptr->token & TD_TOTAL_BYTES;
515 mReq->req.actual >>= ffs_nr(TD_TOTAL_BYTES);
516 mReq->req.actual = mReq->req.length - mReq->req.actual;
517 mReq->req.actual = mReq->req.status ? 0 : mReq->req.actual;
518
519 return mReq->req.actual;
520}
521
522/**
523 * _ep_nuke: dequeues all endpoint requests
524 * @mEp: endpoint
525 *
526 * This function returns an error code
527 * Caller must hold lock
528 */
529static int _ep_nuke(struct ci13xxx_ep *mEp)
530__releases(mEp->lock)
531__acquires(mEp->lock)
532{
533 if (mEp == NULL)
534 return -EINVAL;
535
536 hw_ep_flush(mEp->udc, mEp->num, mEp->dir);
537
538 while (!list_empty(&mEp->qh.queue)) {
539
540 /* pop oldest request */
541 struct ci13xxx_req *mReq = \
542 list_entry(mEp->qh.queue.next,
543 struct ci13xxx_req, queue);
544 list_del_init(&mReq->queue);
545 mReq->req.status = -ESHUTDOWN;
546
547 if (mReq->req.complete != NULL) {
548 spin_unlock(mEp->lock);
549 mReq->req.complete(&mEp->ep, &mReq->req);
550 spin_lock(mEp->lock);
551 }
552 }
553 return 0;
554}
555
556/**
557 * _gadget_stop_activity: stops all USB activity, flushes & disables all endpts
558 * @gadget: gadget
559 *
560 * This function returns an error code
561 */
562static int _gadget_stop_activity(struct usb_gadget *gadget)
563{
564 struct usb_ep *ep;
565 struct ci13xxx *udc = container_of(gadget, struct ci13xxx, gadget);
566 unsigned long flags;
567
568 spin_lock_irqsave(&udc->lock, flags);
569 udc->gadget.speed = USB_SPEED_UNKNOWN;
570 udc->remote_wakeup = 0;
571 udc->suspended = 0;
572 spin_unlock_irqrestore(&udc->lock, flags);
573
574 /* flush all endpoints */
575 gadget_for_each_ep(ep, gadget) {
576 usb_ep_fifo_flush(ep);
577 }
578 usb_ep_fifo_flush(&udc->ep0out->ep);
579 usb_ep_fifo_flush(&udc->ep0in->ep);
580
581 if (udc->driver)
582 udc->driver->disconnect(gadget);
583
584 /* make sure to disable all endpoints */
585 gadget_for_each_ep(ep, gadget) {
586 usb_ep_disable(ep);
587 }
588
589 if (udc->status != NULL) {
590 usb_ep_free_request(&udc->ep0in->ep, udc->status);
591 udc->status = NULL;
592 }
593
594 return 0;
595}
596
597/******************************************************************************
598 * ISR block
599 *****************************************************************************/
600/**
601 * isr_reset_handler: USB reset interrupt handler
602 * @udc: UDC device
603 *
604 * This function resets USB engine after a bus reset occurred
605 */
606static void isr_reset_handler(struct ci13xxx *udc)
607__releases(udc->lock)
608__acquires(udc->lock)
609{
610 int retval;
611
612 dbg_event(0xFF, "BUS RST", 0);
613
614 spin_unlock(&udc->lock);
615 retval = _gadget_stop_activity(&udc->gadget);
616 if (retval)
617 goto done;
618
619 retval = hw_usb_reset(udc);
620 if (retval)
621 goto done;
622
623 udc->status = usb_ep_alloc_request(&udc->ep0in->ep, GFP_ATOMIC);
624 if (udc->status == NULL)
625 retval = -ENOMEM;
626
627done:
628 spin_lock(&udc->lock);
629
630 if (retval)
631 dev_err(udc->dev, "error: %i\n", retval);
632}
633
634/**
635 * isr_get_status_complete: get_status request complete function
636 * @ep: endpoint
637 * @req: request handled
638 *
639 * Caller must release lock
640 */
641static void isr_get_status_complete(struct usb_ep *ep, struct usb_request *req)
642{
643 if (ep == NULL || req == NULL)
644 return;
645
646 kfree(req->buf);
647 usb_ep_free_request(ep, req);
648}
649
650/**
651 * isr_get_status_response: get_status request response
652 * @udc: udc struct
653 * @setup: setup request packet
654 *
655 * This function returns an error code
656 */
657static int isr_get_status_response(struct ci13xxx *udc,
658 struct usb_ctrlrequest *setup)
659__releases(mEp->lock)
660__acquires(mEp->lock)
661{
662 struct ci13xxx_ep *mEp = udc->ep0in;
663 struct usb_request *req = NULL;
664 gfp_t gfp_flags = GFP_ATOMIC;
665 int dir, num, retval;
666
667 if (mEp == NULL || setup == NULL)
668 return -EINVAL;
669
670 spin_unlock(mEp->lock);
671 req = usb_ep_alloc_request(&mEp->ep, gfp_flags);
672 spin_lock(mEp->lock);
673 if (req == NULL)
674 return -ENOMEM;
675
676 req->complete = isr_get_status_complete;
677 req->length = 2;
678 req->buf = kzalloc(req->length, gfp_flags);
679 if (req->buf == NULL) {
680 retval = -ENOMEM;
681 goto err_free_req;
682 }
683
684 if ((setup->bRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE) {
685 /* Assume that device is bus powered for now. */
686 *(u16 *)req->buf = udc->remote_wakeup << 1;
687 retval = 0;
688 } else if ((setup->bRequestType & USB_RECIP_MASK) \
689 == USB_RECIP_ENDPOINT) {
690 dir = (le16_to_cpu(setup->wIndex) & USB_ENDPOINT_DIR_MASK) ?
691 TX : RX;
692 num = le16_to_cpu(setup->wIndex) & USB_ENDPOINT_NUMBER_MASK;
693 *(u16 *)req->buf = hw_ep_get_halt(udc, num, dir);
694 }
695 /* else do nothing; reserved for future use */
696
697 spin_unlock(mEp->lock);
698 retval = usb_ep_queue(&mEp->ep, req, gfp_flags);
699 spin_lock(mEp->lock);
700 if (retval)
701 goto err_free_buf;
702
703 return 0;
704
705 err_free_buf:
706 kfree(req->buf);
707 err_free_req:
708 spin_unlock(mEp->lock);
709 usb_ep_free_request(&mEp->ep, req);
710 spin_lock(mEp->lock);
711 return retval;
712}
713
714/**
715 * isr_setup_status_complete: setup_status request complete function
716 * @ep: endpoint
717 * @req: request handled
718 *
719 * Caller must release lock. Put the port in test mode if test mode
720 * feature is selected.
721 */
722static void
723isr_setup_status_complete(struct usb_ep *ep, struct usb_request *req)
724{
725 struct ci13xxx *udc = req->context;
726 unsigned long flags;
727
728 if (udc->setaddr) {
729 hw_usb_set_address(udc, udc->address);
730 udc->setaddr = false;
731 }
732
733 spin_lock_irqsave(&udc->lock, flags);
734 if (udc->test_mode)
735 hw_port_test_set(udc, udc->test_mode);
736 spin_unlock_irqrestore(&udc->lock, flags);
737}
738
739/**
740 * isr_setup_status_phase: queues the status phase of a setup transation
741 * @udc: udc struct
742 *
743 * This function returns an error code
744 */
745static int isr_setup_status_phase(struct ci13xxx *udc)
746__releases(mEp->lock)
747__acquires(mEp->lock)
748{
749 int retval;
750 struct ci13xxx_ep *mEp;
751
752 mEp = (udc->ep0_dir == TX) ? udc->ep0out : udc->ep0in;
753 udc->status->context = udc;
754 udc->status->complete = isr_setup_status_complete;
755
756 spin_unlock(mEp->lock);
757 retval = usb_ep_queue(&mEp->ep, udc->status, GFP_ATOMIC);
758 spin_lock(mEp->lock);
759
760 return retval;
761}
762
763/**
764 * isr_tr_complete_low: transaction complete low level handler
765 * @mEp: endpoint
766 *
767 * This function returns an error code
768 * Caller must hold lock
769 */
770static int isr_tr_complete_low(struct ci13xxx_ep *mEp)
771__releases(mEp->lock)
772__acquires(mEp->lock)
773{
774 struct ci13xxx_req *mReq, *mReqTemp;
775 struct ci13xxx_ep *mEpTemp = mEp;
776 int uninitialized_var(retval);
777
778 if (list_empty(&mEp->qh.queue))
779 return -EINVAL;
780
781 list_for_each_entry_safe(mReq, mReqTemp, &mEp->qh.queue,
782 queue) {
783 retval = _hardware_dequeue(mEp, mReq);
784 if (retval < 0)
785 break;
786 list_del_init(&mReq->queue);
787 dbg_done(_usb_addr(mEp), mReq->ptr->token, retval);
788 if (mReq->req.complete != NULL) {
789 spin_unlock(mEp->lock);
790 if ((mEp->type == USB_ENDPOINT_XFER_CONTROL) &&
791 mReq->req.length)
792 mEpTemp = mEp->udc->ep0in;
793 mReq->req.complete(&mEpTemp->ep, &mReq->req);
794 spin_lock(mEp->lock);
795 }
796 }
797
798 if (retval == -EBUSY)
799 retval = 0;
800 if (retval < 0)
801 dbg_event(_usb_addr(mEp), "DONE", retval);
802
803 return retval;
804}
805
806/**
807 * isr_tr_complete_handler: transaction complete interrupt handler
808 * @udc: UDC descriptor
809 *
810 * This function handles traffic events
811 */
812static void isr_tr_complete_handler(struct ci13xxx *udc)
813__releases(udc->lock)
814__acquires(udc->lock)
815{
816 unsigned i;
817 u8 tmode = 0;
818
819 for (i = 0; i < udc->hw_ep_max; i++) {
820 struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[i];
821 int type, num, dir, err = -EINVAL;
822 struct usb_ctrlrequest req;
823
824 if (mEp->ep.desc == NULL)
825 continue; /* not configured */
826
827 if (hw_test_and_clear_complete(udc, i)) {
828 err = isr_tr_complete_low(mEp);
829 if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
830 if (err > 0) /* needs status phase */
831 err = isr_setup_status_phase(udc);
832 if (err < 0) {
833 dbg_event(_usb_addr(mEp),
834 "ERROR", err);
835 spin_unlock(&udc->lock);
836 if (usb_ep_set_halt(&mEp->ep))
837 dev_err(udc->dev,
838 "error: ep_set_halt\n");
839 spin_lock(&udc->lock);
840 }
841 }
842 }
843
844 if (mEp->type != USB_ENDPOINT_XFER_CONTROL ||
845 !hw_test_and_clear_setup_status(udc, i))
846 continue;
847
848 if (i != 0) {
849 dev_warn(udc->dev, "ctrl traffic at endpoint %d\n", i);
850 continue;
851 }
852
853 /*
854 * Flush data and handshake transactions of previous
855 * setup packet.
856 */
857 _ep_nuke(udc->ep0out);
858 _ep_nuke(udc->ep0in);
859
860 /* read_setup_packet */
861 do {
862 hw_test_and_set_setup_guard(udc);
863 memcpy(&req, &mEp->qh.ptr->setup, sizeof(req));
864 } while (!hw_test_and_clear_setup_guard(udc));
865
866 type = req.bRequestType;
867
868 udc->ep0_dir = (type & USB_DIR_IN) ? TX : RX;
869
870 dbg_setup(_usb_addr(mEp), &req);
871
872 switch (req.bRequest) {
873 case USB_REQ_CLEAR_FEATURE:
874 if (type == (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
875 le16_to_cpu(req.wValue) ==
876 USB_ENDPOINT_HALT) {
877 if (req.wLength != 0)
878 break;
879 num = le16_to_cpu(req.wIndex);
880 dir = num & USB_ENDPOINT_DIR_MASK;
881 num &= USB_ENDPOINT_NUMBER_MASK;
882 if (dir) /* TX */
883 num += udc->hw_ep_max/2;
884 if (!udc->ci13xxx_ep[num].wedge) {
885 spin_unlock(&udc->lock);
886 err = usb_ep_clear_halt(
887 &udc->ci13xxx_ep[num].ep);
888 spin_lock(&udc->lock);
889 if (err)
890 break;
891 }
892 err = isr_setup_status_phase(udc);
893 } else if (type == (USB_DIR_OUT|USB_RECIP_DEVICE) &&
894 le16_to_cpu(req.wValue) ==
895 USB_DEVICE_REMOTE_WAKEUP) {
896 if (req.wLength != 0)
897 break;
898 udc->remote_wakeup = 0;
899 err = isr_setup_status_phase(udc);
900 } else {
901 goto delegate;
902 }
903 break;
904 case USB_REQ_GET_STATUS:
905 if (type != (USB_DIR_IN|USB_RECIP_DEVICE) &&
906 type != (USB_DIR_IN|USB_RECIP_ENDPOINT) &&
907 type != (USB_DIR_IN|USB_RECIP_INTERFACE))
908 goto delegate;
909 if (le16_to_cpu(req.wLength) != 2 ||
910 le16_to_cpu(req.wValue) != 0)
911 break;
912 err = isr_get_status_response(udc, &req);
913 break;
914 case USB_REQ_SET_ADDRESS:
915 if (type != (USB_DIR_OUT|USB_RECIP_DEVICE))
916 goto delegate;
917 if (le16_to_cpu(req.wLength) != 0 ||
918 le16_to_cpu(req.wIndex) != 0)
919 break;
920 udc->address = (u8)le16_to_cpu(req.wValue);
921 udc->setaddr = true;
922 err = isr_setup_status_phase(udc);
923 break;
924 case USB_REQ_SET_FEATURE:
925 if (type == (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
926 le16_to_cpu(req.wValue) ==
927 USB_ENDPOINT_HALT) {
928 if (req.wLength != 0)
929 break;
930 num = le16_to_cpu(req.wIndex);
931 dir = num & USB_ENDPOINT_DIR_MASK;
932 num &= USB_ENDPOINT_NUMBER_MASK;
933 if (dir) /* TX */
934 num += udc->hw_ep_max/2;
935
936 spin_unlock(&udc->lock);
937 err = usb_ep_set_halt(&udc->ci13xxx_ep[num].ep);
938 spin_lock(&udc->lock);
939 if (!err)
940 isr_setup_status_phase(udc);
941 } else if (type == (USB_DIR_OUT|USB_RECIP_DEVICE)) {
942 if (req.wLength != 0)
943 break;
944 switch (le16_to_cpu(req.wValue)) {
945 case USB_DEVICE_REMOTE_WAKEUP:
946 udc->remote_wakeup = 1;
947 err = isr_setup_status_phase(udc);
948 break;
949 case USB_DEVICE_TEST_MODE:
950 tmode = le16_to_cpu(req.wIndex) >> 8;
951 switch (tmode) {
952 case TEST_J:
953 case TEST_K:
954 case TEST_SE0_NAK:
955 case TEST_PACKET:
956 case TEST_FORCE_EN:
957 udc->test_mode = tmode;
958 err = isr_setup_status_phase(
959 udc);
960 break;
961 default:
962 break;
963 }
964 default:
965 goto delegate;
966 }
967 } else {
968 goto delegate;
969 }
970 break;
971 default:
972delegate:
973 if (req.wLength == 0) /* no data phase */
974 udc->ep0_dir = TX;
975
976 spin_unlock(&udc->lock);
977 err = udc->driver->setup(&udc->gadget, &req);
978 spin_lock(&udc->lock);
979 break;
980 }
981
982 if (err < 0) {
983 dbg_event(_usb_addr(mEp), "ERROR", err);
984
985 spin_unlock(&udc->lock);
986 if (usb_ep_set_halt(&mEp->ep))
987 dev_err(udc->dev, "error: ep_set_halt\n");
988 spin_lock(&udc->lock);
989 }
990 }
991}
992
993/******************************************************************************
994 * ENDPT block
995 *****************************************************************************/
996/**
997 * ep_enable: configure endpoint, making it usable
998 *
999 * Check usb_ep_enable() at "usb_gadget.h" for details
1000 */
1001static int ep_enable(struct usb_ep *ep,
1002 const struct usb_endpoint_descriptor *desc)
1003{
1004 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1005 int retval = 0;
1006 unsigned long flags;
1007
1008 if (ep == NULL || desc == NULL)
1009 return -EINVAL;
1010
1011 spin_lock_irqsave(mEp->lock, flags);
1012
1013 /* only internal SW should enable ctrl endpts */
1014
1015 mEp->ep.desc = desc;
1016
1017 if (!list_empty(&mEp->qh.queue))
1018 dev_warn(mEp->udc->dev, "enabling a non-empty endpoint!\n");
1019
1020 mEp->dir = usb_endpoint_dir_in(desc) ? TX : RX;
1021 mEp->num = usb_endpoint_num(desc);
1022 mEp->type = usb_endpoint_type(desc);
1023
1024 mEp->ep.maxpacket = usb_endpoint_maxp(desc);
1025
1026 dbg_event(_usb_addr(mEp), "ENABLE", 0);
1027
1028 mEp->qh.ptr->cap = 0;
1029
1030 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1031 mEp->qh.ptr->cap |= QH_IOS;
1032 else if (mEp->type == USB_ENDPOINT_XFER_ISOC)
1033 mEp->qh.ptr->cap &= ~QH_MULT;
1034 else
1035 mEp->qh.ptr->cap &= ~QH_ZLT;
1036
1037 mEp->qh.ptr->cap |=
1038 (mEp->ep.maxpacket << ffs_nr(QH_MAX_PKT)) & QH_MAX_PKT;
1039 mEp->qh.ptr->td.next |= TD_TERMINATE; /* needed? */
1040
1041 /*
1042 * Enable endpoints in the HW other than ep0 as ep0
1043 * is always enabled
1044 */
1045 if (mEp->num)
1046 retval |= hw_ep_enable(mEp->udc, mEp->num, mEp->dir, mEp->type);
1047
1048 spin_unlock_irqrestore(mEp->lock, flags);
1049 return retval;
1050}
1051
1052/**
1053 * ep_disable: endpoint is no longer usable
1054 *
1055 * Check usb_ep_disable() at "usb_gadget.h" for details
1056 */
1057static int ep_disable(struct usb_ep *ep)
1058{
1059 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1060 int direction, retval = 0;
1061 unsigned long flags;
1062
1063 if (ep == NULL)
1064 return -EINVAL;
1065 else if (mEp->ep.desc == NULL)
1066 return -EBUSY;
1067
1068 spin_lock_irqsave(mEp->lock, flags);
1069
1070 /* only internal SW should disable ctrl endpts */
1071
1072 direction = mEp->dir;
1073 do {
1074 dbg_event(_usb_addr(mEp), "DISABLE", 0);
1075
1076 retval |= _ep_nuke(mEp);
1077 retval |= hw_ep_disable(mEp->udc, mEp->num, mEp->dir);
1078
1079 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1080 mEp->dir = (mEp->dir == TX) ? RX : TX;
1081
1082 } while (mEp->dir != direction);
1083
1084 mEp->ep.desc = NULL;
1085
1086 spin_unlock_irqrestore(mEp->lock, flags);
1087 return retval;
1088}
1089
1090/**
1091 * ep_alloc_request: allocate a request object to use with this endpoint
1092 *
1093 * Check usb_ep_alloc_request() at "usb_gadget.h" for details
1094 */
1095static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
1096{
1097 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1098 struct ci13xxx_req *mReq = NULL;
1099
1100 if (ep == NULL)
1101 return NULL;
1102
1103 mReq = kzalloc(sizeof(struct ci13xxx_req), gfp_flags);
1104 if (mReq != NULL) {
1105 INIT_LIST_HEAD(&mReq->queue);
1106
1107 mReq->ptr = dma_pool_alloc(mEp->td_pool, gfp_flags,
1108 &mReq->dma);
1109 if (mReq->ptr == NULL) {
1110 kfree(mReq);
1111 mReq = NULL;
1112 }
1113 }
1114
1115 dbg_event(_usb_addr(mEp), "ALLOC", mReq == NULL);
1116
1117 return (mReq == NULL) ? NULL : &mReq->req;
1118}
1119
1120/**
1121 * ep_free_request: frees a request object
1122 *
1123 * Check usb_ep_free_request() at "usb_gadget.h" for details
1124 */
1125static void ep_free_request(struct usb_ep *ep, struct usb_request *req)
1126{
1127 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1128 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
1129 unsigned long flags;
1130
1131 if (ep == NULL || req == NULL) {
1132 return;
1133 } else if (!list_empty(&mReq->queue)) {
1134 dev_err(mEp->udc->dev, "freeing queued request\n");
1135 return;
1136 }
1137
1138 spin_lock_irqsave(mEp->lock, flags);
1139
1140 if (mReq->ptr)
1141 dma_pool_free(mEp->td_pool, mReq->ptr, mReq->dma);
1142 kfree(mReq);
1143
1144 dbg_event(_usb_addr(mEp), "FREE", 0);
1145
1146 spin_unlock_irqrestore(mEp->lock, flags);
1147}
1148
1149/**
1150 * ep_queue: queues (submits) an I/O request to an endpoint
1151 *
1152 * Check usb_ep_queue()* at usb_gadget.h" for details
1153 */
1154static int ep_queue(struct usb_ep *ep, struct usb_request *req,
1155 gfp_t __maybe_unused gfp_flags)
1156{
1157 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1158 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
1159 struct ci13xxx *udc = mEp->udc;
1160 int retval = 0;
1161 unsigned long flags;
1162
1163 if (ep == NULL || req == NULL || mEp->ep.desc == NULL)
1164 return -EINVAL;
1165
1166 spin_lock_irqsave(mEp->lock, flags);
1167
1168 if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
1169 if (req->length)
1170 mEp = (udc->ep0_dir == RX) ?
1171 udc->ep0out : udc->ep0in;
1172 if (!list_empty(&mEp->qh.queue)) {
1173 _ep_nuke(mEp);
1174 retval = -EOVERFLOW;
1175 dev_warn(mEp->udc->dev, "endpoint ctrl %X nuked\n",
1176 _usb_addr(mEp));
1177 }
1178 }
1179
1180 /* first nuke then test link, e.g. previous status has not sent */
1181 if (!list_empty(&mReq->queue)) {
1182 retval = -EBUSY;
1183 dev_err(mEp->udc->dev, "request already in queue\n");
1184 goto done;
1185 }
1186
1187 if (req->length > 4 * CI13XXX_PAGE_SIZE) {
1188 req->length = 4 * CI13XXX_PAGE_SIZE;
1189 retval = -EMSGSIZE;
1190 dev_warn(mEp->udc->dev, "request length truncated\n");
1191 }
1192
1193 dbg_queue(_usb_addr(mEp), req, retval);
1194
1195 /* push request */
1196 mReq->req.status = -EINPROGRESS;
1197 mReq->req.actual = 0;
1198
1199 retval = _hardware_enqueue(mEp, mReq);
1200
1201 if (retval == -EALREADY) {
1202 dbg_event(_usb_addr(mEp), "QUEUE", retval);
1203 retval = 0;
1204 }
1205 if (!retval)
1206 list_add_tail(&mReq->queue, &mEp->qh.queue);
1207
1208 done:
1209 spin_unlock_irqrestore(mEp->lock, flags);
1210 return retval;
1211}
1212
1213/**
1214 * ep_dequeue: dequeues (cancels, unlinks) an I/O request from an endpoint
1215 *
1216 * Check usb_ep_dequeue() at "usb_gadget.h" for details
1217 */
1218static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)
1219{
1220 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1221 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
1222 unsigned long flags;
1223
1224 if (ep == NULL || req == NULL || mReq->req.status != -EALREADY ||
1225 mEp->ep.desc == NULL || list_empty(&mReq->queue) ||
1226 list_empty(&mEp->qh.queue))
1227 return -EINVAL;
1228
1229 spin_lock_irqsave(mEp->lock, flags);
1230
1231 dbg_event(_usb_addr(mEp), "DEQUEUE", 0);
1232
1233 hw_ep_flush(mEp->udc, mEp->num, mEp->dir);
1234
1235 /* pop request */
1236 list_del_init(&mReq->queue);
1237
1238 usb_gadget_unmap_request(&mEp->udc->gadget, req, mEp->dir);
1239
1240 req->status = -ECONNRESET;
1241
1242 if (mReq->req.complete != NULL) {
1243 spin_unlock(mEp->lock);
1244 mReq->req.complete(&mEp->ep, &mReq->req);
1245 spin_lock(mEp->lock);
1246 }
1247
1248 spin_unlock_irqrestore(mEp->lock, flags);
1249 return 0;
1250}
1251
1252/**
1253 * ep_set_halt: sets the endpoint halt feature
1254 *
1255 * Check usb_ep_set_halt() at "usb_gadget.h" for details
1256 */
1257static int ep_set_halt(struct usb_ep *ep, int value)
1258{
1259 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1260 int direction, retval = 0;
1261 unsigned long flags;
1262
1263 if (ep == NULL || mEp->ep.desc == NULL)
1264 return -EINVAL;
1265
1266 spin_lock_irqsave(mEp->lock, flags);
1267
1268#ifndef STALL_IN
1269 /* g_file_storage MS compliant but g_zero fails chapter 9 compliance */
1270 if (value && mEp->type == USB_ENDPOINT_XFER_BULK && mEp->dir == TX &&
1271 !list_empty(&mEp->qh.queue)) {
1272 spin_unlock_irqrestore(mEp->lock, flags);
1273 return -EAGAIN;
1274 }
1275#endif
1276
1277 direction = mEp->dir;
1278 do {
1279 dbg_event(_usb_addr(mEp), "HALT", value);
1280 retval |= hw_ep_set_halt(mEp->udc, mEp->num, mEp->dir, value);
1281
1282 if (!value)
1283 mEp->wedge = 0;
1284
1285 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1286 mEp->dir = (mEp->dir == TX) ? RX : TX;
1287
1288 } while (mEp->dir != direction);
1289
1290 spin_unlock_irqrestore(mEp->lock, flags);
1291 return retval;
1292}
1293
1294/**
1295 * ep_set_wedge: sets the halt feature and ignores clear requests
1296 *
1297 * Check usb_ep_set_wedge() at "usb_gadget.h" for details
1298 */
1299static int ep_set_wedge(struct usb_ep *ep)
1300{
1301 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1302 unsigned long flags;
1303
1304 if (ep == NULL || mEp->ep.desc == NULL)
1305 return -EINVAL;
1306
1307 spin_lock_irqsave(mEp->lock, flags);
1308
1309 dbg_event(_usb_addr(mEp), "WEDGE", 0);
1310 mEp->wedge = 1;
1311
1312 spin_unlock_irqrestore(mEp->lock, flags);
1313
1314 return usb_ep_set_halt(ep);
1315}
1316
1317/**
1318 * ep_fifo_flush: flushes contents of a fifo
1319 *
1320 * Check usb_ep_fifo_flush() at "usb_gadget.h" for details
1321 */
1322static void ep_fifo_flush(struct usb_ep *ep)
1323{
1324 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1325 unsigned long flags;
1326
1327 if (ep == NULL) {
1328 dev_err(mEp->udc->dev, "%02X: -EINVAL\n", _usb_addr(mEp));
1329 return;
1330 }
1331
1332 spin_lock_irqsave(mEp->lock, flags);
1333
1334 dbg_event(_usb_addr(mEp), "FFLUSH", 0);
1335 hw_ep_flush(mEp->udc, mEp->num, mEp->dir);
1336
1337 spin_unlock_irqrestore(mEp->lock, flags);
1338}
1339
1340/**
1341 * Endpoint-specific part of the API to the USB controller hardware
1342 * Check "usb_gadget.h" for details
1343 */
1344static const struct usb_ep_ops usb_ep_ops = {
1345 .enable = ep_enable,
1346 .disable = ep_disable,
1347 .alloc_request = ep_alloc_request,
1348 .free_request = ep_free_request,
1349 .queue = ep_queue,
1350 .dequeue = ep_dequeue,
1351 .set_halt = ep_set_halt,
1352 .set_wedge = ep_set_wedge,
1353 .fifo_flush = ep_fifo_flush,
1354};
1355
1356/******************************************************************************
1357 * GADGET block
1358 *****************************************************************************/
1359static int ci13xxx_vbus_session(struct usb_gadget *_gadget, int is_active)
1360{
1361 struct ci13xxx *udc = container_of(_gadget, struct ci13xxx, gadget);
1362 unsigned long flags;
1363 int gadget_ready = 0;
1364
1365 if (!(udc->udc_driver->flags & CI13XXX_PULLUP_ON_VBUS))
1366 return -EOPNOTSUPP;
1367
1368 spin_lock_irqsave(&udc->lock, flags);
1369 udc->vbus_active = is_active;
1370 if (udc->driver)
1371 gadget_ready = 1;
1372 spin_unlock_irqrestore(&udc->lock, flags);
1373
1374 if (gadget_ready) {
1375 if (is_active) {
1376 pm_runtime_get_sync(&_gadget->dev);
1377 hw_device_reset(udc, USBMODE_CM_DC);
1378 hw_device_state(udc, udc->ep0out->qh.dma);
1379 } else {
1380 hw_device_state(udc, 0);
1381 if (udc->udc_driver->notify_event)
1382 udc->udc_driver->notify_event(udc,
1383 CI13XXX_CONTROLLER_STOPPED_EVENT);
1384 _gadget_stop_activity(&udc->gadget);
1385 pm_runtime_put_sync(&_gadget->dev);
1386 }
1387 }
1388
1389 return 0;
1390}
1391
1392static int ci13xxx_wakeup(struct usb_gadget *_gadget)
1393{
1394 struct ci13xxx *udc = container_of(_gadget, struct ci13xxx, gadget);
1395 unsigned long flags;
1396 int ret = 0;
1397
1398 spin_lock_irqsave(&udc->lock, flags);
1399 if (!udc->remote_wakeup) {
1400 ret = -EOPNOTSUPP;
1401 goto out;
1402 }
1403 if (!hw_read(udc, OP_PORTSC, PORTSC_SUSP)) {
1404 ret = -EINVAL;
1405 goto out;
1406 }
1407 hw_write(udc, OP_PORTSC, PORTSC_FPR, PORTSC_FPR);
1408out:
1409 spin_unlock_irqrestore(&udc->lock, flags);
1410 return ret;
1411}
1412
1413static int ci13xxx_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1414{
1415 struct ci13xxx *udc = container_of(_gadget, struct ci13xxx, gadget);
1416
1417 if (udc->transceiver)
1418 return usb_phy_set_power(udc->transceiver, mA);
1419 return -ENOTSUPP;
1420}
1421
1422static int ci13xxx_start(struct usb_gadget *gadget,
1423 struct usb_gadget_driver *driver);
1424static int ci13xxx_stop(struct usb_gadget *gadget,
1425 struct usb_gadget_driver *driver);
1426/**
1427 * Device operations part of the API to the USB controller hardware,
1428 * which don't involve endpoints (or i/o)
1429 * Check "usb_gadget.h" for details
1430 */
1431static const struct usb_gadget_ops usb_gadget_ops = {
1432 .vbus_session = ci13xxx_vbus_session,
1433 .wakeup = ci13xxx_wakeup,
1434 .vbus_draw = ci13xxx_vbus_draw,
1435 .udc_start = ci13xxx_start,
1436 .udc_stop = ci13xxx_stop,
1437};
1438
1439static int init_eps(struct ci13xxx *udc)
1440{
1441 int retval = 0, i, j;
1442
1443 for (i = 0; i < udc->hw_ep_max/2; i++)
1444 for (j = RX; j <= TX; j++) {
1445 int k = i + j * udc->hw_ep_max/2;
1446 struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[k];
1447
1448 scnprintf(mEp->name, sizeof(mEp->name), "ep%i%s", i,
1449 (j == TX) ? "in" : "out");
1450
1451 mEp->udc = udc;
1452 mEp->lock = &udc->lock;
1453 mEp->td_pool = udc->td_pool;
1454
1455 mEp->ep.name = mEp->name;
1456 mEp->ep.ops = &usb_ep_ops;
1457 mEp->ep.maxpacket = CTRL_PAYLOAD_MAX;
1458
1459 INIT_LIST_HEAD(&mEp->qh.queue);
1460 mEp->qh.ptr = dma_pool_alloc(udc->qh_pool, GFP_KERNEL,
1461 &mEp->qh.dma);
1462 if (mEp->qh.ptr == NULL)
1463 retval = -ENOMEM;
1464 else
1465 memset(mEp->qh.ptr, 0, sizeof(*mEp->qh.ptr));
1466
1467 /*
1468 * set up shorthands for ep0 out and in endpoints,
1469 * don't add to gadget's ep_list
1470 */
1471 if (i == 0) {
1472 if (j == RX)
1473 udc->ep0out = mEp;
1474 else
1475 udc->ep0in = mEp;
1476
1477 continue;
1478 }
1479
1480 list_add_tail(&mEp->ep.ep_list, &udc->gadget.ep_list);
1481 }
1482
1483 return retval;
1484}
1485
1486/**
1487 * ci13xxx_start: register a gadget driver
1488 * @gadget: our gadget
1489 * @driver: the driver being registered
1490 *
1491 * Interrupts are enabled here.
1492 */
1493static int ci13xxx_start(struct usb_gadget *gadget,
1494 struct usb_gadget_driver *driver)
1495{
1496 struct ci13xxx *udc = container_of(gadget, struct ci13xxx, gadget);
1497 unsigned long flags;
1498 int retval = -ENOMEM;
1499
1500 if (driver->disconnect == NULL)
1501 return -EINVAL;
1502
1503
1504 udc->ep0out->ep.desc = &ctrl_endpt_out_desc;
1505 retval = usb_ep_enable(&udc->ep0out->ep);
1506 if (retval)
1507 return retval;
1508
1509 udc->ep0in->ep.desc = &ctrl_endpt_in_desc;
1510 retval = usb_ep_enable(&udc->ep0in->ep);
1511 if (retval)
1512 return retval;
1513 spin_lock_irqsave(&udc->lock, flags);
1514
1515 udc->driver = driver;
1516 pm_runtime_get_sync(&udc->gadget.dev);
1517 if (udc->udc_driver->flags & CI13XXX_PULLUP_ON_VBUS) {
1518 if (udc->vbus_active) {
1519 if (udc->udc_driver->flags & CI13XXX_REGS_SHARED)
1520 hw_device_reset(udc, USBMODE_CM_DC);
1521 } else {
1522 pm_runtime_put_sync(&udc->gadget.dev);
1523 goto done;
1524 }
1525 }
1526
1527 retval = hw_device_state(udc, udc->ep0out->qh.dma);
1528 if (retval)
1529 pm_runtime_put_sync(&udc->gadget.dev);
1530
1531 done:
1532 spin_unlock_irqrestore(&udc->lock, flags);
1533 return retval;
1534}
1535
1536/**
1537 * ci13xxx_stop: unregister a gadget driver
1538 */
1539static int ci13xxx_stop(struct usb_gadget *gadget,
1540 struct usb_gadget_driver *driver)
1541{
1542 struct ci13xxx *udc = container_of(gadget, struct ci13xxx, gadget);
1543 unsigned long flags;
1544
1545 spin_lock_irqsave(&udc->lock, flags);
1546
1547 if (!(udc->udc_driver->flags & CI13XXX_PULLUP_ON_VBUS) ||
1548 udc->vbus_active) {
1549 hw_device_state(udc, 0);
1550 if (udc->udc_driver->notify_event)
1551 udc->udc_driver->notify_event(udc,
1552 CI13XXX_CONTROLLER_STOPPED_EVENT);
1553 udc->driver = NULL;
1554 spin_unlock_irqrestore(&udc->lock, flags);
1555 _gadget_stop_activity(&udc->gadget);
1556 spin_lock_irqsave(&udc->lock, flags);
1557 pm_runtime_put(&udc->gadget.dev);
1558 }
1559
1560 spin_unlock_irqrestore(&udc->lock, flags);
1561
1562 return 0;
1563}
1564
1565/******************************************************************************
1566 * BUS block
1567 *****************************************************************************/
1568/**
1569 * udc_irq: udc interrupt handler
1570 *
1571 * This function returns IRQ_HANDLED if the IRQ has been handled
1572 * It locks access to registers
1573 */
1574static irqreturn_t udc_irq(struct ci13xxx *udc)
1575{
1576 irqreturn_t retval;
1577 u32 intr;
1578
1579 if (udc == NULL)
1580 return IRQ_HANDLED;
1581
1582 spin_lock(&udc->lock);
1583
1584 if (udc->udc_driver->flags & CI13XXX_REGS_SHARED) {
1585 if (hw_read(udc, OP_USBMODE, USBMODE_CM) !=
1586 USBMODE_CM_DC) {
1587 spin_unlock(&udc->lock);
1588 return IRQ_NONE;
1589 }
1590 }
1591 intr = hw_test_and_clear_intr_active(udc);
1592 dbg_interrupt(intr);
1593
1594 if (intr) {
1595 /* order defines priority - do NOT change it */
1596 if (USBi_URI & intr)
1597 isr_reset_handler(udc);
1598
1599 if (USBi_PCI & intr) {
1600 udc->gadget.speed = hw_port_is_high_speed(udc) ?
1601 USB_SPEED_HIGH : USB_SPEED_FULL;
1602 if (udc->suspended && udc->driver->resume) {
1603 spin_unlock(&udc->lock);
1604 udc->driver->resume(&udc->gadget);
1605 spin_lock(&udc->lock);
1606 udc->suspended = 0;
1607 }
1608 }
1609
1610 if (USBi_UI & intr)
1611 isr_tr_complete_handler(udc);
1612
1613 if (USBi_SLI & intr) {
1614 if (udc->gadget.speed != USB_SPEED_UNKNOWN &&
1615 udc->driver->suspend) {
1616 udc->suspended = 1;
1617 spin_unlock(&udc->lock);
1618 udc->driver->suspend(&udc->gadget);
1619 spin_lock(&udc->lock);
1620 }
1621 }
1622 retval = IRQ_HANDLED;
1623 } else {
1624 retval = IRQ_NONE;
1625 }
1626 spin_unlock(&udc->lock);
1627
1628 return retval;
1629}
1630
1631/**
1632 * udc_release: driver release function
1633 * @dev: device
1634 *
1635 * Currently does nothing
1636 */
1637static void udc_release(struct device *dev)
1638{
1639}
1640
1641/**
1642 * udc_start: initialize gadget role
1643 * @udc: chipidea controller
1644 */
1645static int udc_start(struct ci13xxx *udc)
1646{
1647 struct device *dev = udc->dev;
1648 int retval = 0;
1649
1650 if (!udc)
1651 return -EINVAL;
1652
1653 spin_lock_init(&udc->lock);
1654
1655 udc->gadget.ops = &usb_gadget_ops;
1656 udc->gadget.speed = USB_SPEED_UNKNOWN;
1657 udc->gadget.max_speed = USB_SPEED_HIGH;
1658 udc->gadget.is_otg = 0;
1659 udc->gadget.name = udc->udc_driver->name;
1660
1661 INIT_LIST_HEAD(&udc->gadget.ep_list);
1662
1663 dev_set_name(&udc->gadget.dev, "gadget");
1664 udc->gadget.dev.dma_mask = dev->dma_mask;
1665 udc->gadget.dev.coherent_dma_mask = dev->coherent_dma_mask;
1666 udc->gadget.dev.parent = dev;
1667 udc->gadget.dev.release = udc_release;
1668
1669 /* alloc resources */
1670 udc->qh_pool = dma_pool_create("ci13xxx_qh", dev,
1671 sizeof(struct ci13xxx_qh),
1672 64, CI13XXX_PAGE_SIZE);
1673 if (udc->qh_pool == NULL)
1674 return -ENOMEM;
1675
1676 udc->td_pool = dma_pool_create("ci13xxx_td", dev,
1677 sizeof(struct ci13xxx_td),
1678 64, CI13XXX_PAGE_SIZE);
1679 if (udc->td_pool == NULL) {
1680 retval = -ENOMEM;
1681 goto free_qh_pool;
1682 }
1683
1684 retval = init_eps(udc);
1685 if (retval)
1686 goto free_pools;
1687
1688 udc->gadget.ep0 = &udc->ep0in->ep;
1689
1690 udc->transceiver = usb_get_transceiver();
1691
1692 if (udc->udc_driver->flags & CI13XXX_REQUIRE_TRANSCEIVER) {
1693 if (udc->transceiver == NULL) {
1694 retval = -ENODEV;
1695 goto free_pools;
1696 }
1697 }
1698
1699 if (!(udc->udc_driver->flags & CI13XXX_REGS_SHARED)) {
1700 retval = hw_device_reset(udc, USBMODE_CM_DC);
1701 if (retval)
1702 goto put_transceiver;
1703 }
1704
1705 retval = device_register(&udc->gadget.dev);
1706 if (retval) {
1707 put_device(&udc->gadget.dev);
1708 goto put_transceiver;
1709 }
1710
1711 retval = dbg_create_files(&udc->gadget.dev);
1712 if (retval)
1713 goto unreg_device;
1714
1715 if (udc->transceiver) {
1716 retval = otg_set_peripheral(udc->transceiver->otg,
1717 &udc->gadget);
1718 if (retval)
1719 goto remove_dbg;
1720 }
1721
1722 retval = usb_add_gadget_udc(dev, &udc->gadget);
1723 if (retval)
1724 goto remove_trans;
1725
1726 pm_runtime_no_callbacks(&udc->gadget.dev);
1727 pm_runtime_enable(&udc->gadget.dev);
1728
1729 return retval;
1730
1731remove_trans:
1732 if (udc->transceiver) {
1733 otg_set_peripheral(udc->transceiver->otg, &udc->gadget);
1734 usb_put_transceiver(udc->transceiver);
1735 }
1736
1737 dev_err(dev, "error = %i\n", retval);
1738remove_dbg:
1739 dbg_remove_files(&udc->gadget.dev);
1740unreg_device:
1741 device_unregister(&udc->gadget.dev);
1742put_transceiver:
1743 if (udc->transceiver)
1744 usb_put_transceiver(udc->transceiver);
1745free_pools:
1746 dma_pool_destroy(udc->td_pool);
1747free_qh_pool:
1748 dma_pool_destroy(udc->qh_pool);
1749 return retval;
1750}
1751
1752/**
1753 * udc_remove: parent remove must call this to remove UDC
1754 *
1755 * No interrupts active, the IRQ has been released
1756 */
1757static void udc_stop(struct ci13xxx *udc)
1758{
1759 int i;
1760
1761 if (udc == NULL)
1762 return;
1763
1764 usb_del_gadget_udc(&udc->gadget);
1765
1766 for (i = 0; i < udc->hw_ep_max; i++) {
1767 struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[i];
1768
1769 dma_pool_free(udc->qh_pool, mEp->qh.ptr, mEp->qh.dma);
1770 }
1771
1772 dma_pool_destroy(udc->td_pool);
1773 dma_pool_destroy(udc->qh_pool);
1774
1775 if (udc->transceiver) {
1776 otg_set_peripheral(udc->transceiver->otg, NULL);
1777 usb_put_transceiver(udc->transceiver);
1778 }
1779 dbg_remove_files(&udc->gadget.dev);
1780 device_unregister(&udc->gadget.dev);
1781 /* my kobject is dynamic, I swear! */
1782 memset(&udc->gadget, 0, sizeof(udc->gadget));
1783}
1784
1785/**
1786 * ci_hdrc_gadget_init - initialize device related bits
1787 * ci: the controller
1788 *
1789 * This function enables the gadget role, if the device is "device capable".
1790 */
1791int ci_hdrc_gadget_init(struct ci13xxx *ci)
1792{
1793 struct ci_role_driver *rdrv;
1794
1795 if (!hw_read(ci, CAP_DCCPARAMS, DCCPARAMS_DC))
1796 return -ENXIO;
1797
1798 rdrv = devm_kzalloc(ci->dev, sizeof(struct ci_role_driver), GFP_KERNEL);
1799 if (!rdrv)
1800 return -ENOMEM;
1801
1802 rdrv->start = udc_start;
1803 rdrv->stop = udc_stop;
1804 rdrv->irq = udc_irq;
1805 rdrv->name = "gadget";
1806 ci->roles[CI_ROLE_GADGET] = rdrv;
1807
1808 return 0;
1809}
diff --git a/drivers/usb/chipidea/udc.h b/drivers/usb/chipidea/udc.h
new file mode 100644
index 000000000000..4ff2384d7ca8
--- /dev/null
+++ b/drivers/usb/chipidea/udc.h
@@ -0,0 +1,93 @@
1/*
2 * udc.h - ChipIdea UDC structures
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#ifndef __DRIVERS_USB_CHIPIDEA_UDC_H
14#define __DRIVERS_USB_CHIPIDEA_UDC_H
15
16#include <linux/list.h>
17
18#define CTRL_PAYLOAD_MAX 64
19#define RX 0 /* similar to USB_DIR_OUT but can be used as an index */
20#define TX 1 /* similar to USB_DIR_IN but can be used as an index */
21
22/* DMA layout of transfer descriptors */
23struct ci13xxx_td {
24 /* 0 */
25 u32 next;
26#define TD_TERMINATE BIT(0)
27#define TD_ADDR_MASK (0xFFFFFFEUL << 5)
28 /* 1 */
29 u32 token;
30#define TD_STATUS (0x00FFUL << 0)
31#define TD_STATUS_TR_ERR BIT(3)
32#define TD_STATUS_DT_ERR BIT(5)
33#define TD_STATUS_HALTED BIT(6)
34#define TD_STATUS_ACTIVE BIT(7)
35#define TD_MULTO (0x0003UL << 10)
36#define TD_IOC BIT(15)
37#define TD_TOTAL_BYTES (0x7FFFUL << 16)
38 /* 2 */
39 u32 page[5];
40#define TD_CURR_OFFSET (0x0FFFUL << 0)
41#define TD_FRAME_NUM (0x07FFUL << 0)
42#define TD_RESERVED_MASK (0x0FFFUL << 0)
43} __attribute__ ((packed));
44
45/* DMA layout of queue heads */
46struct ci13xxx_qh {
47 /* 0 */
48 u32 cap;
49#define QH_IOS BIT(15)
50#define QH_MAX_PKT (0x07FFUL << 16)
51#define QH_ZLT BIT(29)
52#define QH_MULT (0x0003UL << 30)
53 /* 1 */
54 u32 curr;
55 /* 2 - 8 */
56 struct ci13xxx_td td;
57 /* 9 */
58 u32 RESERVED;
59 struct usb_ctrlrequest setup;
60} __attribute__ ((packed));
61
62/**
63 * struct ci13xxx_req - usb request representation
64 * @req: request structure for gadget drivers
65 * @queue: link to QH list
66 * @ptr: transfer descriptor for this request
67 * @dma: dma address for the transfer descriptor
68 * @zptr: transfer descriptor for the zero packet
69 * @zdma: dma address of the zero packet's transfer descriptor
70 */
71struct ci13xxx_req {
72 struct usb_request req;
73 struct list_head queue;
74 struct ci13xxx_td *ptr;
75 dma_addr_t dma;
76 struct ci13xxx_td *zptr;
77 dma_addr_t zdma;
78};
79
80#ifdef CONFIG_USB_CHIPIDEA_UDC
81
82int ci_hdrc_gadget_init(struct ci13xxx *ci);
83
84#else
85
86static inline int ci_hdrc_gadget_init(struct ci13xxx *ci)
87{
88 return -ENXIO;
89}
90
91#endif
92
93#endif /* __DRIVERS_USB_CHIPIDEA_UDC_H */
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index b32ccb461019..f2a120eea9d4 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -1664,6 +1664,7 @@ static struct usb_driver acm_driver = {
1664#ifdef CONFIG_PM 1664#ifdef CONFIG_PM
1665 .supports_autosuspend = 1, 1665 .supports_autosuspend = 1,
1666#endif 1666#endif
1667 .disable_hub_initiated_lpm = 1,
1667}; 1668};
1668 1669
1669/* 1670/*
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
index 0bb2b3248dad..ea8b304f0e85 100644
--- a/drivers/usb/class/cdc-wdm.c
+++ b/drivers/usb/class/cdc-wdm.c
@@ -309,9 +309,6 @@ static void free_urbs(struct wdm_device *desc)
309 309
310static void cleanup(struct wdm_device *desc) 310static void cleanup(struct wdm_device *desc)
311{ 311{
312 spin_lock(&wdm_device_list_lock);
313 list_del(&desc->device_list);
314 spin_unlock(&wdm_device_list_lock);
315 kfree(desc->sbuf); 312 kfree(desc->sbuf);
316 kfree(desc->inbuf); 313 kfree(desc->inbuf);
317 kfree(desc->orq); 314 kfree(desc->orq);
@@ -369,6 +366,7 @@ static ssize_t wdm_write
369 r = usb_autopm_get_interface(desc->intf); 366 r = usb_autopm_get_interface(desc->intf);
370 if (r < 0) { 367 if (r < 0) {
371 kfree(buf); 368 kfree(buf);
369 rv = usb_translate_errors(r);
372 goto outnp; 370 goto outnp;
373 } 371 }
374 372
@@ -384,6 +382,7 @@ static ssize_t wdm_write
384 382
385 if (r < 0) { 383 if (r < 0) {
386 kfree(buf); 384 kfree(buf);
385 rv = r;
387 goto out; 386 goto out;
388 } 387 }
389 388
@@ -415,6 +414,7 @@ static ssize_t wdm_write
415 desc->outbuf = NULL; 414 desc->outbuf = NULL;
416 clear_bit(WDM_IN_USE, &desc->flags); 415 clear_bit(WDM_IN_USE, &desc->flags);
417 dev_err(&desc->intf->dev, "Tx URB error: %d\n", rv); 416 dev_err(&desc->intf->dev, "Tx URB error: %d\n", rv);
417 rv = usb_translate_errors(rv);
418 } else { 418 } else {
419 dev_dbg(&desc->intf->dev, "Tx URB has been submitted index=%d", 419 dev_dbg(&desc->intf->dev, "Tx URB has been submitted index=%d",
420 req->wIndex); 420 req->wIndex);
@@ -530,11 +530,13 @@ static int wdm_flush(struct file *file, fl_owner_t id)
530 struct wdm_device *desc = file->private_data; 530 struct wdm_device *desc = file->private_data;
531 531
532 wait_event(desc->wait, !test_bit(WDM_IN_USE, &desc->flags)); 532 wait_event(desc->wait, !test_bit(WDM_IN_USE, &desc->flags));
533 if (desc->werr < 0) 533
534 /* cannot dereference desc->intf if WDM_DISCONNECTING */
535 if (desc->werr < 0 && !test_bit(WDM_DISCONNECTING, &desc->flags))
534 dev_err(&desc->intf->dev, "Error in flush path: %d\n", 536 dev_err(&desc->intf->dev, "Error in flush path: %d\n",
535 desc->werr); 537 desc->werr);
536 538
537 return desc->werr; 539 return usb_translate_errors(desc->werr);
538} 540}
539 541
540static unsigned int wdm_poll(struct file *file, struct poll_table_struct *wait) 542static unsigned int wdm_poll(struct file *file, struct poll_table_struct *wait)
@@ -545,7 +547,7 @@ static unsigned int wdm_poll(struct file *file, struct poll_table_struct *wait)
545 547
546 spin_lock_irqsave(&desc->iuspin, flags); 548 spin_lock_irqsave(&desc->iuspin, flags);
547 if (test_bit(WDM_DISCONNECTING, &desc->flags)) { 549 if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
548 mask = POLLERR; 550 mask = POLLHUP | POLLERR;
549 spin_unlock_irqrestore(&desc->iuspin, flags); 551 spin_unlock_irqrestore(&desc->iuspin, flags);
550 goto desc_out; 552 goto desc_out;
551 } 553 }
@@ -596,6 +598,7 @@ static int wdm_open(struct inode *inode, struct file *file)
596 desc->count--; 598 desc->count--;
597 dev_err(&desc->intf->dev, 599 dev_err(&desc->intf->dev,
598 "Error submitting int urb - %d\n", rv); 600 "Error submitting int urb - %d\n", rv);
601 rv = usb_translate_errors(rv);
599 } 602 }
600 } else { 603 } else {
601 rv = 0; 604 rv = 0;
@@ -621,10 +624,15 @@ static int wdm_release(struct inode *inode, struct file *file)
621 mutex_unlock(&desc->wlock); 624 mutex_unlock(&desc->wlock);
622 625
623 if (!desc->count) { 626 if (!desc->count) {
624 dev_dbg(&desc->intf->dev, "wdm_release: cleanup"); 627 if (!test_bit(WDM_DISCONNECTING, &desc->flags)) {
625 kill_urbs(desc); 628 dev_dbg(&desc->intf->dev, "wdm_release: cleanup");
626 if (!test_bit(WDM_DISCONNECTING, &desc->flags)) 629 kill_urbs(desc);
627 desc->manage_power(desc->intf, 0); 630 desc->manage_power(desc->intf, 0);
631 } else {
632 /* must avoid dev_printk here as desc->intf is invalid */
633 pr_debug(KBUILD_MODNAME " %s: device gone - cleaning up\n", __func__);
634 cleanup(desc);
635 }
628 } 636 }
629 mutex_unlock(&wdm_mutex); 637 mutex_unlock(&wdm_mutex);
630 return 0; 638 return 0;
@@ -771,6 +779,9 @@ static int wdm_create(struct usb_interface *intf, struct usb_endpoint_descriptor
771out: 779out:
772 return rv; 780 return rv;
773err: 781err:
782 spin_lock(&wdm_device_list_lock);
783 list_del(&desc->device_list);
784 spin_unlock(&wdm_device_list_lock);
774 cleanup(desc); 785 cleanup(desc);
775 return rv; 786 return rv;
776} 787}
@@ -896,8 +907,16 @@ static void wdm_disconnect(struct usb_interface *intf)
896 cancel_work_sync(&desc->rxwork); 907 cancel_work_sync(&desc->rxwork);
897 mutex_unlock(&desc->wlock); 908 mutex_unlock(&desc->wlock);
898 mutex_unlock(&desc->rlock); 909 mutex_unlock(&desc->rlock);
910
911 /* the desc->intf pointer used as list key is now invalid */
912 spin_lock(&wdm_device_list_lock);
913 list_del(&desc->device_list);
914 spin_unlock(&wdm_device_list_lock);
915
899 if (!desc->count) 916 if (!desc->count)
900 cleanup(desc); 917 cleanup(desc);
918 else
919 dev_dbg(&intf->dev, "%s: %d open files - postponing cleanup\n", __func__, desc->count);
901 mutex_unlock(&wdm_mutex); 920 mutex_unlock(&wdm_mutex);
902} 921}
903 922
@@ -1015,6 +1034,7 @@ static struct usb_driver wdm_driver = {
1015 .post_reset = wdm_post_reset, 1034 .post_reset = wdm_post_reset,
1016 .id_table = wdm_ids, 1035 .id_table = wdm_ids,
1017 .supports_autosuspend = 1, 1036 .supports_autosuspend = 1,
1037 .disable_hub_initiated_lpm = 1,
1018}; 1038};
1019 1039
1020module_usb_driver(wdm_driver); 1040module_usb_driver(wdm_driver);
diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
index a68c1a63dc65..d4c47d5d7625 100644
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -172,27 +172,31 @@ struct usblp {
172#ifdef DEBUG 172#ifdef DEBUG
173static void usblp_dump(struct usblp *usblp) 173static void usblp_dump(struct usblp *usblp)
174{ 174{
175 struct device *dev = &usblp->intf->dev;
175 int p; 176 int p;
176 177
177 dbg("usblp=0x%p", usblp); 178 dev_dbg(dev, "usblp=0x%p\n", usblp);
178 dbg("dev=0x%p", usblp->dev); 179 dev_dbg(dev, "dev=0x%p\n", usblp->dev);
179 dbg("present=%d", usblp->present); 180 dev_dbg(dev, "present=%d\n", usblp->present);
180 dbg("readbuf=0x%p", usblp->readbuf); 181 dev_dbg(dev, "readbuf=0x%p\n", usblp->readbuf);
181 dbg("readcount=%d", usblp->readcount); 182 dev_dbg(dev, "readcount=%d\n", usblp->readcount);
182 dbg("ifnum=%d", usblp->ifnum); 183 dev_dbg(dev, "ifnum=%d\n", usblp->ifnum);
183 for (p = USBLP_FIRST_PROTOCOL; p <= USBLP_LAST_PROTOCOL; p++) { 184 for (p = USBLP_FIRST_PROTOCOL; p <= USBLP_LAST_PROTOCOL; p++) {
184 dbg("protocol[%d].alt_setting=%d", p, usblp->protocol[p].alt_setting); 185 dev_dbg(dev, "protocol[%d].alt_setting=%d\n", p,
185 dbg("protocol[%d].epwrite=%p", p, usblp->protocol[p].epwrite); 186 usblp->protocol[p].alt_setting);
186 dbg("protocol[%d].epread=%p", p, usblp->protocol[p].epread); 187 dev_dbg(dev, "protocol[%d].epwrite=%p\n", p,
187 } 188 usblp->protocol[p].epwrite);
188 dbg("current_protocol=%d", usblp->current_protocol); 189 dev_dbg(dev, "protocol[%d].epread=%p\n", p,
189 dbg("minor=%d", usblp->minor); 190 usblp->protocol[p].epread);
190 dbg("wstatus=%d", usblp->wstatus); 191 }
191 dbg("rstatus=%d", usblp->rstatus); 192 dev_dbg(dev, "current_protocol=%d\n", usblp->current_protocol);
192 dbg("quirks=%d", usblp->quirks); 193 dev_dbg(dev, "minor=%d\n", usblp->minor);
193 dbg("used=%d", usblp->used); 194 dev_dbg(dev, "wstatus=%d\n", usblp->wstatus);
194 dbg("bidir=%d", usblp->bidir); 195 dev_dbg(dev, "rstatus=%d\n", usblp->rstatus);
195 dbg("device_id_string=\"%s\"", 196 dev_dbg(dev, "quirks=%d\n", usblp->quirks);
197 dev_dbg(dev, "used=%d\n", usblp->used);
198 dev_dbg(dev, "bidir=%d\n", usblp->bidir);
199 dev_dbg(dev, "device_id_string=\"%s\"\n",
196 usblp->device_id_string ? 200 usblp->device_id_string ?
197 usblp->device_id_string + 2 : 201 usblp->device_id_string + 2 :
198 (unsigned char *)"(null)"); 202 (unsigned char *)"(null)");
@@ -262,7 +266,8 @@ static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, i
262 retval = usb_control_msg(usblp->dev, 266 retval = usb_control_msg(usblp->dev,
263 dir ? usb_rcvctrlpipe(usblp->dev, 0) : usb_sndctrlpipe(usblp->dev, 0), 267 dir ? usb_rcvctrlpipe(usblp->dev, 0) : usb_sndctrlpipe(usblp->dev, 0),
264 request, type | dir | recip, value, index, buf, len, USBLP_CTL_TIMEOUT); 268 request, type | dir | recip, value, index, buf, len, USBLP_CTL_TIMEOUT);
265 dbg("usblp_control_msg: rq: 0x%02x dir: %d recip: %d value: %d idx: %d len: %#x result: %d", 269 dev_dbg(&usblp->intf->dev,
270 "usblp_control_msg: rq: 0x%02x dir: %d recip: %d value: %d idx: %d len: %#x result: %d\n",
266 request, !!dir, recip, value, index, len, retval); 271 request, !!dir, recip, value, index, len, retval);
267 return retval < 0 ? retval : 0; 272 return retval < 0 ? retval : 0;
268} 273}
@@ -500,8 +505,9 @@ static long usblp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
500 goto done; 505 goto done;
501 } 506 }
502 507
503 dbg("usblp_ioctl: cmd=0x%x (%c nr=%d len=%d dir=%d)", cmd, _IOC_TYPE(cmd), 508 dev_dbg(&usblp->intf->dev,
504 _IOC_NR(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd)); 509 "usblp_ioctl: cmd=0x%x (%c nr=%d len=%d dir=%d)\n", cmd,
510 _IOC_TYPE(cmd), _IOC_NR(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd));
505 511
506 if (_IOC_TYPE(cmd) == 'P') /* new-style ioctl number */ 512 if (_IOC_TYPE(cmd) == 'P') /* new-style ioctl number */
507 513
@@ -594,7 +600,8 @@ static long usblp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
594 goto done; 600 goto done;
595 } 601 }
596 602
597 dbg("usblp%d requested/got HP channel %ld/%d", 603 dev_dbg(&usblp->intf->dev,
604 "usblp%d requested/got HP channel %ld/%d\n",
598 usblp->minor, arg, newChannel); 605 usblp->minor, arg, newChannel);
599 break; 606 break;
600 607
@@ -614,7 +621,8 @@ static long usblp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
614 goto done; 621 goto done;
615 } 622 }
616 623
617 dbg("usblp%d is bus=%d, device=%d", 624 dev_dbg(&usblp->intf->dev,
625 "usblp%d is bus=%d, device=%d\n",
618 usblp->minor, twoints[0], twoints[1]); 626 usblp->minor, twoints[0], twoints[1]);
619 break; 627 break;
620 628
@@ -634,7 +642,8 @@ static long usblp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
634 goto done; 642 goto done;
635 } 643 }
636 644
637 dbg("usblp%d is VID=0x%4.4X, PID=0x%4.4X", 645 dev_dbg(&usblp->intf->dev,
646 "usblp%d is VID=0x%4.4X, PID=0x%4.4X\n",
638 usblp->minor, twoints[0], twoints[1]); 647 usblp->minor, twoints[0], twoints[1]);
639 break; 648 break;
640 649
@@ -987,7 +996,7 @@ static int usblp_submit_read(struct usblp *usblp)
987 usblp->rcomplete = 0; 996 usblp->rcomplete = 0;
988 spin_unlock_irqrestore(&usblp->lock, flags); 997 spin_unlock_irqrestore(&usblp->lock, flags);
989 if ((rc = usb_submit_urb(urb, GFP_KERNEL)) < 0) { 998 if ((rc = usb_submit_urb(urb, GFP_KERNEL)) < 0) {
990 dbg("error submitting urb (%d)", rc); 999 dev_dbg(&usblp->intf->dev, "error submitting urb (%d)\n", rc);
991 spin_lock_irqsave(&usblp->lock, flags); 1000 spin_lock_irqsave(&usblp->lock, flags);
992 usblp->rstatus = rc; 1001 usblp->rstatus = rc;
993 usblp->rcomplete = 1; 1002 usblp->rcomplete = 1;
@@ -1129,7 +1138,8 @@ static int usblp_probe(struct usb_interface *intf,
1129 /* Analyze and pick initial alternate settings and endpoints. */ 1138 /* Analyze and pick initial alternate settings and endpoints. */
1130 protocol = usblp_select_alts(usblp); 1139 protocol = usblp_select_alts(usblp);
1131 if (protocol < 0) { 1140 if (protocol < 0) {
1132 dbg("incompatible printer-class device 0x%4.4X/0x%4.4X", 1141 dev_dbg(&intf->dev,
1142 "incompatible printer-class device 0x%4.4X/0x%4.4X\n",
1133 le16_to_cpu(dev->descriptor.idVendor), 1143 le16_to_cpu(dev->descriptor.idVendor),
1134 le16_to_cpu(dev->descriptor.idProduct)); 1144 le16_to_cpu(dev->descriptor.idProduct));
1135 retval = -ENODEV; 1145 retval = -ENODEV;
@@ -1158,14 +1168,14 @@ static int usblp_probe(struct usb_interface *intf,
1158 1168
1159 retval = usb_register_dev(intf, &usblp_class); 1169 retval = usb_register_dev(intf, &usblp_class);
1160 if (retval) { 1170 if (retval) {
1161 printk(KERN_ERR "usblp: Not able to get a minor" 1171 dev_err(&intf->dev,
1162 " (base %u, slice default): %d\n", 1172 "usblp: Not able to get a minor (base %u, slice default): %d\n",
1163 USBLP_MINOR_BASE, retval); 1173 USBLP_MINOR_BASE, retval);
1164 goto abort_intfdata; 1174 goto abort_intfdata;
1165 } 1175 }
1166 usblp->minor = intf->minor; 1176 usblp->minor = intf->minor;
1167 printk(KERN_INFO "usblp%d: USB %sdirectional printer dev %d " 1177 dev_info(&intf->dev,
1168 "if %d alt %d proto %d vid 0x%4.4X pid 0x%4.4X\n", 1178 "usblp%d: USB %sdirectional printer dev %d if %d alt %d proto %d vid 0x%4.4X pid 0x%4.4X\n",
1169 usblp->minor, usblp->bidir ? "Bi" : "Uni", dev->devnum, 1179 usblp->minor, usblp->bidir ? "Bi" : "Uni", dev->devnum,
1170 usblp->ifnum, 1180 usblp->ifnum,
1171 usblp->protocol[usblp->current_protocol].alt_setting, 1181 usblp->protocol[usblp->current_protocol].alt_setting,
@@ -1302,7 +1312,8 @@ static int usblp_set_protocol(struct usblp *usblp, int protocol)
1302 1312
1303 usblp->bidir = (usblp->protocol[protocol].epread != NULL); 1313 usblp->bidir = (usblp->protocol[protocol].epread != NULL);
1304 usblp->current_protocol = protocol; 1314 usblp->current_protocol = protocol;
1305 dbg("usblp%d set protocol %d", usblp->minor, protocol); 1315 dev_dbg(&usblp->intf->dev, "usblp%d set protocol %d\n",
1316 usblp->minor, protocol);
1306 return 0; 1317 return 0;
1307} 1318}
1308 1319
@@ -1315,7 +1326,8 @@ static int usblp_cache_device_id_string(struct usblp *usblp)
1315 1326
1316 err = usblp_get_id(usblp, 0, usblp->device_id_string, USBLP_DEVICE_ID_SIZE - 1); 1327 err = usblp_get_id(usblp, 0, usblp->device_id_string, USBLP_DEVICE_ID_SIZE - 1);
1317 if (err < 0) { 1328 if (err < 0) {
1318 dbg("usblp%d: error = %d reading IEEE-1284 Device ID string", 1329 dev_dbg(&usblp->intf->dev,
1330 "usblp%d: error = %d reading IEEE-1284 Device ID string\n",
1319 usblp->minor, err); 1331 usblp->minor, err);
1320 usblp->device_id_string[0] = usblp->device_id_string[1] = '\0'; 1332 usblp->device_id_string[0] = usblp->device_id_string[1] = '\0';
1321 return -EIO; 1333 return -EIO;
@@ -1331,7 +1343,7 @@ static int usblp_cache_device_id_string(struct usblp *usblp)
1331 length = USBLP_DEVICE_ID_SIZE - 1; 1343 length = USBLP_DEVICE_ID_SIZE - 1;
1332 usblp->device_id_string[length] = '\0'; 1344 usblp->device_id_string[length] = '\0';
1333 1345
1334 dbg("usblp%d Device ID string [len=%d]=\"%s\"", 1346 dev_dbg(&usblp->intf->dev, "usblp%d Device ID string [len=%d]=\"%s\"\n",
1335 usblp->minor, length, &usblp->device_id_string[2]); 1347 usblp->minor, length, &usblp->device_id_string[2]);
1336 1348
1337 return length; 1349 return length;
diff --git a/drivers/usb/core/Kconfig b/drivers/usb/core/Kconfig
index 18d02e32a3d5..9981984b365b 100644
--- a/drivers/usb/core/Kconfig
+++ b/drivers/usb/core/Kconfig
@@ -27,58 +27,6 @@ config USB_ANNOUNCE_NEW_DEVICES
27comment "Miscellaneous USB options" 27comment "Miscellaneous USB options"
28 depends on USB 28 depends on USB
29 29
30config USB_DEVICEFS
31 bool "USB device filesystem (DEPRECATED)"
32 depends on USB
33 ---help---
34 If you say Y here (and to "/proc file system support" in the "File
35 systems" section, above), you will get a file /proc/bus/usb/devices
36 which lists the devices currently connected to your USB bus or
37 busses, and for every connected device a file named
38 "/proc/bus/usb/xxx/yyy", where xxx is the bus number and yyy the
39 device number; the latter files can be used by user space programs
40 to talk directly to the device. These files are "virtual", meaning
41 they are generated on the fly and not stored on the hard drive.
42
43 You may need to mount the usbfs file system to see the files, use
44 mount -t usbfs none /proc/bus/usb
45
46 For the format of the various /proc/bus/usb/ files, please read
47 <file:Documentation/usb/proc_usb_info.txt>.
48
49 Modern Linux systems do not use this.
50
51 Usbfs entries are files and not character devices; usbfs can't
52 handle Access Control Lists (ACL) which are the default way to
53 grant access to USB devices for untrusted users of a desktop
54 system.
55
56 The usbfs functionality is replaced by real device-nodes managed by
57 udev. These nodes lived in /dev/bus/usb and are used by libusb.
58
59config USB_DEVICE_CLASS
60 bool "USB device class-devices (DEPRECATED)"
61 depends on USB
62 default y
63 ---help---
64 Userspace access to USB devices is granted by device-nodes exported
65 directly from the usbdev in sysfs. Old versions of the driver
66 core and udev needed additional class devices to export device nodes.
67
68 These additional devices are difficult to handle in userspace, if
69 information about USB interfaces must be available. One device
70 contains the device node, the other device contains the interface
71 data. Both devices are at the same level in sysfs (siblings) and one
72 can't access the other. The device node created directly by the
73 usb device is the parent device of the interface and therefore
74 easily accessible from the interface event.
75
76 This option provides backward compatibility for libusb device
77 nodes (lsusb) when usbfs is not used, and the following udev rule
78 doesn't exist:
79 SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", \
80 NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0644"
81
82config USB_DYNAMIC_MINORS 30config USB_DYNAMIC_MINORS
83 bool "Dynamic USB minor allocation" 31 bool "Dynamic USB minor allocation"
84 depends on USB 32 depends on USB
@@ -125,7 +73,6 @@ config USB_OTG_WHITELIST
125 bool "Rely on OTG Targeted Peripherals List" 73 bool "Rely on OTG Targeted Peripherals List"
126 depends on USB_OTG || EXPERT 74 depends on USB_OTG || EXPERT
127 default y if USB_OTG 75 default y if USB_OTG
128 default n if EXPERT
129 help 76 help
130 If you say Y here, the "otg_whitelist.h" file will be used as a 77 If you say Y here, the "otg_whitelist.h" file will be used as a
131 product whitelist, so USB peripherals not listed there will be 78 product whitelist, so USB peripherals not listed there will be
diff --git a/drivers/usb/core/Makefile b/drivers/usb/core/Makefile
index 507a4e1b6360..26059b93dbf4 100644
--- a/drivers/usb/core/Makefile
+++ b/drivers/usb/core/Makefile
@@ -9,6 +9,6 @@ usbcore-y += config.o file.o buffer.o sysfs.o endpoint.o
9usbcore-y += devio.o notify.o generic.o quirks.o devices.o 9usbcore-y += devio.o notify.o generic.o quirks.o devices.o
10 10
11usbcore-$(CONFIG_PCI) += hcd-pci.o 11usbcore-$(CONFIG_PCI) += hcd-pci.o
12usbcore-$(CONFIG_USB_DEVICEFS) += inode.o 12usbcore-$(CONFIG_ACPI) += usb-acpi.o
13 13
14obj-$(CONFIG_USB) += usbcore.o 14obj-$(CONFIG_USB) += usbcore.o
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 8df4b76465ac..e0f107948eba 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -333,17 +333,14 @@ static struct async *async_getcompleted(struct dev_state *ps)
333static struct async *async_getpending(struct dev_state *ps, 333static struct async *async_getpending(struct dev_state *ps,
334 void __user *userurb) 334 void __user *userurb)
335{ 335{
336 unsigned long flags;
337 struct async *as; 336 struct async *as;
338 337
339 spin_lock_irqsave(&ps->lock, flags);
340 list_for_each_entry(as, &ps->async_pending, asynclist) 338 list_for_each_entry(as, &ps->async_pending, asynclist)
341 if (as->userurb == userurb) { 339 if (as->userurb == userurb) {
342 list_del_init(&as->asynclist); 340 list_del_init(&as->asynclist);
343 spin_unlock_irqrestore(&ps->lock, flags);
344 return as; 341 return as;
345 } 342 }
346 spin_unlock_irqrestore(&ps->lock, flags); 343
347 return NULL; 344 return NULL;
348} 345}
349 346
@@ -398,6 +395,7 @@ static void cancel_bulk_urbs(struct dev_state *ps, unsigned bulk_addr)
398__releases(ps->lock) 395__releases(ps->lock)
399__acquires(ps->lock) 396__acquires(ps->lock)
400{ 397{
398 struct urb *urb;
401 struct async *as; 399 struct async *as;
402 400
403 /* Mark all the pending URBs that match bulk_addr, up to but not 401 /* Mark all the pending URBs that match bulk_addr, up to but not
@@ -420,8 +418,11 @@ __acquires(ps->lock)
420 list_for_each_entry(as, &ps->async_pending, asynclist) { 418 list_for_each_entry(as, &ps->async_pending, asynclist) {
421 if (as->bulk_status == AS_UNLINK) { 419 if (as->bulk_status == AS_UNLINK) {
422 as->bulk_status = 0; /* Only once */ 420 as->bulk_status = 0; /* Only once */
421 urb = as->urb;
422 usb_get_urb(urb);
423 spin_unlock(&ps->lock); /* Allow completions */ 423 spin_unlock(&ps->lock); /* Allow completions */
424 usb_unlink_urb(as->urb); 424 usb_unlink_urb(urb);
425 usb_put_urb(urb);
425 spin_lock(&ps->lock); 426 spin_lock(&ps->lock);
426 goto rescan; 427 goto rescan;
427 } 428 }
@@ -472,6 +473,7 @@ static void async_completed(struct urb *urb)
472 473
473static void destroy_async(struct dev_state *ps, struct list_head *list) 474static void destroy_async(struct dev_state *ps, struct list_head *list)
474{ 475{
476 struct urb *urb;
475 struct async *as; 477 struct async *as;
476 unsigned long flags; 478 unsigned long flags;
477 479
@@ -479,10 +481,13 @@ static void destroy_async(struct dev_state *ps, struct list_head *list)
479 while (!list_empty(list)) { 481 while (!list_empty(list)) {
480 as = list_entry(list->next, struct async, asynclist); 482 as = list_entry(list->next, struct async, asynclist);
481 list_del_init(&as->asynclist); 483 list_del_init(&as->asynclist);
484 urb = as->urb;
485 usb_get_urb(urb);
482 486
483 /* drop the spinlock so the completion handler can run */ 487 /* drop the spinlock so the completion handler can run */
484 spin_unlock_irqrestore(&ps->lock, flags); 488 spin_unlock_irqrestore(&ps->lock, flags);
485 usb_kill_urb(as->urb); 489 usb_kill_urb(urb);
490 usb_put_urb(urb);
486 spin_lock_irqsave(&ps->lock, flags); 491 spin_lock_irqsave(&ps->lock, flags);
487 } 492 }
488 spin_unlock_irqrestore(&ps->lock, flags); 493 spin_unlock_irqrestore(&ps->lock, flags);
@@ -727,17 +732,6 @@ static int usbdev_open(struct inode *inode, struct file *file)
727 if (imajor(inode) == USB_DEVICE_MAJOR) 732 if (imajor(inode) == USB_DEVICE_MAJOR)
728 dev = usbdev_lookup_by_devt(inode->i_rdev); 733 dev = usbdev_lookup_by_devt(inode->i_rdev);
729 734
730#ifdef CONFIG_USB_DEVICEFS
731 /* procfs file */
732 if (!dev) {
733 dev = inode->i_private;
734 if (dev && dev->usbfs_dentry &&
735 dev->usbfs_dentry->d_inode == inode)
736 usb_get_dev(dev);
737 else
738 dev = NULL;
739 }
740#endif
741 mutex_unlock(&usbfs_mutex); 735 mutex_unlock(&usbfs_mutex);
742 736
743 if (!dev) 737 if (!dev)
@@ -1410,12 +1404,24 @@ static int proc_submiturb(struct dev_state *ps, void __user *arg)
1410 1404
1411static int proc_unlinkurb(struct dev_state *ps, void __user *arg) 1405static int proc_unlinkurb(struct dev_state *ps, void __user *arg)
1412{ 1406{
1407 struct urb *urb;
1413 struct async *as; 1408 struct async *as;
1409 unsigned long flags;
1414 1410
1411 spin_lock_irqsave(&ps->lock, flags);
1415 as = async_getpending(ps, arg); 1412 as = async_getpending(ps, arg);
1416 if (!as) 1413 if (!as) {
1414 spin_unlock_irqrestore(&ps->lock, flags);
1417 return -EINVAL; 1415 return -EINVAL;
1418 usb_kill_urb(as->urb); 1416 }
1417
1418 urb = as->urb;
1419 usb_get_urb(urb);
1420 spin_unlock_irqrestore(&ps->lock, flags);
1421
1422 usb_kill_urb(urb);
1423 usb_put_urb(urb);
1424
1419 return 0; 1425 return 0;
1420} 1426}
1421 1427
@@ -2062,44 +2068,13 @@ static void usbdev_remove(struct usb_device *udev)
2062 } 2068 }
2063} 2069}
2064 2070
2065#ifdef CONFIG_USB_DEVICE_CLASS
2066static struct class *usb_classdev_class;
2067
2068static int usb_classdev_add(struct usb_device *dev)
2069{
2070 struct device *cldev;
2071
2072 cldev = device_create(usb_classdev_class, &dev->dev, dev->dev.devt,
2073 NULL, "usbdev%d.%d", dev->bus->busnum,
2074 dev->devnum);
2075 if (IS_ERR(cldev))
2076 return PTR_ERR(cldev);
2077 dev->usb_classdev = cldev;
2078 return 0;
2079}
2080
2081static void usb_classdev_remove(struct usb_device *dev)
2082{
2083 if (dev->usb_classdev)
2084 device_unregister(dev->usb_classdev);
2085}
2086
2087#else
2088#define usb_classdev_add(dev) 0
2089#define usb_classdev_remove(dev) do {} while (0)
2090
2091#endif
2092
2093static int usbdev_notify(struct notifier_block *self, 2071static int usbdev_notify(struct notifier_block *self,
2094 unsigned long action, void *dev) 2072 unsigned long action, void *dev)
2095{ 2073{
2096 switch (action) { 2074 switch (action) {
2097 case USB_DEVICE_ADD: 2075 case USB_DEVICE_ADD:
2098 if (usb_classdev_add(dev))
2099 return NOTIFY_BAD;
2100 break; 2076 break;
2101 case USB_DEVICE_REMOVE: 2077 case USB_DEVICE_REMOVE:
2102 usb_classdev_remove(dev);
2103 usbdev_remove(dev); 2078 usbdev_remove(dev);
2104 break; 2079 break;
2105 } 2080 }
@@ -2129,21 +2104,6 @@ int __init usb_devio_init(void)
2129 USB_DEVICE_MAJOR); 2104 USB_DEVICE_MAJOR);
2130 goto error_cdev; 2105 goto error_cdev;
2131 } 2106 }
2132#ifdef CONFIG_USB_DEVICE_CLASS
2133 usb_classdev_class = class_create(THIS_MODULE, "usb_device");
2134 if (IS_ERR(usb_classdev_class)) {
2135 printk(KERN_ERR "Unable to register usb_device class\n");
2136 retval = PTR_ERR(usb_classdev_class);
2137 cdev_del(&usb_device_cdev);
2138 usb_classdev_class = NULL;
2139 goto out;
2140 }
2141 /* devices of this class shadow the major:minor of their parent
2142 * device, so clear ->dev_kobj to prevent adding duplicate entries
2143 * to /sys/dev
2144 */
2145 usb_classdev_class->dev_kobj = NULL;
2146#endif
2147 usb_register_notify(&usbdev_nb); 2107 usb_register_notify(&usbdev_nb);
2148out: 2108out:
2149 return retval; 2109 return retval;
@@ -2156,9 +2116,6 @@ error_cdev:
2156void usb_devio_cleanup(void) 2116void usb_devio_cleanup(void)
2157{ 2117{
2158 usb_unregister_notify(&usbdev_nb); 2118 usb_unregister_notify(&usbdev_nb);
2159#ifdef CONFIG_USB_DEVICE_CLASS
2160 class_destroy(usb_classdev_class);
2161#endif
2162 cdev_del(&usb_device_cdev); 2119 cdev_del(&usb_device_cdev);
2163 unregister_chrdev_region(USB_DEVICE_DEV, USB_DEVICE_MAX); 2120 unregister_chrdev_region(USB_DEVICE_DEV, USB_DEVICE_MAX);
2164} 2121}
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 9a56635dc19c..f536aebc958e 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -79,6 +79,30 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids,
79} 79}
80EXPORT_SYMBOL_GPL(usb_store_new_id); 80EXPORT_SYMBOL_GPL(usb_store_new_id);
81 81
82ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf)
83{
84 struct usb_dynid *dynid;
85 size_t count = 0;
86
87 list_for_each_entry(dynid, &dynids->list, node)
88 if (dynid->id.bInterfaceClass != 0)
89 count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x %02x\n",
90 dynid->id.idVendor, dynid->id.idProduct,
91 dynid->id.bInterfaceClass);
92 else
93 count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x\n",
94 dynid->id.idVendor, dynid->id.idProduct);
95 return count;
96}
97EXPORT_SYMBOL_GPL(usb_show_dynids);
98
99static ssize_t show_dynids(struct device_driver *driver, char *buf)
100{
101 struct usb_driver *usb_drv = to_usb_driver(driver);
102
103 return usb_show_dynids(&usb_drv->dynids, buf);
104}
105
82static ssize_t store_new_id(struct device_driver *driver, 106static ssize_t store_new_id(struct device_driver *driver,
83 const char *buf, size_t count) 107 const char *buf, size_t count)
84{ 108{
@@ -86,7 +110,7 @@ static ssize_t store_new_id(struct device_driver *driver,
86 110
87 return usb_store_new_id(&usb_drv->dynids, driver, buf, count); 111 return usb_store_new_id(&usb_drv->dynids, driver, buf, count);
88} 112}
89static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id); 113static DRIVER_ATTR(new_id, S_IRUGO | S_IWUSR, show_dynids, store_new_id);
90 114
91/** 115/**
92 * store_remove_id - remove a USB device ID from this driver 116 * store_remove_id - remove a USB device ID from this driver
@@ -127,7 +151,7 @@ store_remove_id(struct device_driver *driver, const char *buf, size_t count)
127 return retval; 151 return retval;
128 return count; 152 return count;
129} 153}
130static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id); 154static DRIVER_ATTR(remove_id, S_IRUGO | S_IWUSR, show_dynids, store_remove_id);
131 155
132static int usb_create_newid_files(struct usb_driver *usb_drv) 156static int usb_create_newid_files(struct usb_driver *usb_drv)
133{ 157{
@@ -264,6 +288,7 @@ static int usb_probe_interface(struct device *dev)
264 struct usb_device *udev = interface_to_usbdev(intf); 288 struct usb_device *udev = interface_to_usbdev(intf);
265 const struct usb_device_id *id; 289 const struct usb_device_id *id;
266 int error = -ENODEV; 290 int error = -ENODEV;
291 int lpm_disable_error;
267 292
268 dev_dbg(dev, "%s\n", __func__); 293 dev_dbg(dev, "%s\n", __func__);
269 294
@@ -300,6 +325,25 @@ static int usb_probe_interface(struct device *dev)
300 if (driver->supports_autosuspend) 325 if (driver->supports_autosuspend)
301 pm_runtime_enable(dev); 326 pm_runtime_enable(dev);
302 327
328 /* If the new driver doesn't allow hub-initiated LPM, and we can't
329 * disable hub-initiated LPM, then fail the probe.
330 *
331 * Otherwise, leaving LPM enabled should be harmless, because the
332 * endpoint intervals should remain the same, and the U1/U2 timeouts
333 * should remain the same.
334 *
335 * If we need to install alt setting 0 before probe, or another alt
336 * setting during probe, that should also be fine. usb_set_interface()
337 * will attempt to disable LPM, and fail if it can't disable it.
338 */
339 lpm_disable_error = usb_unlocked_disable_lpm(udev);
340 if (lpm_disable_error && driver->disable_hub_initiated_lpm) {
341 dev_err(&intf->dev, "%s Failed to disable LPM for driver %s\n.",
342 __func__, driver->name);
343 error = lpm_disable_error;
344 goto err;
345 }
346
303 /* Carry out a deferred switch to altsetting 0 */ 347 /* Carry out a deferred switch to altsetting 0 */
304 if (intf->needs_altsetting0) { 348 if (intf->needs_altsetting0) {
305 error = usb_set_interface(udev, intf->altsetting[0]. 349 error = usb_set_interface(udev, intf->altsetting[0].
@@ -314,6 +358,11 @@ static int usb_probe_interface(struct device *dev)
314 goto err; 358 goto err;
315 359
316 intf->condition = USB_INTERFACE_BOUND; 360 intf->condition = USB_INTERFACE_BOUND;
361
362 /* If the LPM disable succeeded, balance the ref counts. */
363 if (!lpm_disable_error)
364 usb_unlocked_enable_lpm(udev);
365
317 usb_autosuspend_device(udev); 366 usb_autosuspend_device(udev);
318 return error; 367 return error;
319 368
@@ -337,7 +386,7 @@ static int usb_unbind_interface(struct device *dev)
337 struct usb_driver *driver = to_usb_driver(dev->driver); 386 struct usb_driver *driver = to_usb_driver(dev->driver);
338 struct usb_interface *intf = to_usb_interface(dev); 387 struct usb_interface *intf = to_usb_interface(dev);
339 struct usb_device *udev; 388 struct usb_device *udev;
340 int error, r; 389 int error, r, lpm_disable_error;
341 390
342 intf->condition = USB_INTERFACE_UNBINDING; 391 intf->condition = USB_INTERFACE_UNBINDING;
343 392
@@ -345,6 +394,13 @@ static int usb_unbind_interface(struct device *dev)
345 udev = interface_to_usbdev(intf); 394 udev = interface_to_usbdev(intf);
346 error = usb_autoresume_device(udev); 395 error = usb_autoresume_device(udev);
347 396
397 /* Hub-initiated LPM policy may change, so attempt to disable LPM until
398 * the driver is unbound. If LPM isn't disabled, that's fine because it
399 * wouldn't be enabled unless all the bound interfaces supported
400 * hub-initiated LPM.
401 */
402 lpm_disable_error = usb_unlocked_disable_lpm(udev);
403
348 /* Terminate all URBs for this interface unless the driver 404 /* Terminate all URBs for this interface unless the driver
349 * supports "soft" unbinding. 405 * supports "soft" unbinding.
350 */ 406 */
@@ -378,6 +434,10 @@ static int usb_unbind_interface(struct device *dev)
378 intf->condition = USB_INTERFACE_UNBOUND; 434 intf->condition = USB_INTERFACE_UNBOUND;
379 intf->needs_remote_wakeup = 0; 435 intf->needs_remote_wakeup = 0;
380 436
437 /* Attempt to re-enable USB3 LPM, if the disable succeeded. */
438 if (!lpm_disable_error)
439 usb_unlocked_enable_lpm(udev);
440
381 /* Unbound interfaces are always runtime-PM-disabled and -suspended */ 441 /* Unbound interfaces are always runtime-PM-disabled and -suspended */
382 if (driver->supports_autosuspend) 442 if (driver->supports_autosuspend)
383 pm_runtime_disable(dev); 443 pm_runtime_disable(dev);
@@ -418,17 +478,29 @@ int usb_driver_claim_interface(struct usb_driver *driver,
418 struct usb_interface *iface, void *priv) 478 struct usb_interface *iface, void *priv)
419{ 479{
420 struct device *dev = &iface->dev; 480 struct device *dev = &iface->dev;
481 struct usb_device *udev;
421 int retval = 0; 482 int retval = 0;
483 int lpm_disable_error;
422 484
423 if (dev->driver) 485 if (dev->driver)
424 return -EBUSY; 486 return -EBUSY;
425 487
488 udev = interface_to_usbdev(iface);
489
426 dev->driver = &driver->drvwrap.driver; 490 dev->driver = &driver->drvwrap.driver;
427 usb_set_intfdata(iface, priv); 491 usb_set_intfdata(iface, priv);
428 iface->needs_binding = 0; 492 iface->needs_binding = 0;
429 493
430 iface->condition = USB_INTERFACE_BOUND; 494 iface->condition = USB_INTERFACE_BOUND;
431 495
496 /* Disable LPM until this driver is bound. */
497 lpm_disable_error = usb_unlocked_disable_lpm(udev);
498 if (lpm_disable_error && driver->disable_hub_initiated_lpm) {
499 dev_err(&iface->dev, "%s Failed to disable LPM for driver %s\n.",
500 __func__, driver->name);
501 return -ENOMEM;
502 }
503
432 /* Claimed interfaces are initially inactive (suspended) and 504 /* Claimed interfaces are initially inactive (suspended) and
433 * runtime-PM-enabled, but only if the driver has autosuspend 505 * runtime-PM-enabled, but only if the driver has autosuspend
434 * support. Otherwise they are marked active, to prevent the 506 * support. Otherwise they are marked active, to prevent the
@@ -447,6 +519,10 @@ int usb_driver_claim_interface(struct usb_driver *driver,
447 if (device_is_registered(dev)) 519 if (device_is_registered(dev))
448 retval = device_bind_driver(dev); 520 retval = device_bind_driver(dev);
449 521
522 /* Attempt to re-enable USB3 LPM, if the disable was successful. */
523 if (!lpm_disable_error)
524 usb_unlocked_enable_lpm(udev);
525
450 return retval; 526 return retval;
451} 527}
452EXPORT_SYMBOL_GPL(usb_driver_claim_interface); 528EXPORT_SYMBOL_GPL(usb_driver_claim_interface);
@@ -726,16 +802,6 @@ static int usb_uevent(struct device *dev, struct kobj_uevent_env *env)
726 return -ENODEV; 802 return -ENODEV;
727 } 803 }
728 804
729#ifdef CONFIG_USB_DEVICEFS
730 /* If this is available, userspace programs can directly read
731 * all the device descriptors we don't tell them about. Or
732 * act as usermode drivers.
733 */
734 if (add_uevent_var(env, "DEVICE=/proc/bus/usb/%03d/%03d",
735 usb_dev->bus->busnum, usb_dev->devnum))
736 return -ENOMEM;
737#endif
738
739 /* per-device configurations are common */ 805 /* per-device configurations are common */
740 if (add_uevent_var(env, "PRODUCT=%x/%x/%x", 806 if (add_uevent_var(env, "PRODUCT=%x/%x/%x",
741 le16_to_cpu(usb_dev->descriptor.idVendor), 807 le16_to_cpu(usb_dev->descriptor.idVendor),
@@ -788,15 +854,13 @@ int usb_register_device_driver(struct usb_device_driver *new_udriver,
788 854
789 retval = driver_register(&new_udriver->drvwrap.driver); 855 retval = driver_register(&new_udriver->drvwrap.driver);
790 856
791 if (!retval) { 857 if (!retval)
792 pr_info("%s: registered new device driver %s\n", 858 pr_info("%s: registered new device driver %s\n",
793 usbcore_name, new_udriver->name); 859 usbcore_name, new_udriver->name);
794 usbfs_update_special(); 860 else
795 } else {
796 printk(KERN_ERR "%s: error %d registering device " 861 printk(KERN_ERR "%s: error %d registering device "
797 " driver %s\n", 862 " driver %s\n",
798 usbcore_name, retval, new_udriver->name); 863 usbcore_name, retval, new_udriver->name);
799 }
800 864
801 return retval; 865 return retval;
802} 866}
@@ -815,7 +879,6 @@ void usb_deregister_device_driver(struct usb_device_driver *udriver)
815 usbcore_name, udriver->name); 879 usbcore_name, udriver->name);
816 880
817 driver_unregister(&udriver->drvwrap.driver); 881 driver_unregister(&udriver->drvwrap.driver);
818 usbfs_update_special();
819} 882}
820EXPORT_SYMBOL_GPL(usb_deregister_device_driver); 883EXPORT_SYMBOL_GPL(usb_deregister_device_driver);
821 884
@@ -856,8 +919,6 @@ int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
856 if (retval) 919 if (retval)
857 goto out; 920 goto out;
858 921
859 usbfs_update_special();
860
861 retval = usb_create_newid_files(new_driver); 922 retval = usb_create_newid_files(new_driver);
862 if (retval) 923 if (retval)
863 goto out_newid; 924 goto out_newid;
@@ -897,8 +958,6 @@ void usb_deregister(struct usb_driver *driver)
897 usb_remove_newid_files(driver); 958 usb_remove_newid_files(driver);
898 driver_unregister(&driver->drvwrap.driver); 959 driver_unregister(&driver->drvwrap.driver);
899 usb_free_dynids(driver); 960 usb_free_dynids(driver);
900
901 usbfs_update_special();
902} 961}
903EXPORT_SYMBOL_GPL(usb_deregister); 962EXPORT_SYMBOL_GPL(usb_deregister);
904 963
diff --git a/drivers/usb/core/file.c b/drivers/usb/core/file.c
index d95760de9e8b..e673b26e598f 100644
--- a/drivers/usb/core/file.c
+++ b/drivers/usb/core/file.c
@@ -183,7 +183,7 @@ int usb_register_dev(struct usb_interface *intf,
183 if (retval) 183 if (retval)
184 return retval; 184 return retval;
185 185
186 dev_dbg(&intf->dev, "looking for a minor, starting at %d", minor_base); 186 dev_dbg(&intf->dev, "looking for a minor, starting at %d\n", minor_base);
187 187
188 down_write(&minor_rwsem); 188 down_write(&minor_rwsem);
189 for (minor = minor_base; minor < MAX_USB_MINORS; ++minor) { 189 for (minor = minor_base; minor < MAX_USB_MINORS; ++minor) {
@@ -239,7 +239,7 @@ void usb_deregister_dev(struct usb_interface *intf,
239 if (intf->minor == -1) 239 if (intf->minor == -1)
240 return; 240 return;
241 241
242 dbg ("removing %d minor", intf->minor); 242 dev_dbg(&intf->dev, "removing %d minor\n", intf->minor);
243 243
244 down_write(&minor_rwsem); 244 down_write(&minor_rwsem);
245 usb_minors[intf->minor] = NULL; 245 usb_minors[intf->minor] = NULL;
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 140d3e11f212..190b1ec7bdcb 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -138,7 +138,7 @@ static const u8 usb3_rh_dev_descriptor[18] = {
138 0x03, /* __u8 bDeviceProtocol; USB 3.0 hub */ 138 0x03, /* __u8 bDeviceProtocol; USB 3.0 hub */
139 0x09, /* __u8 bMaxPacketSize0; 2^9 = 512 Bytes */ 139 0x09, /* __u8 bMaxPacketSize0; 2^9 = 512 Bytes */
140 140
141 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation */ 141 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation 0x1d6b */
142 0x03, 0x00, /* __le16 idProduct; device 0x0003 */ 142 0x03, 0x00, /* __le16 idProduct; device 0x0003 */
143 KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */ 143 KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */
144 144
@@ -159,7 +159,7 @@ static const u8 usb2_rh_dev_descriptor [18] = {
159 0x00, /* __u8 bDeviceProtocol; [ usb 2.0 no TT ] */ 159 0x00, /* __u8 bDeviceProtocol; [ usb 2.0 no TT ] */
160 0x40, /* __u8 bMaxPacketSize0; 64 Bytes */ 160 0x40, /* __u8 bMaxPacketSize0; 64 Bytes */
161 161
162 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation */ 162 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation 0x1d6b */
163 0x02, 0x00, /* __le16 idProduct; device 0x0002 */ 163 0x02, 0x00, /* __le16 idProduct; device 0x0002 */
164 KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */ 164 KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */
165 165
@@ -182,7 +182,7 @@ static const u8 usb11_rh_dev_descriptor [18] = {
182 0x00, /* __u8 bDeviceProtocol; [ low/full speeds only ] */ 182 0x00, /* __u8 bDeviceProtocol; [ low/full speeds only ] */
183 0x40, /* __u8 bMaxPacketSize0; 64 Bytes */ 183 0x40, /* __u8 bMaxPacketSize0; 64 Bytes */
184 184
185 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation */ 185 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation 0x1d6b */
186 0x01, 0x00, /* __le16 idProduct; device 0x0001 */ 186 0x01, 0x00, /* __le16 idProduct; device 0x0001 */
187 KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */ 187 KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */
188 188
@@ -997,6 +997,15 @@ static int register_root_hub(struct usb_hcd *hcd)
997 dev_name(&usb_dev->dev), retval); 997 dev_name(&usb_dev->dev), retval);
998 return (retval < 0) ? retval : -EMSGSIZE; 998 return (retval < 0) ? retval : -EMSGSIZE;
999 } 999 }
1000 if (usb_dev->speed == USB_SPEED_SUPER) {
1001 retval = usb_get_bos_descriptor(usb_dev);
1002 if (retval < 0) {
1003 mutex_unlock(&usb_bus_list_lock);
1004 dev_dbg(parent_dev, "can't read %s bos descriptor %d\n",
1005 dev_name(&usb_dev->dev), retval);
1006 return retval;
1007 }
1008 }
1000 1009
1001 retval = usb_new_device (usb_dev); 1010 retval = usb_new_device (usb_dev);
1002 if (retval) { 1011 if (retval) {
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index ec6c97dadbe4..04fb834c3fa1 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -177,6 +177,228 @@ static struct usb_hub *hdev_to_hub(struct usb_device *hdev)
177 return usb_get_intfdata(hdev->actconfig->interface[0]); 177 return usb_get_intfdata(hdev->actconfig->interface[0]);
178} 178}
179 179
180static int usb_device_supports_lpm(struct usb_device *udev)
181{
182 /* USB 2.1 (and greater) devices indicate LPM support through
183 * their USB 2.0 Extended Capabilities BOS descriptor.
184 */
185 if (udev->speed == USB_SPEED_HIGH) {
186 if (udev->bos->ext_cap &&
187 (USB_LPM_SUPPORT &
188 le32_to_cpu(udev->bos->ext_cap->bmAttributes)))
189 return 1;
190 return 0;
191 }
192
193 /* All USB 3.0 must support LPM, but we need their max exit latency
194 * information from the SuperSpeed Extended Capabilities BOS descriptor.
195 */
196 if (!udev->bos->ss_cap) {
197 dev_warn(&udev->dev, "No LPM exit latency info found. "
198 "Power management will be impacted.\n");
199 return 0;
200 }
201 if (udev->parent->lpm_capable)
202 return 1;
203
204 dev_warn(&udev->dev, "Parent hub missing LPM exit latency info. "
205 "Power management will be impacted.\n");
206 return 0;
207}
208
209/*
210 * Set the Maximum Exit Latency (MEL) for the host to initiate a transition from
211 * either U1 or U2.
212 */
213static void usb_set_lpm_mel(struct usb_device *udev,
214 struct usb3_lpm_parameters *udev_lpm_params,
215 unsigned int udev_exit_latency,
216 struct usb_hub *hub,
217 struct usb3_lpm_parameters *hub_lpm_params,
218 unsigned int hub_exit_latency)
219{
220 unsigned int total_mel;
221 unsigned int device_mel;
222 unsigned int hub_mel;
223
224 /*
225 * Calculate the time it takes to transition all links from the roothub
226 * to the parent hub into U0. The parent hub must then decode the
227 * packet (hub header decode latency) to figure out which port it was
228 * bound for.
229 *
230 * The Hub Header decode latency is expressed in 0.1us intervals (0x1
231 * means 0.1us). Multiply that by 100 to get nanoseconds.
232 */
233 total_mel = hub_lpm_params->mel +
234 (hub->descriptor->u.ss.bHubHdrDecLat * 100);
235
236 /*
237 * How long will it take to transition the downstream hub's port into
238 * U0? The greater of either the hub exit latency or the device exit
239 * latency.
240 *
241 * The BOS U1/U2 exit latencies are expressed in 1us intervals.
242 * Multiply that by 1000 to get nanoseconds.
243 */
244 device_mel = udev_exit_latency * 1000;
245 hub_mel = hub_exit_latency * 1000;
246 if (device_mel > hub_mel)
247 total_mel += device_mel;
248 else
249 total_mel += hub_mel;
250
251 udev_lpm_params->mel = total_mel;
252}
253
254/*
255 * Set the maximum Device to Host Exit Latency (PEL) for the device to initiate
256 * a transition from either U1 or U2.
257 */
258static void usb_set_lpm_pel(struct usb_device *udev,
259 struct usb3_lpm_parameters *udev_lpm_params,
260 unsigned int udev_exit_latency,
261 struct usb_hub *hub,
262 struct usb3_lpm_parameters *hub_lpm_params,
263 unsigned int hub_exit_latency,
264 unsigned int port_to_port_exit_latency)
265{
266 unsigned int first_link_pel;
267 unsigned int hub_pel;
268
269 /*
270 * First, the device sends an LFPS to transition the link between the
271 * device and the parent hub into U0. The exit latency is the bigger of
272 * the device exit latency or the hub exit latency.
273 */
274 if (udev_exit_latency > hub_exit_latency)
275 first_link_pel = udev_exit_latency * 1000;
276 else
277 first_link_pel = hub_exit_latency * 1000;
278
279 /*
280 * When the hub starts to receive the LFPS, there is a slight delay for
281 * it to figure out that one of the ports is sending an LFPS. Then it
282 * will forward the LFPS to its upstream link. The exit latency is the
283 * delay, plus the PEL that we calculated for this hub.
284 */
285 hub_pel = port_to_port_exit_latency * 1000 + hub_lpm_params->pel;
286
287 /*
288 * According to figure C-7 in the USB 3.0 spec, the PEL for this device
289 * is the greater of the two exit latencies.
290 */
291 if (first_link_pel > hub_pel)
292 udev_lpm_params->pel = first_link_pel;
293 else
294 udev_lpm_params->pel = hub_pel;
295}
296
297/*
298 * Set the System Exit Latency (SEL) to indicate the total worst-case time from
299 * when a device initiates a transition to U0, until when it will receive the
300 * first packet from the host controller.
301 *
302 * Section C.1.5.1 describes the four components to this:
303 * - t1: device PEL
304 * - t2: time for the ERDY to make it from the device to the host.
305 * - t3: a host-specific delay to process the ERDY.
306 * - t4: time for the packet to make it from the host to the device.
307 *
308 * t3 is specific to both the xHCI host and the platform the host is integrated
309 * into. The Intel HW folks have said it's negligible, FIXME if a different
310 * vendor says otherwise.
311 */
312static void usb_set_lpm_sel(struct usb_device *udev,
313 struct usb3_lpm_parameters *udev_lpm_params)
314{
315 struct usb_device *parent;
316 unsigned int num_hubs;
317 unsigned int total_sel;
318
319 /* t1 = device PEL */
320 total_sel = udev_lpm_params->pel;
321 /* How many external hubs are in between the device & the root port. */
322 for (parent = udev->parent, num_hubs = 0; parent->parent;
323 parent = parent->parent)
324 num_hubs++;
325 /* t2 = 2.1us + 250ns * (num_hubs - 1) */
326 if (num_hubs > 0)
327 total_sel += 2100 + 250 * (num_hubs - 1);
328
329 /* t4 = 250ns * num_hubs */
330 total_sel += 250 * num_hubs;
331
332 udev_lpm_params->sel = total_sel;
333}
334
335static void usb_set_lpm_parameters(struct usb_device *udev)
336{
337 struct usb_hub *hub;
338 unsigned int port_to_port_delay;
339 unsigned int udev_u1_del;
340 unsigned int udev_u2_del;
341 unsigned int hub_u1_del;
342 unsigned int hub_u2_del;
343
344 if (!udev->lpm_capable || udev->speed != USB_SPEED_SUPER)
345 return;
346
347 hub = hdev_to_hub(udev->parent);
348 /* It doesn't take time to transition the roothub into U0, since it
349 * doesn't have an upstream link.
350 */
351 if (!hub)
352 return;
353
354 udev_u1_del = udev->bos->ss_cap->bU1devExitLat;
355 udev_u2_del = udev->bos->ss_cap->bU2DevExitLat;
356 hub_u1_del = udev->parent->bos->ss_cap->bU1devExitLat;
357 hub_u2_del = udev->parent->bos->ss_cap->bU2DevExitLat;
358
359 usb_set_lpm_mel(udev, &udev->u1_params, udev_u1_del,
360 hub, &udev->parent->u1_params, hub_u1_del);
361
362 usb_set_lpm_mel(udev, &udev->u2_params, udev_u2_del,
363 hub, &udev->parent->u2_params, hub_u2_del);
364
365 /*
366 * Appendix C, section C.2.2.2, says that there is a slight delay from
367 * when the parent hub notices the downstream port is trying to
368 * transition to U0 to when the hub initiates a U0 transition on its
369 * upstream port. The section says the delays are tPort2PortU1EL and
370 * tPort2PortU2EL, but it doesn't define what they are.
371 *
372 * The hub chapter, sections 10.4.2.4 and 10.4.2.5 seem to be talking
373 * about the same delays. Use the maximum delay calculations from those
374 * sections. For U1, it's tHubPort2PortExitLat, which is 1us max. For
375 * U2, it's tHubPort2PortExitLat + U2DevExitLat - U1DevExitLat. I
376 * assume the device exit latencies they are talking about are the hub
377 * exit latencies.
378 *
379 * What do we do if the U2 exit latency is less than the U1 exit
380 * latency? It's possible, although not likely...
381 */
382 port_to_port_delay = 1;
383
384 usb_set_lpm_pel(udev, &udev->u1_params, udev_u1_del,
385 hub, &udev->parent->u1_params, hub_u1_del,
386 port_to_port_delay);
387
388 if (hub_u2_del > hub_u1_del)
389 port_to_port_delay = 1 + hub_u2_del - hub_u1_del;
390 else
391 port_to_port_delay = 1 + hub_u1_del;
392
393 usb_set_lpm_pel(udev, &udev->u2_params, udev_u2_del,
394 hub, &udev->parent->u2_params, hub_u2_del,
395 port_to_port_delay);
396
397 /* Now that we've got PEL, calculate SEL. */
398 usb_set_lpm_sel(udev, &udev->u1_params);
399 usb_set_lpm_sel(udev, &udev->u2_params);
400}
401
180/* USB 2.0 spec Section 11.24.4.5 */ 402/* USB 2.0 spec Section 11.24.4.5 */
181static int get_hub_descriptor(struct usb_device *hdev, void *data) 403static int get_hub_descriptor(struct usb_device *hdev, void *data)
182{ 404{
@@ -2480,6 +2702,12 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
2480 if (udev->usb2_hw_lpm_enabled == 1) 2702 if (udev->usb2_hw_lpm_enabled == 1)
2481 usb_set_usb2_hardware_lpm(udev, 0); 2703 usb_set_usb2_hardware_lpm(udev, 0);
2482 2704
2705 if (usb_unlocked_disable_lpm(udev)) {
2706 dev_err(&udev->dev, "%s Failed to disable LPM before suspend\n.",
2707 __func__);
2708 return -ENOMEM;
2709 }
2710
2483 /* see 7.1.7.6 */ 2711 /* see 7.1.7.6 */
2484 if (hub_is_superspeed(hub->hdev)) 2712 if (hub_is_superspeed(hub->hdev))
2485 status = set_port_feature(hub->hdev, 2713 status = set_port_feature(hub->hdev,
@@ -2499,6 +2727,13 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
2499 NULL, 0, 2727 NULL, 0,
2500 USB_CTRL_SET_TIMEOUT); 2728 USB_CTRL_SET_TIMEOUT);
2501 2729
2730 /* Try to enable USB2 hardware LPM again */
2731 if (udev->usb2_hw_lpm_capable == 1)
2732 usb_set_usb2_hardware_lpm(udev, 1);
2733
2734 /* Try to enable USB3 LPM again */
2735 usb_unlocked_enable_lpm(udev);
2736
2502 /* System sleep transitions should never fail */ 2737 /* System sleep transitions should never fail */
2503 if (!PMSG_IS_AUTO(msg)) 2738 if (!PMSG_IS_AUTO(msg))
2504 status = 0; 2739 status = 0;
@@ -2696,6 +2931,9 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg)
2696 /* Try to enable USB2 hardware LPM */ 2931 /* Try to enable USB2 hardware LPM */
2697 if (udev->usb2_hw_lpm_capable == 1) 2932 if (udev->usb2_hw_lpm_capable == 1)
2698 usb_set_usb2_hardware_lpm(udev, 1); 2933 usb_set_usb2_hardware_lpm(udev, 1);
2934
2935 /* Try to enable USB3 LPM */
2936 usb_unlocked_enable_lpm(udev);
2699 } 2937 }
2700 2938
2701 return status; 2939 return status;
@@ -2824,11 +3062,429 @@ void usb_root_hub_lost_power(struct usb_device *rhdev)
2824} 3062}
2825EXPORT_SYMBOL_GPL(usb_root_hub_lost_power); 3063EXPORT_SYMBOL_GPL(usb_root_hub_lost_power);
2826 3064
3065static const char * const usb3_lpm_names[] = {
3066 "U0",
3067 "U1",
3068 "U2",
3069 "U3",
3070};
3071
3072/*
3073 * Send a Set SEL control transfer to the device, prior to enabling
3074 * device-initiated U1 or U2. This lets the device know the exit latencies from
3075 * the time the device initiates a U1 or U2 exit, to the time it will receive a
3076 * packet from the host.
3077 *
3078 * This function will fail if the SEL or PEL values for udev are greater than
3079 * the maximum allowed values for the link state to be enabled.
3080 */
3081static int usb_req_set_sel(struct usb_device *udev, enum usb3_link_state state)
3082{
3083 struct usb_set_sel_req *sel_values;
3084 unsigned long long u1_sel;
3085 unsigned long long u1_pel;
3086 unsigned long long u2_sel;
3087 unsigned long long u2_pel;
3088 int ret;
3089
3090 /* Convert SEL and PEL stored in ns to us */
3091 u1_sel = DIV_ROUND_UP(udev->u1_params.sel, 1000);
3092 u1_pel = DIV_ROUND_UP(udev->u1_params.pel, 1000);
3093 u2_sel = DIV_ROUND_UP(udev->u2_params.sel, 1000);
3094 u2_pel = DIV_ROUND_UP(udev->u2_params.pel, 1000);
3095
3096 /*
3097 * Make sure that the calculated SEL and PEL values for the link
3098 * state we're enabling aren't bigger than the max SEL/PEL
3099 * value that will fit in the SET SEL control transfer.
3100 * Otherwise the device would get an incorrect idea of the exit
3101 * latency for the link state, and could start a device-initiated
3102 * U1/U2 when the exit latencies are too high.
3103 */
3104 if ((state == USB3_LPM_U1 &&
3105 (u1_sel > USB3_LPM_MAX_U1_SEL_PEL ||
3106 u1_pel > USB3_LPM_MAX_U1_SEL_PEL)) ||
3107 (state == USB3_LPM_U2 &&
3108 (u2_sel > USB3_LPM_MAX_U2_SEL_PEL ||
3109 u2_pel > USB3_LPM_MAX_U2_SEL_PEL))) {
3110 dev_dbg(&udev->dev, "Device-initiated %s disabled due "
3111 "to long SEL %llu ms or PEL %llu ms\n",
3112 usb3_lpm_names[state], u1_sel, u1_pel);
3113 return -EINVAL;
3114 }
3115
3116 /*
3117 * If we're enabling device-initiated LPM for one link state,
3118 * but the other link state has a too high SEL or PEL value,
3119 * just set those values to the max in the Set SEL request.
3120 */
3121 if (u1_sel > USB3_LPM_MAX_U1_SEL_PEL)
3122 u1_sel = USB3_LPM_MAX_U1_SEL_PEL;
3123
3124 if (u1_pel > USB3_LPM_MAX_U1_SEL_PEL)
3125 u1_pel = USB3_LPM_MAX_U1_SEL_PEL;
3126
3127 if (u2_sel > USB3_LPM_MAX_U2_SEL_PEL)
3128 u2_sel = USB3_LPM_MAX_U2_SEL_PEL;
3129
3130 if (u2_pel > USB3_LPM_MAX_U2_SEL_PEL)
3131 u2_pel = USB3_LPM_MAX_U2_SEL_PEL;
3132
3133 /*
3134 * usb_enable_lpm() can be called as part of a failed device reset,
3135 * which may be initiated by an error path of a mass storage driver.
3136 * Therefore, use GFP_NOIO.
3137 */
3138 sel_values = kmalloc(sizeof *(sel_values), GFP_NOIO);
3139 if (!sel_values)
3140 return -ENOMEM;
3141
3142 sel_values->u1_sel = u1_sel;
3143 sel_values->u1_pel = u1_pel;
3144 sel_values->u2_sel = cpu_to_le16(u2_sel);
3145 sel_values->u2_pel = cpu_to_le16(u2_pel);
3146
3147 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3148 USB_REQ_SET_SEL,
3149 USB_RECIP_DEVICE,
3150 0, 0,
3151 sel_values, sizeof *(sel_values),
3152 USB_CTRL_SET_TIMEOUT);
3153 kfree(sel_values);
3154 return ret;
3155}
3156
3157/*
3158 * Enable or disable device-initiated U1 or U2 transitions.
3159 */
3160static int usb_set_device_initiated_lpm(struct usb_device *udev,
3161 enum usb3_link_state state, bool enable)
3162{
3163 int ret;
3164 int feature;
3165
3166 switch (state) {
3167 case USB3_LPM_U1:
3168 feature = USB_DEVICE_U1_ENABLE;
3169 break;
3170 case USB3_LPM_U2:
3171 feature = USB_DEVICE_U2_ENABLE;
3172 break;
3173 default:
3174 dev_warn(&udev->dev, "%s: Can't %s non-U1 or U2 state.\n",
3175 __func__, enable ? "enable" : "disable");
3176 return -EINVAL;
3177 }
3178
3179 if (udev->state != USB_STATE_CONFIGURED) {
3180 dev_dbg(&udev->dev, "%s: Can't %s %s state "
3181 "for unconfigured device.\n",
3182 __func__, enable ? "enable" : "disable",
3183 usb3_lpm_names[state]);
3184 return 0;
3185 }
3186
3187 if (enable) {
3188 /*
3189 * First, let the device know about the exit latencies
3190 * associated with the link state we're about to enable.
3191 */
3192 ret = usb_req_set_sel(udev, state);
3193 if (ret < 0) {
3194 dev_warn(&udev->dev, "Set SEL for device-initiated "
3195 "%s failed.\n", usb3_lpm_names[state]);
3196 return -EBUSY;
3197 }
3198 /*
3199 * Now send the control transfer to enable device-initiated LPM
3200 * for either U1 or U2.
3201 */
3202 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3203 USB_REQ_SET_FEATURE,
3204 USB_RECIP_DEVICE,
3205 feature,
3206 0, NULL, 0,
3207 USB_CTRL_SET_TIMEOUT);
3208 } else {
3209 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3210 USB_REQ_CLEAR_FEATURE,
3211 USB_RECIP_DEVICE,
3212 feature,
3213 0, NULL, 0,
3214 USB_CTRL_SET_TIMEOUT);
3215 }
3216 if (ret < 0) {
3217 dev_warn(&udev->dev, "%s of device-initiated %s failed.\n",
3218 enable ? "Enable" : "Disable",
3219 usb3_lpm_names[state]);
3220 return -EBUSY;
3221 }
3222 return 0;
3223}
3224
3225static int usb_set_lpm_timeout(struct usb_device *udev,
3226 enum usb3_link_state state, int timeout)
3227{
3228 int ret;
3229 int feature;
3230
3231 switch (state) {
3232 case USB3_LPM_U1:
3233 feature = USB_PORT_FEAT_U1_TIMEOUT;
3234 break;
3235 case USB3_LPM_U2:
3236 feature = USB_PORT_FEAT_U2_TIMEOUT;
3237 break;
3238 default:
3239 dev_warn(&udev->dev, "%s: Can't set timeout for non-U1 or U2 state.\n",
3240 __func__);
3241 return -EINVAL;
3242 }
3243
3244 if (state == USB3_LPM_U1 && timeout > USB3_LPM_U1_MAX_TIMEOUT &&
3245 timeout != USB3_LPM_DEVICE_INITIATED) {
3246 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x, "
3247 "which is a reserved value.\n",
3248 usb3_lpm_names[state], timeout);
3249 return -EINVAL;
3250 }
3251
3252 ret = set_port_feature(udev->parent,
3253 USB_PORT_LPM_TIMEOUT(timeout) | udev->portnum,
3254 feature);
3255 if (ret < 0) {
3256 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x,"
3257 "error code %i\n", usb3_lpm_names[state],
3258 timeout, ret);
3259 return -EBUSY;
3260 }
3261 if (state == USB3_LPM_U1)
3262 udev->u1_params.timeout = timeout;
3263 else
3264 udev->u2_params.timeout = timeout;
3265 return 0;
3266}
3267
3268/*
3269 * Enable the hub-initiated U1/U2 idle timeouts, and enable device-initiated
3270 * U1/U2 entry.
3271 *
3272 * We will attempt to enable U1 or U2, but there are no guarantees that the
3273 * control transfers to set the hub timeout or enable device-initiated U1/U2
3274 * will be successful.
3275 *
3276 * If we cannot set the parent hub U1/U2 timeout, we attempt to let the xHCI
3277 * driver know about it. If that call fails, it should be harmless, and just
3278 * take up more slightly more bus bandwidth for unnecessary U1/U2 exit latency.
3279 */
3280static void usb_enable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
3281 enum usb3_link_state state)
3282{
3283 int timeout;
3284
3285 /* We allow the host controller to set the U1/U2 timeout internally
3286 * first, so that it can change its schedule to account for the
3287 * additional latency to send data to a device in a lower power
3288 * link state.
3289 */
3290 timeout = hcd->driver->enable_usb3_lpm_timeout(hcd, udev, state);
3291
3292 /* xHCI host controller doesn't want to enable this LPM state. */
3293 if (timeout == 0)
3294 return;
3295
3296 if (timeout < 0) {
3297 dev_warn(&udev->dev, "Could not enable %s link state, "
3298 "xHCI error %i.\n", usb3_lpm_names[state],
3299 timeout);
3300 return;
3301 }
3302
3303 if (usb_set_lpm_timeout(udev, state, timeout))
3304 /* If we can't set the parent hub U1/U2 timeout,
3305 * device-initiated LPM won't be allowed either, so let the xHCI
3306 * host know that this link state won't be enabled.
3307 */
3308 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
3309
3310 /* Only a configured device will accept the Set Feature U1/U2_ENABLE */
3311 else if (udev->actconfig)
3312 usb_set_device_initiated_lpm(udev, state, true);
3313
3314}
3315
3316/*
3317 * Disable the hub-initiated U1/U2 idle timeouts, and disable device-initiated
3318 * U1/U2 entry.
3319 *
3320 * If this function returns -EBUSY, the parent hub will still allow U1/U2 entry.
3321 * If zero is returned, the parent will not allow the link to go into U1/U2.
3322 *
3323 * If zero is returned, device-initiated U1/U2 entry may still be enabled, but
3324 * it won't have an effect on the bus link state because the parent hub will
3325 * still disallow device-initiated U1/U2 entry.
3326 *
3327 * If zero is returned, the xHCI host controller may still think U1/U2 entry is
3328 * possible. The result will be slightly more bus bandwidth will be taken up
3329 * (to account for U1/U2 exit latency), but it should be harmless.
3330 */
3331static int usb_disable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
3332 enum usb3_link_state state)
3333{
3334 int feature;
3335
3336 switch (state) {
3337 case USB3_LPM_U1:
3338 feature = USB_PORT_FEAT_U1_TIMEOUT;
3339 break;
3340 case USB3_LPM_U2:
3341 feature = USB_PORT_FEAT_U2_TIMEOUT;
3342 break;
3343 default:
3344 dev_warn(&udev->dev, "%s: Can't disable non-U1 or U2 state.\n",
3345 __func__);
3346 return -EINVAL;
3347 }
3348
3349 if (usb_set_lpm_timeout(udev, state, 0))
3350 return -EBUSY;
3351
3352 usb_set_device_initiated_lpm(udev, state, false);
3353
3354 if (hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state))
3355 dev_warn(&udev->dev, "Could not disable xHCI %s timeout, "
3356 "bus schedule bandwidth may be impacted.\n",
3357 usb3_lpm_names[state]);
3358 return 0;
3359}
3360
3361/*
3362 * Disable hub-initiated and device-initiated U1 and U2 entry.
3363 * Caller must own the bandwidth_mutex.
3364 *
3365 * This will call usb_enable_lpm() on failure, which will decrement
3366 * lpm_disable_count, and will re-enable LPM if lpm_disable_count reaches zero.
3367 */
3368int usb_disable_lpm(struct usb_device *udev)
3369{
3370 struct usb_hcd *hcd;
3371
3372 if (!udev || !udev->parent ||
3373 udev->speed != USB_SPEED_SUPER ||
3374 !udev->lpm_capable)
3375 return 0;
3376
3377 hcd = bus_to_hcd(udev->bus);
3378 if (!hcd || !hcd->driver->disable_usb3_lpm_timeout)
3379 return 0;
3380
3381 udev->lpm_disable_count++;
3382 if ((udev->u1_params.timeout == 0 && udev->u1_params.timeout == 0))
3383 return 0;
3384
3385 /* If LPM is enabled, attempt to disable it. */
3386 if (usb_disable_link_state(hcd, udev, USB3_LPM_U1))
3387 goto enable_lpm;
3388 if (usb_disable_link_state(hcd, udev, USB3_LPM_U2))
3389 goto enable_lpm;
3390
3391 return 0;
3392
3393enable_lpm:
3394 usb_enable_lpm(udev);
3395 return -EBUSY;
3396}
3397EXPORT_SYMBOL_GPL(usb_disable_lpm);
3398
3399/* Grab the bandwidth_mutex before calling usb_disable_lpm() */
3400int usb_unlocked_disable_lpm(struct usb_device *udev)
3401{
3402 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3403 int ret;
3404
3405 if (!hcd)
3406 return -EINVAL;
3407
3408 mutex_lock(hcd->bandwidth_mutex);
3409 ret = usb_disable_lpm(udev);
3410 mutex_unlock(hcd->bandwidth_mutex);
3411
3412 return ret;
3413}
3414EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
3415
3416/*
3417 * Attempt to enable device-initiated and hub-initiated U1 and U2 entry. The
3418 * xHCI host policy may prevent U1 or U2 from being enabled.
3419 *
3420 * Other callers may have disabled link PM, so U1 and U2 entry will be disabled
3421 * until the lpm_disable_count drops to zero. Caller must own the
3422 * bandwidth_mutex.
3423 */
3424void usb_enable_lpm(struct usb_device *udev)
3425{
3426 struct usb_hcd *hcd;
3427
3428 if (!udev || !udev->parent ||
3429 udev->speed != USB_SPEED_SUPER ||
3430 !udev->lpm_capable)
3431 return;
3432
3433 udev->lpm_disable_count--;
3434 hcd = bus_to_hcd(udev->bus);
3435 /* Double check that we can both enable and disable LPM.
3436 * Device must be configured to accept set feature U1/U2 timeout.
3437 */
3438 if (!hcd || !hcd->driver->enable_usb3_lpm_timeout ||
3439 !hcd->driver->disable_usb3_lpm_timeout)
3440 return;
3441
3442 if (udev->lpm_disable_count > 0)
3443 return;
3444
3445 usb_enable_link_state(hcd, udev, USB3_LPM_U1);
3446 usb_enable_link_state(hcd, udev, USB3_LPM_U2);
3447}
3448EXPORT_SYMBOL_GPL(usb_enable_lpm);
3449
3450/* Grab the bandwidth_mutex before calling usb_enable_lpm() */
3451void usb_unlocked_enable_lpm(struct usb_device *udev)
3452{
3453 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3454
3455 if (!hcd)
3456 return;
3457
3458 mutex_lock(hcd->bandwidth_mutex);
3459 usb_enable_lpm(udev);
3460 mutex_unlock(hcd->bandwidth_mutex);
3461}
3462EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm);
3463
3464
2827#else /* CONFIG_PM */ 3465#else /* CONFIG_PM */
2828 3466
2829#define hub_suspend NULL 3467#define hub_suspend NULL
2830#define hub_resume NULL 3468#define hub_resume NULL
2831#define hub_reset_resume NULL 3469#define hub_reset_resume NULL
3470
3471int usb_disable_lpm(struct usb_device *udev)
3472{
3473 return 0;
3474}
3475EXPORT_SYMBOL_GPL(usb_disable_lpm);
3476
3477void usb_enable_lpm(struct usb_device *udev) { }
3478EXPORT_SYMBOL_GPL(usb_enable_lpm);
3479
3480int usb_unlocked_disable_lpm(struct usb_device *udev)
3481{
3482 return 0;
3483}
3484EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
3485
3486void usb_unlocked_enable_lpm(struct usb_device *udev) { }
3487EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm);
2832#endif 3488#endif
2833 3489
2834 3490
@@ -3208,9 +3864,8 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
3208 if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) { 3864 if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) {
3209 retval = usb_get_bos_descriptor(udev); 3865 retval = usb_get_bos_descriptor(udev);
3210 if (!retval) { 3866 if (!retval) {
3211 if (udev->bos->ext_cap && (USB_LPM_SUPPORT & 3867 udev->lpm_capable = usb_device_supports_lpm(udev);
3212 le32_to_cpu(udev->bos->ext_cap->bmAttributes))) 3868 usb_set_lpm_parameters(udev);
3213 udev->lpm_capable = 1;
3214 } 3869 }
3215 } 3870 }
3216 3871
@@ -4042,11 +4697,22 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
4042 goto done; 4697 goto done;
4043 4698
4044 mutex_lock(hcd->bandwidth_mutex); 4699 mutex_lock(hcd->bandwidth_mutex);
4700 /* Disable LPM while we reset the device and reinstall the alt settings.
4701 * Device-initiated LPM settings, and system exit latency settings are
4702 * cleared when the device is reset, so we have to set them up again.
4703 */
4704 ret = usb_disable_lpm(udev);
4705 if (ret) {
4706 dev_err(&udev->dev, "%s Failed to disable LPM\n.", __func__);
4707 mutex_unlock(hcd->bandwidth_mutex);
4708 goto done;
4709 }
4045 ret = usb_hcd_alloc_bandwidth(udev, udev->actconfig, NULL, NULL); 4710 ret = usb_hcd_alloc_bandwidth(udev, udev->actconfig, NULL, NULL);
4046 if (ret < 0) { 4711 if (ret < 0) {
4047 dev_warn(&udev->dev, 4712 dev_warn(&udev->dev,
4048 "Busted HC? Not enough HCD resources for " 4713 "Busted HC? Not enough HCD resources for "
4049 "old configuration.\n"); 4714 "old configuration.\n");
4715 usb_enable_lpm(udev);
4050 mutex_unlock(hcd->bandwidth_mutex); 4716 mutex_unlock(hcd->bandwidth_mutex);
4051 goto re_enumerate; 4717 goto re_enumerate;
4052 } 4718 }
@@ -4058,6 +4724,7 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
4058 dev_err(&udev->dev, 4724 dev_err(&udev->dev,
4059 "can't restore configuration #%d (error=%d)\n", 4725 "can't restore configuration #%d (error=%d)\n",
4060 udev->actconfig->desc.bConfigurationValue, ret); 4726 udev->actconfig->desc.bConfigurationValue, ret);
4727 usb_enable_lpm(udev);
4061 mutex_unlock(hcd->bandwidth_mutex); 4728 mutex_unlock(hcd->bandwidth_mutex);
4062 goto re_enumerate; 4729 goto re_enumerate;
4063 } 4730 }
@@ -4096,10 +4763,13 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
4096 desc->bInterfaceNumber, 4763 desc->bInterfaceNumber,
4097 desc->bAlternateSetting, 4764 desc->bAlternateSetting,
4098 ret); 4765 ret);
4766 usb_unlocked_enable_lpm(udev);
4099 goto re_enumerate; 4767 goto re_enumerate;
4100 } 4768 }
4101 } 4769 }
4102 4770
4771 /* Now that the alt settings are re-installed, enable LPM. */
4772 usb_unlocked_enable_lpm(udev);
4103done: 4773done:
4104 return 0; 4774 return 0;
4105 4775
diff --git a/drivers/usb/core/inode.c b/drivers/usb/core/inode.c
deleted file mode 100644
index d2b9af59cba9..000000000000
--- a/drivers/usb/core/inode.c
+++ /dev/null
@@ -1,748 +0,0 @@
1/*****************************************************************************/
2
3/*
4 * inode.c -- Inode/Dentry functions for the USB device file system.
5 *
6 * Copyright (C) 2000 Thomas Sailer (sailer@ife.ee.ethz.ch)
7 * Copyright (C) 2001,2002,2004 Greg Kroah-Hartman (greg@kroah.com)
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 *
23 * History:
24 * 0.1 04.01.2000 Created
25 * 0.2 10.12.2001 converted to use the vfs layer better
26 */
27
28/*****************************************************************************/
29
30#include <linux/module.h>
31#include <linux/fs.h>
32#include <linux/mount.h>
33#include <linux/pagemap.h>
34#include <linux/init.h>
35#include <linux/proc_fs.h>
36#include <linux/usb.h>
37#include <linux/namei.h>
38#include <linux/usbdevice_fs.h>
39#include <linux/parser.h>
40#include <linux/notifier.h>
41#include <linux/seq_file.h>
42#include <linux/usb/hcd.h>
43#include <asm/byteorder.h>
44#include "usb.h"
45
46#define USBFS_DEFAULT_DEVMODE (S_IWUSR | S_IRUGO)
47#define USBFS_DEFAULT_BUSMODE (S_IXUGO | S_IRUGO)
48#define USBFS_DEFAULT_LISTMODE S_IRUGO
49
50static const struct file_operations default_file_operations;
51static struct vfsmount *usbfs_mount;
52static int usbfs_mount_count; /* = 0 */
53
54static struct dentry *devices_usbfs_dentry;
55static int num_buses; /* = 0 */
56
57static uid_t devuid; /* = 0 */
58static uid_t busuid; /* = 0 */
59static uid_t listuid; /* = 0 */
60static gid_t devgid; /* = 0 */
61static gid_t busgid; /* = 0 */
62static gid_t listgid; /* = 0 */
63static umode_t devmode = USBFS_DEFAULT_DEVMODE;
64static umode_t busmode = USBFS_DEFAULT_BUSMODE;
65static umode_t listmode = USBFS_DEFAULT_LISTMODE;
66
67static int usbfs_show_options(struct seq_file *seq, struct dentry *root)
68{
69 if (devuid != 0)
70 seq_printf(seq, ",devuid=%u", devuid);
71 if (devgid != 0)
72 seq_printf(seq, ",devgid=%u", devgid);
73 if (devmode != USBFS_DEFAULT_DEVMODE)
74 seq_printf(seq, ",devmode=%o", devmode);
75 if (busuid != 0)
76 seq_printf(seq, ",busuid=%u", busuid);
77 if (busgid != 0)
78 seq_printf(seq, ",busgid=%u", busgid);
79 if (busmode != USBFS_DEFAULT_BUSMODE)
80 seq_printf(seq, ",busmode=%o", busmode);
81 if (listuid != 0)
82 seq_printf(seq, ",listuid=%u", listuid);
83 if (listgid != 0)
84 seq_printf(seq, ",listgid=%u", listgid);
85 if (listmode != USBFS_DEFAULT_LISTMODE)
86 seq_printf(seq, ",listmode=%o", listmode);
87
88 return 0;
89}
90
91enum {
92 Opt_devuid, Opt_devgid, Opt_devmode,
93 Opt_busuid, Opt_busgid, Opt_busmode,
94 Opt_listuid, Opt_listgid, Opt_listmode,
95 Opt_err,
96};
97
98static const match_table_t tokens = {
99 {Opt_devuid, "devuid=%u"},
100 {Opt_devgid, "devgid=%u"},
101 {Opt_devmode, "devmode=%o"},
102 {Opt_busuid, "busuid=%u"},
103 {Opt_busgid, "busgid=%u"},
104 {Opt_busmode, "busmode=%o"},
105 {Opt_listuid, "listuid=%u"},
106 {Opt_listgid, "listgid=%u"},
107 {Opt_listmode, "listmode=%o"},
108 {Opt_err, NULL}
109};
110
111static int parse_options(struct super_block *s, char *data)
112{
113 char *p;
114 int option;
115
116 /* (re)set to defaults. */
117 devuid = 0;
118 busuid = 0;
119 listuid = 0;
120 devgid = 0;
121 busgid = 0;
122 listgid = 0;
123 devmode = USBFS_DEFAULT_DEVMODE;
124 busmode = USBFS_DEFAULT_BUSMODE;
125 listmode = USBFS_DEFAULT_LISTMODE;
126
127 while ((p = strsep(&data, ",")) != NULL) {
128 substring_t args[MAX_OPT_ARGS];
129 int token;
130 if (!*p)
131 continue;
132
133 token = match_token(p, tokens, args);
134 switch (token) {
135 case Opt_devuid:
136 if (match_int(&args[0], &option))
137 return -EINVAL;
138 devuid = option;
139 break;
140 case Opt_devgid:
141 if (match_int(&args[0], &option))
142 return -EINVAL;
143 devgid = option;
144 break;
145 case Opt_devmode:
146 if (match_octal(&args[0], &option))
147 return -EINVAL;
148 devmode = option & S_IRWXUGO;
149 break;
150 case Opt_busuid:
151 if (match_int(&args[0], &option))
152 return -EINVAL;
153 busuid = option;
154 break;
155 case Opt_busgid:
156 if (match_int(&args[0], &option))
157 return -EINVAL;
158 busgid = option;
159 break;
160 case Opt_busmode:
161 if (match_octal(&args[0], &option))
162 return -EINVAL;
163 busmode = option & S_IRWXUGO;
164 break;
165 case Opt_listuid:
166 if (match_int(&args[0], &option))
167 return -EINVAL;
168 listuid = option;
169 break;
170 case Opt_listgid:
171 if (match_int(&args[0], &option))
172 return -EINVAL;
173 listgid = option;
174 break;
175 case Opt_listmode:
176 if (match_octal(&args[0], &option))
177 return -EINVAL;
178 listmode = option & S_IRWXUGO;
179 break;
180 default:
181 printk(KERN_ERR "usbfs: unrecognised mount option "
182 "\"%s\" or missing value\n", p);
183 return -EINVAL;
184 }
185 }
186
187 return 0;
188}
189
190static void update_special(struct dentry *special)
191{
192 special->d_inode->i_uid = listuid;
193 special->d_inode->i_gid = listgid;
194 special->d_inode->i_mode = S_IFREG | listmode;
195}
196
197static void update_dev(struct dentry *dev)
198{
199 dev->d_inode->i_uid = devuid;
200 dev->d_inode->i_gid = devgid;
201 dev->d_inode->i_mode = S_IFREG | devmode;
202}
203
204static void update_bus(struct dentry *bus)
205{
206 struct dentry *dev = NULL;
207
208 bus->d_inode->i_uid = busuid;
209 bus->d_inode->i_gid = busgid;
210 bus->d_inode->i_mode = S_IFDIR | busmode;
211
212 mutex_lock(&bus->d_inode->i_mutex);
213
214 list_for_each_entry(dev, &bus->d_subdirs, d_u.d_child)
215 if (dev->d_inode)
216 update_dev(dev);
217
218 mutex_unlock(&bus->d_inode->i_mutex);
219}
220
221static void update_sb(struct super_block *sb)
222{
223 struct dentry *root = sb->s_root;
224 struct dentry *bus = NULL;
225
226 if (!root)
227 return;
228
229 mutex_lock_nested(&root->d_inode->i_mutex, I_MUTEX_PARENT);
230
231 list_for_each_entry(bus, &root->d_subdirs, d_u.d_child) {
232 if (bus->d_inode) {
233 switch (S_IFMT & bus->d_inode->i_mode) {
234 case S_IFDIR:
235 update_bus(bus);
236 break;
237 case S_IFREG:
238 update_special(bus);
239 break;
240 default:
241 printk(KERN_WARNING "usbfs: Unknown node %s "
242 "mode %x found on remount!\n",
243 bus->d_name.name, bus->d_inode->i_mode);
244 break;
245 }
246 }
247 }
248
249 mutex_unlock(&root->d_inode->i_mutex);
250}
251
252static int remount(struct super_block *sb, int *flags, char *data)
253{
254 /* If this is not a real mount,
255 * i.e. it's a simple_pin_fs from create_special_files,
256 * then ignore it.
257 */
258 if (*flags & MS_KERNMOUNT)
259 return 0;
260
261 if (parse_options(sb, data)) {
262 printk(KERN_WARNING "usbfs: mount parameter error.\n");
263 return -EINVAL;
264 }
265
266 if (usbfs_mount)
267 update_sb(usbfs_mount->mnt_sb);
268
269 return 0;
270}
271
272static struct inode *usbfs_get_inode (struct super_block *sb, umode_t mode, dev_t dev)
273{
274 struct inode *inode = new_inode(sb);
275
276 if (inode) {
277 inode->i_ino = get_next_ino();
278 inode_init_owner(inode, NULL, mode);
279 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
280 switch (mode & S_IFMT) {
281 default:
282 init_special_inode(inode, mode, dev);
283 break;
284 case S_IFREG:
285 inode->i_fop = &default_file_operations;
286 break;
287 case S_IFDIR:
288 inode->i_op = &simple_dir_inode_operations;
289 inode->i_fop = &simple_dir_operations;
290
291 /* directory inodes start off with i_nlink == 2 (for "." entry) */
292 inc_nlink(inode);
293 break;
294 }
295 }
296 return inode;
297}
298
299/* SMP-safe */
300static int usbfs_mknod (struct inode *dir, struct dentry *dentry, umode_t mode,
301 dev_t dev)
302{
303 struct inode *inode = usbfs_get_inode(dir->i_sb, mode, dev);
304 int error = -EPERM;
305
306 if (dentry->d_inode)
307 return -EEXIST;
308
309 if (inode) {
310 d_instantiate(dentry, inode);
311 dget(dentry);
312 error = 0;
313 }
314 return error;
315}
316
317static int usbfs_mkdir (struct inode *dir, struct dentry *dentry, umode_t mode)
318{
319 int res;
320
321 mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR;
322 res = usbfs_mknod (dir, dentry, mode, 0);
323 if (!res)
324 inc_nlink(dir);
325 return res;
326}
327
328static int usbfs_create (struct inode *dir, struct dentry *dentry, umode_t mode)
329{
330 mode = (mode & S_IALLUGO) | S_IFREG;
331 return usbfs_mknod (dir, dentry, mode, 0);
332}
333
334static inline int usbfs_positive (struct dentry *dentry)
335{
336 return dentry->d_inode && !d_unhashed(dentry);
337}
338
339static int usbfs_empty (struct dentry *dentry)
340{
341 struct list_head *list;
342
343 spin_lock(&dentry->d_lock);
344 list_for_each(list, &dentry->d_subdirs) {
345 struct dentry *de = list_entry(list, struct dentry, d_u.d_child);
346
347 spin_lock_nested(&de->d_lock, DENTRY_D_LOCK_NESTED);
348 if (usbfs_positive(de)) {
349 spin_unlock(&de->d_lock);
350 spin_unlock(&dentry->d_lock);
351 return 0;
352 }
353 spin_unlock(&de->d_lock);
354 }
355 spin_unlock(&dentry->d_lock);
356 return 1;
357}
358
359static int usbfs_unlink (struct inode *dir, struct dentry *dentry)
360{
361 struct inode *inode = dentry->d_inode;
362 mutex_lock(&inode->i_mutex);
363 drop_nlink(dentry->d_inode);
364 dput(dentry);
365 mutex_unlock(&inode->i_mutex);
366 d_delete(dentry);
367 return 0;
368}
369
370static int usbfs_rmdir(struct inode *dir, struct dentry *dentry)
371{
372 int error = -ENOTEMPTY;
373 struct inode * inode = dentry->d_inode;
374
375 mutex_lock(&inode->i_mutex);
376 dentry_unhash(dentry);
377 if (usbfs_empty(dentry)) {
378 dont_mount(dentry);
379 drop_nlink(dentry->d_inode);
380 drop_nlink(dentry->d_inode);
381 dput(dentry);
382 inode->i_flags |= S_DEAD;
383 drop_nlink(dir);
384 error = 0;
385 }
386 mutex_unlock(&inode->i_mutex);
387 if (!error)
388 d_delete(dentry);
389 return error;
390}
391
392
393/* default file operations */
394static ssize_t default_read_file (struct file *file, char __user *buf,
395 size_t count, loff_t *ppos)
396{
397 return 0;
398}
399
400static ssize_t default_write_file (struct file *file, const char __user *buf,
401 size_t count, loff_t *ppos)
402{
403 return count;
404}
405
406static loff_t default_file_lseek (struct file *file, loff_t offset, int orig)
407{
408 loff_t retval = -EINVAL;
409
410 mutex_lock(&file->f_path.dentry->d_inode->i_mutex);
411 switch(orig) {
412 case 0:
413 if (offset > 0) {
414 file->f_pos = offset;
415 retval = file->f_pos;
416 }
417 break;
418 case 1:
419 if ((offset + file->f_pos) > 0) {
420 file->f_pos += offset;
421 retval = file->f_pos;
422 }
423 break;
424 default:
425 break;
426 }
427 mutex_unlock(&file->f_path.dentry->d_inode->i_mutex);
428 return retval;
429}
430
431static const struct file_operations default_file_operations = {
432 .read = default_read_file,
433 .write = default_write_file,
434 .open = simple_open,
435 .llseek = default_file_lseek,
436};
437
438static const struct super_operations usbfs_ops = {
439 .statfs = simple_statfs,
440 .drop_inode = generic_delete_inode,
441 .remount_fs = remount,
442 .show_options = usbfs_show_options,
443};
444
445static int usbfs_fill_super(struct super_block *sb, void *data, int silent)
446{
447 struct inode *inode;
448
449 sb->s_blocksize = PAGE_CACHE_SIZE;
450 sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
451 sb->s_magic = USBDEVICE_SUPER_MAGIC;
452 sb->s_op = &usbfs_ops;
453 sb->s_time_gran = 1;
454 inode = usbfs_get_inode(sb, S_IFDIR | 0755, 0);
455 sb->s_root = d_make_root(inode);
456 if (!sb->s_root) {
457 dbg("%s: could not get root dentry!",__func__);
458 return -ENOMEM;
459 }
460 return 0;
461}
462
463/*
464 * fs_create_by_name - create a file, given a name
465 * @name: name of file
466 * @mode: type of file
467 * @parent: dentry of directory to create it in
468 * @dentry: resulting dentry of file
469 *
470 * This function handles both regular files and directories.
471 */
472static int fs_create_by_name (const char *name, umode_t mode,
473 struct dentry *parent, struct dentry **dentry)
474{
475 int error = 0;
476
477 /* If the parent is not specified, we create it in the root.
478 * We need the root dentry to do this, which is in the super
479 * block. A pointer to that is in the struct vfsmount that we
480 * have around.
481 */
482 if (!parent ) {
483 if (usbfs_mount)
484 parent = usbfs_mount->mnt_root;
485 }
486
487 if (!parent) {
488 dbg("Ah! can not find a parent!");
489 return -EFAULT;
490 }
491
492 *dentry = NULL;
493 mutex_lock(&parent->d_inode->i_mutex);
494 *dentry = lookup_one_len(name, parent, strlen(name));
495 if (!IS_ERR(*dentry)) {
496 if (S_ISDIR(mode))
497 error = usbfs_mkdir (parent->d_inode, *dentry, mode);
498 else
499 error = usbfs_create (parent->d_inode, *dentry, mode);
500 } else
501 error = PTR_ERR(*dentry);
502 mutex_unlock(&parent->d_inode->i_mutex);
503
504 return error;
505}
506
507static struct dentry *fs_create_file (const char *name, umode_t mode,
508 struct dentry *parent, void *data,
509 const struct file_operations *fops,
510 uid_t uid, gid_t gid)
511{
512 struct dentry *dentry;
513 int error;
514
515 dbg("creating file '%s'",name);
516
517 error = fs_create_by_name (name, mode, parent, &dentry);
518 if (error) {
519 dentry = NULL;
520 } else {
521 if (dentry->d_inode) {
522 if (data)
523 dentry->d_inode->i_private = data;
524 if (fops)
525 dentry->d_inode->i_fop = fops;
526 dentry->d_inode->i_uid = uid;
527 dentry->d_inode->i_gid = gid;
528 }
529 }
530
531 return dentry;
532}
533
534static void fs_remove_file (struct dentry *dentry)
535{
536 struct dentry *parent = dentry->d_parent;
537
538 if (!parent || !parent->d_inode)
539 return;
540
541 mutex_lock_nested(&parent->d_inode->i_mutex, I_MUTEX_PARENT);
542 if (usbfs_positive(dentry)) {
543 if (dentry->d_inode) {
544 if (S_ISDIR(dentry->d_inode->i_mode))
545 usbfs_rmdir(parent->d_inode, dentry);
546 else
547 usbfs_unlink(parent->d_inode, dentry);
548 dput(dentry);
549 }
550 }
551 mutex_unlock(&parent->d_inode->i_mutex);
552}
553
554/* --------------------------------------------------------------------- */
555
556static struct dentry *usb_mount(struct file_system_type *fs_type,
557 int flags, const char *dev_name, void *data)
558{
559 return mount_single(fs_type, flags, data, usbfs_fill_super);
560}
561
562static struct file_system_type usb_fs_type = {
563 .owner = THIS_MODULE,
564 .name = "usbfs",
565 .mount = usb_mount,
566 .kill_sb = kill_litter_super,
567};
568
569/* --------------------------------------------------------------------- */
570
571static int create_special_files (void)
572{
573 struct dentry *parent;
574 int retval;
575
576 /* create the devices special file */
577 retval = simple_pin_fs(&usb_fs_type, &usbfs_mount, &usbfs_mount_count);
578 if (retval) {
579 printk(KERN_ERR "Unable to get usbfs mount\n");
580 goto exit;
581 }
582
583 parent = usbfs_mount->mnt_root;
584 devices_usbfs_dentry = fs_create_file ("devices",
585 listmode | S_IFREG, parent,
586 NULL, &usbfs_devices_fops,
587 listuid, listgid);
588 if (devices_usbfs_dentry == NULL) {
589 printk(KERN_ERR "Unable to create devices usbfs file\n");
590 retval = -ENODEV;
591 goto error_clean_mounts;
592 }
593
594 goto exit;
595
596error_clean_mounts:
597 simple_release_fs(&usbfs_mount, &usbfs_mount_count);
598exit:
599 return retval;
600}
601
602static void remove_special_files (void)
603{
604 if (devices_usbfs_dentry)
605 fs_remove_file (devices_usbfs_dentry);
606 devices_usbfs_dentry = NULL;
607 simple_release_fs(&usbfs_mount, &usbfs_mount_count);
608}
609
610void usbfs_update_special (void)
611{
612 struct inode *inode;
613
614 if (devices_usbfs_dentry) {
615 inode = devices_usbfs_dentry->d_inode;
616 if (inode)
617 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
618 }
619}
620
621static void usbfs_add_bus(struct usb_bus *bus)
622{
623 struct dentry *parent;
624 char name[8];
625 int retval;
626
627 /* create the special files if this is the first bus added */
628 if (num_buses == 0) {
629 retval = create_special_files();
630 if (retval)
631 return;
632 }
633 ++num_buses;
634
635 sprintf (name, "%03d", bus->busnum);
636
637 parent = usbfs_mount->mnt_root;
638 bus->usbfs_dentry = fs_create_file (name, busmode | S_IFDIR, parent,
639 bus, NULL, busuid, busgid);
640 if (bus->usbfs_dentry == NULL) {
641 printk(KERN_ERR "Error creating usbfs bus entry\n");
642 return;
643 }
644}
645
646static void usbfs_remove_bus(struct usb_bus *bus)
647{
648 if (bus->usbfs_dentry) {
649 fs_remove_file (bus->usbfs_dentry);
650 bus->usbfs_dentry = NULL;
651 }
652
653 --num_buses;
654 if (num_buses <= 0) {
655 remove_special_files();
656 num_buses = 0;
657 }
658}
659
660static void usbfs_add_device(struct usb_device *dev)
661{
662 char name[8];
663 int i;
664 int i_size;
665
666 sprintf (name, "%03d", dev->devnum);
667 dev->usbfs_dentry = fs_create_file (name, devmode | S_IFREG,
668 dev->bus->usbfs_dentry, dev,
669 &usbdev_file_operations,
670 devuid, devgid);
671 if (dev->usbfs_dentry == NULL) {
672 printk(KERN_ERR "Error creating usbfs device entry\n");
673 return;
674 }
675
676 /* Set the size of the device's file to be
677 * equal to the size of the device descriptors. */
678 i_size = sizeof (struct usb_device_descriptor);
679 for (i = 0; i < dev->descriptor.bNumConfigurations; ++i) {
680 struct usb_config_descriptor *config =
681 (struct usb_config_descriptor *)dev->rawdescriptors[i];
682 i_size += le16_to_cpu(config->wTotalLength);
683 }
684 if (dev->usbfs_dentry->d_inode)
685 dev->usbfs_dentry->d_inode->i_size = i_size;
686}
687
688static void usbfs_remove_device(struct usb_device *dev)
689{
690 if (dev->usbfs_dentry) {
691 fs_remove_file (dev->usbfs_dentry);
692 dev->usbfs_dentry = NULL;
693 }
694}
695
696static int usbfs_notify(struct notifier_block *self, unsigned long action, void *dev)
697{
698 switch (action) {
699 case USB_DEVICE_ADD:
700 usbfs_add_device(dev);
701 break;
702 case USB_DEVICE_REMOVE:
703 usbfs_remove_device(dev);
704 break;
705 case USB_BUS_ADD:
706 usbfs_add_bus(dev);
707 break;
708 case USB_BUS_REMOVE:
709 usbfs_remove_bus(dev);
710 }
711
712 usbfs_update_special();
713 usbfs_conn_disc_event();
714 return NOTIFY_OK;
715}
716
717static struct notifier_block usbfs_nb = {
718 .notifier_call = usbfs_notify,
719};
720
721/* --------------------------------------------------------------------- */
722
723static struct proc_dir_entry *usbdir = NULL;
724
725int __init usbfs_init(void)
726{
727 int retval;
728
729 retval = register_filesystem(&usb_fs_type);
730 if (retval)
731 return retval;
732
733 usb_register_notify(&usbfs_nb);
734
735 /* create mount point for usbfs */
736 usbdir = proc_mkdir("bus/usb", NULL);
737
738 return 0;
739}
740
741void usbfs_cleanup(void)
742{
743 usb_unregister_notify(&usbfs_nb);
744 unregister_filesystem(&usb_fs_type);
745 if (usbdir)
746 remove_proc_entry("bus/usb", NULL);
747}
748
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index ca717da3be95..b548cf1dbc62 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -1308,10 +1308,19 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1308 * Remove the current alt setting and add the new alt setting. 1308 * Remove the current alt setting and add the new alt setting.
1309 */ 1309 */
1310 mutex_lock(hcd->bandwidth_mutex); 1310 mutex_lock(hcd->bandwidth_mutex);
1311 /* Disable LPM, and re-enable it once the new alt setting is installed,
1312 * so that the xHCI driver can recalculate the U1/U2 timeouts.
1313 */
1314 if (usb_disable_lpm(dev)) {
1315 dev_err(&iface->dev, "%s Failed to disable LPM\n.", __func__);
1316 mutex_unlock(hcd->bandwidth_mutex);
1317 return -ENOMEM;
1318 }
1311 ret = usb_hcd_alloc_bandwidth(dev, NULL, iface->cur_altsetting, alt); 1319 ret = usb_hcd_alloc_bandwidth(dev, NULL, iface->cur_altsetting, alt);
1312 if (ret < 0) { 1320 if (ret < 0) {
1313 dev_info(&dev->dev, "Not enough bandwidth for altsetting %d\n", 1321 dev_info(&dev->dev, "Not enough bandwidth for altsetting %d\n",
1314 alternate); 1322 alternate);
1323 usb_enable_lpm(dev);
1315 mutex_unlock(hcd->bandwidth_mutex); 1324 mutex_unlock(hcd->bandwidth_mutex);
1316 return ret; 1325 return ret;
1317 } 1326 }
@@ -1334,6 +1343,7 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1334 } else if (ret < 0) { 1343 } else if (ret < 0) {
1335 /* Re-instate the old alt setting */ 1344 /* Re-instate the old alt setting */
1336 usb_hcd_alloc_bandwidth(dev, NULL, alt, iface->cur_altsetting); 1345 usb_hcd_alloc_bandwidth(dev, NULL, alt, iface->cur_altsetting);
1346 usb_enable_lpm(dev);
1337 mutex_unlock(hcd->bandwidth_mutex); 1347 mutex_unlock(hcd->bandwidth_mutex);
1338 return ret; 1348 return ret;
1339 } 1349 }
@@ -1354,6 +1364,9 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1354 1364
1355 iface->cur_altsetting = alt; 1365 iface->cur_altsetting = alt;
1356 1366
1367 /* Now that the interface is installed, re-enable LPM. */
1368 usb_unlocked_enable_lpm(dev);
1369
1357 /* If the interface only has one altsetting and the device didn't 1370 /* If the interface only has one altsetting and the device didn't
1358 * accept the request, we attempt to carry out the equivalent action 1371 * accept the request, we attempt to carry out the equivalent action
1359 * by manually clearing the HALT feature for each endpoint in the 1372 * by manually clearing the HALT feature for each endpoint in the
@@ -1437,6 +1450,14 @@ int usb_reset_configuration(struct usb_device *dev)
1437 config = dev->actconfig; 1450 config = dev->actconfig;
1438 retval = 0; 1451 retval = 0;
1439 mutex_lock(hcd->bandwidth_mutex); 1452 mutex_lock(hcd->bandwidth_mutex);
1453 /* Disable LPM, and re-enable it once the configuration is reset, so
1454 * that the xHCI driver can recalculate the U1/U2 timeouts.
1455 */
1456 if (usb_disable_lpm(dev)) {
1457 dev_err(&dev->dev, "%s Failed to disable LPM\n.", __func__);
1458 mutex_unlock(hcd->bandwidth_mutex);
1459 return -ENOMEM;
1460 }
1440 /* Make sure we have enough bandwidth for each alternate setting 0 */ 1461 /* Make sure we have enough bandwidth for each alternate setting 0 */
1441 for (i = 0; i < config->desc.bNumInterfaces; i++) { 1462 for (i = 0; i < config->desc.bNumInterfaces; i++) {
1442 struct usb_interface *intf = config->interface[i]; 1463 struct usb_interface *intf = config->interface[i];
@@ -1465,6 +1486,7 @@ reset_old_alts:
1465 usb_hcd_alloc_bandwidth(dev, NULL, 1486 usb_hcd_alloc_bandwidth(dev, NULL,
1466 alt, intf->cur_altsetting); 1487 alt, intf->cur_altsetting);
1467 } 1488 }
1489 usb_enable_lpm(dev);
1468 mutex_unlock(hcd->bandwidth_mutex); 1490 mutex_unlock(hcd->bandwidth_mutex);
1469 return retval; 1491 return retval;
1470 } 1492 }
@@ -1502,6 +1524,8 @@ reset_old_alts:
1502 create_intf_ep_devs(intf); 1524 create_intf_ep_devs(intf);
1503 } 1525 }
1504 } 1526 }
1527 /* Now that the interfaces are installed, re-enable LPM. */
1528 usb_unlocked_enable_lpm(dev);
1505 return 0; 1529 return 0;
1506} 1530}
1507EXPORT_SYMBOL_GPL(usb_reset_configuration); 1531EXPORT_SYMBOL_GPL(usb_reset_configuration);
@@ -1763,8 +1787,18 @@ free_interfaces:
1763 * this call fails, the device state is unchanged. 1787 * this call fails, the device state is unchanged.
1764 */ 1788 */
1765 mutex_lock(hcd->bandwidth_mutex); 1789 mutex_lock(hcd->bandwidth_mutex);
1790 /* Disable LPM, and re-enable it once the new configuration is
1791 * installed, so that the xHCI driver can recalculate the U1/U2
1792 * timeouts.
1793 */
1794 if (usb_disable_lpm(dev)) {
1795 dev_err(&dev->dev, "%s Failed to disable LPM\n.", __func__);
1796 mutex_unlock(hcd->bandwidth_mutex);
1797 return -ENOMEM;
1798 }
1766 ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL); 1799 ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
1767 if (ret < 0) { 1800 if (ret < 0) {
1801 usb_enable_lpm(dev);
1768 mutex_unlock(hcd->bandwidth_mutex); 1802 mutex_unlock(hcd->bandwidth_mutex);
1769 usb_autosuspend_device(dev); 1803 usb_autosuspend_device(dev);
1770 goto free_interfaces; 1804 goto free_interfaces;
@@ -1784,6 +1818,7 @@ free_interfaces:
1784 if (!cp) { 1818 if (!cp) {
1785 usb_set_device_state(dev, USB_STATE_ADDRESS); 1819 usb_set_device_state(dev, USB_STATE_ADDRESS);
1786 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL); 1820 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1821 usb_enable_lpm(dev);
1787 mutex_unlock(hcd->bandwidth_mutex); 1822 mutex_unlock(hcd->bandwidth_mutex);
1788 usb_autosuspend_device(dev); 1823 usb_autosuspend_device(dev);
1789 goto free_interfaces; 1824 goto free_interfaces;
@@ -1838,6 +1873,9 @@ free_interfaces:
1838 !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS)) 1873 !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
1839 cp->string = usb_cache_string(dev, cp->desc.iConfiguration); 1874 cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
1840 1875
1876 /* Now that the interfaces are installed, re-enable LPM. */
1877 usb_unlocked_enable_lpm(dev);
1878
1841 /* Now that all the interfaces are set up, register them 1879 /* Now that all the interfaces are set up, register them
1842 * to trigger binding of drivers to interfaces. probe() 1880 * to trigger binding of drivers to interfaces. probe()
1843 * routines may install different altsettings and may 1881 * routines may install different altsettings and may
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 4c65eb6a867a..32d3adc315f5 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -123,6 +123,9 @@ static const struct usb_device_id usb_quirk_list[] = {
123 /* Guillemot Webcam Hercules Dualpix Exchange*/ 123 /* Guillemot Webcam Hercules Dualpix Exchange*/
124 { USB_DEVICE(0x06f8, 0x3005), .driver_info = USB_QUIRK_RESET_RESUME }, 124 { USB_DEVICE(0x06f8, 0x3005), .driver_info = USB_QUIRK_RESET_RESUME },
125 125
126 /* Midiman M-Audio Keystation 88es */
127 { USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME },
128
126 /* M-Systems Flash Disk Pioneers */ 129 /* M-Systems Flash Disk Pioneers */
127 { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, 130 { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
128 131
diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
index cd9b3a2cd8a7..9d912bfdcffe 100644
--- a/drivers/usb/core/urb.c
+++ b/drivers/usb/core/urb.c
@@ -681,6 +681,27 @@ void usb_unpoison_urb(struct urb *urb)
681EXPORT_SYMBOL_GPL(usb_unpoison_urb); 681EXPORT_SYMBOL_GPL(usb_unpoison_urb);
682 682
683/** 683/**
684 * usb_block_urb - reliably prevent further use of an URB
685 * @urb: pointer to URB to be blocked, may be NULL
686 *
687 * After the routine has run, attempts to resubmit the URB will fail
688 * with error -EPERM. Thus even if the URB's completion handler always
689 * tries to resubmit, it will not succeed and the URB will become idle.
690 *
691 * The URB must not be deallocated while this routine is running. In
692 * particular, when a driver calls this routine, it must insure that the
693 * completion handler cannot deallocate the URB.
694 */
695void usb_block_urb(struct urb *urb)
696{
697 if (!urb)
698 return;
699
700 atomic_inc(&urb->reject);
701}
702EXPORT_SYMBOL_GPL(usb_block_urb);
703
704/**
684 * usb_kill_anchored_urbs - cancel transfer requests en masse 705 * usb_kill_anchored_urbs - cancel transfer requests en masse
685 * @anchor: anchor the requests are bound to 706 * @anchor: anchor the requests are bound to
686 * 707 *
diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c
new file mode 100644
index 000000000000..8947b203d5a4
--- /dev/null
+++ b/drivers/usb/core/usb-acpi.c
@@ -0,0 +1,117 @@
1/*
2 * USB-ACPI glue code
3 *
4 * Copyright 2012 Red Hat <mjg@redhat.com>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation, version 2.
9 *
10 */
11#include <linux/module.h>
12#include <linux/usb.h>
13#include <linux/device.h>
14#include <linux/errno.h>
15#include <linux/kernel.h>
16#include <linux/acpi.h>
17#include <linux/pci.h>
18#include <acpi/acpi_bus.h>
19
20#include "usb.h"
21
22static int usb_acpi_check_upc(struct usb_device *udev, acpi_handle handle)
23{
24 acpi_status status;
25 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
26 union acpi_object *upc;
27 int ret = 0;
28
29 status = acpi_evaluate_object(handle, "_UPC", NULL, &buffer);
30
31 if (ACPI_FAILURE(status))
32 return -ENODEV;
33
34 upc = buffer.pointer;
35
36 if (!upc || (upc->type != ACPI_TYPE_PACKAGE)
37 || upc->package.count != 4) {
38 ret = -EINVAL;
39 goto out;
40 }
41
42 if (upc->package.elements[0].integer.value)
43 udev->removable = USB_DEVICE_REMOVABLE;
44 else
45 udev->removable = USB_DEVICE_FIXED;
46
47out:
48 kfree(upc);
49 return ret;
50}
51
52static int usb_acpi_check_pld(struct usb_device *udev, acpi_handle handle)
53{
54 acpi_status status;
55 struct acpi_pld pld;
56
57 status = acpi_get_physical_device_location(handle, &pld);
58
59 if (ACPI_FAILURE(status))
60 return -ENODEV;
61
62 if (pld.user_visible)
63 udev->removable = USB_DEVICE_REMOVABLE;
64 else
65 udev->removable = USB_DEVICE_FIXED;
66
67 return 0;
68}
69
70static int usb_acpi_find_device(struct device *dev, acpi_handle *handle)
71{
72 struct usb_device *udev;
73 struct device *parent;
74 acpi_handle *parent_handle;
75
76 if (!is_usb_device(dev))
77 return -ENODEV;
78
79 udev = to_usb_device(dev);
80 parent = dev->parent;
81 parent_handle = DEVICE_ACPI_HANDLE(parent);
82
83 if (!parent_handle)
84 return -ENODEV;
85
86 *handle = acpi_get_child(parent_handle, udev->portnum);
87
88 if (!*handle)
89 return -ENODEV;
90
91 /*
92 * PLD will tell us whether a port is removable to the user or
93 * not. If we don't get an answer from PLD (it's not present
94 * or it's malformed) then try to infer it from UPC. If a
95 * device isn't connectable then it's probably not removable.
96 */
97 if (usb_acpi_check_pld(udev, *handle) != 0)
98 usb_acpi_check_upc(udev, *handle);
99
100 return 0;
101}
102
103static struct acpi_bus_type usb_acpi_bus = {
104 .bus = &usb_bus_type,
105 .find_bridge = NULL,
106 .find_device = usb_acpi_find_device,
107};
108
109int usb_acpi_register(void)
110{
111 return register_acpi_bus_type(&usb_acpi_bus);
112}
113
114void usb_acpi_unregister(void)
115{
116 unregister_acpi_bus_type(&usb_acpi_bus);
117}
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index c74ba7bbc748..25d0c61c3f8a 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -1015,6 +1015,7 @@ static int __init usb_init(void)
1015 if (retval) 1015 if (retval)
1016 goto out; 1016 goto out;
1017 1017
1018 usb_acpi_register();
1018 retval = bus_register(&usb_bus_type); 1019 retval = bus_register(&usb_bus_type);
1019 if (retval) 1020 if (retval)
1020 goto bus_register_failed; 1021 goto bus_register_failed;
@@ -1030,9 +1031,6 @@ static int __init usb_init(void)
1030 retval = usb_devio_init(); 1031 retval = usb_devio_init();
1031 if (retval) 1032 if (retval)
1032 goto usb_devio_init_failed; 1033 goto usb_devio_init_failed;
1033 retval = usbfs_init();
1034 if (retval)
1035 goto fs_init_failed;
1036 retval = usb_hub_init(); 1034 retval = usb_hub_init();
1037 if (retval) 1035 if (retval)
1038 goto hub_init_failed; 1036 goto hub_init_failed;
@@ -1042,8 +1040,6 @@ static int __init usb_init(void)
1042 1040
1043 usb_hub_cleanup(); 1041 usb_hub_cleanup();
1044hub_init_failed: 1042hub_init_failed:
1045 usbfs_cleanup();
1046fs_init_failed:
1047 usb_devio_cleanup(); 1043 usb_devio_cleanup();
1048usb_devio_init_failed: 1044usb_devio_init_failed:
1049 usb_deregister(&usbfs_driver); 1045 usb_deregister(&usbfs_driver);
@@ -1054,6 +1050,7 @@ major_init_failed:
1054bus_notifier_failed: 1050bus_notifier_failed:
1055 bus_unregister(&usb_bus_type); 1051 bus_unregister(&usb_bus_type);
1056bus_register_failed: 1052bus_register_failed:
1053 usb_acpi_unregister();
1057 usb_debugfs_cleanup(); 1054 usb_debugfs_cleanup();
1058out: 1055out:
1059 return retval; 1056 return retval;
@@ -1070,12 +1067,12 @@ static void __exit usb_exit(void)
1070 1067
1071 usb_deregister_device_driver(&usb_generic_driver); 1068 usb_deregister_device_driver(&usb_generic_driver);
1072 usb_major_cleanup(); 1069 usb_major_cleanup();
1073 usbfs_cleanup();
1074 usb_deregister(&usbfs_driver); 1070 usb_deregister(&usbfs_driver);
1075 usb_devio_cleanup(); 1071 usb_devio_cleanup();
1076 usb_hub_cleanup(); 1072 usb_hub_cleanup();
1077 bus_unregister_notifier(&usb_bus_type, &usb_bus_nb); 1073 bus_unregister_notifier(&usb_bus_type, &usb_bus_nb);
1078 bus_unregister(&usb_bus_type); 1074 bus_unregister(&usb_bus_type);
1075 usb_acpi_unregister();
1079 usb_debugfs_cleanup(); 1076 usb_debugfs_cleanup();
1080} 1077}
1081 1078
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
index 71648dcbe438..5c5c538ea73d 100644
--- a/drivers/usb/core/usb.h
+++ b/drivers/usb/core/usb.h
@@ -156,3 +156,10 @@ extern void usb_notify_remove_device(struct usb_device *udev);
156extern void usb_notify_add_bus(struct usb_bus *ubus); 156extern void usb_notify_add_bus(struct usb_bus *ubus);
157extern void usb_notify_remove_bus(struct usb_bus *ubus); 157extern void usb_notify_remove_bus(struct usb_bus *ubus);
158 158
159#ifdef CONFIG_ACPI
160extern int usb_acpi_register(void);
161extern void usb_acpi_unregister(void);
162#else
163static inline int usb_acpi_register(void) { return 0; };
164static inline void usb_acpi_unregister(void) { };
165#endif
diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
index d8f741f9e56e..d13c60f42139 100644
--- a/drivers/usb/dwc3/Kconfig
+++ b/drivers/usb/dwc3/Kconfig
@@ -4,7 +4,7 @@ config USB_DWC3
4 select USB_OTG_UTILS 4 select USB_OTG_UTILS
5 select USB_GADGET_DUALSPEED 5 select USB_GADGET_DUALSPEED
6 select USB_GADGET_SUPERSPEED 6 select USB_GADGET_SUPERSPEED
7 select USB_XHCI_PLATFORM 7 select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD
8 help 8 help
9 Say Y or M here if your system has a Dual Role SuperSpeed 9 Say Y or M here if your system has a Dual Role SuperSpeed
10 USB controller based on the DesignWare USB3 IP Core. 10 USB controller based on the DesignWare USB3 IP Core.
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 99b58d84553a..1040bdb8dc88 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -410,7 +410,6 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
410 struct device *dev = &pdev->dev; 410 struct device *dev = &pdev->dev;
411 411
412 int ret = -ENOMEM; 412 int ret = -ENOMEM;
413 int irq;
414 413
415 void __iomem *regs; 414 void __iomem *regs;
416 void *mem; 415 void *mem;
@@ -425,15 +424,28 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
425 dwc = PTR_ALIGN(mem, DWC3_ALIGN_MASK + 1); 424 dwc = PTR_ALIGN(mem, DWC3_ALIGN_MASK + 1);
426 dwc->mem = mem; 425 dwc->mem = mem;
427 426
428 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 427 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
429 if (!res) { 428 if (!res) {
430 dev_err(dev, "missing resource\n"); 429 dev_err(dev, "missing IRQ\n");
431 return -ENODEV; 430 return -ENODEV;
432 } 431 }
432 dwc->xhci_resources[1] = *res;
433 433
434 dwc->res = res; 434 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
435 435 if (!res) {
436 res = devm_request_mem_region(dev, res->start, resource_size(res), 436 dev_err(dev, "missing memory resource\n");
437 return -ENODEV;
438 }
439 dwc->xhci_resources[0] = *res;
440 dwc->xhci_resources[0].end = dwc->xhci_resources[0].start +
441 DWC3_XHCI_REGS_END;
442
443 /*
444 * Request memory region but exclude xHCI regs,
445 * since it will be requested by the xhci-plat driver.
446 */
447 res = devm_request_mem_region(dev, res->start + DWC3_GLOBALS_REGS_START,
448 resource_size(res) - DWC3_GLOBALS_REGS_START,
437 dev_name(dev)); 449 dev_name(dev));
438 if (!res) { 450 if (!res) {
439 dev_err(dev, "can't request mem region\n"); 451 dev_err(dev, "can't request mem region\n");
@@ -446,19 +458,12 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
446 return -ENOMEM; 458 return -ENOMEM;
447 } 459 }
448 460
449 irq = platform_get_irq(pdev, 0);
450 if (irq < 0) {
451 dev_err(dev, "missing IRQ\n");
452 return -ENODEV;
453 }
454
455 spin_lock_init(&dwc->lock); 461 spin_lock_init(&dwc->lock);
456 platform_set_drvdata(pdev, dwc); 462 platform_set_drvdata(pdev, dwc);
457 463
458 dwc->regs = regs; 464 dwc->regs = regs;
459 dwc->regs_size = resource_size(res); 465 dwc->regs_size = resource_size(res);
460 dwc->dev = dev; 466 dwc->dev = dev;
461 dwc->irq = irq;
462 467
463 if (!strncmp("super", maximum_speed, 5)) 468 if (!strncmp("super", maximum_speed, 5))
464 dwc->maximum_speed = DWC3_DCFG_SUPERSPEED; 469 dwc->maximum_speed = DWC3_DCFG_SUPERSPEED;
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 6c7945b4cad3..f69c877add09 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -51,7 +51,9 @@
51#include <linux/usb/gadget.h> 51#include <linux/usb/gadget.h>
52 52
53/* Global constants */ 53/* Global constants */
54#define DWC3_EP0_BOUNCE_SIZE 512
54#define DWC3_ENDPOINTS_NUM 32 55#define DWC3_ENDPOINTS_NUM 32
56#define DWC3_XHCI_RESOURCES_NUM 2
55 57
56#define DWC3_EVENT_BUFFERS_SIZE PAGE_SIZE 58#define DWC3_EVENT_BUFFERS_SIZE PAGE_SIZE
57#define DWC3_EVENT_TYPE_MASK 0xfe 59#define DWC3_EVENT_TYPE_MASK 0xfe
@@ -75,6 +77,16 @@
75#define DWC3_GSNPSID_MASK 0xffff0000 77#define DWC3_GSNPSID_MASK 0xffff0000
76#define DWC3_GSNPSREV_MASK 0xffff 78#define DWC3_GSNPSREV_MASK 0xffff
77 79
80/* DWC3 registers memory space boundries */
81#define DWC3_XHCI_REGS_START 0x0
82#define DWC3_XHCI_REGS_END 0x7fff
83#define DWC3_GLOBALS_REGS_START 0xc100
84#define DWC3_GLOBALS_REGS_END 0xc6ff
85#define DWC3_DEVICE_REGS_START 0xc700
86#define DWC3_DEVICE_REGS_END 0xcbff
87#define DWC3_OTG_REGS_START 0xcc00
88#define DWC3_OTG_REGS_END 0xccff
89
78/* Global Registers */ 90/* Global Registers */
79#define DWC3_GSBUSCFG0 0xc100 91#define DWC3_GSBUSCFG0 0xc100
80#define DWC3_GSBUSCFG1 0xc104 92#define DWC3_GSBUSCFG1 0xc104
@@ -183,6 +195,7 @@
183#define DWC3_GHWPARAMS1_EN_PWROPT_CLK 1 195#define DWC3_GHWPARAMS1_EN_PWROPT_CLK 1
184 196
185/* Device Configuration Register */ 197/* Device Configuration Register */
198#define DWC3_DCFG_LPM_CAP (1 << 22)
186#define DWC3_DCFG_DEVADDR(addr) ((addr) << 3) 199#define DWC3_DCFG_DEVADDR(addr) ((addr) << 3)
187#define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f) 200#define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f)
188 201
@@ -272,12 +285,14 @@
272#define DWC3_DGCMD_SET_ENDPOINT_NRDY 0x0c 285#define DWC3_DGCMD_SET_ENDPOINT_NRDY 0x0c
273#define DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK 0x10 286#define DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK 0x10
274 287
288#define DWC3_DGCMD_STATUS(n) (((n) >> 15) & 1)
289#define DWC3_DGCMD_CMDACT (1 << 10)
290
275/* Device Endpoint Command Register */ 291/* Device Endpoint Command Register */
276#define DWC3_DEPCMD_PARAM_SHIFT 16 292#define DWC3_DEPCMD_PARAM_SHIFT 16
277#define DWC3_DEPCMD_PARAM(x) ((x) << DWC3_DEPCMD_PARAM_SHIFT) 293#define DWC3_DEPCMD_PARAM(x) ((x) << DWC3_DEPCMD_PARAM_SHIFT)
278#define DWC3_DEPCMD_GET_RSC_IDX(x) (((x) >> DWC3_DEPCMD_PARAM_SHIFT) & 0x7f) 294#define DWC3_DEPCMD_GET_RSC_IDX(x) (((x) >> DWC3_DEPCMD_PARAM_SHIFT) & 0x7f)
279#define DWC3_DEPCMD_STATUS_MASK (0x0f << 12) 295#define DWC3_DEPCMD_STATUS(x) (((x) >> 15) & 1)
280#define DWC3_DEPCMD_STATUS(x) (((x) & DWC3_DEPCMD_STATUS_MASK) >> 12)
281#define DWC3_DEPCMD_HIPRI_FORCERM (1 << 11) 296#define DWC3_DEPCMD_HIPRI_FORCERM (1 << 11)
282#define DWC3_DEPCMD_CMDACT (1 << 10) 297#define DWC3_DEPCMD_CMDACT (1 << 10)
283#define DWC3_DEPCMD_CMDIOC (1 << 8) 298#define DWC3_DEPCMD_CMDIOC (1 << 8)
@@ -361,7 +376,6 @@ struct dwc3_ep {
361 dma_addr_t trb_pool_dma; 376 dma_addr_t trb_pool_dma;
362 u32 free_slot; 377 u32 free_slot;
363 u32 busy_slot; 378 u32 busy_slot;
364 const struct usb_endpoint_descriptor *desc;
365 const struct usb_ss_ep_comp_descriptor *comp_desc; 379 const struct usb_ss_ep_comp_descriptor *comp_desc;
366 struct dwc3 *dwc; 380 struct dwc3 *dwc;
367 381
@@ -561,6 +575,11 @@ struct dwc3_request {
561 * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround 575 * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround
562 * @needs_fifo_resize: not all users might want fifo resizing, flag it 576 * @needs_fifo_resize: not all users might want fifo resizing, flag it
563 * @resize_fifos: tells us it's ok to reconfigure our TxFIFO sizes. 577 * @resize_fifos: tells us it's ok to reconfigure our TxFIFO sizes.
578 * @isoch_delay: wValue from Set Isochronous Delay request;
579 * @u2sel: parameter from Set SEL request.
580 * @u2pel: parameter from Set SEL request.
581 * @u1sel: parameter from Set SEL request.
582 * @u1pel: parameter from Set SEL request.
564 * @ep0_next_event: hold the next expected event 583 * @ep0_next_event: hold the next expected event
565 * @ep0state: state of endpoint zero 584 * @ep0state: state of endpoint zero
566 * @link_state: link state 585 * @link_state: link state
@@ -583,7 +602,7 @@ struct dwc3 {
583 struct device *dev; 602 struct device *dev;
584 603
585 struct platform_device *xhci; 604 struct platform_device *xhci;
586 struct resource *res; 605 struct resource xhci_resources[DWC3_XHCI_RESOURCES_NUM];
587 606
588 struct dwc3_event_buffer **ev_buffs; 607 struct dwc3_event_buffer **ev_buffs;
589 struct dwc3_ep *eps[DWC3_ENDPOINTS_NUM]; 608 struct dwc3_ep *eps[DWC3_ENDPOINTS_NUM];
@@ -594,8 +613,6 @@ struct dwc3 {
594 void __iomem *regs; 613 void __iomem *regs;
595 size_t regs_size; 614 size_t regs_size;
596 615
597 int irq;
598
599 u32 num_event_buffers; 616 u32 num_event_buffers;
600 u32 u1u2; 617 u32 u1u2;
601 u32 maximum_speed; 618 u32 maximum_speed;
@@ -609,6 +626,10 @@ struct dwc3 {
609#define DWC3_REVISION_185A 0x5533185a 626#define DWC3_REVISION_185A 0x5533185a
610#define DWC3_REVISION_188A 0x5533188a 627#define DWC3_REVISION_188A 0x5533188a
611#define DWC3_REVISION_190A 0x5533190a 628#define DWC3_REVISION_190A 0x5533190a
629#define DWC3_REVISION_200A 0x5533200a
630#define DWC3_REVISION_202A 0x5533202a
631#define DWC3_REVISION_210A 0x5533210a
632#define DWC3_REVISION_220A 0x5533220a
612 633
613 unsigned is_selfpowered:1; 634 unsigned is_selfpowered:1;
614 unsigned three_stage_setup:1; 635 unsigned three_stage_setup:1;
@@ -625,7 +646,14 @@ struct dwc3 {
625 enum dwc3_link_state link_state; 646 enum dwc3_link_state link_state;
626 enum dwc3_device_state dev_state; 647 enum dwc3_device_state dev_state;
627 648
649 u16 isoch_delay;
650 u16 u2sel;
651 u16 u2pel;
652 u8 u1sel;
653 u8 u1pel;
654
628 u8 speed; 655 u8 speed;
656
629 void *mem; 657 void *mem;
630 658
631 struct dwc3_hwparams hwparams; 659 struct dwc3_hwparams hwparams;
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index d7d9c0ec9515..479dc047da3a 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -49,7 +49,6 @@
49#include <linux/of.h> 49#include <linux/of.h>
50 50
51#include "core.h" 51#include "core.h"
52#include "io.h"
53 52
54/* 53/*
55 * All these registers belong to OMAP's Wrapper around the 54 * All these registers belong to OMAP's Wrapper around the
@@ -143,6 +142,17 @@ struct dwc3_omap {
143 u32 dma_status:1; 142 u32 dma_status:1;
144}; 143};
145 144
145static inline u32 dwc3_omap_readl(void __iomem *base, u32 offset)
146{
147 return readl(base + offset);
148}
149
150static inline void dwc3_omap_writel(void __iomem *base, u32 offset, u32 value)
151{
152 writel(value, base + offset);
153}
154
155
146static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap) 156static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap)
147{ 157{
148 struct dwc3_omap *omap = _omap; 158 struct dwc3_omap *omap = _omap;
@@ -150,7 +160,7 @@ static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap)
150 160
151 spin_lock(&omap->lock); 161 spin_lock(&omap->lock);
152 162
153 reg = dwc3_readl(omap->base, USBOTGSS_IRQSTATUS_1); 163 reg = dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_1);
154 164
155 if (reg & USBOTGSS_IRQ1_DMADISABLECLR) { 165 if (reg & USBOTGSS_IRQ1_DMADISABLECLR) {
156 dev_dbg(omap->dev, "DMA Disable was Cleared\n"); 166 dev_dbg(omap->dev, "DMA Disable was Cleared\n");
@@ -184,10 +194,10 @@ static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap)
184 if (reg & USBOTGSS_IRQ1_IDPULLUP_FALL) 194 if (reg & USBOTGSS_IRQ1_IDPULLUP_FALL)
185 dev_dbg(omap->dev, "IDPULLUP Fall\n"); 195 dev_dbg(omap->dev, "IDPULLUP Fall\n");
186 196
187 dwc3_writel(omap->base, USBOTGSS_IRQSTATUS_1, reg); 197 dwc3_omap_writel(omap->base, USBOTGSS_IRQSTATUS_1, reg);
188 198
189 reg = dwc3_readl(omap->base, USBOTGSS_IRQSTATUS_0); 199 reg = dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_0);
190 dwc3_writel(omap->base, USBOTGSS_IRQSTATUS_0, reg); 200 dwc3_omap_writel(omap->base, USBOTGSS_IRQSTATUS_0, reg);
191 201
192 spin_unlock(&omap->lock); 202 spin_unlock(&omap->lock);
193 203
@@ -270,7 +280,7 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
270 omap->base = base; 280 omap->base = base;
271 omap->dwc3 = dwc3; 281 omap->dwc3 = dwc3;
272 282
273 reg = dwc3_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS); 283 reg = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS);
274 284
275 utmi_mode = of_get_property(node, "utmi-mode", &size); 285 utmi_mode = of_get_property(node, "utmi-mode", &size);
276 if (utmi_mode && size == sizeof(*utmi_mode)) { 286 if (utmi_mode && size == sizeof(*utmi_mode)) {
@@ -293,10 +303,10 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
293 } 303 }
294 } 304 }
295 305
296 dwc3_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, reg); 306 dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, reg);
297 307
298 /* check the DMA Status */ 308 /* check the DMA Status */
299 reg = dwc3_readl(omap->base, USBOTGSS_SYSCONFIG); 309 reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG);
300 omap->dma_status = !!(reg & USBOTGSS_SYSCONFIG_DMADISABLE); 310 omap->dma_status = !!(reg & USBOTGSS_SYSCONFIG_DMADISABLE);
301 311
302 /* Set No-Idle and No-Standby */ 312 /* Set No-Idle and No-Standby */
@@ -306,7 +316,7 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
306 reg |= (USBOTGSS_SYSCONFIG_STANDBYMODE(USBOTGSS_STANDBYMODE_NO_STANDBY) 316 reg |= (USBOTGSS_SYSCONFIG_STANDBYMODE(USBOTGSS_STANDBYMODE_NO_STANDBY)
307 | USBOTGSS_SYSCONFIG_IDLEMODE(USBOTGSS_IDLEMODE_NO_IDLE)); 317 | USBOTGSS_SYSCONFIG_IDLEMODE(USBOTGSS_IDLEMODE_NO_IDLE));
308 318
309 dwc3_writel(omap->base, USBOTGSS_SYSCONFIG, reg); 319 dwc3_omap_writel(omap->base, USBOTGSS_SYSCONFIG, reg);
310 320
311 ret = devm_request_irq(dev, omap->irq, dwc3_omap_interrupt, 0, 321 ret = devm_request_irq(dev, omap->irq, dwc3_omap_interrupt, 0,
312 "dwc3-omap", omap); 322 "dwc3-omap", omap);
@@ -318,7 +328,7 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
318 328
319 /* enable all IRQs */ 329 /* enable all IRQs */
320 reg = USBOTGSS_IRQO_COREIRQ_ST; 330 reg = USBOTGSS_IRQO_COREIRQ_ST;
321 dwc3_writel(omap->base, USBOTGSS_IRQENABLE_SET_0, reg); 331 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_0, reg);
322 332
323 reg = (USBOTGSS_IRQ1_OEVT | 333 reg = (USBOTGSS_IRQ1_OEVT |
324 USBOTGSS_IRQ1_DRVVBUS_RISE | 334 USBOTGSS_IRQ1_DRVVBUS_RISE |
@@ -330,7 +340,7 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
330 USBOTGSS_IRQ1_DISCHRGVBUS_FALL | 340 USBOTGSS_IRQ1_DISCHRGVBUS_FALL |
331 USBOTGSS_IRQ1_IDPULLUP_FALL); 341 USBOTGSS_IRQ1_IDPULLUP_FALL);
332 342
333 dwc3_writel(omap->base, USBOTGSS_IRQENABLE_SET_1, reg); 343 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_1, reg);
334 344
335 ret = platform_device_add_resources(dwc3, pdev->resource, 345 ret = platform_device_add_resources(dwc3, pdev->resource,
336 pdev->num_resources); 346 pdev->num_resources);
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index 3584a169886f..9e8a3dce69fd 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -179,7 +179,7 @@ int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
179 int ret; 179 int ret;
180 180
181 spin_lock_irqsave(&dwc->lock, flags); 181 spin_lock_irqsave(&dwc->lock, flags);
182 if (!dep->desc) { 182 if (!dep->endpoint.desc) {
183 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n", 183 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n",
184 request, dep->name); 184 request, dep->name);
185 ret = -ESHUTDOWN; 185 ret = -ESHUTDOWN;
@@ -261,6 +261,7 @@ static int dwc3_ep0_handle_status(struct dwc3 *dwc,
261{ 261{
262 struct dwc3_ep *dep; 262 struct dwc3_ep *dep;
263 u32 recip; 263 u32 recip;
264 u32 reg;
264 u16 usb_status = 0; 265 u16 usb_status = 0;
265 __le16 *response_pkt; 266 __le16 *response_pkt;
266 267
@@ -268,10 +269,18 @@ static int dwc3_ep0_handle_status(struct dwc3 *dwc,
268 switch (recip) { 269 switch (recip) {
269 case USB_RECIP_DEVICE: 270 case USB_RECIP_DEVICE:
270 /* 271 /*
271 * We are self-powered. U1/U2/LTM will be set later 272 * LTM will be set once we know how to set this in HW.
272 * once we handle this states. RemoteWakeup is 0 on SS
273 */ 273 */
274 usb_status |= dwc->is_selfpowered << USB_DEVICE_SELF_POWERED; 274 usb_status |= dwc->is_selfpowered << USB_DEVICE_SELF_POWERED;
275
276 if (dwc->speed == DWC3_DSTS_SUPERSPEED) {
277 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
278 if (reg & DWC3_DCTL_INITU1ENA)
279 usb_status |= 1 << USB_DEV_STAT_U1_ENABLED;
280 if (reg & DWC3_DCTL_INITU2ENA)
281 usb_status |= 1 << USB_DEV_STAT_U2_ENABLED;
282 }
283
275 break; 284 break;
276 285
277 case USB_RECIP_INTERFACE: 286 case USB_RECIP_INTERFACE:
@@ -312,6 +321,7 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
312 u32 recip; 321 u32 recip;
313 u32 wValue; 322 u32 wValue;
314 u32 wIndex; 323 u32 wIndex;
324 u32 reg;
315 int ret; 325 int ret;
316 326
317 wValue = le16_to_cpu(ctrl->wValue); 327 wValue = le16_to_cpu(ctrl->wValue);
@@ -320,29 +330,43 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
320 switch (recip) { 330 switch (recip) {
321 case USB_RECIP_DEVICE: 331 case USB_RECIP_DEVICE:
322 332
333 switch (wValue) {
334 case USB_DEVICE_REMOTE_WAKEUP:
335 break;
323 /* 336 /*
324 * 9.4.1 says only only for SS, in AddressState only for 337 * 9.4.1 says only only for SS, in AddressState only for
325 * default control pipe 338 * default control pipe
326 */ 339 */
327 switch (wValue) {
328 case USB_DEVICE_U1_ENABLE: 340 case USB_DEVICE_U1_ENABLE:
329 case USB_DEVICE_U2_ENABLE:
330 case USB_DEVICE_LTM_ENABLE:
331 if (dwc->dev_state != DWC3_CONFIGURED_STATE) 341 if (dwc->dev_state != DWC3_CONFIGURED_STATE)
332 return -EINVAL; 342 return -EINVAL;
333 if (dwc->speed != DWC3_DSTS_SUPERSPEED) 343 if (dwc->speed != DWC3_DSTS_SUPERSPEED)
334 return -EINVAL; 344 return -EINVAL;
335 }
336 345
337 /* XXX add U[12] & LTM */ 346 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
338 switch (wValue) { 347 if (set)
339 case USB_DEVICE_REMOTE_WAKEUP: 348 reg |= DWC3_DCTL_INITU1ENA;
340 break; 349 else
341 case USB_DEVICE_U1_ENABLE: 350 reg &= ~DWC3_DCTL_INITU1ENA;
351 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
342 break; 352 break;
353
343 case USB_DEVICE_U2_ENABLE: 354 case USB_DEVICE_U2_ENABLE:
355 if (dwc->dev_state != DWC3_CONFIGURED_STATE)
356 return -EINVAL;
357 if (dwc->speed != DWC3_DSTS_SUPERSPEED)
358 return -EINVAL;
359
360 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
361 if (set)
362 reg |= DWC3_DCTL_INITU2ENA;
363 else
364 reg &= ~DWC3_DCTL_INITU2ENA;
365 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
344 break; 366 break;
367
345 case USB_DEVICE_LTM_ENABLE: 368 case USB_DEVICE_LTM_ENABLE:
369 return -EINVAL;
346 break; 370 break;
347 371
348 case USB_DEVICE_TEST_MODE: 372 case USB_DEVICE_TEST_MODE:
@@ -469,6 +493,107 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
469 return ret; 493 return ret;
470} 494}
471 495
496static void dwc3_ep0_set_sel_cmpl(struct usb_ep *ep, struct usb_request *req)
497{
498 struct dwc3_ep *dep = to_dwc3_ep(ep);
499 struct dwc3 *dwc = dep->dwc;
500
501 u32 param = 0;
502 u32 reg;
503
504 struct timing {
505 u8 u1sel;
506 u8 u1pel;
507 u16 u2sel;
508 u16 u2pel;
509 } __packed timing;
510
511 int ret;
512
513 memcpy(&timing, req->buf, sizeof(timing));
514
515 dwc->u1sel = timing.u1sel;
516 dwc->u1pel = timing.u1pel;
517 dwc->u2sel = timing.u2sel;
518 dwc->u2pel = timing.u2pel;
519
520 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
521 if (reg & DWC3_DCTL_INITU2ENA)
522 param = dwc->u2pel;
523 if (reg & DWC3_DCTL_INITU1ENA)
524 param = dwc->u1pel;
525
526 /*
527 * According to Synopsys Databook, if parameter is
528 * greater than 125, a value of zero should be
529 * programmed in the register.
530 */
531 if (param > 125)
532 param = 0;
533
534 /* now that we have the time, issue DGCMD Set Sel */
535 ret = dwc3_send_gadget_generic_command(dwc,
536 DWC3_DGCMD_SET_PERIODIC_PAR, param);
537 WARN_ON(ret < 0);
538}
539
540static int dwc3_ep0_set_sel(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
541{
542 struct dwc3_ep *dep;
543 u16 wLength;
544 u16 wValue;
545
546 if (dwc->dev_state == DWC3_DEFAULT_STATE)
547 return -EINVAL;
548
549 wValue = le16_to_cpu(ctrl->wValue);
550 wLength = le16_to_cpu(ctrl->wLength);
551
552 if (wLength != 6) {
553 dev_err(dwc->dev, "Set SEL should be 6 bytes, got %d\n",
554 wLength);
555 return -EINVAL;
556 }
557
558 /*
559 * To handle Set SEL we need to receive 6 bytes from Host. So let's
560 * queue a usb_request for 6 bytes.
561 *
562 * Remember, though, this controller can't handle non-wMaxPacketSize
563 * aligned transfers on the OUT direction, so we queue a request for
564 * wMaxPacketSize instead.
565 */
566 dep = dwc->eps[0];
567 dwc->ep0_usb_req.dep = dep;
568 dwc->ep0_usb_req.request.length = dep->endpoint.maxpacket;
569 dwc->ep0_usb_req.request.buf = dwc->setup_buf;
570 dwc->ep0_usb_req.request.complete = dwc3_ep0_set_sel_cmpl;
571
572 return __dwc3_gadget_ep0_queue(dep, &dwc->ep0_usb_req);
573}
574
575static int dwc3_ep0_set_isoch_delay(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
576{
577 u16 wLength;
578 u16 wValue;
579 u16 wIndex;
580
581 wValue = le16_to_cpu(ctrl->wValue);
582 wLength = le16_to_cpu(ctrl->wLength);
583 wIndex = le16_to_cpu(ctrl->wIndex);
584
585 if (wIndex || wLength)
586 return -EINVAL;
587
588 /*
589 * REVISIT It's unclear from Databook what to do with this
590 * value. For now, just cache it.
591 */
592 dwc->isoch_delay = wValue;
593
594 return 0;
595}
596
472static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) 597static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
473{ 598{
474 int ret; 599 int ret;
@@ -494,6 +619,14 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
494 dev_vdbg(dwc->dev, "USB_REQ_SET_CONFIGURATION\n"); 619 dev_vdbg(dwc->dev, "USB_REQ_SET_CONFIGURATION\n");
495 ret = dwc3_ep0_set_config(dwc, ctrl); 620 ret = dwc3_ep0_set_config(dwc, ctrl);
496 break; 621 break;
622 case USB_REQ_SET_SEL:
623 dev_vdbg(dwc->dev, "USB_REQ_SET_SEL\n");
624 ret = dwc3_ep0_set_sel(dwc, ctrl);
625 break;
626 case USB_REQ_SET_ISOCH_DELAY:
627 dev_vdbg(dwc->dev, "USB_REQ_SET_ISOCH_DELAY\n");
628 ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
629 break;
497 default: 630 default:
498 dev_vdbg(dwc->dev, "Forwarding to gadget driver\n"); 631 dev_vdbg(dwc->dev, "Forwarding to gadget driver\n");
499 ret = dwc3_ep0_delegate_req(dwc, ctrl); 632 ret = dwc3_ep0_delegate_req(dwc, ctrl);
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 5255fe975ea1..3df1a1973b05 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -178,8 +178,8 @@ int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc)
178 if (!(dep->flags & DWC3_EP_ENABLED)) 178 if (!(dep->flags & DWC3_EP_ENABLED))
179 continue; 179 continue;
180 180
181 if (usb_endpoint_xfer_bulk(dep->desc) 181 if (usb_endpoint_xfer_bulk(dep->endpoint.desc)
182 || usb_endpoint_xfer_isoc(dep->desc)) 182 || usb_endpoint_xfer_isoc(dep->endpoint.desc))
183 mult = 3; 183 mult = 3;
184 184
185 /* 185 /*
@@ -229,7 +229,7 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
229 * completed (not the LINK TRB). 229 * completed (not the LINK TRB).
230 */ 230 */
231 if (((dep->busy_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && 231 if (((dep->busy_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) &&
232 usb_endpoint_xfer_isoc(dep->desc)) 232 usb_endpoint_xfer_isoc(dep->endpoint.desc))
233 dep->busy_slot++; 233 dep->busy_slot++;
234 } 234 }
235 list_del(&req->list); 235 list_del(&req->list);
@@ -276,6 +276,33 @@ static const char *dwc3_gadget_ep_cmd_string(u8 cmd)
276 } 276 }
277} 277}
278 278
279int dwc3_send_gadget_generic_command(struct dwc3 *dwc, int cmd, u32 param)
280{
281 u32 timeout = 500;
282 u32 reg;
283
284 dwc3_writel(dwc->regs, DWC3_DGCMDPAR, param);
285 dwc3_writel(dwc->regs, DWC3_DGCMD, cmd | DWC3_DGCMD_CMDACT);
286
287 do {
288 reg = dwc3_readl(dwc->regs, DWC3_DGCMD);
289 if (!(reg & DWC3_DGCMD_CMDACT)) {
290 dev_vdbg(dwc->dev, "Command Complete --> %d\n",
291 DWC3_DGCMD_STATUS(reg));
292 return 0;
293 }
294
295 /*
296 * We can't sleep here, because it's also called from
297 * interrupt context.
298 */
299 timeout--;
300 if (!timeout)
301 return -ETIMEDOUT;
302 udelay(1);
303 } while (1);
304}
305
279int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep, 306int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
280 unsigned cmd, struct dwc3_gadget_ep_cmd_params *params) 307 unsigned cmd, struct dwc3_gadget_ep_cmd_params *params)
281{ 308{
@@ -470,7 +497,7 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
470 if (ret) 497 if (ret)
471 return ret; 498 return ret;
472 499
473 dep->desc = desc; 500 dep->endpoint.desc = desc;
474 dep->comp_desc = comp_desc; 501 dep->comp_desc = comp_desc;
475 dep->type = usb_endpoint_type(desc); 502 dep->type = usb_endpoint_type(desc);
476 dep->flags |= DWC3_EP_ENABLED; 503 dep->flags |= DWC3_EP_ENABLED;
@@ -533,7 +560,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
533 dwc3_writel(dwc->regs, DWC3_DALEPENA, reg); 560 dwc3_writel(dwc->regs, DWC3_DALEPENA, reg);
534 561
535 dep->stream_capable = false; 562 dep->stream_capable = false;
536 dep->desc = NULL;
537 dep->endpoint.desc = NULL; 563 dep->endpoint.desc = NULL;
538 dep->comp_desc = NULL; 564 dep->comp_desc = NULL;
539 dep->type = 0; 565 dep->type = 0;
@@ -694,7 +720,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
694 720
695 /* Skip the LINK-TRB on ISOC */ 721 /* Skip the LINK-TRB on ISOC */
696 if (((cur_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && 722 if (((cur_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) &&
697 usb_endpoint_xfer_isoc(dep->desc)) 723 usb_endpoint_xfer_isoc(dep->endpoint.desc))
698 return; 724 return;
699 725
700 if (!req->trb) { 726 if (!req->trb) {
@@ -707,7 +733,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
707 trb->bpl = lower_32_bits(dma); 733 trb->bpl = lower_32_bits(dma);
708 trb->bph = upper_32_bits(dma); 734 trb->bph = upper_32_bits(dma);
709 735
710 switch (usb_endpoint_type(dep->desc)) { 736 switch (usb_endpoint_type(dep->endpoint.desc)) {
711 case USB_ENDPOINT_XFER_CONTROL: 737 case USB_ENDPOINT_XFER_CONTROL:
712 trb->ctrl = DWC3_TRBCTL_CONTROL_SETUP; 738 trb->ctrl = DWC3_TRBCTL_CONTROL_SETUP;
713 break; 739 break;
@@ -732,7 +758,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
732 BUG(); 758 BUG();
733 } 759 }
734 760
735 if (usb_endpoint_xfer_isoc(dep->desc)) { 761 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
736 trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI; 762 trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI;
737 trb->ctrl |= DWC3_TRB_CTRL_CSP; 763 trb->ctrl |= DWC3_TRB_CTRL_CSP;
738 } else { 764 } else {
@@ -743,7 +769,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
743 trb->ctrl |= DWC3_TRB_CTRL_LST; 769 trb->ctrl |= DWC3_TRB_CTRL_LST;
744 } 770 }
745 771
746 if (usb_endpoint_xfer_bulk(dep->desc) && dep->stream_capable) 772 if (usb_endpoint_xfer_bulk(dep->endpoint.desc) && dep->stream_capable)
747 trb->ctrl |= DWC3_TRB_CTRL_SID_SOFN(req->request.stream_id); 773 trb->ctrl |= DWC3_TRB_CTRL_SID_SOFN(req->request.stream_id);
748 774
749 trb->ctrl |= DWC3_TRB_CTRL_HWO; 775 trb->ctrl |= DWC3_TRB_CTRL_HWO;
@@ -771,7 +797,7 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep, bool starting)
771 trbs_left = (dep->busy_slot - dep->free_slot) & DWC3_TRB_MASK; 797 trbs_left = (dep->busy_slot - dep->free_slot) & DWC3_TRB_MASK;
772 798
773 /* Can't wrap around on a non-isoc EP since there's no link TRB */ 799 /* Can't wrap around on a non-isoc EP since there's no link TRB */
774 if (!usb_endpoint_xfer_isoc(dep->desc)) { 800 if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
775 max = DWC3_TRB_NUM - (dep->free_slot & DWC3_TRB_MASK); 801 max = DWC3_TRB_NUM - (dep->free_slot & DWC3_TRB_MASK);
776 if (trbs_left > max) 802 if (trbs_left > max)
777 trbs_left = max; 803 trbs_left = max;
@@ -797,7 +823,7 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep, bool starting)
797 * processed from the first TRB until the last one. Since we 823 * processed from the first TRB until the last one. Since we
798 * don't wrap around we have to start at the beginning. 824 * don't wrap around we have to start at the beginning.
799 */ 825 */
800 if (usb_endpoint_xfer_isoc(dep->desc)) { 826 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
801 dep->busy_slot = 1; 827 dep->busy_slot = 1;
802 dep->free_slot = 1; 828 dep->free_slot = 1;
803 } else { 829 } else {
@@ -807,7 +833,7 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep, bool starting)
807 } 833 }
808 834
809 /* The last TRB is a link TRB, not used for xfer */ 835 /* The last TRB is a link TRB, not used for xfer */
810 if ((trbs_left <= 1) && usb_endpoint_xfer_isoc(dep->desc)) 836 if ((trbs_left <= 1) && usb_endpoint_xfer_isoc(dep->endpoint.desc))
811 return; 837 return;
812 838
813 list_for_each_entry_safe(req, n, &dep->request_list, list) { 839 list_for_each_entry_safe(req, n, &dep->request_list, list) {
@@ -930,10 +956,12 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param,
930 } 956 }
931 957
932 dep->flags |= DWC3_EP_BUSY; 958 dep->flags |= DWC3_EP_BUSY;
933 dep->res_trans_idx = dwc3_gadget_ep_get_transfer_index(dwc,
934 dep->number);
935 959
936 WARN_ON_ONCE(!dep->res_trans_idx); 960 if (start_new) {
961 dep->res_trans_idx = dwc3_gadget_ep_get_transfer_index(dwc,
962 dep->number);
963 WARN_ON_ONCE(!dep->res_trans_idx);
964 }
937 965
938 return 0; 966 return 0;
939} 967}
@@ -967,28 +995,37 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
967 995
968 list_add_tail(&req->list, &dep->request_list); 996 list_add_tail(&req->list, &dep->request_list);
969 997
998 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && (dep->flags & DWC3_EP_BUSY))
999 dep->flags |= DWC3_EP_PENDING_REQUEST;
1000
970 /* 1001 /*
971 * There is one special case: XferNotReady with 1002 * There are two special cases:
972 * empty list of requests. We need to kick the 1003 *
973 * transfer here in that situation, otherwise 1004 * 1. XferNotReady with empty list of requests. We need to kick the
974 * we will be NAKing forever. 1005 * transfer here in that situation, otherwise we will be NAKing
1006 * forever. If we get XferNotReady before gadget driver has a
1007 * chance to queue a request, we will ACK the IRQ but won't be
1008 * able to receive the data until the next request is queued.
1009 * The following code is handling exactly that.
975 * 1010 *
976 * If we get XferNotReady before gadget driver 1011 * 2. XferInProgress on Isoc EP with an active transfer. We need to
977 * has a chance to queue a request, we will ACK 1012 * kick the transfer here after queuing a request, otherwise the
978 * the IRQ but won't be able to receive the data 1013 * core may not see the modified TRB(s).
979 * until the next request is queued. The following
980 * code is handling exactly that.
981 */ 1014 */
982 if (dep->flags & DWC3_EP_PENDING_REQUEST) { 1015 if (dep->flags & DWC3_EP_PENDING_REQUEST) {
983 int ret; 1016 int ret;
984 int start_trans; 1017 int start_trans = 1;
1018 u8 trans_idx = dep->res_trans_idx;
985 1019
986 start_trans = 1; 1020 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
987 if (usb_endpoint_xfer_isoc(dep->desc) && 1021 (dep->flags & DWC3_EP_BUSY)) {
988 (dep->flags & DWC3_EP_BUSY))
989 start_trans = 0; 1022 start_trans = 0;
1023 WARN_ON_ONCE(!trans_idx);
1024 } else {
1025 trans_idx = 0;
1026 }
990 1027
991 ret = __dwc3_gadget_kick_transfer(dep, 0, start_trans); 1028 ret = __dwc3_gadget_kick_transfer(dep, trans_idx, start_trans);
992 if (ret && ret != -EBUSY) { 1029 if (ret && ret != -EBUSY) {
993 struct dwc3 *dwc = dep->dwc; 1030 struct dwc3 *dwc = dep->dwc;
994 1031
@@ -1011,7 +1048,7 @@ static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request,
1011 1048
1012 int ret; 1049 int ret;
1013 1050
1014 if (!dep->desc) { 1051 if (!dep->endpoint.desc) {
1015 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n", 1052 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n",
1016 request, ep->name); 1053 request, ep->name);
1017 return -ESHUTDOWN; 1054 return -ESHUTDOWN;
@@ -1125,7 +1162,7 @@ static int dwc3_gadget_ep_set_halt(struct usb_ep *ep, int value)
1125 1162
1126 spin_lock_irqsave(&dwc->lock, flags); 1163 spin_lock_irqsave(&dwc->lock, flags);
1127 1164
1128 if (usb_endpoint_xfer_isoc(dep->desc)) { 1165 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
1129 dev_err(dwc->dev, "%s is of Isochronous type\n", dep->name); 1166 dev_err(dwc->dev, "%s is of Isochronous type\n", dep->name);
1130 ret = -EINVAL; 1167 ret = -EINVAL;
1131 goto out; 1168 goto out;
@@ -1356,7 +1393,24 @@ static int dwc3_gadget_start(struct usb_gadget *g,
1356 1393
1357 reg = dwc3_readl(dwc->regs, DWC3_DCFG); 1394 reg = dwc3_readl(dwc->regs, DWC3_DCFG);
1358 reg &= ~(DWC3_DCFG_SPEED_MASK); 1395 reg &= ~(DWC3_DCFG_SPEED_MASK);
1359 reg |= dwc->maximum_speed; 1396
1397 /**
1398 * WORKAROUND: DWC3 revision < 2.20a have an issue
1399 * which would cause metastability state on Run/Stop
1400 * bit if we try to force the IP to USB2-only mode.
1401 *
1402 * Because of that, we cannot configure the IP to any
1403 * speed other than the SuperSpeed
1404 *
1405 * Refers to:
1406 *
1407 * STAR#9000525659: Clock Domain Crossing on DCTL in
1408 * USB 2.0 Mode
1409 */
1410 if (dwc->revision < DWC3_REVISION_220A)
1411 reg |= DWC3_DCFG_SUPERSPEED;
1412 else
1413 reg |= dwc->maximum_speed;
1360 dwc3_writel(dwc->regs, DWC3_DCFG, reg); 1414 dwc3_writel(dwc->regs, DWC3_DCFG, reg);
1361 1415
1362 dwc->start_config_issued = false; 1416 dwc->start_config_issued = false;
@@ -1681,7 +1735,7 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
1681 case DWC3_DEPEVT_XFERCOMPLETE: 1735 case DWC3_DEPEVT_XFERCOMPLETE:
1682 dep->res_trans_idx = 0; 1736 dep->res_trans_idx = 0;
1683 1737
1684 if (usb_endpoint_xfer_isoc(dep->desc)) { 1738 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
1685 dev_dbg(dwc->dev, "%s is an Isochronous endpoint\n", 1739 dev_dbg(dwc->dev, "%s is an Isochronous endpoint\n",
1686 dep->name); 1740 dep->name);
1687 return; 1741 return;
@@ -1690,7 +1744,7 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
1690 dwc3_endpoint_transfer_complete(dwc, dep, event, 1); 1744 dwc3_endpoint_transfer_complete(dwc, dep, event, 1);
1691 break; 1745 break;
1692 case DWC3_DEPEVT_XFERINPROGRESS: 1746 case DWC3_DEPEVT_XFERINPROGRESS:
1693 if (!usb_endpoint_xfer_isoc(dep->desc)) { 1747 if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
1694 dev_dbg(dwc->dev, "%s is not an Isochronous endpoint\n", 1748 dev_dbg(dwc->dev, "%s is not an Isochronous endpoint\n",
1695 dep->name); 1749 dep->name);
1696 return; 1750 return;
@@ -1699,7 +1753,7 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
1699 dwc3_endpoint_transfer_complete(dwc, dep, event, 0); 1753 dwc3_endpoint_transfer_complete(dwc, dep, event, 0);
1700 break; 1754 break;
1701 case DWC3_DEPEVT_XFERNOTREADY: 1755 case DWC3_DEPEVT_XFERNOTREADY:
1702 if (usb_endpoint_xfer_isoc(dep->desc)) { 1756 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
1703 dwc3_gadget_start_isoc(dwc, dep, event); 1757 dwc3_gadget_start_isoc(dwc, dep, event);
1704 } else { 1758 } else {
1705 int ret; 1759 int ret;
@@ -1720,7 +1774,7 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
1720 1774
1721 break; 1775 break;
1722 case DWC3_DEPEVT_STREAMEVT: 1776 case DWC3_DEPEVT_STREAMEVT:
1723 if (!usb_endpoint_xfer_bulk(dep->desc)) { 1777 if (!usb_endpoint_xfer_bulk(dep->endpoint.desc)) {
1724 dev_err(dwc->dev, "Stream event for non-Bulk %s\n", 1778 dev_err(dwc->dev, "Stream event for non-Bulk %s\n",
1725 dep->name); 1779 dep->name);
1726 return; 1780 return;
@@ -1916,6 +1970,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
1916 1970
1917 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 1971 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
1918 reg &= ~DWC3_DCTL_TSTCTRL_MASK; 1972 reg &= ~DWC3_DCTL_TSTCTRL_MASK;
1973 reg &= ~(DWC3_DCTL_INITU1ENA | DWC3_DCTL_INITU2ENA);
1919 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 1974 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1920 dwc->test_mode = false; 1975 dwc->test_mode = false;
1921 1976
@@ -2263,8 +2318,7 @@ int __devinit dwc3_gadget_init(struct dwc3 *dwc)
2263 goto err1; 2318 goto err1;
2264 } 2319 }
2265 2320
2266 dwc->setup_buf = kzalloc(sizeof(*dwc->setup_buf) * 2, 2321 dwc->setup_buf = kzalloc(DWC3_EP0_BOUNCE_SIZE, GFP_KERNEL);
2267 GFP_KERNEL);
2268 if (!dwc->setup_buf) { 2322 if (!dwc->setup_buf) {
2269 dev_err(dwc->dev, "failed to allocate setup buffer\n"); 2323 dev_err(dwc->dev, "failed to allocate setup buffer\n");
2270 ret = -ENOMEM; 2324 ret = -ENOMEM;
@@ -2272,7 +2326,8 @@ int __devinit dwc3_gadget_init(struct dwc3 *dwc)
2272 } 2326 }
2273 2327
2274 dwc->ep0_bounce = dma_alloc_coherent(dwc->dev, 2328 dwc->ep0_bounce = dma_alloc_coherent(dwc->dev,
2275 512, &dwc->ep0_bounce_addr, GFP_KERNEL); 2329 DWC3_EP0_BOUNCE_SIZE, &dwc->ep0_bounce_addr,
2330 GFP_KERNEL);
2276 if (!dwc->ep0_bounce) { 2331 if (!dwc->ep0_bounce) {
2277 dev_err(dwc->dev, "failed to allocate ep0 bounce buffer\n"); 2332 dev_err(dwc->dev, "failed to allocate ep0 bounce buffer\n");
2278 ret = -ENOMEM; 2333 ret = -ENOMEM;
@@ -2313,6 +2368,14 @@ int __devinit dwc3_gadget_init(struct dwc3 *dwc)
2313 goto err5; 2368 goto err5;
2314 } 2369 }
2315 2370
2371 reg = dwc3_readl(dwc->regs, DWC3_DCFG);
2372 reg |= DWC3_DCFG_LPM_CAP;
2373 dwc3_writel(dwc->regs, DWC3_DCFG, reg);
2374
2375 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
2376 reg |= DWC3_DCTL_ACCEPTU1ENA | DWC3_DCTL_ACCEPTU2ENA;
2377 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
2378
2316 /* Enable all but Start and End of Frame IRQs */ 2379 /* Enable all but Start and End of Frame IRQs */
2317 reg = (DWC3_DEVTEN_VNDRDEVTSTRCVEDEN | 2380 reg = (DWC3_DEVTEN_VNDRDEVTSTRCVEDEN |
2318 DWC3_DEVTEN_EVNTOVERFLOWEN | 2381 DWC3_DEVTEN_EVNTOVERFLOWEN |
@@ -2351,8 +2414,8 @@ err5:
2351 dwc3_gadget_free_endpoints(dwc); 2414 dwc3_gadget_free_endpoints(dwc);
2352 2415
2353err4: 2416err4:
2354 dma_free_coherent(dwc->dev, 512, dwc->ep0_bounce, 2417 dma_free_coherent(dwc->dev, DWC3_EP0_BOUNCE_SIZE,
2355 dwc->ep0_bounce_addr); 2418 dwc->ep0_bounce, dwc->ep0_bounce_addr);
2356 2419
2357err3: 2420err3:
2358 kfree(dwc->setup_buf); 2421 kfree(dwc->setup_buf);
@@ -2381,8 +2444,8 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
2381 2444
2382 dwc3_gadget_free_endpoints(dwc); 2445 dwc3_gadget_free_endpoints(dwc);
2383 2446
2384 dma_free_coherent(dwc->dev, 512, dwc->ep0_bounce, 2447 dma_free_coherent(dwc->dev, DWC3_EP0_BOUNCE_SIZE,
2385 dwc->ep0_bounce_addr); 2448 dwc->ep0_bounce, dwc->ep0_bounce_addr);
2386 2449
2387 kfree(dwc->setup_buf); 2450 kfree(dwc->setup_buf);
2388 2451
diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h
index a8600084348c..95ef6a2f7764 100644
--- a/drivers/usb/dwc3/gadget.h
+++ b/drivers/usb/dwc3/gadget.h
@@ -111,6 +111,7 @@ int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
111int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value); 111int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value);
112int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep, 112int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
113 unsigned cmd, struct dwc3_gadget_ep_cmd_params *params); 113 unsigned cmd, struct dwc3_gadget_ep_cmd_params *params);
114int dwc3_send_gadget_generic_command(struct dwc3 *dwc, int cmd, u32 param);
114 115
115/** 116/**
116 * dwc3_gadget_ep_get_transfer_index - Gets transfer index from HW 117 * dwc3_gadget_ep_get_transfer_index - Gets transfer index from HW
diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c
index b108d18fd40d..56a62342884d 100644
--- a/drivers/usb/dwc3/host.c
+++ b/drivers/usb/dwc3/host.c
@@ -39,15 +39,6 @@
39 39
40#include "core.h" 40#include "core.h"
41 41
42static struct resource generic_resources[] = {
43 {
44 .flags = IORESOURCE_IRQ,
45 },
46 {
47 .flags = IORESOURCE_MEM,
48 },
49};
50
51int dwc3_host_init(struct dwc3 *dwc) 42int dwc3_host_init(struct dwc3 *dwc)
52{ 43{
53 struct platform_device *xhci; 44 struct platform_device *xhci;
@@ -68,14 +59,8 @@ int dwc3_host_init(struct dwc3 *dwc)
68 59
69 dwc->xhci = xhci; 60 dwc->xhci = xhci;
70 61
71 /* setup resources */ 62 ret = platform_device_add_resources(xhci, dwc->xhci_resources,
72 generic_resources[0].start = dwc->irq; 63 DWC3_XHCI_RESOURCES_NUM);
73
74 generic_resources[1].start = dwc->res->start;
75 generic_resources[1].end = dwc->res->start + 0x7fff;
76
77 ret = platform_device_add_resources(xhci, generic_resources,
78 ARRAY_SIZE(generic_resources));
79 if (ret) { 64 if (ret) {
80 dev_err(dwc->dev, "couldn't add resources to xHCI device\n"); 65 dev_err(dwc->dev, "couldn't add resources to xHCI device\n");
81 goto err1; 66 goto err1;
diff --git a/drivers/usb/dwc3/io.h b/drivers/usb/dwc3/io.h
index 071d561f3e68..a50f76b9d19b 100644
--- a/drivers/usb/dwc3/io.h
+++ b/drivers/usb/dwc3/io.h
@@ -41,14 +41,26 @@
41 41
42#include <linux/io.h> 42#include <linux/io.h>
43 43
44#include "core.h"
45
44static inline u32 dwc3_readl(void __iomem *base, u32 offset) 46static inline u32 dwc3_readl(void __iomem *base, u32 offset)
45{ 47{
46 return readl(base + offset); 48 /*
49 * We requested the mem region starting from the Globals address
50 * space, see dwc3_probe in core.c.
51 * However, the offsets are given starting from xHCI address space.
52 */
53 return readl(base + (offset - DWC3_GLOBALS_REGS_START));
47} 54}
48 55
49static inline void dwc3_writel(void __iomem *base, u32 offset, u32 value) 56static inline void dwc3_writel(void __iomem *base, u32 offset, u32 value)
50{ 57{
51 writel(value, base + offset); 58 /*
59 * We requested the mem region starting from the Globals address
60 * space, see dwc3_probe in core.c.
61 * However, the offsets are given starting from xHCI address space.
62 */
63 writel(value, base + (offset - DWC3_GLOBALS_REGS_START));
52} 64}
53 65
54#endif /* __DRIVERS_USB_DWC3_IO_H */ 66#endif /* __DRIVERS_USB_DWC3_IO_H */
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 569b33e754ba..bddc8fd9a7be 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -123,13 +123,7 @@ config USB_GADGET_STORAGE_NUM_BUFFERS
123# - discrete ones (including all PCI-only controllers) 123# - discrete ones (including all PCI-only controllers)
124# - debug/dummy gadget+hcd is last. 124# - debug/dummy gadget+hcd is last.
125# 125#
126choice 126menu "USB Peripheral Controller"
127 prompt "USB Peripheral Controller"
128 help
129 A USB device uses a controller to talk to its host.
130 Systems should have only one such upstream link.
131 Many controller drivers are platform-specific; these
132 often need board-specific hooks.
133 127
134# 128#
135# Integrated controllers 129# Integrated controllers
@@ -147,6 +141,17 @@ config USB_AT91
147 dynamically linked module called "at91_udc" and force all 141 dynamically linked module called "at91_udc" and force all
148 gadget drivers to also be dynamically linked. 142 gadget drivers to also be dynamically linked.
149 143
144config USB_LPC32XX
145 tristate "LPC32XX USB Peripheral Controller"
146 depends on ARCH_LPC32XX
147 select USB_ISP1301
148 help
149 This option selects the USB device controller in the LPC32xx SoC.
150
151 Say "y" to link the driver statically, or "m" to build a
152 dynamically linked module called "lpc32xx_udc" and force all
153 gadget drivers to also be dynamically linked.
154
150config USB_ATMEL_USBA 155config USB_ATMEL_USBA
151 tristate "Atmel USBA" 156 tristate "Atmel USBA"
152 select USB_GADGET_DUALSPEED 157 select USB_GADGET_DUALSPEED
@@ -161,7 +166,7 @@ config USB_FSL_USB2
161 select USB_GADGET_DUALSPEED 166 select USB_GADGET_DUALSPEED
162 select USB_FSL_MPH_DR_OF if OF 167 select USB_FSL_MPH_DR_OF if OF
163 help 168 help
164 Some of Freescale PowerPC processors have a High Speed 169 Some of Freescale PowerPC and i.MX processors have a High Speed
165 Dual-Role(DR) USB controller, which supports device mode. 170 Dual-Role(DR) USB controller, which supports device mode.
166 171
167 The number of programmable endpoints is different through 172 The number of programmable endpoints is different through
@@ -373,18 +378,6 @@ config USB_FSL_QE
373 Set CONFIG_USB_GADGET to "m" to build this driver as a 378 Set CONFIG_USB_GADGET to "m" to build this driver as a
374 dynamically linked module called "fsl_qe_udc". 379 dynamically linked module called "fsl_qe_udc".
375 380
376config USB_CI13XXX_PCI
377 tristate "MIPS USB CI13xxx PCI UDC"
378 depends on PCI
379 select USB_GADGET_DUALSPEED
380 help
381 MIPS USB IP core family device controller
382 Currently it only supports IP part number CI13412
383
384 Say "y" to link the driver statically, or "m" to build a
385 dynamically linked module called "ci13xxx_udc" and force all
386 gadget drivers to also be dynamically linked.
387
388config USB_NET2272 381config USB_NET2272
389 tristate "PLX NET2272" 382 tristate "PLX NET2272"
390 select USB_GADGET_DUALSPEED 383 select USB_GADGET_DUALSPEED
@@ -438,22 +431,6 @@ config USB_GOKU
438 dynamically linked module called "goku_udc" and to force all 431 dynamically linked module called "goku_udc" and to force all
439 gadget drivers to also be dynamically linked. 432 gadget drivers to also be dynamically linked.
440 433
441config USB_LANGWELL
442 tristate "Intel Langwell USB Device Controller"
443 depends on PCI
444 depends on !PHYS_ADDR_T_64BIT
445 select USB_GADGET_DUALSPEED
446 help
447 Intel Langwell USB Device Controller is a High-Speed USB
448 On-The-Go device controller.
449
450 The number of programmable endpoints is different through
451 controller revision.
452
453 Say "y" to link the driver statically, or "m" to build a
454 dynamically linked module called "langwell_udc" and force all
455 gadget drivers to also be dynamically linked.
456
457config USB_EG20T 434config USB_EG20T
458 tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC" 435 tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
459 depends on PCI 436 depends on PCI
@@ -477,23 +454,6 @@ config USB_EG20T
477 ML7213/ML7831 is companion chip for Intel Atom E6xx series. 454 ML7213/ML7831 is companion chip for Intel Atom E6xx series.
478 ML7213/ML7831 is completely compatible for Intel EG20T PCH. 455 ML7213/ML7831 is completely compatible for Intel EG20T PCH.
479 456
480config USB_CI13XXX_MSM
481 tristate "MIPS USB CI13xxx for MSM"
482 depends on ARCH_MSM
483 select USB_GADGET_DUALSPEED
484 select USB_MSM_OTG
485 help
486 MSM SoC has chipidea USB controller. This driver uses
487 ci13xxx_udc core.
488 This driver depends on OTG driver for PHY initialization,
489 clock management, powering up VBUS, and power management.
490 This driver is not supported on boards like trout which
491 has an external PHY.
492
493 Say "y" to link the driver statically, or "m" to build a
494 dynamically linked module called "ci13xxx_msm" and force all
495 gadget drivers to also be dynamically linked.
496
497# 457#
498# LAST -- dummy/emulated controller 458# LAST -- dummy/emulated controller
499# 459#
@@ -525,7 +485,7 @@ config USB_DUMMY_HCD
525# NOTE: Please keep dummy_hcd LAST so that "real hardware" appears 485# NOTE: Please keep dummy_hcd LAST so that "real hardware" appears
526# first and will be selected by default. 486# first and will be selected by default.
527 487
528endchoice 488endmenu
529 489
530# Selected by UDC drivers that support high-speed operation. 490# Selected by UDC drivers that support high-speed operation.
531config USB_GADGET_DUALSPEED 491config USB_GADGET_DUALSPEED
diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
index fc5b83683de5..1811513f1c27 100644
--- a/drivers/usb/gadget/Makefile
+++ b/drivers/usb/gadget/Makefile
@@ -22,14 +22,12 @@ fsl_usb2_udc-$(CONFIG_ARCH_MXC) += fsl_mxc_udc.o
22obj-$(CONFIG_USB_M66592) += m66592-udc.o 22obj-$(CONFIG_USB_M66592) += m66592-udc.o
23obj-$(CONFIG_USB_R8A66597) += r8a66597-udc.o 23obj-$(CONFIG_USB_R8A66597) += r8a66597-udc.o
24obj-$(CONFIG_USB_FSL_QE) += fsl_qe_udc.o 24obj-$(CONFIG_USB_FSL_QE) += fsl_qe_udc.o
25obj-$(CONFIG_USB_CI13XXX_PCI) += ci13xxx_pci.o
26obj-$(CONFIG_USB_S3C_HSOTG) += s3c-hsotg.o 25obj-$(CONFIG_USB_S3C_HSOTG) += s3c-hsotg.o
27obj-$(CONFIG_USB_S3C_HSUDC) += s3c-hsudc.o 26obj-$(CONFIG_USB_S3C_HSUDC) += s3c-hsudc.o
28obj-$(CONFIG_USB_LANGWELL) += langwell_udc.o 27obj-$(CONFIG_USB_LPC32XX) += lpc32xx_udc.o
29obj-$(CONFIG_USB_EG20T) += pch_udc.o 28obj-$(CONFIG_USB_EG20T) += pch_udc.o
30obj-$(CONFIG_USB_MV_UDC) += mv_udc.o 29obj-$(CONFIG_USB_MV_UDC) += mv_udc.o
31mv_udc-y := mv_udc_core.o 30mv_udc-y := mv_udc_core.o
32obj-$(CONFIG_USB_CI13XXX_MSM) += ci13xxx_msm.o
33obj-$(CONFIG_USB_FUSB300) += fusb300_udc.o 31obj-$(CONFIG_USB_FUSB300) += fusb300_udc.o
34 32
35# 33#
diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
index 77779271f487..187d21181cd5 100644
--- a/drivers/usb/gadget/amd5536udc.c
+++ b/drivers/usb/gadget/amd5536udc.c
@@ -333,7 +333,7 @@ udc_ep_enable(struct usb_ep *usbep, const struct usb_endpoint_descriptor *desc)
333 return -ESHUTDOWN; 333 return -ESHUTDOWN;
334 334
335 spin_lock_irqsave(&dev->lock, iflags); 335 spin_lock_irqsave(&dev->lock, iflags);
336 ep->desc = desc; 336 ep->ep.desc = desc;
337 337
338 ep->halted = 0; 338 ep->halted = 0;
339 339
@@ -442,7 +442,6 @@ static void ep_init(struct udc_regs __iomem *regs, struct udc_ep *ep)
442 u32 tmp; 442 u32 tmp;
443 443
444 VDBG(ep->dev, "ep-%d reset\n", ep->num); 444 VDBG(ep->dev, "ep-%d reset\n", ep->num);
445 ep->desc = NULL;
446 ep->ep.desc = NULL; 445 ep->ep.desc = NULL;
447 ep->ep.ops = &udc_ep_ops; 446 ep->ep.ops = &udc_ep_ops;
448 INIT_LIST_HEAD(&ep->queue); 447 INIT_LIST_HEAD(&ep->queue);
@@ -489,7 +488,7 @@ static int udc_ep_disable(struct usb_ep *usbep)
489 return -EINVAL; 488 return -EINVAL;
490 489
491 ep = container_of(usbep, struct udc_ep, ep); 490 ep = container_of(usbep, struct udc_ep, ep);
492 if (usbep->name == ep0_string || !ep->desc) 491 if (usbep->name == ep0_string || !ep->ep.desc)
493 return -EINVAL; 492 return -EINVAL;
494 493
495 DBG(ep->dev, "Disable ep-%d\n", ep->num); 494 DBG(ep->dev, "Disable ep-%d\n", ep->num);
@@ -1066,7 +1065,7 @@ udc_queue(struct usb_ep *usbep, struct usb_request *usbreq, gfp_t gfp)
1066 return -EINVAL; 1065 return -EINVAL;
1067 1066
1068 ep = container_of(usbep, struct udc_ep, ep); 1067 ep = container_of(usbep, struct udc_ep, ep);
1069 if (!ep->desc && (ep->num != 0 && ep->num != UDC_EP0OUT_IX)) 1068 if (!ep->ep.desc && (ep->num != 0 && ep->num != UDC_EP0OUT_IX))
1070 return -EINVAL; 1069 return -EINVAL;
1071 1070
1072 VDBG(ep->dev, "udc_queue(): ep%d-in=%d\n", ep->num, ep->in); 1071 VDBG(ep->dev, "udc_queue(): ep%d-in=%d\n", ep->num, ep->in);
@@ -1257,7 +1256,7 @@ static int udc_dequeue(struct usb_ep *usbep, struct usb_request *usbreq)
1257 unsigned long iflags; 1256 unsigned long iflags;
1258 1257
1259 ep = container_of(usbep, struct udc_ep, ep); 1258 ep = container_of(usbep, struct udc_ep, ep);
1260 if (!usbep || !usbreq || (!ep->desc && (ep->num != 0 1259 if (!usbep || !usbreq || (!ep->ep.desc && (ep->num != 0
1261 && ep->num != UDC_EP0OUT_IX))) 1260 && ep->num != UDC_EP0OUT_IX)))
1262 return -EINVAL; 1261 return -EINVAL;
1263 1262
@@ -1317,7 +1316,7 @@ udc_set_halt(struct usb_ep *usbep, int halt)
1317 pr_debug("set_halt %s: halt=%d\n", usbep->name, halt); 1316 pr_debug("set_halt %s: halt=%d\n", usbep->name, halt);
1318 1317
1319 ep = container_of(usbep, struct udc_ep, ep); 1318 ep = container_of(usbep, struct udc_ep, ep);
1320 if (!ep->desc && (ep->num != 0 && ep->num != UDC_EP0OUT_IX)) 1319 if (!ep->ep.desc && (ep->num != 0 && ep->num != UDC_EP0OUT_IX))
1321 return -EINVAL; 1320 return -EINVAL;
1322 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) 1321 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
1323 return -ESHUTDOWN; 1322 return -ESHUTDOWN;
@@ -1539,7 +1538,7 @@ static void udc_setup_endpoints(struct udc *dev)
1539 * disabling ep interrupts when ENUM interrupt occurs but ep is 1538 * disabling ep interrupts when ENUM interrupt occurs but ep is
1540 * not enabled by gadget driver 1539 * not enabled by gadget driver
1541 */ 1540 */
1542 if (!ep->desc) 1541 if (!ep->ep.desc)
1543 ep_init(dev->regs, ep); 1542 ep_init(dev->regs, ep);
1544 1543
1545 if (use_dma) { 1544 if (use_dma) {
@@ -3402,19 +3401,7 @@ static struct pci_driver udc_pci_driver = {
3402 .remove = udc_pci_remove, 3401 .remove = udc_pci_remove,
3403}; 3402};
3404 3403
3405/* Inits driver */ 3404module_pci_driver(udc_pci_driver);
3406static int __init init(void)
3407{
3408 return pci_register_driver(&udc_pci_driver);
3409}
3410module_init(init);
3411
3412/* Cleans driver */
3413static void __exit cleanup(void)
3414{
3415 pci_unregister_driver(&udc_pci_driver);
3416}
3417module_exit(cleanup);
3418 3405
3419MODULE_DESCRIPTION(UDC_MOD_DESCRIPTION); 3406MODULE_DESCRIPTION(UDC_MOD_DESCRIPTION);
3420MODULE_AUTHOR("Thomas Dahlmann"); 3407MODULE_AUTHOR("Thomas Dahlmann");
diff --git a/drivers/usb/gadget/amd5536udc.h b/drivers/usb/gadget/amd5536udc.h
index f87e29c65325..14af87d65caa 100644
--- a/drivers/usb/gadget/amd5536udc.h
+++ b/drivers/usb/gadget/amd5536udc.h
@@ -512,7 +512,6 @@ struct udc_ep {
512 512
513 /* queue for requests */ 513 /* queue for requests */
514 struct list_head queue; 514 struct list_head queue;
515 const struct usb_endpoint_descriptor *desc;
516 unsigned halted; 515 unsigned halted;
517 unsigned cancel_transfer; 516 unsigned cancel_transfer;
518 unsigned num : 5, 517 unsigned num : 5,
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c
index 9d7bcd910074..1a4430f315c3 100644
--- a/drivers/usb/gadget/at91_udc.c
+++ b/drivers/usb/gadget/at91_udc.c
@@ -212,7 +212,7 @@ static int proc_udc_show(struct seq_file *s, void *unused)
212 if (udc->enabled && udc->vbus) { 212 if (udc->enabled && udc->vbus) {
213 proc_ep_show(s, &udc->ep[0]); 213 proc_ep_show(s, &udc->ep[0]);
214 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { 214 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) {
215 if (ep->desc) 215 if (ep->ep.desc)
216 proc_ep_show(s, ep); 216 proc_ep_show(s, ep);
217 } 217 }
218 } 218 }
@@ -475,7 +475,7 @@ static int at91_ep_enable(struct usb_ep *_ep,
475 unsigned long flags; 475 unsigned long flags;
476 476
477 if (!_ep || !ep 477 if (!_ep || !ep
478 || !desc || ep->desc 478 || !desc || ep->ep.desc
479 || _ep->name == ep0name 479 || _ep->name == ep0name
480 || desc->bDescriptorType != USB_DT_ENDPOINT 480 || desc->bDescriptorType != USB_DT_ENDPOINT
481 || (maxpacket = usb_endpoint_maxp(desc)) == 0 481 || (maxpacket = usb_endpoint_maxp(desc)) == 0
@@ -530,7 +530,7 @@ ok:
530 tmp |= AT91_UDP_EPEDS; 530 tmp |= AT91_UDP_EPEDS;
531 __raw_writel(tmp, ep->creg); 531 __raw_writel(tmp, ep->creg);
532 532
533 ep->desc = desc; 533 ep->ep.desc = desc;
534 ep->ep.maxpacket = maxpacket; 534 ep->ep.maxpacket = maxpacket;
535 535
536 /* 536 /*
@@ -558,7 +558,6 @@ static int at91_ep_disable (struct usb_ep * _ep)
558 nuke(ep, -ESHUTDOWN); 558 nuke(ep, -ESHUTDOWN);
559 559
560 /* restore the endpoint's pristine config */ 560 /* restore the endpoint's pristine config */
561 ep->desc = NULL;
562 ep->ep.desc = NULL; 561 ep->ep.desc = NULL;
563 ep->ep.maxpacket = ep->maxpacket; 562 ep->ep.maxpacket = ep->maxpacket;
564 563
@@ -618,7 +617,7 @@ static int at91_ep_queue(struct usb_ep *_ep,
618 return -EINVAL; 617 return -EINVAL;
619 } 618 }
620 619
621 if (!_ep || (!ep->desc && ep->ep.name != ep0name)) { 620 if (!_ep || (!ep->ep.desc && ep->ep.name != ep0name)) {
622 DBG("invalid ep\n"); 621 DBG("invalid ep\n");
623 return -EINVAL; 622 return -EINVAL;
624 } 623 }
@@ -833,7 +832,7 @@ static void udc_reinit(struct at91_udc *udc)
833 832
834 if (i != 0) 833 if (i != 0)
835 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); 834 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
836 ep->desc = NULL; 835 ep->ep.desc = NULL;
837 ep->stopped = 0; 836 ep->stopped = 0;
838 ep->fifo_bank = 0; 837 ep->fifo_bank = 0;
839 ep->ep.maxpacket = ep->maxpacket; 838 ep->ep.maxpacket = ep->maxpacket;
@@ -978,18 +977,18 @@ static int at91_set_selfpowered(struct usb_gadget *gadget, int is_on)
978 return 0; 977 return 0;
979} 978}
980 979
981static int at91_start(struct usb_gadget_driver *driver, 980static int at91_start(struct usb_gadget *gadget,
982 int (*bind)(struct usb_gadget *)); 981 struct usb_gadget_driver *driver);
983static int at91_stop(struct usb_gadget_driver *driver); 982static int at91_stop(struct usb_gadget *gadget,
984 983 struct usb_gadget_driver *driver);
985static const struct usb_gadget_ops at91_udc_ops = { 984static const struct usb_gadget_ops at91_udc_ops = {
986 .get_frame = at91_get_frame, 985 .get_frame = at91_get_frame,
987 .wakeup = at91_wakeup, 986 .wakeup = at91_wakeup,
988 .set_selfpowered = at91_set_selfpowered, 987 .set_selfpowered = at91_set_selfpowered,
989 .vbus_session = at91_vbus_session, 988 .vbus_session = at91_vbus_session,
990 .pullup = at91_pullup, 989 .pullup = at91_pullup,
991 .start = at91_start, 990 .udc_start = at91_start,
992 .stop = at91_stop, 991 .udc_stop = at91_stop,
993 992
994 /* 993 /*
995 * VBUS-powered devices may also also want to support bigger 994 * VBUS-powered devices may also also want to support bigger
@@ -1172,7 +1171,7 @@ static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr)
1172 | USB_REQ_GET_STATUS: 1171 | USB_REQ_GET_STATUS:
1173 tmp = w_index & USB_ENDPOINT_NUMBER_MASK; 1172 tmp = w_index & USB_ENDPOINT_NUMBER_MASK;
1174 ep = &udc->ep[tmp]; 1173 ep = &udc->ep[tmp];
1175 if (tmp >= NUM_ENDPOINTS || (tmp && !ep->desc)) 1174 if (tmp >= NUM_ENDPOINTS || (tmp && !ep->ep.desc))
1176 goto stall; 1175 goto stall;
1177 1176
1178 if (tmp) { 1177 if (tmp) {
@@ -1197,7 +1196,7 @@ static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr)
1197 ep = &udc->ep[tmp]; 1196 ep = &udc->ep[tmp];
1198 if (w_value != USB_ENDPOINT_HALT || tmp >= NUM_ENDPOINTS) 1197 if (w_value != USB_ENDPOINT_HALT || tmp >= NUM_ENDPOINTS)
1199 goto stall; 1198 goto stall;
1200 if (!ep->desc || ep->is_iso) 1199 if (!ep->ep.desc || ep->is_iso)
1201 goto stall; 1200 goto stall;
1202 if ((w_index & USB_DIR_IN)) { 1201 if ((w_index & USB_DIR_IN)) {
1203 if (!ep->is_in) 1202 if (!ep->is_in)
@@ -1218,7 +1217,7 @@ static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr)
1218 goto stall; 1217 goto stall;
1219 if (tmp == 0) 1218 if (tmp == 0)
1220 goto succeed; 1219 goto succeed;
1221 if (!ep->desc || ep->is_iso) 1220 if (!ep->ep.desc || ep->is_iso)
1222 goto stall; 1221 goto stall;
1223 if ((w_index & USB_DIR_IN)) { 1222 if ((w_index & USB_DIR_IN)) {
1224 if (!ep->is_in) 1223 if (!ep->is_in)
@@ -1627,66 +1626,34 @@ static void at91_vbus_timer(unsigned long data)
1627 schedule_work(&udc->vbus_timer_work); 1626 schedule_work(&udc->vbus_timer_work);
1628} 1627}
1629 1628
1630static int at91_start(struct usb_gadget_driver *driver, 1629static int at91_start(struct usb_gadget *gadget,
1631 int (*bind)(struct usb_gadget *)) 1630 struct usb_gadget_driver *driver)
1632{ 1631{
1633 struct at91_udc *udc = &controller; 1632 struct at91_udc *udc;
1634 int retval;
1635 unsigned long flags;
1636
1637 if (!driver
1638 || driver->max_speed < USB_SPEED_FULL
1639 || !bind
1640 || !driver->setup) {
1641 DBG("bad parameter.\n");
1642 return -EINVAL;
1643 }
1644
1645 if (udc->driver) {
1646 DBG("UDC already has a gadget driver\n");
1647 return -EBUSY;
1648 }
1649 1633
1634 udc = container_of(gadget, struct at91_udc, gadget);
1650 udc->driver = driver; 1635 udc->driver = driver;
1651 udc->gadget.dev.driver = &driver->driver; 1636 udc->gadget.dev.driver = &driver->driver;
1652 dev_set_drvdata(&udc->gadget.dev, &driver->driver); 1637 dev_set_drvdata(&udc->gadget.dev, &driver->driver);
1653 udc->enabled = 1; 1638 udc->enabled = 1;
1654 udc->selfpowered = 1; 1639 udc->selfpowered = 1;
1655 1640
1656 retval = bind(&udc->gadget);
1657 if (retval) {
1658 DBG("bind() returned %d\n", retval);
1659 udc->driver = NULL;
1660 udc->gadget.dev.driver = NULL;
1661 dev_set_drvdata(&udc->gadget.dev, NULL);
1662 udc->enabled = 0;
1663 udc->selfpowered = 0;
1664 return retval;
1665 }
1666
1667 spin_lock_irqsave(&udc->lock, flags);
1668 pullup(udc, 1);
1669 spin_unlock_irqrestore(&udc->lock, flags);
1670
1671 DBG("bound to %s\n", driver->driver.name); 1641 DBG("bound to %s\n", driver->driver.name);
1672 return 0; 1642 return 0;
1673} 1643}
1674 1644
1675static int at91_stop(struct usb_gadget_driver *driver) 1645static int at91_stop(struct usb_gadget *gadget,
1646 struct usb_gadget_driver *driver)
1676{ 1647{
1677 struct at91_udc *udc = &controller; 1648 struct at91_udc *udc;
1678 unsigned long flags; 1649 unsigned long flags;
1679 1650
1680 if (!driver || driver != udc->driver || !driver->unbind) 1651 udc = container_of(gadget, struct at91_udc, gadget);
1681 return -EINVAL;
1682
1683 spin_lock_irqsave(&udc->lock, flags); 1652 spin_lock_irqsave(&udc->lock, flags);
1684 udc->enabled = 0; 1653 udc->enabled = 0;
1685 at91_udp_write(udc, AT91_UDP_IDR, ~0); 1654 at91_udp_write(udc, AT91_UDP_IDR, ~0);
1686 pullup(udc, 0);
1687 spin_unlock_irqrestore(&udc->lock, flags); 1655 spin_unlock_irqrestore(&udc->lock, flags);
1688 1656
1689 driver->unbind(&udc->gadget);
1690 udc->gadget.dev.driver = NULL; 1657 udc->gadget.dev.driver = NULL;
1691 dev_set_drvdata(&udc->gadget.dev, NULL); 1658 dev_set_drvdata(&udc->gadget.dev, NULL);
1692 udc->driver = NULL; 1659 udc->driver = NULL;
diff --git a/drivers/usb/gadget/at91_udc.h b/drivers/usb/gadget/at91_udc.h
index 3c0315b86ace..e647d1c2ada4 100644
--- a/drivers/usb/gadget/at91_udc.h
+++ b/drivers/usb/gadget/at91_udc.h
@@ -105,9 +105,6 @@ struct at91_ep {
105 unsigned is_in:1; 105 unsigned is_in:1;
106 unsigned is_iso:1; 106 unsigned is_iso:1;
107 unsigned fifo_bank:1; 107 unsigned fifo_bank:1;
108
109 const struct usb_endpoint_descriptor
110 *desc;
111}; 108};
112 109
113/* 110/*
diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
index 9f98508966d1..e23bf7984aaf 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -599,13 +599,13 @@ usba_ep_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
599 599
600 spin_lock_irqsave(&ep->udc->lock, flags); 600 spin_lock_irqsave(&ep->udc->lock, flags);
601 601
602 if (ep->desc) { 602 if (ep->ep.desc) {
603 spin_unlock_irqrestore(&ep->udc->lock, flags); 603 spin_unlock_irqrestore(&ep->udc->lock, flags);
604 DBG(DBG_ERR, "ep%d already enabled\n", ep->index); 604 DBG(DBG_ERR, "ep%d already enabled\n", ep->index);
605 return -EBUSY; 605 return -EBUSY;
606 } 606 }
607 607
608 ep->desc = desc; 608 ep->ep.desc = desc;
609 ep->ep.maxpacket = maxpacket; 609 ep->ep.maxpacket = maxpacket;
610 610
611 usba_ep_writel(ep, CFG, ept_cfg); 611 usba_ep_writel(ep, CFG, ept_cfg);
@@ -647,7 +647,7 @@ static int usba_ep_disable(struct usb_ep *_ep)
647 647
648 spin_lock_irqsave(&udc->lock, flags); 648 spin_lock_irqsave(&udc->lock, flags);
649 649
650 if (!ep->desc) { 650 if (!ep->ep.desc) {
651 spin_unlock_irqrestore(&udc->lock, flags); 651 spin_unlock_irqrestore(&udc->lock, flags);
652 /* REVISIT because this driver disables endpoints in 652 /* REVISIT because this driver disables endpoints in
653 * reset_all_endpoints() before calling disconnect(), 653 * reset_all_endpoints() before calling disconnect(),
@@ -658,7 +658,6 @@ static int usba_ep_disable(struct usb_ep *_ep)
658 ep->ep.name); 658 ep->ep.name);
659 return -EINVAL; 659 return -EINVAL;
660 } 660 }
661 ep->desc = NULL;
662 ep->ep.desc = NULL; 661 ep->ep.desc = NULL;
663 662
664 list_splice_init(&ep->queue, &req_list); 663 list_splice_init(&ep->queue, &req_list);
@@ -752,7 +751,7 @@ static int queue_dma(struct usba_udc *udc, struct usba_ep *ep,
752 */ 751 */
753 ret = -ESHUTDOWN; 752 ret = -ESHUTDOWN;
754 spin_lock_irqsave(&udc->lock, flags); 753 spin_lock_irqsave(&udc->lock, flags);
755 if (ep->desc) { 754 if (ep->ep.desc) {
756 if (list_empty(&ep->queue)) 755 if (list_empty(&ep->queue))
757 submit_request(ep, req); 756 submit_request(ep, req);
758 757
@@ -776,7 +775,8 @@ usba_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
776 DBG(DBG_GADGET | DBG_QUEUE | DBG_REQ, "%s: queue req %p, len %u\n", 775 DBG(DBG_GADGET | DBG_QUEUE | DBG_REQ, "%s: queue req %p, len %u\n",
777 ep->ep.name, req, _req->length); 776 ep->ep.name, req, _req->length);
778 777
779 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN || !ep->desc) 778 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN ||
779 !ep->ep.desc)
780 return -ESHUTDOWN; 780 return -ESHUTDOWN;
781 781
782 req->submitted = 0; 782 req->submitted = 0;
@@ -792,7 +792,7 @@ usba_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
792 /* May have received a reset since last time we checked */ 792 /* May have received a reset since last time we checked */
793 ret = -ESHUTDOWN; 793 ret = -ESHUTDOWN;
794 spin_lock_irqsave(&udc->lock, flags); 794 spin_lock_irqsave(&udc->lock, flags);
795 if (ep->desc) { 795 if (ep->ep.desc) {
796 list_add_tail(&req->queue, &ep->queue); 796 list_add_tail(&req->queue, &ep->queue);
797 797
798 if ((!ep_is_control(ep) && ep->is_in) || 798 if ((!ep_is_control(ep) && ep->is_in) ||
@@ -905,7 +905,7 @@ static int usba_ep_set_halt(struct usb_ep *_ep, int value)
905 DBG(DBG_GADGET, "endpoint %s: %s HALT\n", ep->ep.name, 905 DBG(DBG_GADGET, "endpoint %s: %s HALT\n", ep->ep.name,
906 value ? "set" : "clear"); 906 value ? "set" : "clear");
907 907
908 if (!ep->desc) { 908 if (!ep->ep.desc) {
909 DBG(DBG_ERR, "Attempted to halt uninitialized ep %s\n", 909 DBG(DBG_ERR, "Attempted to halt uninitialized ep %s\n",
910 ep->ep.name); 910 ep->ep.name);
911 return -ENODEV; 911 return -ENODEV;
@@ -1008,16 +1008,16 @@ usba_udc_set_selfpowered(struct usb_gadget *gadget, int is_selfpowered)
1008 return 0; 1008 return 0;
1009} 1009}
1010 1010
1011static int atmel_usba_start(struct usb_gadget_driver *driver, 1011static int atmel_usba_start(struct usb_gadget *gadget,
1012 int (*bind)(struct usb_gadget *)); 1012 struct usb_gadget_driver *driver);
1013static int atmel_usba_stop(struct usb_gadget_driver *driver); 1013static int atmel_usba_stop(struct usb_gadget *gadget,
1014 1014 struct usb_gadget_driver *driver);
1015static const struct usb_gadget_ops usba_udc_ops = { 1015static const struct usb_gadget_ops usba_udc_ops = {
1016 .get_frame = usba_udc_get_frame, 1016 .get_frame = usba_udc_get_frame,
1017 .wakeup = usba_udc_wakeup, 1017 .wakeup = usba_udc_wakeup,
1018 .set_selfpowered = usba_udc_set_selfpowered, 1018 .set_selfpowered = usba_udc_set_selfpowered,
1019 .start = atmel_usba_start, 1019 .udc_start = atmel_usba_start,
1020 .stop = atmel_usba_stop, 1020 .udc_stop = atmel_usba_stop,
1021}; 1021};
1022 1022
1023static struct usb_endpoint_descriptor usba_ep0_desc = { 1023static struct usb_endpoint_descriptor usba_ep0_desc = {
@@ -1071,7 +1071,7 @@ static void reset_all_endpoints(struct usba_udc *udc)
1071 * FIXME remove this code ... and retest thoroughly. 1071 * FIXME remove this code ... and retest thoroughly.
1072 */ 1072 */
1073 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) { 1073 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
1074 if (ep->desc) { 1074 if (ep->ep.desc) {
1075 spin_unlock(&udc->lock); 1075 spin_unlock(&udc->lock);
1076 usba_ep_disable(&ep->ep); 1076 usba_ep_disable(&ep->ep);
1077 spin_lock(&udc->lock); 1077 spin_lock(&udc->lock);
@@ -1089,9 +1089,9 @@ static struct usba_ep *get_ep_by_addr(struct usba_udc *udc, u16 wIndex)
1089 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { 1089 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) {
1090 u8 bEndpointAddress; 1090 u8 bEndpointAddress;
1091 1091
1092 if (!ep->desc) 1092 if (!ep->ep.desc)
1093 continue; 1093 continue;
1094 bEndpointAddress = ep->desc->bEndpointAddress; 1094 bEndpointAddress = ep->ep.desc->bEndpointAddress;
1095 if ((wIndex ^ bEndpointAddress) & USB_DIR_IN) 1095 if ((wIndex ^ bEndpointAddress) & USB_DIR_IN)
1096 continue; 1096 continue;
1097 if ((bEndpointAddress & USB_ENDPOINT_NUMBER_MASK) 1097 if ((bEndpointAddress & USB_ENDPOINT_NUMBER_MASK)
@@ -1727,7 +1727,7 @@ static irqreturn_t usba_udc_irq(int irq, void *devid)
1727 usb_speed_string(udc->gadget.speed)); 1727 usb_speed_string(udc->gadget.speed));
1728 1728
1729 ep0 = &usba_ep[0]; 1729 ep0 = &usba_ep[0];
1730 ep0->desc = &usba_ep0_desc; 1730 ep0->ep.desc = &usba_ep0_desc;
1731 ep0->state = WAIT_FOR_SETUP; 1731 ep0->state = WAIT_FOR_SETUP;
1732 usba_ep_writel(ep0, CFG, 1732 usba_ep_writel(ep0, CFG,
1733 (USBA_BF(EPT_SIZE, EP0_EPT_SIZE) 1733 (USBA_BF(EPT_SIZE, EP0_EPT_SIZE)
@@ -1795,21 +1795,13 @@ out:
1795 return IRQ_HANDLED; 1795 return IRQ_HANDLED;
1796} 1796}
1797 1797
1798static int atmel_usba_start(struct usb_gadget_driver *driver, 1798static int atmel_usba_start(struct usb_gadget *gadget,
1799 int (*bind)(struct usb_gadget *)) 1799 struct usb_gadget_driver *driver)
1800{ 1800{
1801 struct usba_udc *udc = &the_udc; 1801 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget);
1802 unsigned long flags; 1802 unsigned long flags;
1803 int ret;
1804
1805 if (!udc->pdev)
1806 return -ENODEV;
1807 1803
1808 spin_lock_irqsave(&udc->lock, flags); 1804 spin_lock_irqsave(&udc->lock, flags);
1809 if (udc->driver) {
1810 spin_unlock_irqrestore(&udc->lock, flags);
1811 return -EBUSY;
1812 }
1813 1805
1814 udc->devstatus = 1 << USB_DEVICE_SELF_POWERED; 1806 udc->devstatus = 1 << USB_DEVICE_SELF_POWERED;
1815 udc->driver = driver; 1807 udc->driver = driver;
@@ -1819,13 +1811,6 @@ static int atmel_usba_start(struct usb_gadget_driver *driver,
1819 clk_enable(udc->pclk); 1811 clk_enable(udc->pclk);
1820 clk_enable(udc->hclk); 1812 clk_enable(udc->hclk);
1821 1813
1822 ret = bind(&udc->gadget);
1823 if (ret) {
1824 DBG(DBG_ERR, "Could not bind to driver %s: error %d\n",
1825 driver->driver.name, ret);
1826 goto err_driver_bind;
1827 }
1828
1829 DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name); 1814 DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name);
1830 1815
1831 udc->vbus_prev = 0; 1816 udc->vbus_prev = 0;
@@ -1842,23 +1827,14 @@ static int atmel_usba_start(struct usb_gadget_driver *driver,
1842 spin_unlock_irqrestore(&udc->lock, flags); 1827 spin_unlock_irqrestore(&udc->lock, flags);
1843 1828
1844 return 0; 1829 return 0;
1845
1846err_driver_bind:
1847 udc->driver = NULL;
1848 udc->gadget.dev.driver = NULL;
1849 return ret;
1850} 1830}
1851 1831
1852static int atmel_usba_stop(struct usb_gadget_driver *driver) 1832static int atmel_usba_stop(struct usb_gadget *gadget,
1833 struct usb_gadget_driver *driver)
1853{ 1834{
1854 struct usba_udc *udc = &the_udc; 1835 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget);
1855 unsigned long flags; 1836 unsigned long flags;
1856 1837
1857 if (!udc->pdev)
1858 return -ENODEV;
1859 if (driver != udc->driver || !driver->unbind)
1860 return -EINVAL;
1861
1862 if (gpio_is_valid(udc->vbus_pin)) 1838 if (gpio_is_valid(udc->vbus_pin))
1863 disable_irq(gpio_to_irq(udc->vbus_pin)); 1839 disable_irq(gpio_to_irq(udc->vbus_pin));
1864 1840
@@ -1871,10 +1847,6 @@ static int atmel_usba_stop(struct usb_gadget_driver *driver)
1871 toggle_bias(0); 1847 toggle_bias(0);
1872 usba_writel(udc, CTRL, USBA_DISABLE_MASK); 1848 usba_writel(udc, CTRL, USBA_DISABLE_MASK);
1873 1849
1874 if (udc->driver->disconnect)
1875 udc->driver->disconnect(&udc->gadget);
1876
1877 driver->unbind(&udc->gadget);
1878 udc->gadget.dev.driver = NULL; 1850 udc->gadget.dev.driver = NULL;
1879 udc->driver = NULL; 1851 udc->driver = NULL;
1880 1852
diff --git a/drivers/usb/gadget/atmel_usba_udc.h b/drivers/usb/gadget/atmel_usba_udc.h
index 88a2e07a11a8..9791259cbda7 100644
--- a/drivers/usb/gadget/atmel_usba_udc.h
+++ b/drivers/usb/gadget/atmel_usba_udc.h
@@ -280,7 +280,6 @@ struct usba_ep {
280 struct usba_udc *udc; 280 struct usba_udc *udc;
281 281
282 struct list_head queue; 282 struct list_head queue;
283 const struct usb_endpoint_descriptor *desc;
284 283
285 u16 fifo_size; 284 u16 fifo_size;
286 u8 nr_banks; 285 u8 nr_banks;
diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c
deleted file mode 100644
index 243ef1adf969..000000000000
--- a/drivers/usb/gadget/ci13xxx_udc.c
+++ /dev/null
@@ -1,2996 +0,0 @@
1/*
2 * ci13xxx_udc.c - MIPS USB IP core family device controller
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13/*
14 * Description: MIPS USB IP core family device controller
15 * Currently it only supports IP part number CI13412
16 *
17 * This driver is composed of several blocks:
18 * - HW: hardware interface
19 * - DBG: debug facilities (optional)
20 * - UTIL: utilities
21 * - ISR: interrupts handling
22 * - ENDPT: endpoint operations (Gadget API)
23 * - GADGET: gadget operations (Gadget API)
24 * - BUS: bus glue code, bus abstraction layer
25 *
26 * Compile Options
27 * - CONFIG_USB_GADGET_DEBUG_FILES: enable debug facilities
28 * - STALL_IN: non-empty bulk-in pipes cannot be halted
29 * if defined mass storage compliance succeeds but with warnings
30 * => case 4: Hi > Dn
31 * => case 5: Hi > Di
32 * => case 8: Hi <> Do
33 * if undefined usbtest 13 fails
34 * - TRACE: enable function tracing (depends on DEBUG)
35 *
36 * Main Features
37 * - Chapter 9 & Mass Storage Compliance with Gadget File Storage
38 * - Chapter 9 Compliance with Gadget Zero (STALL_IN undefined)
39 * - Normal & LPM support
40 *
41 * USBTEST Report
42 * - OK: 0-12, 13 (STALL_IN defined) & 14
43 * - Not Supported: 15 & 16 (ISO)
44 *
45 * TODO List
46 * - OTG
47 * - Isochronous & Interrupt Traffic
48 * - Handle requests which spawns into several TDs
49 * - GET_STATUS(device) - always reports 0
50 * - Gadget API (majority of optional features)
51 * - Suspend & Remote Wakeup
52 */
53#include <linux/delay.h>
54#include <linux/device.h>
55#include <linux/dmapool.h>
56#include <linux/dma-mapping.h>
57#include <linux/init.h>
58#include <linux/interrupt.h>
59#include <linux/io.h>
60#include <linux/irq.h>
61#include <linux/kernel.h>
62#include <linux/slab.h>
63#include <linux/pm_runtime.h>
64#include <linux/usb/ch9.h>
65#include <linux/usb/gadget.h>
66#include <linux/usb/otg.h>
67
68#include "ci13xxx_udc.h"
69
70
71/******************************************************************************
72 * DEFINE
73 *****************************************************************************/
74
75#define DMA_ADDR_INVALID (~(dma_addr_t)0)
76
77/* ctrl register bank access */
78static DEFINE_SPINLOCK(udc_lock);
79
80/* control endpoint description */
81static const struct usb_endpoint_descriptor
82ctrl_endpt_out_desc = {
83 .bLength = USB_DT_ENDPOINT_SIZE,
84 .bDescriptorType = USB_DT_ENDPOINT,
85
86 .bEndpointAddress = USB_DIR_OUT,
87 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
88 .wMaxPacketSize = cpu_to_le16(CTRL_PAYLOAD_MAX),
89};
90
91static const struct usb_endpoint_descriptor
92ctrl_endpt_in_desc = {
93 .bLength = USB_DT_ENDPOINT_SIZE,
94 .bDescriptorType = USB_DT_ENDPOINT,
95
96 .bEndpointAddress = USB_DIR_IN,
97 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
98 .wMaxPacketSize = cpu_to_le16(CTRL_PAYLOAD_MAX),
99};
100
101/* UDC descriptor */
102static struct ci13xxx *_udc;
103
104/* Interrupt statistics */
105#define ISR_MASK 0x1F
106static struct {
107 u32 test;
108 u32 ui;
109 u32 uei;
110 u32 pci;
111 u32 uri;
112 u32 sli;
113 u32 none;
114 struct {
115 u32 cnt;
116 u32 buf[ISR_MASK+1];
117 u32 idx;
118 } hndl;
119} isr_statistics;
120
121/**
122 * ffs_nr: find first (least significant) bit set
123 * @x: the word to search
124 *
125 * This function returns bit number (instead of position)
126 */
127static int ffs_nr(u32 x)
128{
129 int n = ffs(x);
130
131 return n ? n-1 : 32;
132}
133
134/******************************************************************************
135 * HW block
136 *****************************************************************************/
137/* register bank descriptor */
138static struct {
139 unsigned lpm; /* is LPM? */
140 void __iomem *abs; /* bus map offset */
141 void __iomem *cap; /* bus map offset + CAP offset + CAP data */
142 size_t size; /* bank size */
143} hw_bank;
144
145/* MSM specific */
146#define ABS_AHBBURST (0x0090UL)
147#define ABS_AHBMODE (0x0098UL)
148/* UDC register map */
149#define ABS_CAPLENGTH (0x100UL)
150#define ABS_HCCPARAMS (0x108UL)
151#define ABS_DCCPARAMS (0x124UL)
152#define ABS_TESTMODE (hw_bank.lpm ? 0x0FCUL : 0x138UL)
153/* offset to CAPLENTGH (addr + data) */
154#define CAP_USBCMD (0x000UL)
155#define CAP_USBSTS (0x004UL)
156#define CAP_USBINTR (0x008UL)
157#define CAP_DEVICEADDR (0x014UL)
158#define CAP_ENDPTLISTADDR (0x018UL)
159#define CAP_PORTSC (0x044UL)
160#define CAP_DEVLC (0x084UL)
161#define CAP_USBMODE (hw_bank.lpm ? 0x0C8UL : 0x068UL)
162#define CAP_ENDPTSETUPSTAT (hw_bank.lpm ? 0x0D8UL : 0x06CUL)
163#define CAP_ENDPTPRIME (hw_bank.lpm ? 0x0DCUL : 0x070UL)
164#define CAP_ENDPTFLUSH (hw_bank.lpm ? 0x0E0UL : 0x074UL)
165#define CAP_ENDPTSTAT (hw_bank.lpm ? 0x0E4UL : 0x078UL)
166#define CAP_ENDPTCOMPLETE (hw_bank.lpm ? 0x0E8UL : 0x07CUL)
167#define CAP_ENDPTCTRL (hw_bank.lpm ? 0x0ECUL : 0x080UL)
168#define CAP_LAST (hw_bank.lpm ? 0x12CUL : 0x0C0UL)
169
170/* maximum number of enpoints: valid only after hw_device_reset() */
171static unsigned hw_ep_max;
172
173/**
174 * hw_ep_bit: calculates the bit number
175 * @num: endpoint number
176 * @dir: endpoint direction
177 *
178 * This function returns bit number
179 */
180static inline int hw_ep_bit(int num, int dir)
181{
182 return num + (dir ? 16 : 0);
183}
184
185static int ep_to_bit(int n)
186{
187 int fill = 16 - hw_ep_max / 2;
188
189 if (n >= hw_ep_max / 2)
190 n += fill;
191
192 return n;
193}
194
195/**
196 * hw_aread: reads from register bitfield
197 * @addr: address relative to bus map
198 * @mask: bitfield mask
199 *
200 * This function returns register bitfield data
201 */
202static u32 hw_aread(u32 addr, u32 mask)
203{
204 return ioread32(addr + hw_bank.abs) & mask;
205}
206
207/**
208 * hw_awrite: writes to register bitfield
209 * @addr: address relative to bus map
210 * @mask: bitfield mask
211 * @data: new data
212 */
213static void hw_awrite(u32 addr, u32 mask, u32 data)
214{
215 iowrite32(hw_aread(addr, ~mask) | (data & mask),
216 addr + hw_bank.abs);
217}
218
219/**
220 * hw_cread: reads from register bitfield
221 * @addr: address relative to CAP offset plus content
222 * @mask: bitfield mask
223 *
224 * This function returns register bitfield data
225 */
226static u32 hw_cread(u32 addr, u32 mask)
227{
228 return ioread32(addr + hw_bank.cap) & mask;
229}
230
231/**
232 * hw_cwrite: writes to register bitfield
233 * @addr: address relative to CAP offset plus content
234 * @mask: bitfield mask
235 * @data: new data
236 */
237static void hw_cwrite(u32 addr, u32 mask, u32 data)
238{
239 iowrite32(hw_cread(addr, ~mask) | (data & mask),
240 addr + hw_bank.cap);
241}
242
243/**
244 * hw_ctest_and_clear: tests & clears register bitfield
245 * @addr: address relative to CAP offset plus content
246 * @mask: bitfield mask
247 *
248 * This function returns register bitfield data
249 */
250static u32 hw_ctest_and_clear(u32 addr, u32 mask)
251{
252 u32 reg = hw_cread(addr, mask);
253
254 iowrite32(reg, addr + hw_bank.cap);
255 return reg;
256}
257
258/**
259 * hw_ctest_and_write: tests & writes register bitfield
260 * @addr: address relative to CAP offset plus content
261 * @mask: bitfield mask
262 * @data: new data
263 *
264 * This function returns register bitfield data
265 */
266static u32 hw_ctest_and_write(u32 addr, u32 mask, u32 data)
267{
268 u32 reg = hw_cread(addr, ~0);
269
270 iowrite32((reg & ~mask) | (data & mask), addr + hw_bank.cap);
271 return (reg & mask) >> ffs_nr(mask);
272}
273
274static int hw_device_init(void __iomem *base)
275{
276 u32 reg;
277
278 /* bank is a module variable */
279 hw_bank.abs = base;
280
281 hw_bank.cap = hw_bank.abs;
282 hw_bank.cap += ABS_CAPLENGTH;
283 hw_bank.cap += ioread8(hw_bank.cap);
284
285 reg = hw_aread(ABS_HCCPARAMS, HCCPARAMS_LEN) >> ffs_nr(HCCPARAMS_LEN);
286 hw_bank.lpm = reg;
287 hw_bank.size = hw_bank.cap - hw_bank.abs;
288 hw_bank.size += CAP_LAST;
289 hw_bank.size /= sizeof(u32);
290
291 reg = hw_aread(ABS_DCCPARAMS, DCCPARAMS_DEN) >> ffs_nr(DCCPARAMS_DEN);
292 hw_ep_max = reg * 2; /* cache hw ENDPT_MAX */
293
294 if (hw_ep_max == 0 || hw_ep_max > ENDPT_MAX)
295 return -ENODEV;
296
297 /* setup lock mode ? */
298
299 /* ENDPTSETUPSTAT is '0' by default */
300
301 /* HCSPARAMS.bf.ppc SHOULD BE zero for device */
302
303 return 0;
304}
305/**
306 * hw_device_reset: resets chip (execute without interruption)
307 * @base: register base address
308 *
309 * This function returns an error code
310 */
311static int hw_device_reset(struct ci13xxx *udc)
312{
313 /* should flush & stop before reset */
314 hw_cwrite(CAP_ENDPTFLUSH, ~0, ~0);
315 hw_cwrite(CAP_USBCMD, USBCMD_RS, 0);
316
317 hw_cwrite(CAP_USBCMD, USBCMD_RST, USBCMD_RST);
318 while (hw_cread(CAP_USBCMD, USBCMD_RST))
319 udelay(10); /* not RTOS friendly */
320
321
322 if (udc->udc_driver->notify_event)
323 udc->udc_driver->notify_event(udc,
324 CI13XXX_CONTROLLER_RESET_EVENT);
325
326 if (udc->udc_driver->flags & CI13XXX_DISABLE_STREAMING)
327 hw_cwrite(CAP_USBMODE, USBMODE_SDIS, USBMODE_SDIS);
328
329 /* USBMODE should be configured step by step */
330 hw_cwrite(CAP_USBMODE, USBMODE_CM, USBMODE_CM_IDLE);
331 hw_cwrite(CAP_USBMODE, USBMODE_CM, USBMODE_CM_DEVICE);
332 hw_cwrite(CAP_USBMODE, USBMODE_SLOM, USBMODE_SLOM); /* HW >= 2.3 */
333
334 if (hw_cread(CAP_USBMODE, USBMODE_CM) != USBMODE_CM_DEVICE) {
335 pr_err("cannot enter in device mode");
336 pr_err("lpm = %i", hw_bank.lpm);
337 return -ENODEV;
338 }
339
340 return 0;
341}
342
343/**
344 * hw_device_state: enables/disables interrupts & starts/stops device (execute
345 * without interruption)
346 * @dma: 0 => disable, !0 => enable and set dma engine
347 *
348 * This function returns an error code
349 */
350static int hw_device_state(u32 dma)
351{
352 if (dma) {
353 hw_cwrite(CAP_ENDPTLISTADDR, ~0, dma);
354 /* interrupt, error, port change, reset, sleep/suspend */
355 hw_cwrite(CAP_USBINTR, ~0,
356 USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI);
357 hw_cwrite(CAP_USBCMD, USBCMD_RS, USBCMD_RS);
358 } else {
359 hw_cwrite(CAP_USBCMD, USBCMD_RS, 0);
360 hw_cwrite(CAP_USBINTR, ~0, 0);
361 }
362 return 0;
363}
364
365/**
366 * hw_ep_flush: flush endpoint fifo (execute without interruption)
367 * @num: endpoint number
368 * @dir: endpoint direction
369 *
370 * This function returns an error code
371 */
372static int hw_ep_flush(int num, int dir)
373{
374 int n = hw_ep_bit(num, dir);
375
376 do {
377 /* flush any pending transfer */
378 hw_cwrite(CAP_ENDPTFLUSH, BIT(n), BIT(n));
379 while (hw_cread(CAP_ENDPTFLUSH, BIT(n)))
380 cpu_relax();
381 } while (hw_cread(CAP_ENDPTSTAT, BIT(n)));
382
383 return 0;
384}
385
386/**
387 * hw_ep_disable: disables endpoint (execute without interruption)
388 * @num: endpoint number
389 * @dir: endpoint direction
390 *
391 * This function returns an error code
392 */
393static int hw_ep_disable(int num, int dir)
394{
395 hw_ep_flush(num, dir);
396 hw_cwrite(CAP_ENDPTCTRL + num * sizeof(u32),
397 dir ? ENDPTCTRL_TXE : ENDPTCTRL_RXE, 0);
398 return 0;
399}
400
401/**
402 * hw_ep_enable: enables endpoint (execute without interruption)
403 * @num: endpoint number
404 * @dir: endpoint direction
405 * @type: endpoint type
406 *
407 * This function returns an error code
408 */
409static int hw_ep_enable(int num, int dir, int type)
410{
411 u32 mask, data;
412
413 if (dir) {
414 mask = ENDPTCTRL_TXT; /* type */
415 data = type << ffs_nr(mask);
416
417 mask |= ENDPTCTRL_TXS; /* unstall */
418 mask |= ENDPTCTRL_TXR; /* reset data toggle */
419 data |= ENDPTCTRL_TXR;
420 mask |= ENDPTCTRL_TXE; /* enable */
421 data |= ENDPTCTRL_TXE;
422 } else {
423 mask = ENDPTCTRL_RXT; /* type */
424 data = type << ffs_nr(mask);
425
426 mask |= ENDPTCTRL_RXS; /* unstall */
427 mask |= ENDPTCTRL_RXR; /* reset data toggle */
428 data |= ENDPTCTRL_RXR;
429 mask |= ENDPTCTRL_RXE; /* enable */
430 data |= ENDPTCTRL_RXE;
431 }
432 hw_cwrite(CAP_ENDPTCTRL + num * sizeof(u32), mask, data);
433 return 0;
434}
435
436/**
437 * hw_ep_get_halt: return endpoint halt status
438 * @num: endpoint number
439 * @dir: endpoint direction
440 *
441 * This function returns 1 if endpoint halted
442 */
443static int hw_ep_get_halt(int num, int dir)
444{
445 u32 mask = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
446
447 return hw_cread(CAP_ENDPTCTRL + num * sizeof(u32), mask) ? 1 : 0;
448}
449
450/**
451 * hw_test_and_clear_setup_status: test & clear setup status (execute without
452 * interruption)
453 * @n: endpoint number
454 *
455 * This function returns setup status
456 */
457static int hw_test_and_clear_setup_status(int n)
458{
459 n = ep_to_bit(n);
460 return hw_ctest_and_clear(CAP_ENDPTSETUPSTAT, BIT(n));
461}
462
463/**
464 * hw_ep_prime: primes endpoint (execute without interruption)
465 * @num: endpoint number
466 * @dir: endpoint direction
467 * @is_ctrl: true if control endpoint
468 *
469 * This function returns an error code
470 */
471static int hw_ep_prime(int num, int dir, int is_ctrl)
472{
473 int n = hw_ep_bit(num, dir);
474
475 if (is_ctrl && dir == RX && hw_cread(CAP_ENDPTSETUPSTAT, BIT(num)))
476 return -EAGAIN;
477
478 hw_cwrite(CAP_ENDPTPRIME, BIT(n), BIT(n));
479
480 while (hw_cread(CAP_ENDPTPRIME, BIT(n)))
481 cpu_relax();
482 if (is_ctrl && dir == RX && hw_cread(CAP_ENDPTSETUPSTAT, BIT(num)))
483 return -EAGAIN;
484
485 /* status shoult be tested according with manual but it doesn't work */
486 return 0;
487}
488
489/**
490 * hw_ep_set_halt: configures ep halt & resets data toggle after clear (execute
491 * without interruption)
492 * @num: endpoint number
493 * @dir: endpoint direction
494 * @value: true => stall, false => unstall
495 *
496 * This function returns an error code
497 */
498static int hw_ep_set_halt(int num, int dir, int value)
499{
500 if (value != 0 && value != 1)
501 return -EINVAL;
502
503 do {
504 u32 addr = CAP_ENDPTCTRL + num * sizeof(u32);
505 u32 mask_xs = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
506 u32 mask_xr = dir ? ENDPTCTRL_TXR : ENDPTCTRL_RXR;
507
508 /* data toggle - reserved for EP0 but it's in ESS */
509 hw_cwrite(addr, mask_xs|mask_xr, value ? mask_xs : mask_xr);
510
511 } while (value != hw_ep_get_halt(num, dir));
512
513 return 0;
514}
515
516/**
517 * hw_intr_clear: disables interrupt & clears interrupt status (execute without
518 * interruption)
519 * @n: interrupt bit
520 *
521 * This function returns an error code
522 */
523static int hw_intr_clear(int n)
524{
525 if (n >= REG_BITS)
526 return -EINVAL;
527
528 hw_cwrite(CAP_USBINTR, BIT(n), 0);
529 hw_cwrite(CAP_USBSTS, BIT(n), BIT(n));
530 return 0;
531}
532
533/**
534 * hw_intr_force: enables interrupt & forces interrupt status (execute without
535 * interruption)
536 * @n: interrupt bit
537 *
538 * This function returns an error code
539 */
540static int hw_intr_force(int n)
541{
542 if (n >= REG_BITS)
543 return -EINVAL;
544
545 hw_awrite(ABS_TESTMODE, TESTMODE_FORCE, TESTMODE_FORCE);
546 hw_cwrite(CAP_USBINTR, BIT(n), BIT(n));
547 hw_cwrite(CAP_USBSTS, BIT(n), BIT(n));
548 hw_awrite(ABS_TESTMODE, TESTMODE_FORCE, 0);
549 return 0;
550}
551
552/**
553 * hw_is_port_high_speed: test if port is high speed
554 *
555 * This function returns true if high speed port
556 */
557static int hw_port_is_high_speed(void)
558{
559 return hw_bank.lpm ? hw_cread(CAP_DEVLC, DEVLC_PSPD) :
560 hw_cread(CAP_PORTSC, PORTSC_HSP);
561}
562
563/**
564 * hw_port_test_get: reads port test mode value
565 *
566 * This function returns port test mode value
567 */
568static u8 hw_port_test_get(void)
569{
570 return hw_cread(CAP_PORTSC, PORTSC_PTC) >> ffs_nr(PORTSC_PTC);
571}
572
573/**
574 * hw_port_test_set: writes port test mode (execute without interruption)
575 * @mode: new value
576 *
577 * This function returns an error code
578 */
579static int hw_port_test_set(u8 mode)
580{
581 const u8 TEST_MODE_MAX = 7;
582
583 if (mode > TEST_MODE_MAX)
584 return -EINVAL;
585
586 hw_cwrite(CAP_PORTSC, PORTSC_PTC, mode << ffs_nr(PORTSC_PTC));
587 return 0;
588}
589
590/**
591 * hw_read_intr_enable: returns interrupt enable register
592 *
593 * This function returns register data
594 */
595static u32 hw_read_intr_enable(void)
596{
597 return hw_cread(CAP_USBINTR, ~0);
598}
599
600/**
601 * hw_read_intr_status: returns interrupt status register
602 *
603 * This function returns register data
604 */
605static u32 hw_read_intr_status(void)
606{
607 return hw_cread(CAP_USBSTS, ~0);
608}
609
610/**
611 * hw_register_read: reads all device registers (execute without interruption)
612 * @buf: destination buffer
613 * @size: buffer size
614 *
615 * This function returns number of registers read
616 */
617static size_t hw_register_read(u32 *buf, size_t size)
618{
619 unsigned i;
620
621 if (size > hw_bank.size)
622 size = hw_bank.size;
623
624 for (i = 0; i < size; i++)
625 buf[i] = hw_aread(i * sizeof(u32), ~0);
626
627 return size;
628}
629
630/**
631 * hw_register_write: writes to register
632 * @addr: register address
633 * @data: register value
634 *
635 * This function returns an error code
636 */
637static int hw_register_write(u16 addr, u32 data)
638{
639 /* align */
640 addr /= sizeof(u32);
641
642 if (addr >= hw_bank.size)
643 return -EINVAL;
644
645 /* align */
646 addr *= sizeof(u32);
647
648 hw_awrite(addr, ~0, data);
649 return 0;
650}
651
652/**
653 * hw_test_and_clear_complete: test & clear complete status (execute without
654 * interruption)
655 * @n: endpoint number
656 *
657 * This function returns complete status
658 */
659static int hw_test_and_clear_complete(int n)
660{
661 n = ep_to_bit(n);
662 return hw_ctest_and_clear(CAP_ENDPTCOMPLETE, BIT(n));
663}
664
665/**
666 * hw_test_and_clear_intr_active: test & clear active interrupts (execute
667 * without interruption)
668 *
669 * This function returns active interrutps
670 */
671static u32 hw_test_and_clear_intr_active(void)
672{
673 u32 reg = hw_read_intr_status() & hw_read_intr_enable();
674
675 hw_cwrite(CAP_USBSTS, ~0, reg);
676 return reg;
677}
678
679/**
680 * hw_test_and_clear_setup_guard: test & clear setup guard (execute without
681 * interruption)
682 *
683 * This function returns guard value
684 */
685static int hw_test_and_clear_setup_guard(void)
686{
687 return hw_ctest_and_write(CAP_USBCMD, USBCMD_SUTW, 0);
688}
689
690/**
691 * hw_test_and_set_setup_guard: test & set setup guard (execute without
692 * interruption)
693 *
694 * This function returns guard value
695 */
696static int hw_test_and_set_setup_guard(void)
697{
698 return hw_ctest_and_write(CAP_USBCMD, USBCMD_SUTW, USBCMD_SUTW);
699}
700
701/**
702 * hw_usb_set_address: configures USB address (execute without interruption)
703 * @value: new USB address
704 *
705 * This function returns an error code
706 */
707static int hw_usb_set_address(u8 value)
708{
709 /* advance */
710 hw_cwrite(CAP_DEVICEADDR, DEVICEADDR_USBADR | DEVICEADDR_USBADRA,
711 value << ffs_nr(DEVICEADDR_USBADR) | DEVICEADDR_USBADRA);
712 return 0;
713}
714
715/**
716 * hw_usb_reset: restart device after a bus reset (execute without
717 * interruption)
718 *
719 * This function returns an error code
720 */
721static int hw_usb_reset(void)
722{
723 hw_usb_set_address(0);
724
725 /* ESS flushes only at end?!? */
726 hw_cwrite(CAP_ENDPTFLUSH, ~0, ~0); /* flush all EPs */
727
728 /* clear setup token semaphores */
729 hw_cwrite(CAP_ENDPTSETUPSTAT, 0, 0); /* writes its content */
730
731 /* clear complete status */
732 hw_cwrite(CAP_ENDPTCOMPLETE, 0, 0); /* writes its content */
733
734 /* wait until all bits cleared */
735 while (hw_cread(CAP_ENDPTPRIME, ~0))
736 udelay(10); /* not RTOS friendly */
737
738 /* reset all endpoints ? */
739
740 /* reset internal status and wait for further instructions
741 no need to verify the port reset status (ESS does it) */
742
743 return 0;
744}
745
746/******************************************************************************
747 * DBG block
748 *****************************************************************************/
749/**
750 * show_device: prints information about device capabilities and status
751 *
752 * Check "device.h" for details
753 */
754static ssize_t show_device(struct device *dev, struct device_attribute *attr,
755 char *buf)
756{
757 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
758 struct usb_gadget *gadget = &udc->gadget;
759 int n = 0;
760
761 dbg_trace("[%s] %p\n", __func__, buf);
762 if (attr == NULL || buf == NULL) {
763 dev_err(dev, "[%s] EINVAL\n", __func__);
764 return 0;
765 }
766
767 n += scnprintf(buf + n, PAGE_SIZE - n, "speed = %d\n",
768 gadget->speed);
769 n += scnprintf(buf + n, PAGE_SIZE - n, "max_speed = %d\n",
770 gadget->max_speed);
771 /* TODO: Scheduled for removal in 3.8. */
772 n += scnprintf(buf + n, PAGE_SIZE - n, "is_dualspeed = %d\n",
773 gadget_is_dualspeed(gadget));
774 n += scnprintf(buf + n, PAGE_SIZE - n, "is_otg = %d\n",
775 gadget->is_otg);
776 n += scnprintf(buf + n, PAGE_SIZE - n, "is_a_peripheral = %d\n",
777 gadget->is_a_peripheral);
778 n += scnprintf(buf + n, PAGE_SIZE - n, "b_hnp_enable = %d\n",
779 gadget->b_hnp_enable);
780 n += scnprintf(buf + n, PAGE_SIZE - n, "a_hnp_support = %d\n",
781 gadget->a_hnp_support);
782 n += scnprintf(buf + n, PAGE_SIZE - n, "a_alt_hnp_support = %d\n",
783 gadget->a_alt_hnp_support);
784 n += scnprintf(buf + n, PAGE_SIZE - n, "name = %s\n",
785 (gadget->name ? gadget->name : ""));
786
787 return n;
788}
789static DEVICE_ATTR(device, S_IRUSR, show_device, NULL);
790
791/**
792 * show_driver: prints information about attached gadget (if any)
793 *
794 * Check "device.h" for details
795 */
796static ssize_t show_driver(struct device *dev, struct device_attribute *attr,
797 char *buf)
798{
799 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
800 struct usb_gadget_driver *driver = udc->driver;
801 int n = 0;
802
803 dbg_trace("[%s] %p\n", __func__, buf);
804 if (attr == NULL || buf == NULL) {
805 dev_err(dev, "[%s] EINVAL\n", __func__);
806 return 0;
807 }
808
809 if (driver == NULL)
810 return scnprintf(buf, PAGE_SIZE,
811 "There is no gadget attached!\n");
812
813 n += scnprintf(buf + n, PAGE_SIZE - n, "function = %s\n",
814 (driver->function ? driver->function : ""));
815 n += scnprintf(buf + n, PAGE_SIZE - n, "max speed = %d\n",
816 driver->max_speed);
817
818 return n;
819}
820static DEVICE_ATTR(driver, S_IRUSR, show_driver, NULL);
821
822/* Maximum event message length */
823#define DBG_DATA_MSG 64UL
824
825/* Maximum event messages */
826#define DBG_DATA_MAX 128UL
827
828/* Event buffer descriptor */
829static struct {
830 char (buf[DBG_DATA_MAX])[DBG_DATA_MSG]; /* buffer */
831 unsigned idx; /* index */
832 unsigned tty; /* print to console? */
833 rwlock_t lck; /* lock */
834} dbg_data = {
835 .idx = 0,
836 .tty = 0,
837 .lck = __RW_LOCK_UNLOCKED(lck)
838};
839
840/**
841 * dbg_dec: decrements debug event index
842 * @idx: buffer index
843 */
844static void dbg_dec(unsigned *idx)
845{
846 *idx = (*idx - 1) & (DBG_DATA_MAX-1);
847}
848
849/**
850 * dbg_inc: increments debug event index
851 * @idx: buffer index
852 */
853static void dbg_inc(unsigned *idx)
854{
855 *idx = (*idx + 1) & (DBG_DATA_MAX-1);
856}
857
858/**
859 * dbg_print: prints the common part of the event
860 * @addr: endpoint address
861 * @name: event name
862 * @status: status
863 * @extra: extra information
864 */
865static void dbg_print(u8 addr, const char *name, int status, const char *extra)
866{
867 struct timeval tval;
868 unsigned int stamp;
869 unsigned long flags;
870
871 write_lock_irqsave(&dbg_data.lck, flags);
872
873 do_gettimeofday(&tval);
874 stamp = tval.tv_sec & 0xFFFF; /* 2^32 = 4294967296. Limit to 4096s */
875 stamp = stamp * 1000000 + tval.tv_usec;
876
877 scnprintf(dbg_data.buf[dbg_data.idx], DBG_DATA_MSG,
878 "%04X\t? %02X %-7.7s %4i ?\t%s\n",
879 stamp, addr, name, status, extra);
880
881 dbg_inc(&dbg_data.idx);
882
883 write_unlock_irqrestore(&dbg_data.lck, flags);
884
885 if (dbg_data.tty != 0)
886 pr_notice("%04X\t? %02X %-7.7s %4i ?\t%s\n",
887 stamp, addr, name, status, extra);
888}
889
890/**
891 * dbg_done: prints a DONE event
892 * @addr: endpoint address
893 * @td: transfer descriptor
894 * @status: status
895 */
896static void dbg_done(u8 addr, const u32 token, int status)
897{
898 char msg[DBG_DATA_MSG];
899
900 scnprintf(msg, sizeof(msg), "%d %02X",
901 (int)(token & TD_TOTAL_BYTES) >> ffs_nr(TD_TOTAL_BYTES),
902 (int)(token & TD_STATUS) >> ffs_nr(TD_STATUS));
903 dbg_print(addr, "DONE", status, msg);
904}
905
906/**
907 * dbg_event: prints a generic event
908 * @addr: endpoint address
909 * @name: event name
910 * @status: status
911 */
912static void dbg_event(u8 addr, const char *name, int status)
913{
914 if (name != NULL)
915 dbg_print(addr, name, status, "");
916}
917
918/*
919 * dbg_queue: prints a QUEUE event
920 * @addr: endpoint address
921 * @req: USB request
922 * @status: status
923 */
924static void dbg_queue(u8 addr, const struct usb_request *req, int status)
925{
926 char msg[DBG_DATA_MSG];
927
928 if (req != NULL) {
929 scnprintf(msg, sizeof(msg),
930 "%d %d", !req->no_interrupt, req->length);
931 dbg_print(addr, "QUEUE", status, msg);
932 }
933}
934
935/**
936 * dbg_setup: prints a SETUP event
937 * @addr: endpoint address
938 * @req: setup request
939 */
940static void dbg_setup(u8 addr, const struct usb_ctrlrequest *req)
941{
942 char msg[DBG_DATA_MSG];
943
944 if (req != NULL) {
945 scnprintf(msg, sizeof(msg),
946 "%02X %02X %04X %04X %d", req->bRequestType,
947 req->bRequest, le16_to_cpu(req->wValue),
948 le16_to_cpu(req->wIndex), le16_to_cpu(req->wLength));
949 dbg_print(addr, "SETUP", 0, msg);
950 }
951}
952
953/**
954 * show_events: displays the event buffer
955 *
956 * Check "device.h" for details
957 */
958static ssize_t show_events(struct device *dev, struct device_attribute *attr,
959 char *buf)
960{
961 unsigned long flags;
962 unsigned i, j, n = 0;
963
964 dbg_trace("[%s] %p\n", __func__, buf);
965 if (attr == NULL || buf == NULL) {
966 dev_err(dev, "[%s] EINVAL\n", __func__);
967 return 0;
968 }
969
970 read_lock_irqsave(&dbg_data.lck, flags);
971
972 i = dbg_data.idx;
973 for (dbg_dec(&i); i != dbg_data.idx; dbg_dec(&i)) {
974 n += strlen(dbg_data.buf[i]);
975 if (n >= PAGE_SIZE) {
976 n -= strlen(dbg_data.buf[i]);
977 break;
978 }
979 }
980 for (j = 0, dbg_inc(&i); j < n; dbg_inc(&i))
981 j += scnprintf(buf + j, PAGE_SIZE - j,
982 "%s", dbg_data.buf[i]);
983
984 read_unlock_irqrestore(&dbg_data.lck, flags);
985
986 return n;
987}
988
989/**
990 * store_events: configure if events are going to be also printed to console
991 *
992 * Check "device.h" for details
993 */
994static ssize_t store_events(struct device *dev, struct device_attribute *attr,
995 const char *buf, size_t count)
996{
997 unsigned tty;
998
999 dbg_trace("[%s] %p, %d\n", __func__, buf, count);
1000 if (attr == NULL || buf == NULL) {
1001 dev_err(dev, "[%s] EINVAL\n", __func__);
1002 goto done;
1003 }
1004
1005 if (sscanf(buf, "%u", &tty) != 1 || tty > 1) {
1006 dev_err(dev, "<1|0>: enable|disable console log\n");
1007 goto done;
1008 }
1009
1010 dbg_data.tty = tty;
1011 dev_info(dev, "tty = %u", dbg_data.tty);
1012
1013 done:
1014 return count;
1015}
1016static DEVICE_ATTR(events, S_IRUSR | S_IWUSR, show_events, store_events);
1017
1018/**
1019 * show_inters: interrupt status, enable status and historic
1020 *
1021 * Check "device.h" for details
1022 */
1023static ssize_t show_inters(struct device *dev, struct device_attribute *attr,
1024 char *buf)
1025{
1026 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1027 unsigned long flags;
1028 u32 intr;
1029 unsigned i, j, n = 0;
1030
1031 dbg_trace("[%s] %p\n", __func__, buf);
1032 if (attr == NULL || buf == NULL) {
1033 dev_err(dev, "[%s] EINVAL\n", __func__);
1034 return 0;
1035 }
1036
1037 spin_lock_irqsave(udc->lock, flags);
1038
1039 n += scnprintf(buf + n, PAGE_SIZE - n,
1040 "status = %08x\n", hw_read_intr_status());
1041 n += scnprintf(buf + n, PAGE_SIZE - n,
1042 "enable = %08x\n", hw_read_intr_enable());
1043
1044 n += scnprintf(buf + n, PAGE_SIZE - n, "*test = %d\n",
1045 isr_statistics.test);
1046 n += scnprintf(buf + n, PAGE_SIZE - n, "? ui = %d\n",
1047 isr_statistics.ui);
1048 n += scnprintf(buf + n, PAGE_SIZE - n, "? uei = %d\n",
1049 isr_statistics.uei);
1050 n += scnprintf(buf + n, PAGE_SIZE - n, "? pci = %d\n",
1051 isr_statistics.pci);
1052 n += scnprintf(buf + n, PAGE_SIZE - n, "? uri = %d\n",
1053 isr_statistics.uri);
1054 n += scnprintf(buf + n, PAGE_SIZE - n, "? sli = %d\n",
1055 isr_statistics.sli);
1056 n += scnprintf(buf + n, PAGE_SIZE - n, "*none = %d\n",
1057 isr_statistics.none);
1058 n += scnprintf(buf + n, PAGE_SIZE - n, "*hndl = %d\n",
1059 isr_statistics.hndl.cnt);
1060
1061 for (i = isr_statistics.hndl.idx, j = 0; j <= ISR_MASK; j++, i++) {
1062 i &= ISR_MASK;
1063 intr = isr_statistics.hndl.buf[i];
1064
1065 if (USBi_UI & intr)
1066 n += scnprintf(buf + n, PAGE_SIZE - n, "ui ");
1067 intr &= ~USBi_UI;
1068 if (USBi_UEI & intr)
1069 n += scnprintf(buf + n, PAGE_SIZE - n, "uei ");
1070 intr &= ~USBi_UEI;
1071 if (USBi_PCI & intr)
1072 n += scnprintf(buf + n, PAGE_SIZE - n, "pci ");
1073 intr &= ~USBi_PCI;
1074 if (USBi_URI & intr)
1075 n += scnprintf(buf + n, PAGE_SIZE - n, "uri ");
1076 intr &= ~USBi_URI;
1077 if (USBi_SLI & intr)
1078 n += scnprintf(buf + n, PAGE_SIZE - n, "sli ");
1079 intr &= ~USBi_SLI;
1080 if (intr)
1081 n += scnprintf(buf + n, PAGE_SIZE - n, "??? ");
1082 if (isr_statistics.hndl.buf[i])
1083 n += scnprintf(buf + n, PAGE_SIZE - n, "\n");
1084 }
1085
1086 spin_unlock_irqrestore(udc->lock, flags);
1087
1088 return n;
1089}
1090
1091/**
1092 * store_inters: enable & force or disable an individual interrutps
1093 * (to be used for test purposes only)
1094 *
1095 * Check "device.h" for details
1096 */
1097static ssize_t store_inters(struct device *dev, struct device_attribute *attr,
1098 const char *buf, size_t count)
1099{
1100 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1101 unsigned long flags;
1102 unsigned en, bit;
1103
1104 dbg_trace("[%s] %p, %d\n", __func__, buf, count);
1105 if (attr == NULL || buf == NULL) {
1106 dev_err(dev, "[%s] EINVAL\n", __func__);
1107 goto done;
1108 }
1109
1110 if (sscanf(buf, "%u %u", &en, &bit) != 2 || en > 1) {
1111 dev_err(dev, "<1|0> <bit>: enable|disable interrupt");
1112 goto done;
1113 }
1114
1115 spin_lock_irqsave(udc->lock, flags);
1116 if (en) {
1117 if (hw_intr_force(bit))
1118 dev_err(dev, "invalid bit number\n");
1119 else
1120 isr_statistics.test++;
1121 } else {
1122 if (hw_intr_clear(bit))
1123 dev_err(dev, "invalid bit number\n");
1124 }
1125 spin_unlock_irqrestore(udc->lock, flags);
1126
1127 done:
1128 return count;
1129}
1130static DEVICE_ATTR(inters, S_IRUSR | S_IWUSR, show_inters, store_inters);
1131
1132/**
1133 * show_port_test: reads port test mode
1134 *
1135 * Check "device.h" for details
1136 */
1137static ssize_t show_port_test(struct device *dev,
1138 struct device_attribute *attr, char *buf)
1139{
1140 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1141 unsigned long flags;
1142 unsigned mode;
1143
1144 dbg_trace("[%s] %p\n", __func__, buf);
1145 if (attr == NULL || buf == NULL) {
1146 dev_err(dev, "[%s] EINVAL\n", __func__);
1147 return 0;
1148 }
1149
1150 spin_lock_irqsave(udc->lock, flags);
1151 mode = hw_port_test_get();
1152 spin_unlock_irqrestore(udc->lock, flags);
1153
1154 return scnprintf(buf, PAGE_SIZE, "mode = %u\n", mode);
1155}
1156
1157/**
1158 * store_port_test: writes port test mode
1159 *
1160 * Check "device.h" for details
1161 */
1162static ssize_t store_port_test(struct device *dev,
1163 struct device_attribute *attr,
1164 const char *buf, size_t count)
1165{
1166 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1167 unsigned long flags;
1168 unsigned mode;
1169
1170 dbg_trace("[%s] %p, %d\n", __func__, buf, count);
1171 if (attr == NULL || buf == NULL) {
1172 dev_err(dev, "[%s] EINVAL\n", __func__);
1173 goto done;
1174 }
1175
1176 if (sscanf(buf, "%u", &mode) != 1) {
1177 dev_err(dev, "<mode>: set port test mode");
1178 goto done;
1179 }
1180
1181 spin_lock_irqsave(udc->lock, flags);
1182 if (hw_port_test_set(mode))
1183 dev_err(dev, "invalid mode\n");
1184 spin_unlock_irqrestore(udc->lock, flags);
1185
1186 done:
1187 return count;
1188}
1189static DEVICE_ATTR(port_test, S_IRUSR | S_IWUSR,
1190 show_port_test, store_port_test);
1191
1192/**
1193 * show_qheads: DMA contents of all queue heads
1194 *
1195 * Check "device.h" for details
1196 */
1197static ssize_t show_qheads(struct device *dev, struct device_attribute *attr,
1198 char *buf)
1199{
1200 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1201 unsigned long flags;
1202 unsigned i, j, n = 0;
1203
1204 dbg_trace("[%s] %p\n", __func__, buf);
1205 if (attr == NULL || buf == NULL) {
1206 dev_err(dev, "[%s] EINVAL\n", __func__);
1207 return 0;
1208 }
1209
1210 spin_lock_irqsave(udc->lock, flags);
1211 for (i = 0; i < hw_ep_max/2; i++) {
1212 struct ci13xxx_ep *mEpRx = &udc->ci13xxx_ep[i];
1213 struct ci13xxx_ep *mEpTx = &udc->ci13xxx_ep[i + hw_ep_max/2];
1214 n += scnprintf(buf + n, PAGE_SIZE - n,
1215 "EP=%02i: RX=%08X TX=%08X\n",
1216 i, (u32)mEpRx->qh.dma, (u32)mEpTx->qh.dma);
1217 for (j = 0; j < (sizeof(struct ci13xxx_qh)/sizeof(u32)); j++) {
1218 n += scnprintf(buf + n, PAGE_SIZE - n,
1219 " %04X: %08X %08X\n", j,
1220 *((u32 *)mEpRx->qh.ptr + j),
1221 *((u32 *)mEpTx->qh.ptr + j));
1222 }
1223 }
1224 spin_unlock_irqrestore(udc->lock, flags);
1225
1226 return n;
1227}
1228static DEVICE_ATTR(qheads, S_IRUSR, show_qheads, NULL);
1229
1230/**
1231 * show_registers: dumps all registers
1232 *
1233 * Check "device.h" for details
1234 */
1235#define DUMP_ENTRIES 512
1236static ssize_t show_registers(struct device *dev,
1237 struct device_attribute *attr, char *buf)
1238{
1239 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1240 unsigned long flags;
1241 u32 *dump;
1242 unsigned i, k, n = 0;
1243
1244 dbg_trace("[%s] %p\n", __func__, buf);
1245 if (attr == NULL || buf == NULL) {
1246 dev_err(dev, "[%s] EINVAL\n", __func__);
1247 return 0;
1248 }
1249
1250 dump = kmalloc(sizeof(u32) * DUMP_ENTRIES, GFP_KERNEL);
1251 if (!dump) {
1252 dev_err(dev, "%s: out of memory\n", __func__);
1253 return 0;
1254 }
1255
1256 spin_lock_irqsave(udc->lock, flags);
1257 k = hw_register_read(dump, DUMP_ENTRIES);
1258 spin_unlock_irqrestore(udc->lock, flags);
1259
1260 for (i = 0; i < k; i++) {
1261 n += scnprintf(buf + n, PAGE_SIZE - n,
1262 "reg[0x%04X] = 0x%08X\n",
1263 i * (unsigned)sizeof(u32), dump[i]);
1264 }
1265 kfree(dump);
1266
1267 return n;
1268}
1269
1270/**
1271 * store_registers: writes value to register address
1272 *
1273 * Check "device.h" for details
1274 */
1275static ssize_t store_registers(struct device *dev,
1276 struct device_attribute *attr,
1277 const char *buf, size_t count)
1278{
1279 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1280 unsigned long addr, data, flags;
1281
1282 dbg_trace("[%s] %p, %d\n", __func__, buf, count);
1283 if (attr == NULL || buf == NULL) {
1284 dev_err(dev, "[%s] EINVAL\n", __func__);
1285 goto done;
1286 }
1287
1288 if (sscanf(buf, "%li %li", &addr, &data) != 2) {
1289 dev_err(dev, "<addr> <data>: write data to register address");
1290 goto done;
1291 }
1292
1293 spin_lock_irqsave(udc->lock, flags);
1294 if (hw_register_write(addr, data))
1295 dev_err(dev, "invalid address range\n");
1296 spin_unlock_irqrestore(udc->lock, flags);
1297
1298 done:
1299 return count;
1300}
1301static DEVICE_ATTR(registers, S_IRUSR | S_IWUSR,
1302 show_registers, store_registers);
1303
1304/**
1305 * show_requests: DMA contents of all requests currently queued (all endpts)
1306 *
1307 * Check "device.h" for details
1308 */
1309static ssize_t show_requests(struct device *dev, struct device_attribute *attr,
1310 char *buf)
1311{
1312 struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1313 unsigned long flags;
1314 struct list_head *ptr = NULL;
1315 struct ci13xxx_req *req = NULL;
1316 unsigned i, j, n = 0, qSize = sizeof(struct ci13xxx_td)/sizeof(u32);
1317
1318 dbg_trace("[%s] %p\n", __func__, buf);
1319 if (attr == NULL || buf == NULL) {
1320 dev_err(dev, "[%s] EINVAL\n", __func__);
1321 return 0;
1322 }
1323
1324 spin_lock_irqsave(udc->lock, flags);
1325 for (i = 0; i < hw_ep_max; i++)
1326 list_for_each(ptr, &udc->ci13xxx_ep[i].qh.queue)
1327 {
1328 req = list_entry(ptr, struct ci13xxx_req, queue);
1329
1330 n += scnprintf(buf + n, PAGE_SIZE - n,
1331 "EP=%02i: TD=%08X %s\n",
1332 i % hw_ep_max/2, (u32)req->dma,
1333 ((i < hw_ep_max/2) ? "RX" : "TX"));
1334
1335 for (j = 0; j < qSize; j++)
1336 n += scnprintf(buf + n, PAGE_SIZE - n,
1337 " %04X: %08X\n", j,
1338 *((u32 *)req->ptr + j));
1339 }
1340 spin_unlock_irqrestore(udc->lock, flags);
1341
1342 return n;
1343}
1344static DEVICE_ATTR(requests, S_IRUSR, show_requests, NULL);
1345
1346/**
1347 * dbg_create_files: initializes the attribute interface
1348 * @dev: device
1349 *
1350 * This function returns an error code
1351 */
1352__maybe_unused static int dbg_create_files(struct device *dev)
1353{
1354 int retval = 0;
1355
1356 if (dev == NULL)
1357 return -EINVAL;
1358 retval = device_create_file(dev, &dev_attr_device);
1359 if (retval)
1360 goto done;
1361 retval = device_create_file(dev, &dev_attr_driver);
1362 if (retval)
1363 goto rm_device;
1364 retval = device_create_file(dev, &dev_attr_events);
1365 if (retval)
1366 goto rm_driver;
1367 retval = device_create_file(dev, &dev_attr_inters);
1368 if (retval)
1369 goto rm_events;
1370 retval = device_create_file(dev, &dev_attr_port_test);
1371 if (retval)
1372 goto rm_inters;
1373 retval = device_create_file(dev, &dev_attr_qheads);
1374 if (retval)
1375 goto rm_port_test;
1376 retval = device_create_file(dev, &dev_attr_registers);
1377 if (retval)
1378 goto rm_qheads;
1379 retval = device_create_file(dev, &dev_attr_requests);
1380 if (retval)
1381 goto rm_registers;
1382 return 0;
1383
1384 rm_registers:
1385 device_remove_file(dev, &dev_attr_registers);
1386 rm_qheads:
1387 device_remove_file(dev, &dev_attr_qheads);
1388 rm_port_test:
1389 device_remove_file(dev, &dev_attr_port_test);
1390 rm_inters:
1391 device_remove_file(dev, &dev_attr_inters);
1392 rm_events:
1393 device_remove_file(dev, &dev_attr_events);
1394 rm_driver:
1395 device_remove_file(dev, &dev_attr_driver);
1396 rm_device:
1397 device_remove_file(dev, &dev_attr_device);
1398 done:
1399 return retval;
1400}
1401
1402/**
1403 * dbg_remove_files: destroys the attribute interface
1404 * @dev: device
1405 *
1406 * This function returns an error code
1407 */
1408__maybe_unused static int dbg_remove_files(struct device *dev)
1409{
1410 if (dev == NULL)
1411 return -EINVAL;
1412 device_remove_file(dev, &dev_attr_requests);
1413 device_remove_file(dev, &dev_attr_registers);
1414 device_remove_file(dev, &dev_attr_qheads);
1415 device_remove_file(dev, &dev_attr_port_test);
1416 device_remove_file(dev, &dev_attr_inters);
1417 device_remove_file(dev, &dev_attr_events);
1418 device_remove_file(dev, &dev_attr_driver);
1419 device_remove_file(dev, &dev_attr_device);
1420 return 0;
1421}
1422
1423/******************************************************************************
1424 * UTIL block
1425 *****************************************************************************/
1426/**
1427 * _usb_addr: calculates endpoint address from direction & number
1428 * @ep: endpoint
1429 */
1430static inline u8 _usb_addr(struct ci13xxx_ep *ep)
1431{
1432 return ((ep->dir == TX) ? USB_ENDPOINT_DIR_MASK : 0) | ep->num;
1433}
1434
1435/**
1436 * _hardware_queue: configures a request at hardware level
1437 * @gadget: gadget
1438 * @mEp: endpoint
1439 *
1440 * This function returns an error code
1441 */
1442static int _hardware_enqueue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
1443{
1444 unsigned i;
1445 int ret = 0;
1446 unsigned length = mReq->req.length;
1447
1448 trace("%p, %p", mEp, mReq);
1449
1450 /* don't queue twice */
1451 if (mReq->req.status == -EALREADY)
1452 return -EALREADY;
1453
1454 mReq->req.status = -EALREADY;
1455 if (length && mReq->req.dma == DMA_ADDR_INVALID) {
1456 mReq->req.dma = \
1457 dma_map_single(mEp->device, mReq->req.buf,
1458 length, mEp->dir ? DMA_TO_DEVICE :
1459 DMA_FROM_DEVICE);
1460 if (mReq->req.dma == 0)
1461 return -ENOMEM;
1462
1463 mReq->map = 1;
1464 }
1465
1466 if (mReq->req.zero && length && (length % mEp->ep.maxpacket == 0)) {
1467 mReq->zptr = dma_pool_alloc(mEp->td_pool, GFP_ATOMIC,
1468 &mReq->zdma);
1469 if (mReq->zptr == NULL) {
1470 if (mReq->map) {
1471 dma_unmap_single(mEp->device, mReq->req.dma,
1472 length, mEp->dir ? DMA_TO_DEVICE :
1473 DMA_FROM_DEVICE);
1474 mReq->req.dma = DMA_ADDR_INVALID;
1475 mReq->map = 0;
1476 }
1477 return -ENOMEM;
1478 }
1479 memset(mReq->zptr, 0, sizeof(*mReq->zptr));
1480 mReq->zptr->next = TD_TERMINATE;
1481 mReq->zptr->token = TD_STATUS_ACTIVE;
1482 if (!mReq->req.no_interrupt)
1483 mReq->zptr->token |= TD_IOC;
1484 }
1485 /*
1486 * TD configuration
1487 * TODO - handle requests which spawns into several TDs
1488 */
1489 memset(mReq->ptr, 0, sizeof(*mReq->ptr));
1490 mReq->ptr->token = length << ffs_nr(TD_TOTAL_BYTES);
1491 mReq->ptr->token &= TD_TOTAL_BYTES;
1492 mReq->ptr->token |= TD_STATUS_ACTIVE;
1493 if (mReq->zptr) {
1494 mReq->ptr->next = mReq->zdma;
1495 } else {
1496 mReq->ptr->next = TD_TERMINATE;
1497 if (!mReq->req.no_interrupt)
1498 mReq->ptr->token |= TD_IOC;
1499 }
1500 mReq->ptr->page[0] = mReq->req.dma;
1501 for (i = 1; i < 5; i++)
1502 mReq->ptr->page[i] =
1503 (mReq->req.dma + i * CI13XXX_PAGE_SIZE) & ~TD_RESERVED_MASK;
1504
1505 if (!list_empty(&mEp->qh.queue)) {
1506 struct ci13xxx_req *mReqPrev;
1507 int n = hw_ep_bit(mEp->num, mEp->dir);
1508 int tmp_stat;
1509
1510 mReqPrev = list_entry(mEp->qh.queue.prev,
1511 struct ci13xxx_req, queue);
1512 if (mReqPrev->zptr)
1513 mReqPrev->zptr->next = mReq->dma & TD_ADDR_MASK;
1514 else
1515 mReqPrev->ptr->next = mReq->dma & TD_ADDR_MASK;
1516 wmb();
1517 if (hw_cread(CAP_ENDPTPRIME, BIT(n)))
1518 goto done;
1519 do {
1520 hw_cwrite(CAP_USBCMD, USBCMD_ATDTW, USBCMD_ATDTW);
1521 tmp_stat = hw_cread(CAP_ENDPTSTAT, BIT(n));
1522 } while (!hw_cread(CAP_USBCMD, USBCMD_ATDTW));
1523 hw_cwrite(CAP_USBCMD, USBCMD_ATDTW, 0);
1524 if (tmp_stat)
1525 goto done;
1526 }
1527
1528 /* QH configuration */
1529 mEp->qh.ptr->td.next = mReq->dma; /* TERMINATE = 0 */
1530 mEp->qh.ptr->td.token &= ~TD_STATUS; /* clear status */
1531 mEp->qh.ptr->cap |= QH_ZLT;
1532
1533 wmb(); /* synchronize before ep prime */
1534
1535 ret = hw_ep_prime(mEp->num, mEp->dir,
1536 mEp->type == USB_ENDPOINT_XFER_CONTROL);
1537done:
1538 return ret;
1539}
1540
1541/**
1542 * _hardware_dequeue: handles a request at hardware level
1543 * @gadget: gadget
1544 * @mEp: endpoint
1545 *
1546 * This function returns an error code
1547 */
1548static int _hardware_dequeue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
1549{
1550 trace("%p, %p", mEp, mReq);
1551
1552 if (mReq->req.status != -EALREADY)
1553 return -EINVAL;
1554
1555 if ((TD_STATUS_ACTIVE & mReq->ptr->token) != 0)
1556 return -EBUSY;
1557
1558 if (mReq->zptr) {
1559 if ((TD_STATUS_ACTIVE & mReq->zptr->token) != 0)
1560 return -EBUSY;
1561 dma_pool_free(mEp->td_pool, mReq->zptr, mReq->zdma);
1562 mReq->zptr = NULL;
1563 }
1564
1565 mReq->req.status = 0;
1566
1567 if (mReq->map) {
1568 dma_unmap_single(mEp->device, mReq->req.dma, mReq->req.length,
1569 mEp->dir ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
1570 mReq->req.dma = DMA_ADDR_INVALID;
1571 mReq->map = 0;
1572 }
1573
1574 mReq->req.status = mReq->ptr->token & TD_STATUS;
1575 if ((TD_STATUS_HALTED & mReq->req.status) != 0)
1576 mReq->req.status = -1;
1577 else if ((TD_STATUS_DT_ERR & mReq->req.status) != 0)
1578 mReq->req.status = -1;
1579 else if ((TD_STATUS_TR_ERR & mReq->req.status) != 0)
1580 mReq->req.status = -1;
1581
1582 mReq->req.actual = mReq->ptr->token & TD_TOTAL_BYTES;
1583 mReq->req.actual >>= ffs_nr(TD_TOTAL_BYTES);
1584 mReq->req.actual = mReq->req.length - mReq->req.actual;
1585 mReq->req.actual = mReq->req.status ? 0 : mReq->req.actual;
1586
1587 return mReq->req.actual;
1588}
1589
1590/**
1591 * _ep_nuke: dequeues all endpoint requests
1592 * @mEp: endpoint
1593 *
1594 * This function returns an error code
1595 * Caller must hold lock
1596 */
1597static int _ep_nuke(struct ci13xxx_ep *mEp)
1598__releases(mEp->lock)
1599__acquires(mEp->lock)
1600{
1601 trace("%p", mEp);
1602
1603 if (mEp == NULL)
1604 return -EINVAL;
1605
1606 hw_ep_flush(mEp->num, mEp->dir);
1607
1608 while (!list_empty(&mEp->qh.queue)) {
1609
1610 /* pop oldest request */
1611 struct ci13xxx_req *mReq = \
1612 list_entry(mEp->qh.queue.next,
1613 struct ci13xxx_req, queue);
1614 list_del_init(&mReq->queue);
1615 mReq->req.status = -ESHUTDOWN;
1616
1617 if (mReq->req.complete != NULL) {
1618 spin_unlock(mEp->lock);
1619 mReq->req.complete(&mEp->ep, &mReq->req);
1620 spin_lock(mEp->lock);
1621 }
1622 }
1623 return 0;
1624}
1625
1626/**
1627 * _gadget_stop_activity: stops all USB activity, flushes & disables all endpts
1628 * @gadget: gadget
1629 *
1630 * This function returns an error code
1631 */
1632static int _gadget_stop_activity(struct usb_gadget *gadget)
1633{
1634 struct usb_ep *ep;
1635 struct ci13xxx *udc = container_of(gadget, struct ci13xxx, gadget);
1636 unsigned long flags;
1637
1638 trace("%p", gadget);
1639
1640 if (gadget == NULL)
1641 return -EINVAL;
1642
1643 spin_lock_irqsave(udc->lock, flags);
1644 udc->gadget.speed = USB_SPEED_UNKNOWN;
1645 udc->remote_wakeup = 0;
1646 udc->suspended = 0;
1647 spin_unlock_irqrestore(udc->lock, flags);
1648
1649 /* flush all endpoints */
1650 gadget_for_each_ep(ep, gadget) {
1651 usb_ep_fifo_flush(ep);
1652 }
1653 usb_ep_fifo_flush(&udc->ep0out.ep);
1654 usb_ep_fifo_flush(&udc->ep0in.ep);
1655
1656 udc->driver->disconnect(gadget);
1657
1658 /* make sure to disable all endpoints */
1659 gadget_for_each_ep(ep, gadget) {
1660 usb_ep_disable(ep);
1661 }
1662
1663 if (udc->status != NULL) {
1664 usb_ep_free_request(&udc->ep0in.ep, udc->status);
1665 udc->status = NULL;
1666 }
1667
1668 return 0;
1669}
1670
1671/******************************************************************************
1672 * ISR block
1673 *****************************************************************************/
1674/**
1675 * isr_reset_handler: USB reset interrupt handler
1676 * @udc: UDC device
1677 *
1678 * This function resets USB engine after a bus reset occurred
1679 */
1680static void isr_reset_handler(struct ci13xxx *udc)
1681__releases(udc->lock)
1682__acquires(udc->lock)
1683{
1684 int retval;
1685
1686 trace("%p", udc);
1687
1688 if (udc == NULL) {
1689 err("EINVAL");
1690 return;
1691 }
1692
1693 dbg_event(0xFF, "BUS RST", 0);
1694
1695 spin_unlock(udc->lock);
1696 retval = _gadget_stop_activity(&udc->gadget);
1697 if (retval)
1698 goto done;
1699
1700 retval = hw_usb_reset();
1701 if (retval)
1702 goto done;
1703
1704 udc->status = usb_ep_alloc_request(&udc->ep0in.ep, GFP_ATOMIC);
1705 if (udc->status == NULL)
1706 retval = -ENOMEM;
1707
1708 spin_lock(udc->lock);
1709
1710 done:
1711 if (retval)
1712 err("error: %i", retval);
1713}
1714
1715/**
1716 * isr_get_status_complete: get_status request complete function
1717 * @ep: endpoint
1718 * @req: request handled
1719 *
1720 * Caller must release lock
1721 */
1722static void isr_get_status_complete(struct usb_ep *ep, struct usb_request *req)
1723{
1724 trace("%p, %p", ep, req);
1725
1726 if (ep == NULL || req == NULL) {
1727 err("EINVAL");
1728 return;
1729 }
1730
1731 kfree(req->buf);
1732 usb_ep_free_request(ep, req);
1733}
1734
1735/**
1736 * isr_get_status_response: get_status request response
1737 * @udc: udc struct
1738 * @setup: setup request packet
1739 *
1740 * This function returns an error code
1741 */
1742static int isr_get_status_response(struct ci13xxx *udc,
1743 struct usb_ctrlrequest *setup)
1744__releases(mEp->lock)
1745__acquires(mEp->lock)
1746{
1747 struct ci13xxx_ep *mEp = &udc->ep0in;
1748 struct usb_request *req = NULL;
1749 gfp_t gfp_flags = GFP_ATOMIC;
1750 int dir, num, retval;
1751
1752 trace("%p, %p", mEp, setup);
1753
1754 if (mEp == NULL || setup == NULL)
1755 return -EINVAL;
1756
1757 spin_unlock(mEp->lock);
1758 req = usb_ep_alloc_request(&mEp->ep, gfp_flags);
1759 spin_lock(mEp->lock);
1760 if (req == NULL)
1761 return -ENOMEM;
1762
1763 req->complete = isr_get_status_complete;
1764 req->length = 2;
1765 req->buf = kzalloc(req->length, gfp_flags);
1766 if (req->buf == NULL) {
1767 retval = -ENOMEM;
1768 goto err_free_req;
1769 }
1770
1771 if ((setup->bRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE) {
1772 /* Assume that device is bus powered for now. */
1773 *((u16 *)req->buf) = _udc->remote_wakeup << 1;
1774 retval = 0;
1775 } else if ((setup->bRequestType & USB_RECIP_MASK) \
1776 == USB_RECIP_ENDPOINT) {
1777 dir = (le16_to_cpu(setup->wIndex) & USB_ENDPOINT_DIR_MASK) ?
1778 TX : RX;
1779 num = le16_to_cpu(setup->wIndex) & USB_ENDPOINT_NUMBER_MASK;
1780 *((u16 *)req->buf) = hw_ep_get_halt(num, dir);
1781 }
1782 /* else do nothing; reserved for future use */
1783
1784 spin_unlock(mEp->lock);
1785 retval = usb_ep_queue(&mEp->ep, req, gfp_flags);
1786 spin_lock(mEp->lock);
1787 if (retval)
1788 goto err_free_buf;
1789
1790 return 0;
1791
1792 err_free_buf:
1793 kfree(req->buf);
1794 err_free_req:
1795 spin_unlock(mEp->lock);
1796 usb_ep_free_request(&mEp->ep, req);
1797 spin_lock(mEp->lock);
1798 return retval;
1799}
1800
1801/**
1802 * isr_setup_status_complete: setup_status request complete function
1803 * @ep: endpoint
1804 * @req: request handled
1805 *
1806 * Caller must release lock. Put the port in test mode if test mode
1807 * feature is selected.
1808 */
1809static void
1810isr_setup_status_complete(struct usb_ep *ep, struct usb_request *req)
1811{
1812 struct ci13xxx *udc = req->context;
1813 unsigned long flags;
1814
1815 trace("%p, %p", ep, req);
1816
1817 spin_lock_irqsave(udc->lock, flags);
1818 if (udc->test_mode)
1819 hw_port_test_set(udc->test_mode);
1820 spin_unlock_irqrestore(udc->lock, flags);
1821}
1822
1823/**
1824 * isr_setup_status_phase: queues the status phase of a setup transation
1825 * @udc: udc struct
1826 *
1827 * This function returns an error code
1828 */
1829static int isr_setup_status_phase(struct ci13xxx *udc)
1830__releases(mEp->lock)
1831__acquires(mEp->lock)
1832{
1833 int retval;
1834 struct ci13xxx_ep *mEp;
1835
1836 trace("%p", udc);
1837
1838 mEp = (udc->ep0_dir == TX) ? &udc->ep0out : &udc->ep0in;
1839 udc->status->context = udc;
1840 udc->status->complete = isr_setup_status_complete;
1841
1842 spin_unlock(mEp->lock);
1843 retval = usb_ep_queue(&mEp->ep, udc->status, GFP_ATOMIC);
1844 spin_lock(mEp->lock);
1845
1846 return retval;
1847}
1848
1849/**
1850 * isr_tr_complete_low: transaction complete low level handler
1851 * @mEp: endpoint
1852 *
1853 * This function returns an error code
1854 * Caller must hold lock
1855 */
1856static int isr_tr_complete_low(struct ci13xxx_ep *mEp)
1857__releases(mEp->lock)
1858__acquires(mEp->lock)
1859{
1860 struct ci13xxx_req *mReq, *mReqTemp;
1861 struct ci13xxx_ep *mEpTemp = mEp;
1862 int uninitialized_var(retval);
1863
1864 trace("%p", mEp);
1865
1866 if (list_empty(&mEp->qh.queue))
1867 return -EINVAL;
1868
1869 list_for_each_entry_safe(mReq, mReqTemp, &mEp->qh.queue,
1870 queue) {
1871 retval = _hardware_dequeue(mEp, mReq);
1872 if (retval < 0)
1873 break;
1874 list_del_init(&mReq->queue);
1875 dbg_done(_usb_addr(mEp), mReq->ptr->token, retval);
1876 if (mReq->req.complete != NULL) {
1877 spin_unlock(mEp->lock);
1878 if ((mEp->type == USB_ENDPOINT_XFER_CONTROL) &&
1879 mReq->req.length)
1880 mEpTemp = &_udc->ep0in;
1881 mReq->req.complete(&mEpTemp->ep, &mReq->req);
1882 spin_lock(mEp->lock);
1883 }
1884 }
1885
1886 if (retval == -EBUSY)
1887 retval = 0;
1888 if (retval < 0)
1889 dbg_event(_usb_addr(mEp), "DONE", retval);
1890
1891 return retval;
1892}
1893
1894/**
1895 * isr_tr_complete_handler: transaction complete interrupt handler
1896 * @udc: UDC descriptor
1897 *
1898 * This function handles traffic events
1899 */
1900static void isr_tr_complete_handler(struct ci13xxx *udc)
1901__releases(udc->lock)
1902__acquires(udc->lock)
1903{
1904 unsigned i;
1905 u8 tmode = 0;
1906
1907 trace("%p", udc);
1908
1909 if (udc == NULL) {
1910 err("EINVAL");
1911 return;
1912 }
1913
1914 for (i = 0; i < hw_ep_max; i++) {
1915 struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[i];
1916 int type, num, dir, err = -EINVAL;
1917 struct usb_ctrlrequest req;
1918
1919 if (mEp->desc == NULL)
1920 continue; /* not configured */
1921
1922 if (hw_test_and_clear_complete(i)) {
1923 err = isr_tr_complete_low(mEp);
1924 if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
1925 if (err > 0) /* needs status phase */
1926 err = isr_setup_status_phase(udc);
1927 if (err < 0) {
1928 dbg_event(_usb_addr(mEp),
1929 "ERROR", err);
1930 spin_unlock(udc->lock);
1931 if (usb_ep_set_halt(&mEp->ep))
1932 err("error: ep_set_halt");
1933 spin_lock(udc->lock);
1934 }
1935 }
1936 }
1937
1938 if (mEp->type != USB_ENDPOINT_XFER_CONTROL ||
1939 !hw_test_and_clear_setup_status(i))
1940 continue;
1941
1942 if (i != 0) {
1943 warn("ctrl traffic received at endpoint");
1944 continue;
1945 }
1946
1947 /*
1948 * Flush data and handshake transactions of previous
1949 * setup packet.
1950 */
1951 _ep_nuke(&udc->ep0out);
1952 _ep_nuke(&udc->ep0in);
1953
1954 /* read_setup_packet */
1955 do {
1956 hw_test_and_set_setup_guard();
1957 memcpy(&req, &mEp->qh.ptr->setup, sizeof(req));
1958 } while (!hw_test_and_clear_setup_guard());
1959
1960 type = req.bRequestType;
1961
1962 udc->ep0_dir = (type & USB_DIR_IN) ? TX : RX;
1963
1964 dbg_setup(_usb_addr(mEp), &req);
1965
1966 switch (req.bRequest) {
1967 case USB_REQ_CLEAR_FEATURE:
1968 if (type == (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
1969 le16_to_cpu(req.wValue) ==
1970 USB_ENDPOINT_HALT) {
1971 if (req.wLength != 0)
1972 break;
1973 num = le16_to_cpu(req.wIndex);
1974 dir = num & USB_ENDPOINT_DIR_MASK;
1975 num &= USB_ENDPOINT_NUMBER_MASK;
1976 if (dir) /* TX */
1977 num += hw_ep_max/2;
1978 if (!udc->ci13xxx_ep[num].wedge) {
1979 spin_unlock(udc->lock);
1980 err = usb_ep_clear_halt(
1981 &udc->ci13xxx_ep[num].ep);
1982 spin_lock(udc->lock);
1983 if (err)
1984 break;
1985 }
1986 err = isr_setup_status_phase(udc);
1987 } else if (type == (USB_DIR_OUT|USB_RECIP_DEVICE) &&
1988 le16_to_cpu(req.wValue) ==
1989 USB_DEVICE_REMOTE_WAKEUP) {
1990 if (req.wLength != 0)
1991 break;
1992 udc->remote_wakeup = 0;
1993 err = isr_setup_status_phase(udc);
1994 } else {
1995 goto delegate;
1996 }
1997 break;
1998 case USB_REQ_GET_STATUS:
1999 if (type != (USB_DIR_IN|USB_RECIP_DEVICE) &&
2000 type != (USB_DIR_IN|USB_RECIP_ENDPOINT) &&
2001 type != (USB_DIR_IN|USB_RECIP_INTERFACE))
2002 goto delegate;
2003 if (le16_to_cpu(req.wLength) != 2 ||
2004 le16_to_cpu(req.wValue) != 0)
2005 break;
2006 err = isr_get_status_response(udc, &req);
2007 break;
2008 case USB_REQ_SET_ADDRESS:
2009 if (type != (USB_DIR_OUT|USB_RECIP_DEVICE))
2010 goto delegate;
2011 if (le16_to_cpu(req.wLength) != 0 ||
2012 le16_to_cpu(req.wIndex) != 0)
2013 break;
2014 err = hw_usb_set_address((u8)le16_to_cpu(req.wValue));
2015 if (err)
2016 break;
2017 err = isr_setup_status_phase(udc);
2018 break;
2019 case USB_REQ_SET_FEATURE:
2020 if (type == (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
2021 le16_to_cpu(req.wValue) ==
2022 USB_ENDPOINT_HALT) {
2023 if (req.wLength != 0)
2024 break;
2025 num = le16_to_cpu(req.wIndex);
2026 dir = num & USB_ENDPOINT_DIR_MASK;
2027 num &= USB_ENDPOINT_NUMBER_MASK;
2028 if (dir) /* TX */
2029 num += hw_ep_max/2;
2030
2031 spin_unlock(udc->lock);
2032 err = usb_ep_set_halt(&udc->ci13xxx_ep[num].ep);
2033 spin_lock(udc->lock);
2034 if (!err)
2035 isr_setup_status_phase(udc);
2036 } else if (type == (USB_DIR_OUT|USB_RECIP_DEVICE)) {
2037 if (req.wLength != 0)
2038 break;
2039 switch (le16_to_cpu(req.wValue)) {
2040 case USB_DEVICE_REMOTE_WAKEUP:
2041 udc->remote_wakeup = 1;
2042 err = isr_setup_status_phase(udc);
2043 break;
2044 case USB_DEVICE_TEST_MODE:
2045 tmode = le16_to_cpu(req.wIndex) >> 8;
2046 switch (tmode) {
2047 case TEST_J:
2048 case TEST_K:
2049 case TEST_SE0_NAK:
2050 case TEST_PACKET:
2051 case TEST_FORCE_EN:
2052 udc->test_mode = tmode;
2053 err = isr_setup_status_phase(
2054 udc);
2055 break;
2056 default:
2057 break;
2058 }
2059 default:
2060 goto delegate;
2061 }
2062 } else {
2063 goto delegate;
2064 }
2065 break;
2066 default:
2067delegate:
2068 if (req.wLength == 0) /* no data phase */
2069 udc->ep0_dir = TX;
2070
2071 spin_unlock(udc->lock);
2072 err = udc->driver->setup(&udc->gadget, &req);
2073 spin_lock(udc->lock);
2074 break;
2075 }
2076
2077 if (err < 0) {
2078 dbg_event(_usb_addr(mEp), "ERROR", err);
2079
2080 spin_unlock(udc->lock);
2081 if (usb_ep_set_halt(&mEp->ep))
2082 err("error: ep_set_halt");
2083 spin_lock(udc->lock);
2084 }
2085 }
2086}
2087
2088/******************************************************************************
2089 * ENDPT block
2090 *****************************************************************************/
2091/**
2092 * ep_enable: configure endpoint, making it usable
2093 *
2094 * Check usb_ep_enable() at "usb_gadget.h" for details
2095 */
2096static int ep_enable(struct usb_ep *ep,
2097 const struct usb_endpoint_descriptor *desc)
2098{
2099 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2100 int retval = 0;
2101 unsigned long flags;
2102
2103 trace("%p, %p", ep, desc);
2104
2105 if (ep == NULL || desc == NULL)
2106 return -EINVAL;
2107
2108 spin_lock_irqsave(mEp->lock, flags);
2109
2110 /* only internal SW should enable ctrl endpts */
2111
2112 mEp->desc = desc;
2113
2114 if (!list_empty(&mEp->qh.queue))
2115 warn("enabling a non-empty endpoint!");
2116
2117 mEp->dir = usb_endpoint_dir_in(desc) ? TX : RX;
2118 mEp->num = usb_endpoint_num(desc);
2119 mEp->type = usb_endpoint_type(desc);
2120
2121 mEp->ep.maxpacket = usb_endpoint_maxp(desc);
2122
2123 dbg_event(_usb_addr(mEp), "ENABLE", 0);
2124
2125 mEp->qh.ptr->cap = 0;
2126
2127 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
2128 mEp->qh.ptr->cap |= QH_IOS;
2129 else if (mEp->type == USB_ENDPOINT_XFER_ISOC)
2130 mEp->qh.ptr->cap &= ~QH_MULT;
2131 else
2132 mEp->qh.ptr->cap &= ~QH_ZLT;
2133
2134 mEp->qh.ptr->cap |=
2135 (mEp->ep.maxpacket << ffs_nr(QH_MAX_PKT)) & QH_MAX_PKT;
2136 mEp->qh.ptr->td.next |= TD_TERMINATE; /* needed? */
2137
2138 /*
2139 * Enable endpoints in the HW other than ep0 as ep0
2140 * is always enabled
2141 */
2142 if (mEp->num)
2143 retval |= hw_ep_enable(mEp->num, mEp->dir, mEp->type);
2144
2145 spin_unlock_irqrestore(mEp->lock, flags);
2146 return retval;
2147}
2148
2149/**
2150 * ep_disable: endpoint is no longer usable
2151 *
2152 * Check usb_ep_disable() at "usb_gadget.h" for details
2153 */
2154static int ep_disable(struct usb_ep *ep)
2155{
2156 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2157 int direction, retval = 0;
2158 unsigned long flags;
2159
2160 trace("%p", ep);
2161
2162 if (ep == NULL)
2163 return -EINVAL;
2164 else if (mEp->desc == NULL)
2165 return -EBUSY;
2166
2167 spin_lock_irqsave(mEp->lock, flags);
2168
2169 /* only internal SW should disable ctrl endpts */
2170
2171 direction = mEp->dir;
2172 do {
2173 dbg_event(_usb_addr(mEp), "DISABLE", 0);
2174
2175 retval |= _ep_nuke(mEp);
2176 retval |= hw_ep_disable(mEp->num, mEp->dir);
2177
2178 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
2179 mEp->dir = (mEp->dir == TX) ? RX : TX;
2180
2181 } while (mEp->dir != direction);
2182
2183 mEp->desc = NULL;
2184 mEp->ep.desc = NULL;
2185
2186 spin_unlock_irqrestore(mEp->lock, flags);
2187 return retval;
2188}
2189
2190/**
2191 * ep_alloc_request: allocate a request object to use with this endpoint
2192 *
2193 * Check usb_ep_alloc_request() at "usb_gadget.h" for details
2194 */
2195static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
2196{
2197 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2198 struct ci13xxx_req *mReq = NULL;
2199
2200 trace("%p, %i", ep, gfp_flags);
2201
2202 if (ep == NULL) {
2203 err("EINVAL");
2204 return NULL;
2205 }
2206
2207 mReq = kzalloc(sizeof(struct ci13xxx_req), gfp_flags);
2208 if (mReq != NULL) {
2209 INIT_LIST_HEAD(&mReq->queue);
2210 mReq->req.dma = DMA_ADDR_INVALID;
2211
2212 mReq->ptr = dma_pool_alloc(mEp->td_pool, gfp_flags,
2213 &mReq->dma);
2214 if (mReq->ptr == NULL) {
2215 kfree(mReq);
2216 mReq = NULL;
2217 }
2218 }
2219
2220 dbg_event(_usb_addr(mEp), "ALLOC", mReq == NULL);
2221
2222 return (mReq == NULL) ? NULL : &mReq->req;
2223}
2224
2225/**
2226 * ep_free_request: frees a request object
2227 *
2228 * Check usb_ep_free_request() at "usb_gadget.h" for details
2229 */
2230static void ep_free_request(struct usb_ep *ep, struct usb_request *req)
2231{
2232 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2233 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
2234 unsigned long flags;
2235
2236 trace("%p, %p", ep, req);
2237
2238 if (ep == NULL || req == NULL) {
2239 err("EINVAL");
2240 return;
2241 } else if (!list_empty(&mReq->queue)) {
2242 err("EBUSY");
2243 return;
2244 }
2245
2246 spin_lock_irqsave(mEp->lock, flags);
2247
2248 if (mReq->ptr)
2249 dma_pool_free(mEp->td_pool, mReq->ptr, mReq->dma);
2250 kfree(mReq);
2251
2252 dbg_event(_usb_addr(mEp), "FREE", 0);
2253
2254 spin_unlock_irqrestore(mEp->lock, flags);
2255}
2256
2257/**
2258 * ep_queue: queues (submits) an I/O request to an endpoint
2259 *
2260 * Check usb_ep_queue()* at usb_gadget.h" for details
2261 */
2262static int ep_queue(struct usb_ep *ep, struct usb_request *req,
2263 gfp_t __maybe_unused gfp_flags)
2264{
2265 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2266 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
2267 int retval = 0;
2268 unsigned long flags;
2269
2270 trace("%p, %p, %X", ep, req, gfp_flags);
2271
2272 if (ep == NULL || req == NULL || mEp->desc == NULL)
2273 return -EINVAL;
2274
2275 spin_lock_irqsave(mEp->lock, flags);
2276
2277 if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
2278 if (req->length)
2279 mEp = (_udc->ep0_dir == RX) ?
2280 &_udc->ep0out : &_udc->ep0in;
2281 if (!list_empty(&mEp->qh.queue)) {
2282 _ep_nuke(mEp);
2283 retval = -EOVERFLOW;
2284 warn("endpoint ctrl %X nuked", _usb_addr(mEp));
2285 }
2286 }
2287
2288 /* first nuke then test link, e.g. previous status has not sent */
2289 if (!list_empty(&mReq->queue)) {
2290 retval = -EBUSY;
2291 err("request already in queue");
2292 goto done;
2293 }
2294
2295 if (req->length > (4 * CI13XXX_PAGE_SIZE)) {
2296 req->length = (4 * CI13XXX_PAGE_SIZE);
2297 retval = -EMSGSIZE;
2298 warn("request length truncated");
2299 }
2300
2301 dbg_queue(_usb_addr(mEp), req, retval);
2302
2303 /* push request */
2304 mReq->req.status = -EINPROGRESS;
2305 mReq->req.actual = 0;
2306
2307 retval = _hardware_enqueue(mEp, mReq);
2308
2309 if (retval == -EALREADY) {
2310 dbg_event(_usb_addr(mEp), "QUEUE", retval);
2311 retval = 0;
2312 }
2313 if (!retval)
2314 list_add_tail(&mReq->queue, &mEp->qh.queue);
2315
2316 done:
2317 spin_unlock_irqrestore(mEp->lock, flags);
2318 return retval;
2319}
2320
2321/**
2322 * ep_dequeue: dequeues (cancels, unlinks) an I/O request from an endpoint
2323 *
2324 * Check usb_ep_dequeue() at "usb_gadget.h" for details
2325 */
2326static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)
2327{
2328 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2329 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
2330 unsigned long flags;
2331
2332 trace("%p, %p", ep, req);
2333
2334 if (ep == NULL || req == NULL || mReq->req.status != -EALREADY ||
2335 mEp->desc == NULL || list_empty(&mReq->queue) ||
2336 list_empty(&mEp->qh.queue))
2337 return -EINVAL;
2338
2339 spin_lock_irqsave(mEp->lock, flags);
2340
2341 dbg_event(_usb_addr(mEp), "DEQUEUE", 0);
2342
2343 hw_ep_flush(mEp->num, mEp->dir);
2344
2345 /* pop request */
2346 list_del_init(&mReq->queue);
2347 if (mReq->map) {
2348 dma_unmap_single(mEp->device, mReq->req.dma, mReq->req.length,
2349 mEp->dir ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
2350 mReq->req.dma = DMA_ADDR_INVALID;
2351 mReq->map = 0;
2352 }
2353 req->status = -ECONNRESET;
2354
2355 if (mReq->req.complete != NULL) {
2356 spin_unlock(mEp->lock);
2357 mReq->req.complete(&mEp->ep, &mReq->req);
2358 spin_lock(mEp->lock);
2359 }
2360
2361 spin_unlock_irqrestore(mEp->lock, flags);
2362 return 0;
2363}
2364
2365/**
2366 * ep_set_halt: sets the endpoint halt feature
2367 *
2368 * Check usb_ep_set_halt() at "usb_gadget.h" for details
2369 */
2370static int ep_set_halt(struct usb_ep *ep, int value)
2371{
2372 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2373 int direction, retval = 0;
2374 unsigned long flags;
2375
2376 trace("%p, %i", ep, value);
2377
2378 if (ep == NULL || mEp->desc == NULL)
2379 return -EINVAL;
2380
2381 spin_lock_irqsave(mEp->lock, flags);
2382
2383#ifndef STALL_IN
2384 /* g_file_storage MS compliant but g_zero fails chapter 9 compliance */
2385 if (value && mEp->type == USB_ENDPOINT_XFER_BULK && mEp->dir == TX &&
2386 !list_empty(&mEp->qh.queue)) {
2387 spin_unlock_irqrestore(mEp->lock, flags);
2388 return -EAGAIN;
2389 }
2390#endif
2391
2392 direction = mEp->dir;
2393 do {
2394 dbg_event(_usb_addr(mEp), "HALT", value);
2395 retval |= hw_ep_set_halt(mEp->num, mEp->dir, value);
2396
2397 if (!value)
2398 mEp->wedge = 0;
2399
2400 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
2401 mEp->dir = (mEp->dir == TX) ? RX : TX;
2402
2403 } while (mEp->dir != direction);
2404
2405 spin_unlock_irqrestore(mEp->lock, flags);
2406 return retval;
2407}
2408
2409/**
2410 * ep_set_wedge: sets the halt feature and ignores clear requests
2411 *
2412 * Check usb_ep_set_wedge() at "usb_gadget.h" for details
2413 */
2414static int ep_set_wedge(struct usb_ep *ep)
2415{
2416 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2417 unsigned long flags;
2418
2419 trace("%p", ep);
2420
2421 if (ep == NULL || mEp->desc == NULL)
2422 return -EINVAL;
2423
2424 spin_lock_irqsave(mEp->lock, flags);
2425
2426 dbg_event(_usb_addr(mEp), "WEDGE", 0);
2427 mEp->wedge = 1;
2428
2429 spin_unlock_irqrestore(mEp->lock, flags);
2430
2431 return usb_ep_set_halt(ep);
2432}
2433
2434/**
2435 * ep_fifo_flush: flushes contents of a fifo
2436 *
2437 * Check usb_ep_fifo_flush() at "usb_gadget.h" for details
2438 */
2439static void ep_fifo_flush(struct usb_ep *ep)
2440{
2441 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2442 unsigned long flags;
2443
2444 trace("%p", ep);
2445
2446 if (ep == NULL) {
2447 err("%02X: -EINVAL", _usb_addr(mEp));
2448 return;
2449 }
2450
2451 spin_lock_irqsave(mEp->lock, flags);
2452
2453 dbg_event(_usb_addr(mEp), "FFLUSH", 0);
2454 hw_ep_flush(mEp->num, mEp->dir);
2455
2456 spin_unlock_irqrestore(mEp->lock, flags);
2457}
2458
2459/**
2460 * Endpoint-specific part of the API to the USB controller hardware
2461 * Check "usb_gadget.h" for details
2462 */
2463static const struct usb_ep_ops usb_ep_ops = {
2464 .enable = ep_enable,
2465 .disable = ep_disable,
2466 .alloc_request = ep_alloc_request,
2467 .free_request = ep_free_request,
2468 .queue = ep_queue,
2469 .dequeue = ep_dequeue,
2470 .set_halt = ep_set_halt,
2471 .set_wedge = ep_set_wedge,
2472 .fifo_flush = ep_fifo_flush,
2473};
2474
2475/******************************************************************************
2476 * GADGET block
2477 *****************************************************************************/
2478static int ci13xxx_vbus_session(struct usb_gadget *_gadget, int is_active)
2479{
2480 struct ci13xxx *udc = container_of(_gadget, struct ci13xxx, gadget);
2481 unsigned long flags;
2482 int gadget_ready = 0;
2483
2484 if (!(udc->udc_driver->flags & CI13XXX_PULLUP_ON_VBUS))
2485 return -EOPNOTSUPP;
2486
2487 spin_lock_irqsave(udc->lock, flags);
2488 udc->vbus_active = is_active;
2489 if (udc->driver)
2490 gadget_ready = 1;
2491 spin_unlock_irqrestore(udc->lock, flags);
2492
2493 if (gadget_ready) {
2494 if (is_active) {
2495 pm_runtime_get_sync(&_gadget->dev);
2496 hw_device_reset(udc);
2497 hw_device_state(udc->ep0out.qh.dma);
2498 } else {
2499 hw_device_state(0);
2500 if (udc->udc_driver->notify_event)
2501 udc->udc_driver->notify_event(udc,
2502 CI13XXX_CONTROLLER_STOPPED_EVENT);
2503 _gadget_stop_activity(&udc->gadget);
2504 pm_runtime_put_sync(&_gadget->dev);
2505 }
2506 }
2507
2508 return 0;
2509}
2510
2511static int ci13xxx_wakeup(struct usb_gadget *_gadget)
2512{
2513 struct ci13xxx *udc = container_of(_gadget, struct ci13xxx, gadget);
2514 unsigned long flags;
2515 int ret = 0;
2516
2517 trace();
2518
2519 spin_lock_irqsave(udc->lock, flags);
2520 if (!udc->remote_wakeup) {
2521 ret = -EOPNOTSUPP;
2522 trace("remote wakeup feature is not enabled\n");
2523 goto out;
2524 }
2525 if (!hw_cread(CAP_PORTSC, PORTSC_SUSP)) {
2526 ret = -EINVAL;
2527 trace("port is not suspended\n");
2528 goto out;
2529 }
2530 hw_cwrite(CAP_PORTSC, PORTSC_FPR, PORTSC_FPR);
2531out:
2532 spin_unlock_irqrestore(udc->lock, flags);
2533 return ret;
2534}
2535
2536static int ci13xxx_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
2537{
2538 struct ci13xxx *udc = container_of(_gadget, struct ci13xxx, gadget);
2539
2540 if (udc->transceiver)
2541 return usb_phy_set_power(udc->transceiver, mA);
2542 return -ENOTSUPP;
2543}
2544
2545static int ci13xxx_start(struct usb_gadget_driver *driver,
2546 int (*bind)(struct usb_gadget *));
2547static int ci13xxx_stop(struct usb_gadget_driver *driver);
2548/**
2549 * Device operations part of the API to the USB controller hardware,
2550 * which don't involve endpoints (or i/o)
2551 * Check "usb_gadget.h" for details
2552 */
2553static const struct usb_gadget_ops usb_gadget_ops = {
2554 .vbus_session = ci13xxx_vbus_session,
2555 .wakeup = ci13xxx_wakeup,
2556 .vbus_draw = ci13xxx_vbus_draw,
2557 .start = ci13xxx_start,
2558 .stop = ci13xxx_stop,
2559};
2560
2561/**
2562 * ci13xxx_start: register a gadget driver
2563 * @driver: the driver being registered
2564 * @bind: the driver's bind callback
2565 *
2566 * Check ci13xxx_start() at <linux/usb/gadget.h> for details.
2567 * Interrupts are enabled here.
2568 */
2569static int ci13xxx_start(struct usb_gadget_driver *driver,
2570 int (*bind)(struct usb_gadget *))
2571{
2572 struct ci13xxx *udc = _udc;
2573 unsigned long flags;
2574 int i, j;
2575 int retval = -ENOMEM;
2576
2577 trace("%p", driver);
2578
2579 if (driver == NULL ||
2580 bind == NULL ||
2581 driver->setup == NULL ||
2582 driver->disconnect == NULL)
2583 return -EINVAL;
2584 else if (udc == NULL)
2585 return -ENODEV;
2586 else if (udc->driver != NULL)
2587 return -EBUSY;
2588
2589 /* alloc resources */
2590 udc->qh_pool = dma_pool_create("ci13xxx_qh", &udc->gadget.dev,
2591 sizeof(struct ci13xxx_qh),
2592 64, CI13XXX_PAGE_SIZE);
2593 if (udc->qh_pool == NULL)
2594 return -ENOMEM;
2595
2596 udc->td_pool = dma_pool_create("ci13xxx_td", &udc->gadget.dev,
2597 sizeof(struct ci13xxx_td),
2598 64, CI13XXX_PAGE_SIZE);
2599 if (udc->td_pool == NULL) {
2600 dma_pool_destroy(udc->qh_pool);
2601 udc->qh_pool = NULL;
2602 return -ENOMEM;
2603 }
2604
2605 spin_lock_irqsave(udc->lock, flags);
2606
2607 info("hw_ep_max = %d", hw_ep_max);
2608
2609 udc->gadget.dev.driver = NULL;
2610
2611 retval = 0;
2612 for (i = 0; i < hw_ep_max/2; i++) {
2613 for (j = RX; j <= TX; j++) {
2614 int k = i + j * hw_ep_max/2;
2615 struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[k];
2616
2617 scnprintf(mEp->name, sizeof(mEp->name), "ep%i%s", i,
2618 (j == TX) ? "in" : "out");
2619
2620 mEp->lock = udc->lock;
2621 mEp->device = &udc->gadget.dev;
2622 mEp->td_pool = udc->td_pool;
2623
2624 mEp->ep.name = mEp->name;
2625 mEp->ep.ops = &usb_ep_ops;
2626 mEp->ep.maxpacket = CTRL_PAYLOAD_MAX;
2627
2628 INIT_LIST_HEAD(&mEp->qh.queue);
2629 spin_unlock_irqrestore(udc->lock, flags);
2630 mEp->qh.ptr = dma_pool_alloc(udc->qh_pool, GFP_KERNEL,
2631 &mEp->qh.dma);
2632 spin_lock_irqsave(udc->lock, flags);
2633 if (mEp->qh.ptr == NULL)
2634 retval = -ENOMEM;
2635 else
2636 memset(mEp->qh.ptr, 0, sizeof(*mEp->qh.ptr));
2637
2638 /* skip ep0 out and in endpoints */
2639 if (i == 0)
2640 continue;
2641
2642 list_add_tail(&mEp->ep.ep_list, &udc->gadget.ep_list);
2643 }
2644 }
2645 if (retval)
2646 goto done;
2647 spin_unlock_irqrestore(udc->lock, flags);
2648 udc->ep0out.ep.desc = &ctrl_endpt_out_desc;
2649 retval = usb_ep_enable(&udc->ep0out.ep);
2650 if (retval)
2651 return retval;
2652
2653 udc->ep0in.ep.desc = &ctrl_endpt_in_desc;
2654 retval = usb_ep_enable(&udc->ep0in.ep);
2655 if (retval)
2656 return retval;
2657 spin_lock_irqsave(udc->lock, flags);
2658
2659 udc->gadget.ep0 = &udc->ep0in.ep;
2660 /* bind gadget */
2661 driver->driver.bus = NULL;
2662 udc->gadget.dev.driver = &driver->driver;
2663
2664 spin_unlock_irqrestore(udc->lock, flags);
2665 retval = bind(&udc->gadget); /* MAY SLEEP */
2666 spin_lock_irqsave(udc->lock, flags);
2667
2668 if (retval) {
2669 udc->gadget.dev.driver = NULL;
2670 goto done;
2671 }
2672
2673 udc->driver = driver;
2674 pm_runtime_get_sync(&udc->gadget.dev);
2675 if (udc->udc_driver->flags & CI13XXX_PULLUP_ON_VBUS) {
2676 if (udc->vbus_active) {
2677 if (udc->udc_driver->flags & CI13XXX_REGS_SHARED)
2678 hw_device_reset(udc);
2679 } else {
2680 pm_runtime_put_sync(&udc->gadget.dev);
2681 goto done;
2682 }
2683 }
2684
2685 retval = hw_device_state(udc->ep0out.qh.dma);
2686 if (retval)
2687 pm_runtime_put_sync(&udc->gadget.dev);
2688
2689 done:
2690 spin_unlock_irqrestore(udc->lock, flags);
2691 return retval;
2692}
2693
2694/**
2695 * ci13xxx_stop: unregister a gadget driver
2696 *
2697 * Check usb_gadget_unregister_driver() at "usb_gadget.h" for details
2698 */
2699static int ci13xxx_stop(struct usb_gadget_driver *driver)
2700{
2701 struct ci13xxx *udc = _udc;
2702 unsigned long i, flags;
2703
2704 trace("%p", driver);
2705
2706 if (driver == NULL ||
2707 driver->unbind == NULL ||
2708 driver->setup == NULL ||
2709 driver->disconnect == NULL ||
2710 driver != udc->driver)
2711 return -EINVAL;
2712
2713 spin_lock_irqsave(udc->lock, flags);
2714
2715 if (!(udc->udc_driver->flags & CI13XXX_PULLUP_ON_VBUS) ||
2716 udc->vbus_active) {
2717 hw_device_state(0);
2718 if (udc->udc_driver->notify_event)
2719 udc->udc_driver->notify_event(udc,
2720 CI13XXX_CONTROLLER_STOPPED_EVENT);
2721 spin_unlock_irqrestore(udc->lock, flags);
2722 _gadget_stop_activity(&udc->gadget);
2723 spin_lock_irqsave(udc->lock, flags);
2724 pm_runtime_put(&udc->gadget.dev);
2725 }
2726
2727 /* unbind gadget */
2728 spin_unlock_irqrestore(udc->lock, flags);
2729 driver->unbind(&udc->gadget); /* MAY SLEEP */
2730 spin_lock_irqsave(udc->lock, flags);
2731
2732 udc->gadget.dev.driver = NULL;
2733
2734 /* free resources */
2735 for (i = 0; i < hw_ep_max; i++) {
2736 struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[i];
2737
2738 if (!list_empty(&mEp->ep.ep_list))
2739 list_del_init(&mEp->ep.ep_list);
2740
2741 if (mEp->qh.ptr != NULL)
2742 dma_pool_free(udc->qh_pool, mEp->qh.ptr, mEp->qh.dma);
2743 }
2744
2745 udc->gadget.ep0 = NULL;
2746 udc->driver = NULL;
2747
2748 spin_unlock_irqrestore(udc->lock, flags);
2749
2750 if (udc->td_pool != NULL) {
2751 dma_pool_destroy(udc->td_pool);
2752 udc->td_pool = NULL;
2753 }
2754 if (udc->qh_pool != NULL) {
2755 dma_pool_destroy(udc->qh_pool);
2756 udc->qh_pool = NULL;
2757 }
2758
2759 return 0;
2760}
2761
2762/******************************************************************************
2763 * BUS block
2764 *****************************************************************************/
2765/**
2766 * udc_irq: global interrupt handler
2767 *
2768 * This function returns IRQ_HANDLED if the IRQ has been handled
2769 * It locks access to registers
2770 */
2771static irqreturn_t udc_irq(void)
2772{
2773 struct ci13xxx *udc = _udc;
2774 irqreturn_t retval;
2775 u32 intr;
2776
2777 trace();
2778
2779 if (udc == NULL) {
2780 err("ENODEV");
2781 return IRQ_HANDLED;
2782 }
2783
2784 spin_lock(udc->lock);
2785
2786 if (udc->udc_driver->flags & CI13XXX_REGS_SHARED) {
2787 if (hw_cread(CAP_USBMODE, USBMODE_CM) !=
2788 USBMODE_CM_DEVICE) {
2789 spin_unlock(udc->lock);
2790 return IRQ_NONE;
2791 }
2792 }
2793 intr = hw_test_and_clear_intr_active();
2794 if (intr) {
2795 isr_statistics.hndl.buf[isr_statistics.hndl.idx++] = intr;
2796 isr_statistics.hndl.idx &= ISR_MASK;
2797 isr_statistics.hndl.cnt++;
2798
2799 /* order defines priority - do NOT change it */
2800 if (USBi_URI & intr) {
2801 isr_statistics.uri++;
2802 isr_reset_handler(udc);
2803 }
2804 if (USBi_PCI & intr) {
2805 isr_statistics.pci++;
2806 udc->gadget.speed = hw_port_is_high_speed() ?
2807 USB_SPEED_HIGH : USB_SPEED_FULL;
2808 if (udc->suspended && udc->driver->resume) {
2809 spin_unlock(udc->lock);
2810 udc->driver->resume(&udc->gadget);
2811 spin_lock(udc->lock);
2812 udc->suspended = 0;
2813 }
2814 }
2815 if (USBi_UEI & intr)
2816 isr_statistics.uei++;
2817 if (USBi_UI & intr) {
2818 isr_statistics.ui++;
2819 isr_tr_complete_handler(udc);
2820 }
2821 if (USBi_SLI & intr) {
2822 if (udc->gadget.speed != USB_SPEED_UNKNOWN &&
2823 udc->driver->suspend) {
2824 udc->suspended = 1;
2825 spin_unlock(udc->lock);
2826 udc->driver->suspend(&udc->gadget);
2827 spin_lock(udc->lock);
2828 }
2829 isr_statistics.sli++;
2830 }
2831 retval = IRQ_HANDLED;
2832 } else {
2833 isr_statistics.none++;
2834 retval = IRQ_NONE;
2835 }
2836 spin_unlock(udc->lock);
2837
2838 return retval;
2839}
2840
2841/**
2842 * udc_release: driver release function
2843 * @dev: device
2844 *
2845 * Currently does nothing
2846 */
2847static void udc_release(struct device *dev)
2848{
2849 trace("%p", dev);
2850
2851 if (dev == NULL)
2852 err("EINVAL");
2853}
2854
2855/**
2856 * udc_probe: parent probe must call this to initialize UDC
2857 * @dev: parent device
2858 * @regs: registers base address
2859 * @name: driver name
2860 *
2861 * This function returns an error code
2862 * No interrupts active, the IRQ has not been requested yet
2863 * Kernel assumes 32-bit DMA operations by default, no need to dma_set_mask
2864 */
2865static int udc_probe(struct ci13xxx_udc_driver *driver, struct device *dev,
2866 void __iomem *regs)
2867{
2868 struct ci13xxx *udc;
2869 int retval = 0;
2870
2871 trace("%p, %p, %p", dev, regs, driver->name);
2872
2873 if (dev == NULL || regs == NULL || driver == NULL ||
2874 driver->name == NULL)
2875 return -EINVAL;
2876
2877 udc = kzalloc(sizeof(struct ci13xxx), GFP_KERNEL);
2878 if (udc == NULL)
2879 return -ENOMEM;
2880
2881 udc->lock = &udc_lock;
2882 udc->regs = regs;
2883 udc->udc_driver = driver;
2884
2885 udc->gadget.ops = &usb_gadget_ops;
2886 udc->gadget.speed = USB_SPEED_UNKNOWN;
2887 udc->gadget.max_speed = USB_SPEED_HIGH;
2888 udc->gadget.is_otg = 0;
2889 udc->gadget.name = driver->name;
2890
2891 INIT_LIST_HEAD(&udc->gadget.ep_list);
2892 udc->gadget.ep0 = NULL;
2893
2894 dev_set_name(&udc->gadget.dev, "gadget");
2895 udc->gadget.dev.dma_mask = dev->dma_mask;
2896 udc->gadget.dev.coherent_dma_mask = dev->coherent_dma_mask;
2897 udc->gadget.dev.parent = dev;
2898 udc->gadget.dev.release = udc_release;
2899
2900 retval = hw_device_init(regs);
2901 if (retval < 0)
2902 goto free_udc;
2903
2904 udc->transceiver = usb_get_transceiver();
2905
2906 if (udc->udc_driver->flags & CI13XXX_REQUIRE_TRANSCEIVER) {
2907 if (udc->transceiver == NULL) {
2908 retval = -ENODEV;
2909 goto free_udc;
2910 }
2911 }
2912
2913 if (!(udc->udc_driver->flags & CI13XXX_REGS_SHARED)) {
2914 retval = hw_device_reset(udc);
2915 if (retval)
2916 goto put_transceiver;
2917 }
2918
2919 retval = device_register(&udc->gadget.dev);
2920 if (retval) {
2921 put_device(&udc->gadget.dev);
2922 goto put_transceiver;
2923 }
2924
2925#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2926 retval = dbg_create_files(&udc->gadget.dev);
2927#endif
2928 if (retval)
2929 goto unreg_device;
2930
2931 if (udc->transceiver) {
2932 retval = otg_set_peripheral(udc->transceiver->otg,
2933 &udc->gadget);
2934 if (retval)
2935 goto remove_dbg;
2936 }
2937
2938 retval = usb_add_gadget_udc(dev, &udc->gadget);
2939 if (retval)
2940 goto remove_trans;
2941
2942 pm_runtime_no_callbacks(&udc->gadget.dev);
2943 pm_runtime_enable(&udc->gadget.dev);
2944
2945 _udc = udc;
2946 return retval;
2947
2948remove_trans:
2949 if (udc->transceiver) {
2950 otg_set_peripheral(udc->transceiver->otg, &udc->gadget);
2951 usb_put_transceiver(udc->transceiver);
2952 }
2953
2954 err("error = %i", retval);
2955remove_dbg:
2956#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2957 dbg_remove_files(&udc->gadget.dev);
2958#endif
2959unreg_device:
2960 device_unregister(&udc->gadget.dev);
2961put_transceiver:
2962 if (udc->transceiver)
2963 usb_put_transceiver(udc->transceiver);
2964free_udc:
2965 kfree(udc);
2966 _udc = NULL;
2967 return retval;
2968}
2969
2970/**
2971 * udc_remove: parent remove must call this to remove UDC
2972 *
2973 * No interrupts active, the IRQ has been released
2974 */
2975static void udc_remove(void)
2976{
2977 struct ci13xxx *udc = _udc;
2978
2979 if (udc == NULL) {
2980 err("EINVAL");
2981 return;
2982 }
2983 usb_del_gadget_udc(&udc->gadget);
2984
2985 if (udc->transceiver) {
2986 otg_set_peripheral(udc->transceiver->otg, &udc->gadget);
2987 usb_put_transceiver(udc->transceiver);
2988 }
2989#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2990 dbg_remove_files(&udc->gadget.dev);
2991#endif
2992 device_unregister(&udc->gadget.dev);
2993
2994 kfree(udc);
2995 _udc = NULL;
2996}
diff --git a/drivers/usb/gadget/ci13xxx_udc.h b/drivers/usb/gadget/ci13xxx_udc.h
deleted file mode 100644
index 0d31af56c989..000000000000
--- a/drivers/usb/gadget/ci13xxx_udc.h
+++ /dev/null
@@ -1,227 +0,0 @@
1/*
2 * ci13xxx_udc.h - structures, registers, and macros MIPS USB IP core
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 * Description: MIPS USB IP core family device controller
13 * Structures, registers and logging macros
14 */
15
16#ifndef _CI13XXX_h_
17#define _CI13XXX_h_
18
19/******************************************************************************
20 * DEFINE
21 *****************************************************************************/
22#define CI13XXX_PAGE_SIZE 4096ul /* page size for TD's */
23#define ENDPT_MAX (32)
24#define CTRL_PAYLOAD_MAX (64)
25#define RX (0) /* similar to USB_DIR_OUT but can be used as an index */
26#define TX (1) /* similar to USB_DIR_IN but can be used as an index */
27
28/******************************************************************************
29 * STRUCTURES
30 *****************************************************************************/
31/* DMA layout of transfer descriptors */
32struct ci13xxx_td {
33 /* 0 */
34 u32 next;
35#define TD_TERMINATE BIT(0)
36#define TD_ADDR_MASK (0xFFFFFFEUL << 5)
37 /* 1 */
38 u32 token;
39#define TD_STATUS (0x00FFUL << 0)
40#define TD_STATUS_TR_ERR BIT(3)
41#define TD_STATUS_DT_ERR BIT(5)
42#define TD_STATUS_HALTED BIT(6)
43#define TD_STATUS_ACTIVE BIT(7)
44#define TD_MULTO (0x0003UL << 10)
45#define TD_IOC BIT(15)
46#define TD_TOTAL_BYTES (0x7FFFUL << 16)
47 /* 2 */
48 u32 page[5];
49#define TD_CURR_OFFSET (0x0FFFUL << 0)
50#define TD_FRAME_NUM (0x07FFUL << 0)
51#define TD_RESERVED_MASK (0x0FFFUL << 0)
52} __attribute__ ((packed));
53
54/* DMA layout of queue heads */
55struct ci13xxx_qh {
56 /* 0 */
57 u32 cap;
58#define QH_IOS BIT(15)
59#define QH_MAX_PKT (0x07FFUL << 16)
60#define QH_ZLT BIT(29)
61#define QH_MULT (0x0003UL << 30)
62 /* 1 */
63 u32 curr;
64 /* 2 - 8 */
65 struct ci13xxx_td td;
66 /* 9 */
67 u32 RESERVED;
68 struct usb_ctrlrequest setup;
69} __attribute__ ((packed));
70
71/* Extension of usb_request */
72struct ci13xxx_req {
73 struct usb_request req;
74 unsigned map;
75 struct list_head queue;
76 struct ci13xxx_td *ptr;
77 dma_addr_t dma;
78 struct ci13xxx_td *zptr;
79 dma_addr_t zdma;
80};
81
82/* Extension of usb_ep */
83struct ci13xxx_ep {
84 struct usb_ep ep;
85 const struct usb_endpoint_descriptor *desc;
86 u8 dir;
87 u8 num;
88 u8 type;
89 char name[16];
90 struct {
91 struct list_head queue;
92 struct ci13xxx_qh *ptr;
93 dma_addr_t dma;
94 } qh;
95 int wedge;
96
97 /* global resources */
98 spinlock_t *lock;
99 struct device *device;
100 struct dma_pool *td_pool;
101};
102
103struct ci13xxx;
104struct ci13xxx_udc_driver {
105 const char *name;
106 unsigned long flags;
107#define CI13XXX_REGS_SHARED BIT(0)
108#define CI13XXX_REQUIRE_TRANSCEIVER BIT(1)
109#define CI13XXX_PULLUP_ON_VBUS BIT(2)
110#define CI13XXX_DISABLE_STREAMING BIT(3)
111
112#define CI13XXX_CONTROLLER_RESET_EVENT 0
113#define CI13XXX_CONTROLLER_STOPPED_EVENT 1
114 void (*notify_event) (struct ci13xxx *udc, unsigned event);
115};
116
117/* CI13XXX UDC descriptor & global resources */
118struct ci13xxx {
119 spinlock_t *lock; /* ctrl register bank access */
120 void __iomem *regs; /* registers address space */
121
122 struct dma_pool *qh_pool; /* DMA pool for queue heads */
123 struct dma_pool *td_pool; /* DMA pool for transfer descs */
124 struct usb_request *status; /* ep0 status request */
125
126 struct usb_gadget gadget; /* USB slave device */
127 struct ci13xxx_ep ci13xxx_ep[ENDPT_MAX]; /* extended endpts */
128 u32 ep0_dir; /* ep0 direction */
129#define ep0out ci13xxx_ep[0]
130#define ep0in ci13xxx_ep[hw_ep_max / 2]
131 u8 remote_wakeup; /* Is remote wakeup feature
132 enabled by the host? */
133 u8 suspended; /* suspended by the host */
134 u8 test_mode; /* the selected test mode */
135
136 struct usb_gadget_driver *driver; /* 3rd party gadget driver */
137 struct ci13xxx_udc_driver *udc_driver; /* device controller driver */
138 int vbus_active; /* is VBUS active */
139 struct usb_phy *transceiver; /* Transceiver struct */
140};
141
142/******************************************************************************
143 * REGISTERS
144 *****************************************************************************/
145/* register size */
146#define REG_BITS (32)
147
148/* HCCPARAMS */
149#define HCCPARAMS_LEN BIT(17)
150
151/* DCCPARAMS */
152#define DCCPARAMS_DEN (0x1F << 0)
153#define DCCPARAMS_DC BIT(7)
154
155/* TESTMODE */
156#define TESTMODE_FORCE BIT(0)
157
158/* USBCMD */
159#define USBCMD_RS BIT(0)
160#define USBCMD_RST BIT(1)
161#define USBCMD_SUTW BIT(13)
162#define USBCMD_ATDTW BIT(14)
163
164/* USBSTS & USBINTR */
165#define USBi_UI BIT(0)
166#define USBi_UEI BIT(1)
167#define USBi_PCI BIT(2)
168#define USBi_URI BIT(6)
169#define USBi_SLI BIT(8)
170
171/* DEVICEADDR */
172#define DEVICEADDR_USBADRA BIT(24)
173#define DEVICEADDR_USBADR (0x7FUL << 25)
174
175/* PORTSC */
176#define PORTSC_FPR BIT(6)
177#define PORTSC_SUSP BIT(7)
178#define PORTSC_HSP BIT(9)
179#define PORTSC_PTC (0x0FUL << 16)
180
181/* DEVLC */
182#define DEVLC_PSPD (0x03UL << 25)
183#define DEVLC_PSPD_HS (0x02UL << 25)
184
185/* USBMODE */
186#define USBMODE_CM (0x03UL << 0)
187#define USBMODE_CM_IDLE (0x00UL << 0)
188#define USBMODE_CM_DEVICE (0x02UL << 0)
189#define USBMODE_CM_HOST (0x03UL << 0)
190#define USBMODE_SLOM BIT(3)
191#define USBMODE_SDIS BIT(4)
192
193/* ENDPTCTRL */
194#define ENDPTCTRL_RXS BIT(0)
195#define ENDPTCTRL_RXT (0x03UL << 2)
196#define ENDPTCTRL_RXR BIT(6) /* reserved for port 0 */
197#define ENDPTCTRL_RXE BIT(7)
198#define ENDPTCTRL_TXS BIT(16)
199#define ENDPTCTRL_TXT (0x03UL << 18)
200#define ENDPTCTRL_TXR BIT(22) /* reserved for port 0 */
201#define ENDPTCTRL_TXE BIT(23)
202
203/******************************************************************************
204 * LOGGING
205 *****************************************************************************/
206#define ci13xxx_printk(level, format, args...) \
207do { \
208 if (_udc == NULL) \
209 printk(level "[%s] " format "\n", __func__, ## args); \
210 else \
211 dev_printk(level, _udc->gadget.dev.parent, \
212 "[%s] " format "\n", __func__, ## args); \
213} while (0)
214
215#define err(format, args...) ci13xxx_printk(KERN_ERR, format, ## args)
216#define warn(format, args...) ci13xxx_printk(KERN_WARNING, format, ## args)
217#define info(format, args...) ci13xxx_printk(KERN_INFO, format, ## args)
218
219#ifdef TRACE
220#define trace(format, args...) ci13xxx_printk(KERN_DEBUG, format, ## args)
221#define dbg_trace(format, args...) dev_dbg(dev, format, ##args)
222#else
223#define trace(format, args...) do {} while (0)
224#define dbg_trace(format, args...) do {} while (0)
225#endif
226
227#endif /* _CI13XXX_h_ */
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index baaebf2830fc..390749bbb0c3 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -40,27 +40,27 @@ static int (*composite_gadget_bind)(struct usb_composite_dev *cdev);
40 */ 40 */
41 41
42static ushort idVendor; 42static ushort idVendor;
43module_param(idVendor, ushort, 0); 43module_param(idVendor, ushort, 0644);
44MODULE_PARM_DESC(idVendor, "USB Vendor ID"); 44MODULE_PARM_DESC(idVendor, "USB Vendor ID");
45 45
46static ushort idProduct; 46static ushort idProduct;
47module_param(idProduct, ushort, 0); 47module_param(idProduct, ushort, 0644);
48MODULE_PARM_DESC(idProduct, "USB Product ID"); 48MODULE_PARM_DESC(idProduct, "USB Product ID");
49 49
50static ushort bcdDevice; 50static ushort bcdDevice;
51module_param(bcdDevice, ushort, 0); 51module_param(bcdDevice, ushort, 0644);
52MODULE_PARM_DESC(bcdDevice, "USB Device version (BCD)"); 52MODULE_PARM_DESC(bcdDevice, "USB Device version (BCD)");
53 53
54static char *iManufacturer; 54static char *iManufacturer;
55module_param(iManufacturer, charp, 0); 55module_param(iManufacturer, charp, 0644);
56MODULE_PARM_DESC(iManufacturer, "USB Manufacturer string"); 56MODULE_PARM_DESC(iManufacturer, "USB Manufacturer string");
57 57
58static char *iProduct; 58static char *iProduct;
59module_param(iProduct, charp, 0); 59module_param(iProduct, charp, 0644);
60MODULE_PARM_DESC(iProduct, "USB Product string"); 60MODULE_PARM_DESC(iProduct, "USB Product string");
61 61
62static char *iSerialNumber; 62static char *iSerialNumber;
63module_param(iSerialNumber, charp, 0); 63module_param(iSerialNumber, charp, 0644);
64MODULE_PARM_DESC(iSerialNumber, "SerialNumber string"); 64MODULE_PARM_DESC(iSerialNumber, "SerialNumber string");
65 65
66static char composite_manufacturer[50]; 66static char composite_manufacturer[50];
@@ -734,9 +734,23 @@ int usb_add_config(struct usb_composite_dev *cdev,
734 734
735 INIT_LIST_HEAD(&config->functions); 735 INIT_LIST_HEAD(&config->functions);
736 config->next_interface_id = 0; 736 config->next_interface_id = 0;
737 memset(config->interface, 0, sizeof(config->interface));
737 738
738 status = bind(config); 739 status = bind(config);
739 if (status < 0) { 740 if (status < 0) {
741 while (!list_empty(&config->functions)) {
742 struct usb_function *f;
743
744 f = list_first_entry(&config->functions,
745 struct usb_function, list);
746 list_del(&f->list);
747 if (f->unbind) {
748 DBG(cdev, "unbind function '%s'/%p\n",
749 f->name, f);
750 f->unbind(config, f);
751 /* may free memory for "f" */
752 }
753 }
740 list_del(&config->list); 754 list_del(&config->list);
741 config->cdev = NULL; 755 config->cdev = NULL;
742 } else { 756 } else {
@@ -774,6 +788,53 @@ done:
774 return status; 788 return status;
775} 789}
776 790
791static void remove_config(struct usb_composite_dev *cdev,
792 struct usb_configuration *config)
793{
794 while (!list_empty(&config->functions)) {
795 struct usb_function *f;
796
797 f = list_first_entry(&config->functions,
798 struct usb_function, list);
799 list_del(&f->list);
800 if (f->unbind) {
801 DBG(cdev, "unbind function '%s'/%p\n", f->name, f);
802 f->unbind(config, f);
803 /* may free memory for "f" */
804 }
805 }
806 list_del(&config->list);
807 if (config->unbind) {
808 DBG(cdev, "unbind config '%s'/%p\n", config->label, config);
809 config->unbind(config);
810 /* may free memory for "c" */
811 }
812}
813
814/**
815 * usb_remove_config() - remove a configuration from a device.
816 * @cdev: wraps the USB gadget
817 * @config: the configuration
818 *
819 * Drivers must call usb_gadget_disconnect before calling this function
820 * to disconnect the device from the host and make sure the host will not
821 * try to enumerate the device while we are changing the config list.
822 */
823void usb_remove_config(struct usb_composite_dev *cdev,
824 struct usb_configuration *config)
825{
826 unsigned long flags;
827
828 spin_lock_irqsave(&cdev->lock, flags);
829
830 if (cdev->config == config)
831 reset_config(cdev);
832
833 spin_unlock_irqrestore(&cdev->lock, flags);
834
835 remove_config(cdev, config);
836}
837
777/*-------------------------------------------------------------------------*/ 838/*-------------------------------------------------------------------------*/
778 839
779/* We support strings in multiple languages ... string descriptor zero 840/* We support strings in multiple languages ... string descriptor zero
@@ -785,7 +846,7 @@ done:
785static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf) 846static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf)
786{ 847{
787 const struct usb_gadget_strings *s; 848 const struct usb_gadget_strings *s;
788 u16 language; 849 __le16 language;
789 __le16 *tmp; 850 __le16 *tmp;
790 851
791 while (*sp) { 852 while (*sp) {
@@ -877,7 +938,7 @@ static int get_string(struct usb_composite_dev *cdev,
877 else if (cdev->product_override == id) 938 else if (cdev->product_override == id)
878 str = iProduct ?: composite->iProduct; 939 str = iProduct ?: composite->iProduct;
879 else if (cdev->serial_override == id) 940 else if (cdev->serial_override == id)
880 str = iSerialNumber; 941 str = iSerialNumber ?: composite->iSerialNumber;
881 else 942 else
882 str = NULL; 943 str = NULL;
883 if (str) { 944 if (str) {
@@ -1328,28 +1389,9 @@ composite_unbind(struct usb_gadget *gadget)
1328 1389
1329 while (!list_empty(&cdev->configs)) { 1390 while (!list_empty(&cdev->configs)) {
1330 struct usb_configuration *c; 1391 struct usb_configuration *c;
1331
1332 c = list_first_entry(&cdev->configs, 1392 c = list_first_entry(&cdev->configs,
1333 struct usb_configuration, list); 1393 struct usb_configuration, list);
1334 while (!list_empty(&c->functions)) { 1394 remove_config(cdev, c);
1335 struct usb_function *f;
1336
1337 f = list_first_entry(&c->functions,
1338 struct usb_function, list);
1339 list_del(&f->list);
1340 if (f->unbind) {
1341 DBG(cdev, "unbind function '%s'/%p\n",
1342 f->name, f);
1343 f->unbind(c, f);
1344 /* may free memory for "f" */
1345 }
1346 }
1347 list_del(&c->list);
1348 if (c->unbind) {
1349 DBG(cdev, "unbind config '%s'/%p\n", c->label, c);
1350 c->unbind(c);
1351 /* may free memory for "c" */
1352 }
1353 } 1395 }
1354 if (composite->unbind) 1396 if (composite->unbind)
1355 composite->unbind(cdev); 1397 composite->unbind(cdev);
@@ -1431,10 +1473,16 @@ static int composite_bind(struct usb_gadget *gadget)
1431 /* standardized runtime overrides for device ID data */ 1473 /* standardized runtime overrides for device ID data */
1432 if (idVendor) 1474 if (idVendor)
1433 cdev->desc.idVendor = cpu_to_le16(idVendor); 1475 cdev->desc.idVendor = cpu_to_le16(idVendor);
1476 else
1477 idVendor = le16_to_cpu(cdev->desc.idVendor);
1434 if (idProduct) 1478 if (idProduct)
1435 cdev->desc.idProduct = cpu_to_le16(idProduct); 1479 cdev->desc.idProduct = cpu_to_le16(idProduct);
1480 else
1481 idProduct = le16_to_cpu(cdev->desc.idProduct);
1436 if (bcdDevice) 1482 if (bcdDevice)
1437 cdev->desc.bcdDevice = cpu_to_le16(bcdDevice); 1483 cdev->desc.bcdDevice = cpu_to_le16(bcdDevice);
1484 else
1485 bcdDevice = le16_to_cpu(cdev->desc.bcdDevice);
1438 1486
1439 /* string overrides */ 1487 /* string overrides */
1440 if (iManufacturer || !cdev->desc.iManufacturer) { 1488 if (iManufacturer || !cdev->desc.iManufacturer) {
@@ -1455,7 +1503,8 @@ static int composite_bind(struct usb_gadget *gadget)
1455 cdev->product_override = 1503 cdev->product_override =
1456 override_id(cdev, &cdev->desc.iProduct); 1504 override_id(cdev, &cdev->desc.iProduct);
1457 1505
1458 if (iSerialNumber) 1506 if (iSerialNumber ||
1507 (!cdev->desc.iSerialNumber && composite->iSerialNumber))
1459 cdev->serial_override = 1508 cdev->serial_override =
1460 override_id(cdev, &cdev->desc.iSerialNumber); 1509 override_id(cdev, &cdev->desc.iSerialNumber);
1461 1510
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
index 170cbe89d9f8..b799106027ad 100644
--- a/drivers/usb/gadget/dummy_hcd.c
+++ b/drivers/usb/gadget/dummy_hcd.c
@@ -595,14 +595,12 @@ static struct usb_request *dummy_alloc_request(struct usb_ep *_ep,
595 595
596static void dummy_free_request(struct usb_ep *_ep, struct usb_request *_req) 596static void dummy_free_request(struct usb_ep *_ep, struct usb_request *_req)
597{ 597{
598 struct dummy_ep *ep;
599 struct dummy_request *req; 598 struct dummy_request *req;
600 599
601 if (!_ep || !_req) 600 if (!_ep || !_req) {
602 return; 601 WARN_ON(1);
603 ep = usb_ep_to_dummy_ep(_ep);
604 if (!ep->desc && _ep->name != ep0name)
605 return; 602 return;
603 }
606 604
607 req = usb_request_to_dummy_request(_req); 605 req = usb_request_to_dummy_request(_req);
608 WARN_ON(!list_empty(&req->queue)); 606 WARN_ON(!list_empty(&req->queue));
diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c
index f52cb1ae45d9..dcd1c7fbb016 100644
--- a/drivers/usb/gadget/f_fs.c
+++ b/drivers/usb/gadget/f_fs.c
@@ -1031,6 +1031,12 @@ struct ffs_sb_fill_data {
1031 struct ffs_file_perms perms; 1031 struct ffs_file_perms perms;
1032 umode_t root_mode; 1032 umode_t root_mode;
1033 const char *dev_name; 1033 const char *dev_name;
1034 union {
1035 /* set by ffs_fs_mount(), read by ffs_sb_fill() */
1036 void *private_data;
1037 /* set by ffs_sb_fill(), read by ffs_fs_mount */
1038 struct ffs_data *ffs_data;
1039 };
1034}; 1040};
1035 1041
1036static int ffs_sb_fill(struct super_block *sb, void *_data, int silent) 1042static int ffs_sb_fill(struct super_block *sb, void *_data, int silent)
@@ -1047,8 +1053,14 @@ static int ffs_sb_fill(struct super_block *sb, void *_data, int silent)
1047 goto Enomem; 1053 goto Enomem;
1048 1054
1049 ffs->sb = sb; 1055 ffs->sb = sb;
1050 ffs->dev_name = data->dev_name; 1056 ffs->dev_name = kstrdup(data->dev_name, GFP_KERNEL);
1057 if (unlikely(!ffs->dev_name))
1058 goto Enomem;
1051 ffs->file_perms = data->perms; 1059 ffs->file_perms = data->perms;
1060 ffs->private_data = data->private_data;
1061
1062 /* used by the caller of this function */
1063 data->ffs_data = ffs;
1052 1064
1053 sb->s_fs_info = ffs; 1065 sb->s_fs_info = ffs;
1054 sb->s_blocksize = PAGE_CACHE_SIZE; 1066 sb->s_blocksize = PAGE_CACHE_SIZE;
@@ -1167,20 +1179,29 @@ ffs_fs_mount(struct file_system_type *t, int flags,
1167 }, 1179 },
1168 .root_mode = S_IFDIR | 0500, 1180 .root_mode = S_IFDIR | 0500,
1169 }; 1181 };
1182 struct dentry *rv;
1170 int ret; 1183 int ret;
1184 void *ffs_dev;
1171 1185
1172 ENTER(); 1186 ENTER();
1173 1187
1174 ret = functionfs_check_dev_callback(dev_name);
1175 if (unlikely(ret < 0))
1176 return ERR_PTR(ret);
1177
1178 ret = ffs_fs_parse_opts(&data, opts); 1188 ret = ffs_fs_parse_opts(&data, opts);
1179 if (unlikely(ret < 0)) 1189 if (unlikely(ret < 0))
1180 return ERR_PTR(ret); 1190 return ERR_PTR(ret);
1181 1191
1192 ffs_dev = functionfs_acquire_dev_callback(dev_name);
1193 if (IS_ERR(ffs_dev))
1194 return ffs_dev;
1195
1182 data.dev_name = dev_name; 1196 data.dev_name = dev_name;
1183 return mount_single(t, flags, &data, ffs_sb_fill); 1197 data.private_data = ffs_dev;
1198 rv = mount_nodev(t, flags, &data, ffs_sb_fill);
1199
1200 /* data.ffs_data is set by ffs_sb_fill */
1201 if (IS_ERR(rv))
1202 functionfs_release_dev_callback(data.ffs_data);
1203
1204 return rv;
1184} 1205}
1185 1206
1186static void 1207static void
@@ -1189,8 +1210,10 @@ ffs_fs_kill_sb(struct super_block *sb)
1189 ENTER(); 1210 ENTER();
1190 1211
1191 kill_litter_super(sb); 1212 kill_litter_super(sb);
1192 if (sb->s_fs_info) 1213 if (sb->s_fs_info) {
1214 functionfs_release_dev_callback(sb->s_fs_info);
1193 ffs_data_put(sb->s_fs_info); 1215 ffs_data_put(sb->s_fs_info);
1216 }
1194} 1217}
1195 1218
1196static struct file_system_type ffs_fs_type = { 1219static struct file_system_type ffs_fs_type = {
@@ -1256,6 +1279,7 @@ static void ffs_data_put(struct ffs_data *ffs)
1256 ffs_data_clear(ffs); 1279 ffs_data_clear(ffs);
1257 BUG_ON(waitqueue_active(&ffs->ev.waitq) || 1280 BUG_ON(waitqueue_active(&ffs->ev.waitq) ||
1258 waitqueue_active(&ffs->ep0req_completion.wait)); 1281 waitqueue_active(&ffs->ep0req_completion.wait));
1282 kfree(ffs->dev_name);
1259 kfree(ffs); 1283 kfree(ffs);
1260 } 1284 }
1261} 1285}
@@ -1473,8 +1497,22 @@ static int functionfs_bind_config(struct usb_composite_dev *cdev,
1473 1497
1474static void ffs_func_free(struct ffs_function *func) 1498static void ffs_func_free(struct ffs_function *func)
1475{ 1499{
1500 struct ffs_ep *ep = func->eps;
1501 unsigned count = func->ffs->eps_count;
1502 unsigned long flags;
1503
1476 ENTER(); 1504 ENTER();
1477 1505
1506 /* cleanup after autoconfig */
1507 spin_lock_irqsave(&func->ffs->eps_lock, flags);
1508 do {
1509 if (ep->ep && ep->req)
1510 usb_ep_free_request(ep->ep, ep->req);
1511 ep->req = NULL;
1512 ++ep;
1513 } while (--count);
1514 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
1515
1478 ffs_data_put(func->ffs); 1516 ffs_data_put(func->ffs);
1479 1517
1480 kfree(func->eps); 1518 kfree(func->eps);
diff --git a/drivers/usb/gadget/f_hid.c b/drivers/usb/gadget/f_hid.c
index b2113420b806..3b3932c55361 100644
--- a/drivers/usb/gadget/f_hid.c
+++ b/drivers/usb/gadget/f_hid.c
@@ -374,7 +374,7 @@ static int hidg_setup(struct usb_function *f,
374 break; 374 break;
375 375
376 default: 376 default:
377 VDBG(cdev, "Unknown decriptor request 0x%x\n", 377 VDBG(cdev, "Unknown descriptor request 0x%x\n",
378 value >> 8); 378 value >> 8);
379 goto stall; 379 goto stall;
380 break; 380 break;
diff --git a/drivers/usb/gadget/f_loopback.c b/drivers/usb/gadget/f_loopback.c
index 2c0cd824c667..7275706caeb0 100644
--- a/drivers/usb/gadget/f_loopback.c
+++ b/drivers/usb/gadget/f_loopback.c
@@ -286,7 +286,7 @@ static void disable_loopback(struct f_loopback *loop)
286 struct usb_composite_dev *cdev; 286 struct usb_composite_dev *cdev;
287 287
288 cdev = loop->function.config->cdev; 288 cdev = loop->function.config->cdev;
289 disable_endpoints(cdev, loop->in_ep, loop->out_ep); 289 disable_endpoints(cdev, loop->in_ep, loop->out_ep, NULL, NULL);
290 VDBG(cdev, "%s disabled\n", loop->function.name); 290 VDBG(cdev, "%s disabled\n", loop->function.name);
291} 291}
292 292
@@ -329,7 +329,7 @@ fail0:
329 * than 'buflen' bytes each. 329 * than 'buflen' bytes each.
330 */ 330 */
331 for (i = 0; i < qlen && result == 0; i++) { 331 for (i = 0; i < qlen && result == 0; i++) {
332 req = alloc_ep_req(ep); 332 req = alloc_ep_req(ep, 0);
333 if (req) { 333 if (req) {
334 req->complete = loopback_complete; 334 req->complete = loopback_complete;
335 result = usb_ep_queue(ep, req, GFP_ATOMIC); 335 result = usb_ep_queue(ep, req, GFP_ATOMIC);
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index cb8c162cae5a..f67b453740bd 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -3110,13 +3110,6 @@ static int fsg_bind_config(struct usb_composite_dev *cdev,
3110 return rc; 3110 return rc;
3111} 3111}
3112 3112
3113static inline int __deprecated __maybe_unused
3114fsg_add(struct usb_composite_dev *cdev, struct usb_configuration *c,
3115 struct fsg_common *common)
3116{
3117 return fsg_bind_config(cdev, c, common);
3118}
3119
3120 3113
3121/************************* Module parameters *************************/ 3114/************************* Module parameters *************************/
3122 3115
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
index d4f823f463e9..b1681e45aca7 100644
--- a/drivers/usb/gadget/f_rndis.c
+++ b/drivers/usb/gadget/f_rndis.c
@@ -71,6 +71,8 @@ struct f_rndis {
71 struct gether port; 71 struct gether port;
72 u8 ctrl_id, data_id; 72 u8 ctrl_id, data_id;
73 u8 ethaddr[ETH_ALEN]; 73 u8 ethaddr[ETH_ALEN];
74 u32 vendorID;
75 const char *manufacturer;
74 int config; 76 int config;
75 77
76 struct usb_ep *notify; 78 struct usb_ep *notify;
@@ -768,12 +770,10 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
768 rndis_set_param_medium(rndis->config, RNDIS_MEDIUM_802_3, 0); 770 rndis_set_param_medium(rndis->config, RNDIS_MEDIUM_802_3, 0);
769 rndis_set_host_mac(rndis->config, rndis->ethaddr); 771 rndis_set_host_mac(rndis->config, rndis->ethaddr);
770 772
771#if 0 773 if (rndis->manufacturer && rndis->vendorID &&
772// FIXME 774 rndis_set_param_vendor(rndis->config, rndis->vendorID,
773 if (rndis_set_param_vendor(rndis->config, vendorID, 775 rndis->manufacturer))
774 manufacturer)) 776 goto fail;
775 goto fail0;
776#endif
777 777
778 /* NOTE: all that is done without knowing or caring about 778 /* NOTE: all that is done without knowing or caring about
779 * the network link ... which is unavailable to this code 779 * the network link ... which is unavailable to this code
@@ -820,6 +820,7 @@ rndis_unbind(struct usb_configuration *c, struct usb_function *f)
820 820
821 rndis_deregister(rndis->config); 821 rndis_deregister(rndis->config);
822 rndis_exit(); 822 rndis_exit();
823 rndis_string_defs[0].id = 0;
823 824
824 if (gadget_is_superspeed(c->cdev->gadget)) 825 if (gadget_is_superspeed(c->cdev->gadget))
825 usb_free_descriptors(f->ss_descriptors); 826 usb_free_descriptors(f->ss_descriptors);
@@ -840,20 +841,9 @@ static inline bool can_support_rndis(struct usb_configuration *c)
840 return true; 841 return true;
841} 842}
842 843
843/**
844 * rndis_bind_config - add RNDIS network link to a configuration
845 * @c: the configuration to support the network link
846 * @ethaddr: a buffer in which the ethernet address of the host side
847 * side of the link was recorded
848 * Context: single threaded during gadget setup
849 *
850 * Returns zero on success, else negative errno.
851 *
852 * Caller must have called @gether_setup(). Caller is also responsible
853 * for calling @gether_cleanup() before module unload.
854 */
855int 844int
856rndis_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]) 845rndis_bind_config_vendor(struct usb_configuration *c, u8 ethaddr[ETH_ALEN],
846 u32 vendorID, const char *manufacturer)
857{ 847{
858 struct f_rndis *rndis; 848 struct f_rndis *rndis;
859 int status; 849 int status;
@@ -898,6 +888,8 @@ rndis_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN])
898 goto fail; 888 goto fail;
899 889
900 memcpy(rndis->ethaddr, ethaddr, ETH_ALEN); 890 memcpy(rndis->ethaddr, ethaddr, ETH_ALEN);
891 rndis->vendorID = vendorID;
892 rndis->manufacturer = manufacturer;
901 893
902 /* RNDIS activates when the host changes this filter */ 894 /* RNDIS activates when the host changes this filter */
903 rndis->port.cdc_filter = 0; 895 rndis->port.cdc_filter = 0;
diff --git a/drivers/usb/gadget/f_sourcesink.c b/drivers/usb/gadget/f_sourcesink.c
index 7aa7ac82c02c..5c1b68b63c98 100644
--- a/drivers/usb/gadget/f_sourcesink.c
+++ b/drivers/usb/gadget/f_sourcesink.c
@@ -51,6 +51,9 @@ struct f_sourcesink {
51 51
52 struct usb_ep *in_ep; 52 struct usb_ep *in_ep;
53 struct usb_ep *out_ep; 53 struct usb_ep *out_ep;
54 struct usb_ep *iso_in_ep;
55 struct usb_ep *iso_out_ep;
56 int cur_alt;
54}; 57};
55 58
56static inline struct f_sourcesink *func_to_ss(struct usb_function *f) 59static inline struct f_sourcesink *func_to_ss(struct usb_function *f)
@@ -59,18 +62,45 @@ static inline struct f_sourcesink *func_to_ss(struct usb_function *f)
59} 62}
60 63
61static unsigned pattern; 64static unsigned pattern;
62module_param(pattern, uint, 0); 65module_param(pattern, uint, S_IRUGO|S_IWUSR);
63MODULE_PARM_DESC(pattern, "0 = all zeroes, 1 = mod63 "); 66MODULE_PARM_DESC(pattern, "0 = all zeroes, 1 = mod63, 2 = none");
67
68static unsigned isoc_interval = 4;
69module_param(isoc_interval, uint, S_IRUGO|S_IWUSR);
70MODULE_PARM_DESC(isoc_interval, "1 - 16");
71
72static unsigned isoc_maxpacket = 1024;
73module_param(isoc_maxpacket, uint, S_IRUGO|S_IWUSR);
74MODULE_PARM_DESC(isoc_maxpacket, "0 - 1023 (fs), 0 - 1024 (hs/ss)");
75
76static unsigned isoc_mult;
77module_param(isoc_mult, uint, S_IRUGO|S_IWUSR);
78MODULE_PARM_DESC(isoc_mult, "0 - 2 (hs/ss only)");
79
80static unsigned isoc_maxburst;
81module_param(isoc_maxburst, uint, S_IRUGO|S_IWUSR);
82MODULE_PARM_DESC(isoc_maxburst, "0 - 15 (ss only)");
64 83
65/*-------------------------------------------------------------------------*/ 84/*-------------------------------------------------------------------------*/
66 85
67static struct usb_interface_descriptor source_sink_intf = { 86static struct usb_interface_descriptor source_sink_intf_alt0 = {
68 .bLength = sizeof source_sink_intf, 87 .bLength = USB_DT_INTERFACE_SIZE,
69 .bDescriptorType = USB_DT_INTERFACE, 88 .bDescriptorType = USB_DT_INTERFACE,
70 89
90 .bAlternateSetting = 0,
71 .bNumEndpoints = 2, 91 .bNumEndpoints = 2,
72 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, 92 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
73 /* .iInterface = DYNAMIC */ 93 /* .iInterface = DYNAMIC */
94};
95
96static struct usb_interface_descriptor source_sink_intf_alt1 = {
97 .bLength = USB_DT_INTERFACE_SIZE,
98 .bDescriptorType = USB_DT_INTERFACE,
99
100 .bAlternateSetting = 1,
101 .bNumEndpoints = 4,
102 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
103 /* .iInterface = DYNAMIC */
74}; 104};
75 105
76/* full speed support: */ 106/* full speed support: */
@@ -91,10 +121,36 @@ static struct usb_endpoint_descriptor fs_sink_desc = {
91 .bmAttributes = USB_ENDPOINT_XFER_BULK, 121 .bmAttributes = USB_ENDPOINT_XFER_BULK,
92}; 122};
93 123
124static struct usb_endpoint_descriptor fs_iso_source_desc = {
125 .bLength = USB_DT_ENDPOINT_SIZE,
126 .bDescriptorType = USB_DT_ENDPOINT,
127
128 .bEndpointAddress = USB_DIR_IN,
129 .bmAttributes = USB_ENDPOINT_XFER_ISOC,
130 .wMaxPacketSize = cpu_to_le16(1023),
131 .bInterval = 4,
132};
133
134static struct usb_endpoint_descriptor fs_iso_sink_desc = {
135 .bLength = USB_DT_ENDPOINT_SIZE,
136 .bDescriptorType = USB_DT_ENDPOINT,
137
138 .bEndpointAddress = USB_DIR_OUT,
139 .bmAttributes = USB_ENDPOINT_XFER_ISOC,
140 .wMaxPacketSize = cpu_to_le16(1023),
141 .bInterval = 4,
142};
143
94static struct usb_descriptor_header *fs_source_sink_descs[] = { 144static struct usb_descriptor_header *fs_source_sink_descs[] = {
95 (struct usb_descriptor_header *) &source_sink_intf, 145 (struct usb_descriptor_header *) &source_sink_intf_alt0,
96 (struct usb_descriptor_header *) &fs_sink_desc, 146 (struct usb_descriptor_header *) &fs_sink_desc,
97 (struct usb_descriptor_header *) &fs_source_desc, 147 (struct usb_descriptor_header *) &fs_source_desc,
148 (struct usb_descriptor_header *) &source_sink_intf_alt1,
149#define FS_ALT_IFC_1_OFFSET 3
150 (struct usb_descriptor_header *) &fs_sink_desc,
151 (struct usb_descriptor_header *) &fs_source_desc,
152 (struct usb_descriptor_header *) &fs_iso_sink_desc,
153 (struct usb_descriptor_header *) &fs_iso_source_desc,
98 NULL, 154 NULL,
99}; 155};
100 156
@@ -116,10 +172,34 @@ static struct usb_endpoint_descriptor hs_sink_desc = {
116 .wMaxPacketSize = cpu_to_le16(512), 172 .wMaxPacketSize = cpu_to_le16(512),
117}; 173};
118 174
175static struct usb_endpoint_descriptor hs_iso_source_desc = {
176 .bLength = USB_DT_ENDPOINT_SIZE,
177 .bDescriptorType = USB_DT_ENDPOINT,
178
179 .bmAttributes = USB_ENDPOINT_XFER_ISOC,
180 .wMaxPacketSize = cpu_to_le16(1024),
181 .bInterval = 4,
182};
183
184static struct usb_endpoint_descriptor hs_iso_sink_desc = {
185 .bLength = USB_DT_ENDPOINT_SIZE,
186 .bDescriptorType = USB_DT_ENDPOINT,
187
188 .bmAttributes = USB_ENDPOINT_XFER_ISOC,
189 .wMaxPacketSize = cpu_to_le16(1024),
190 .bInterval = 4,
191};
192
119static struct usb_descriptor_header *hs_source_sink_descs[] = { 193static struct usb_descriptor_header *hs_source_sink_descs[] = {
120 (struct usb_descriptor_header *) &source_sink_intf, 194 (struct usb_descriptor_header *) &source_sink_intf_alt0,
121 (struct usb_descriptor_header *) &hs_source_desc, 195 (struct usb_descriptor_header *) &hs_source_desc,
122 (struct usb_descriptor_header *) &hs_sink_desc, 196 (struct usb_descriptor_header *) &hs_sink_desc,
197 (struct usb_descriptor_header *) &source_sink_intf_alt1,
198#define HS_ALT_IFC_1_OFFSET 3
199 (struct usb_descriptor_header *) &hs_source_desc,
200 (struct usb_descriptor_header *) &hs_sink_desc,
201 (struct usb_descriptor_header *) &hs_iso_source_desc,
202 (struct usb_descriptor_header *) &hs_iso_sink_desc,
123 NULL, 203 NULL,
124}; 204};
125 205
@@ -136,6 +216,7 @@ static struct usb_endpoint_descriptor ss_source_desc = {
136struct usb_ss_ep_comp_descriptor ss_source_comp_desc = { 216struct usb_ss_ep_comp_descriptor ss_source_comp_desc = {
137 .bLength = USB_DT_SS_EP_COMP_SIZE, 217 .bLength = USB_DT_SS_EP_COMP_SIZE,
138 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, 218 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
219
139 .bMaxBurst = 0, 220 .bMaxBurst = 0,
140 .bmAttributes = 0, 221 .bmAttributes = 0,
141 .wBytesPerInterval = 0, 222 .wBytesPerInterval = 0,
@@ -152,17 +233,64 @@ static struct usb_endpoint_descriptor ss_sink_desc = {
152struct usb_ss_ep_comp_descriptor ss_sink_comp_desc = { 233struct usb_ss_ep_comp_descriptor ss_sink_comp_desc = {
153 .bLength = USB_DT_SS_EP_COMP_SIZE, 234 .bLength = USB_DT_SS_EP_COMP_SIZE,
154 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, 235 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
236
155 .bMaxBurst = 0, 237 .bMaxBurst = 0,
156 .bmAttributes = 0, 238 .bmAttributes = 0,
157 .wBytesPerInterval = 0, 239 .wBytesPerInterval = 0,
158}; 240};
159 241
242static struct usb_endpoint_descriptor ss_iso_source_desc = {
243 .bLength = USB_DT_ENDPOINT_SIZE,
244 .bDescriptorType = USB_DT_ENDPOINT,
245
246 .bmAttributes = USB_ENDPOINT_XFER_ISOC,
247 .wMaxPacketSize = cpu_to_le16(1024),
248 .bInterval = 4,
249};
250
251struct usb_ss_ep_comp_descriptor ss_iso_source_comp_desc = {
252 .bLength = USB_DT_SS_EP_COMP_SIZE,
253 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
254
255 .bMaxBurst = 0,
256 .bmAttributes = 0,
257 .wBytesPerInterval = cpu_to_le16(1024),
258};
259
260static struct usb_endpoint_descriptor ss_iso_sink_desc = {
261 .bLength = USB_DT_ENDPOINT_SIZE,
262 .bDescriptorType = USB_DT_ENDPOINT,
263
264 .bmAttributes = USB_ENDPOINT_XFER_ISOC,
265 .wMaxPacketSize = cpu_to_le16(1024),
266 .bInterval = 4,
267};
268
269struct usb_ss_ep_comp_descriptor ss_iso_sink_comp_desc = {
270 .bLength = USB_DT_SS_EP_COMP_SIZE,
271 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
272
273 .bMaxBurst = 0,
274 .bmAttributes = 0,
275 .wBytesPerInterval = cpu_to_le16(1024),
276};
277
160static struct usb_descriptor_header *ss_source_sink_descs[] = { 278static struct usb_descriptor_header *ss_source_sink_descs[] = {
161 (struct usb_descriptor_header *) &source_sink_intf, 279 (struct usb_descriptor_header *) &source_sink_intf_alt0,
162 (struct usb_descriptor_header *) &ss_source_desc, 280 (struct usb_descriptor_header *) &ss_source_desc,
163 (struct usb_descriptor_header *) &ss_source_comp_desc, 281 (struct usb_descriptor_header *) &ss_source_comp_desc,
164 (struct usb_descriptor_header *) &ss_sink_desc, 282 (struct usb_descriptor_header *) &ss_sink_desc,
165 (struct usb_descriptor_header *) &ss_sink_comp_desc, 283 (struct usb_descriptor_header *) &ss_sink_comp_desc,
284 (struct usb_descriptor_header *) &source_sink_intf_alt1,
285#define SS_ALT_IFC_1_OFFSET 5
286 (struct usb_descriptor_header *) &ss_source_desc,
287 (struct usb_descriptor_header *) &ss_source_comp_desc,
288 (struct usb_descriptor_header *) &ss_sink_desc,
289 (struct usb_descriptor_header *) &ss_sink_comp_desc,
290 (struct usb_descriptor_header *) &ss_iso_source_desc,
291 (struct usb_descriptor_header *) &ss_iso_source_comp_desc,
292 (struct usb_descriptor_header *) &ss_iso_sink_desc,
293 (struct usb_descriptor_header *) &ss_iso_sink_comp_desc,
166 NULL, 294 NULL,
167}; 295};
168 296
@@ -196,9 +324,10 @@ sourcesink_bind(struct usb_configuration *c, struct usb_function *f)
196 id = usb_interface_id(c, f); 324 id = usb_interface_id(c, f);
197 if (id < 0) 325 if (id < 0)
198 return id; 326 return id;
199 source_sink_intf.bInterfaceNumber = id; 327 source_sink_intf_alt0.bInterfaceNumber = id;
328 source_sink_intf_alt1.bInterfaceNumber = id;
200 329
201 /* allocate endpoints */ 330 /* allocate bulk endpoints */
202 ss->in_ep = usb_ep_autoconfig(cdev->gadget, &fs_source_desc); 331 ss->in_ep = usb_ep_autoconfig(cdev->gadget, &fs_source_desc);
203 if (!ss->in_ep) { 332 if (!ss->in_ep) {
204autoconf_fail: 333autoconf_fail:
@@ -213,12 +342,74 @@ autoconf_fail:
213 goto autoconf_fail; 342 goto autoconf_fail;
214 ss->out_ep->driver_data = cdev; /* claim */ 343 ss->out_ep->driver_data = cdev; /* claim */
215 344
345 /* sanity check the isoc module parameters */
346 if (isoc_interval < 1)
347 isoc_interval = 1;
348 if (isoc_interval > 16)
349 isoc_interval = 16;
350 if (isoc_mult > 2)
351 isoc_mult = 2;
352 if (isoc_maxburst > 15)
353 isoc_maxburst = 15;
354
355 /* fill in the FS isoc descriptors from the module parameters */
356 fs_iso_source_desc.wMaxPacketSize = isoc_maxpacket > 1023 ?
357 1023 : isoc_maxpacket;
358 fs_iso_source_desc.bInterval = isoc_interval;
359 fs_iso_sink_desc.wMaxPacketSize = isoc_maxpacket > 1023 ?
360 1023 : isoc_maxpacket;
361 fs_iso_sink_desc.bInterval = isoc_interval;
362
363 /* allocate iso endpoints */
364 ss->iso_in_ep = usb_ep_autoconfig(cdev->gadget, &fs_iso_source_desc);
365 if (!ss->iso_in_ep)
366 goto no_iso;
367 ss->iso_in_ep->driver_data = cdev; /* claim */
368
369 ss->iso_out_ep = usb_ep_autoconfig(cdev->gadget, &fs_iso_sink_desc);
370 if (ss->iso_out_ep) {
371 ss->iso_out_ep->driver_data = cdev; /* claim */
372 } else {
373 ss->iso_in_ep->driver_data = NULL;
374 ss->iso_in_ep = NULL;
375no_iso:
376 /*
377 * We still want to work even if the UDC doesn't have isoc
378 * endpoints, so null out the alt interface that contains
379 * them and continue.
380 */
381 fs_source_sink_descs[FS_ALT_IFC_1_OFFSET] = NULL;
382 hs_source_sink_descs[HS_ALT_IFC_1_OFFSET] = NULL;
383 ss_source_sink_descs[SS_ALT_IFC_1_OFFSET] = NULL;
384 }
385
386 if (isoc_maxpacket > 1024)
387 isoc_maxpacket = 1024;
388
216 /* support high speed hardware */ 389 /* support high speed hardware */
217 if (gadget_is_dualspeed(c->cdev->gadget)) { 390 if (gadget_is_dualspeed(c->cdev->gadget)) {
218 hs_source_desc.bEndpointAddress = 391 hs_source_desc.bEndpointAddress =
219 fs_source_desc.bEndpointAddress; 392 fs_source_desc.bEndpointAddress;
220 hs_sink_desc.bEndpointAddress = 393 hs_sink_desc.bEndpointAddress =
221 fs_sink_desc.bEndpointAddress; 394 fs_sink_desc.bEndpointAddress;
395
396 /*
397 * Fill in the HS isoc descriptors from the module parameters.
398 * We assume that the user knows what they are doing and won't
399 * give parameters that their UDC doesn't support.
400 */
401 hs_iso_source_desc.wMaxPacketSize = isoc_maxpacket;
402 hs_iso_source_desc.wMaxPacketSize |= isoc_mult << 11;
403 hs_iso_source_desc.bInterval = isoc_interval;
404 hs_iso_source_desc.bEndpointAddress =
405 fs_iso_source_desc.bEndpointAddress;
406
407 hs_iso_sink_desc.wMaxPacketSize = isoc_maxpacket;
408 hs_iso_sink_desc.wMaxPacketSize |= isoc_mult << 11;
409 hs_iso_sink_desc.bInterval = isoc_interval;
410 hs_iso_sink_desc.bEndpointAddress =
411 fs_iso_sink_desc.bEndpointAddress;
412
222 f->hs_descriptors = hs_source_sink_descs; 413 f->hs_descriptors = hs_source_sink_descs;
223 } 414 }
224 415
@@ -228,13 +419,39 @@ autoconf_fail:
228 fs_source_desc.bEndpointAddress; 419 fs_source_desc.bEndpointAddress;
229 ss_sink_desc.bEndpointAddress = 420 ss_sink_desc.bEndpointAddress =
230 fs_sink_desc.bEndpointAddress; 421 fs_sink_desc.bEndpointAddress;
422
423 /*
424 * Fill in the SS isoc descriptors from the module parameters.
425 * We assume that the user knows what they are doing and won't
426 * give parameters that their UDC doesn't support.
427 */
428 ss_iso_source_desc.wMaxPacketSize = isoc_maxpacket;
429 ss_iso_source_desc.bInterval = isoc_interval;
430 ss_iso_source_comp_desc.bmAttributes = isoc_mult;
431 ss_iso_source_comp_desc.bMaxBurst = isoc_maxburst;
432 ss_iso_source_comp_desc.wBytesPerInterval =
433 isoc_maxpacket * (isoc_mult + 1) * (isoc_maxburst + 1);
434 ss_iso_source_desc.bEndpointAddress =
435 fs_iso_source_desc.bEndpointAddress;
436
437 ss_iso_sink_desc.wMaxPacketSize = isoc_maxpacket;
438 ss_iso_sink_desc.bInterval = isoc_interval;
439 ss_iso_sink_comp_desc.bmAttributes = isoc_mult;
440 ss_iso_sink_comp_desc.bMaxBurst = isoc_maxburst;
441 ss_iso_sink_comp_desc.wBytesPerInterval =
442 isoc_maxpacket * (isoc_mult + 1) * (isoc_maxburst + 1);
443 ss_iso_sink_desc.bEndpointAddress =
444 fs_iso_sink_desc.bEndpointAddress;
445
231 f->ss_descriptors = ss_source_sink_descs; 446 f->ss_descriptors = ss_source_sink_descs;
232 } 447 }
233 448
234 DBG(cdev, "%s speed %s: IN/%s, OUT/%s\n", 449 DBG(cdev, "%s speed %s: IN/%s, OUT/%s, ISO-IN/%s, ISO-OUT/%s\n",
235 (gadget_is_superspeed(c->cdev->gadget) ? "super" : 450 (gadget_is_superspeed(c->cdev->gadget) ? "super" :
236 (gadget_is_dualspeed(c->cdev->gadget) ? "dual" : "full")), 451 (gadget_is_dualspeed(c->cdev->gadget) ? "dual" : "full")),
237 f->name, ss->in_ep->name, ss->out_ep->name); 452 f->name, ss->in_ep->name, ss->out_ep->name,
453 ss->iso_in_ep ? ss->iso_in_ep->name : "<none>",
454 ss->iso_out_ep ? ss->iso_out_ep->name : "<none>");
238 return 0; 455 return 0;
239} 456}
240 457
@@ -251,6 +468,9 @@ static int check_read_data(struct f_sourcesink *ss, struct usb_request *req)
251 u8 *buf = req->buf; 468 u8 *buf = req->buf;
252 struct usb_composite_dev *cdev = ss->function.config->cdev; 469 struct usb_composite_dev *cdev = ss->function.config->cdev;
253 470
471 if (pattern == 2)
472 return 0;
473
254 for (i = 0; i < req->actual; i++, buf++) { 474 for (i = 0; i < req->actual; i++, buf++) {
255 switch (pattern) { 475 switch (pattern) {
256 476
@@ -265,7 +485,7 @@ static int check_read_data(struct f_sourcesink *ss, struct usb_request *req)
265 * each usb transfer request should be. Resync is done 485 * each usb transfer request should be. Resync is done
266 * with set_interface or set_config. (We *WANT* it to 486 * with set_interface or set_config. (We *WANT* it to
267 * get quickly out of sync if controllers or their drivers 487 * get quickly out of sync if controllers or their drivers
268 * stutter for any reason, including buffer duplcation...) 488 * stutter for any reason, including buffer duplication...)
269 */ 489 */
270 case 1: 490 case 1:
271 if (*buf == (u8)(i % 63)) 491 if (*buf == (u8)(i % 63))
@@ -292,21 +512,30 @@ static void reinit_write_data(struct usb_ep *ep, struct usb_request *req)
292 for (i = 0; i < req->length; i++) 512 for (i = 0; i < req->length; i++)
293 *buf++ = (u8) (i % 63); 513 *buf++ = (u8) (i % 63);
294 break; 514 break;
515 case 2:
516 break;
295 } 517 }
296} 518}
297 519
298static void source_sink_complete(struct usb_ep *ep, struct usb_request *req) 520static void source_sink_complete(struct usb_ep *ep, struct usb_request *req)
299{ 521{
300 struct f_sourcesink *ss = ep->driver_data; 522 struct usb_composite_dev *cdev;
301 struct usb_composite_dev *cdev = ss->function.config->cdev; 523 struct f_sourcesink *ss = ep->driver_data;
302 int status = req->status; 524 int status = req->status;
525
526 /* driver_data will be null if ep has been disabled */
527 if (!ss)
528 return;
529
530 cdev = ss->function.config->cdev;
303 531
304 switch (status) { 532 switch (status) {
305 533
306 case 0: /* normal completion? */ 534 case 0: /* normal completion? */
307 if (ep == ss->out_ep) { 535 if (ep == ss->out_ep) {
308 check_read_data(ss, req); 536 check_read_data(ss, req);
309 memset(req->buf, 0x55, req->length); 537 if (pattern != 2)
538 memset(req->buf, 0x55, req->length);
310 } else 539 } else
311 reinit_write_data(ep, req); 540 reinit_write_data(ep, req);
312 break; 541 break;
@@ -344,32 +573,57 @@ static void source_sink_complete(struct usb_ep *ep, struct usb_request *req)
344 } 573 }
345} 574}
346 575
347static int source_sink_start_ep(struct f_sourcesink *ss, bool is_in) 576static int source_sink_start_ep(struct f_sourcesink *ss, bool is_in,
577 bool is_iso, int speed)
348{ 578{
349 struct usb_ep *ep; 579 struct usb_ep *ep;
350 struct usb_request *req; 580 struct usb_request *req;
351 int status; 581 int i, size, status;
582
583 for (i = 0; i < 8; i++) {
584 if (is_iso) {
585 switch (speed) {
586 case USB_SPEED_SUPER:
587 size = isoc_maxpacket * (isoc_mult + 1) *
588 (isoc_maxburst + 1);
589 break;
590 case USB_SPEED_HIGH:
591 size = isoc_maxpacket * (isoc_mult + 1);
592 break;
593 default:
594 size = isoc_maxpacket > 1023 ?
595 1023 : isoc_maxpacket;
596 break;
597 }
598 ep = is_in ? ss->iso_in_ep : ss->iso_out_ep;
599 req = alloc_ep_req(ep, size);
600 } else {
601 ep = is_in ? ss->in_ep : ss->out_ep;
602 req = alloc_ep_req(ep, 0);
603 }
352 604
353 ep = is_in ? ss->in_ep : ss->out_ep; 605 if (!req)
354 req = alloc_ep_req(ep); 606 return -ENOMEM;
355 if (!req)
356 return -ENOMEM;
357 607
358 req->complete = source_sink_complete; 608 req->complete = source_sink_complete;
359 if (is_in) 609 if (is_in)
360 reinit_write_data(ep, req); 610 reinit_write_data(ep, req);
361 else 611 else if (pattern != 2)
362 memset(req->buf, 0x55, req->length); 612 memset(req->buf, 0x55, req->length);
363 613
364 status = usb_ep_queue(ep, req, GFP_ATOMIC); 614 status = usb_ep_queue(ep, req, GFP_ATOMIC);
365 if (status) { 615 if (status) {
366 struct usb_composite_dev *cdev; 616 struct usb_composite_dev *cdev;
367 617
368 cdev = ss->function.config->cdev; 618 cdev = ss->function.config->cdev;
369 ERROR(cdev, "start %s %s --> %d\n", 619 ERROR(cdev, "start %s%s %s --> %d\n",
370 is_in ? "IN" : "OUT", 620 is_iso ? "ISO-" : "", is_in ? "IN" : "OUT",
371 ep->name, status); 621 ep->name, status);
372 free_ep_req(ep, req); 622 free_ep_req(ep, req);
623 }
624
625 if (!is_iso)
626 break;
373 } 627 }
374 628
375 return status; 629 return status;
@@ -380,17 +634,20 @@ static void disable_source_sink(struct f_sourcesink *ss)
380 struct usb_composite_dev *cdev; 634 struct usb_composite_dev *cdev;
381 635
382 cdev = ss->function.config->cdev; 636 cdev = ss->function.config->cdev;
383 disable_endpoints(cdev, ss->in_ep, ss->out_ep); 637 disable_endpoints(cdev, ss->in_ep, ss->out_ep, ss->iso_in_ep,
638 ss->iso_out_ep);
384 VDBG(cdev, "%s disabled\n", ss->function.name); 639 VDBG(cdev, "%s disabled\n", ss->function.name);
385} 640}
386 641
387static int 642static int
388enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss) 643enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss,
644 int alt)
389{ 645{
390 int result = 0; 646 int result = 0;
647 int speed = cdev->gadget->speed;
391 struct usb_ep *ep; 648 struct usb_ep *ep;
392 649
393 /* one endpoint writes (sources) zeroes IN (to the host) */ 650 /* one bulk endpoint writes (sources) zeroes IN (to the host) */
394 ep = ss->in_ep; 651 ep = ss->in_ep;
395 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep); 652 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
396 if (result) 653 if (result)
@@ -400,7 +657,7 @@ enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss)
400 return result; 657 return result;
401 ep->driver_data = ss; 658 ep->driver_data = ss;
402 659
403 result = source_sink_start_ep(ss, true); 660 result = source_sink_start_ep(ss, true, false, speed);
404 if (result < 0) { 661 if (result < 0) {
405fail: 662fail:
406 ep = ss->in_ep; 663 ep = ss->in_ep;
@@ -409,7 +666,7 @@ fail:
409 return result; 666 return result;
410 } 667 }
411 668
412 /* one endpoint reads (sinks) anything OUT (from the host) */ 669 /* one bulk endpoint reads (sinks) anything OUT (from the host) */
413 ep = ss->out_ep; 670 ep = ss->out_ep;
414 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep); 671 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
415 if (result) 672 if (result)
@@ -419,27 +676,82 @@ fail:
419 goto fail; 676 goto fail;
420 ep->driver_data = ss; 677 ep->driver_data = ss;
421 678
422 result = source_sink_start_ep(ss, false); 679 result = source_sink_start_ep(ss, false, false, speed);
423 if (result < 0) { 680 if (result < 0) {
681fail2:
682 ep = ss->out_ep;
424 usb_ep_disable(ep); 683 usb_ep_disable(ep);
425 ep->driver_data = NULL; 684 ep->driver_data = NULL;
426 goto fail; 685 goto fail;
427 } 686 }
428 687
429 DBG(cdev, "%s enabled\n", ss->function.name); 688 if (alt == 0)
689 goto out;
690
691 /* one iso endpoint writes (sources) zeroes IN (to the host) */
692 ep = ss->iso_in_ep;
693 if (ep) {
694 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
695 if (result)
696 goto fail2;
697 result = usb_ep_enable(ep);
698 if (result < 0)
699 goto fail2;
700 ep->driver_data = ss;
701
702 result = source_sink_start_ep(ss, true, true, speed);
703 if (result < 0) {
704fail3:
705 ep = ss->iso_in_ep;
706 if (ep) {
707 usb_ep_disable(ep);
708 ep->driver_data = NULL;
709 }
710 goto fail2;
711 }
712 }
713
714 /* one iso endpoint reads (sinks) anything OUT (from the host) */
715 ep = ss->iso_out_ep;
716 if (ep) {
717 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
718 if (result)
719 goto fail3;
720 result = usb_ep_enable(ep);
721 if (result < 0)
722 goto fail3;
723 ep->driver_data = ss;
724
725 result = source_sink_start_ep(ss, false, true, speed);
726 if (result < 0) {
727 usb_ep_disable(ep);
728 ep->driver_data = NULL;
729 goto fail3;
730 }
731 }
732out:
733 ss->cur_alt = alt;
734
735 DBG(cdev, "%s enabled, alt intf %d\n", ss->function.name, alt);
430 return result; 736 return result;
431} 737}
432 738
433static int sourcesink_set_alt(struct usb_function *f, 739static int sourcesink_set_alt(struct usb_function *f,
434 unsigned intf, unsigned alt) 740 unsigned intf, unsigned alt)
435{ 741{
436 struct f_sourcesink *ss = func_to_ss(f); 742 struct f_sourcesink *ss = func_to_ss(f);
437 struct usb_composite_dev *cdev = f->config->cdev; 743 struct usb_composite_dev *cdev = f->config->cdev;
438 744
439 /* we know alt is zero */
440 if (ss->in_ep->driver_data) 745 if (ss->in_ep->driver_data)
441 disable_source_sink(ss); 746 disable_source_sink(ss);
442 return enable_source_sink(cdev, ss); 747 return enable_source_sink(cdev, ss, alt);
748}
749
750static int sourcesink_get_alt(struct usb_function *f, unsigned intf)
751{
752 struct f_sourcesink *ss = func_to_ss(f);
753
754 return ss->cur_alt;
443} 755}
444 756
445static void sourcesink_disable(struct usb_function *f) 757static void sourcesink_disable(struct usb_function *f)
@@ -465,6 +777,7 @@ static int __init sourcesink_bind_config(struct usb_configuration *c)
465 ss->function.bind = sourcesink_bind; 777 ss->function.bind = sourcesink_bind;
466 ss->function.unbind = sourcesink_unbind; 778 ss->function.unbind = sourcesink_unbind;
467 ss->function.set_alt = sourcesink_set_alt; 779 ss->function.set_alt = sourcesink_set_alt;
780 ss->function.get_alt = sourcesink_get_alt;
468 ss->function.disable = sourcesink_disable; 781 ss->function.disable = sourcesink_disable;
469 782
470 status = usb_add_function(c, &ss->function); 783 status = usb_add_function(c, &ss->function);
@@ -536,7 +849,7 @@ unknown:
536 req->length = value; 849 req->length = value;
537 value = usb_ep_queue(c->cdev->gadget->ep0, req, GFP_ATOMIC); 850 value = usb_ep_queue(c->cdev->gadget->ep0, req, GFP_ATOMIC);
538 if (value < 0) 851 if (value < 0)
539 ERROR(c->cdev, "source/sinkc response, err %d\n", 852 ERROR(c->cdev, "source/sink response, err %d\n",
540 value); 853 value);
541 } 854 }
542 855
@@ -545,12 +858,12 @@ unknown:
545} 858}
546 859
547static struct usb_configuration sourcesink_driver = { 860static struct usb_configuration sourcesink_driver = {
548 .label = "source/sink", 861 .label = "source/sink",
549 .strings = sourcesink_strings, 862 .strings = sourcesink_strings,
550 .setup = sourcesink_setup, 863 .setup = sourcesink_setup,
551 .bConfigurationValue = 3, 864 .bConfigurationValue = 3,
552 .bmAttributes = USB_CONFIG_ATT_SELFPOWER, 865 .bmAttributes = USB_CONFIG_ATT_SELFPOWER,
553 /* .iConfiguration = DYNAMIC */ 866 /* .iConfiguration = DYNAMIC */
554}; 867};
555 868
556/** 869/**
@@ -567,7 +880,8 @@ int __init sourcesink_add(struct usb_composite_dev *cdev, bool autoresume)
567 return id; 880 return id;
568 strings_sourcesink[0].id = id; 881 strings_sourcesink[0].id = id;
569 882
570 source_sink_intf.iInterface = id; 883 source_sink_intf_alt0.iInterface = id;
884 source_sink_intf_alt1.iInterface = id;
571 sourcesink_driver.iConfiguration = id; 885 sourcesink_driver.iConfiguration = id;
572 886
573 /* support autoresume for remote wakeup testing */ 887 /* support autoresume for remote wakeup testing */
diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c
index 877a2c46672b..51881f3bd07a 100644
--- a/drivers/usb/gadget/fsl_qe_udc.c
+++ b/drivers/usb/gadget/fsl_qe_udc.c
@@ -71,9 +71,6 @@ static struct usb_endpoint_descriptor qe_ep0_desc = {
71 .wMaxPacketSize = USB_MAX_CTRL_PAYLOAD, 71 .wMaxPacketSize = USB_MAX_CTRL_PAYLOAD,
72}; 72};
73 73
74/* it is initialized in probe() */
75static struct qe_udc *udc_controller;
76
77/******************************************************************** 74/********************************************************************
78 * Internal Used Function Start 75 * Internal Used Function Start
79********************************************************************/ 76********************************************************************/
@@ -188,8 +185,8 @@ static int qe_ep0_stall(struct qe_udc *udc)
188{ 185{
189 qe_eptx_stall_change(&udc->eps[0], 1); 186 qe_eptx_stall_change(&udc->eps[0], 1);
190 qe_eprx_stall_change(&udc->eps[0], 1); 187 qe_eprx_stall_change(&udc->eps[0], 1);
191 udc_controller->ep0_state = WAIT_FOR_SETUP; 188 udc->ep0_state = WAIT_FOR_SETUP;
192 udc_controller->ep0_dir = 0; 189 udc->ep0_dir = 0;
193 return 0; 190 return 0;
194} 191}
195 192
@@ -450,13 +447,13 @@ static int qe_ep_rxbd_update(struct qe_ep *ep)
450 447
451 ep->rxbuf_d = virt_to_phys((void *)ep->rxbuffer); 448 ep->rxbuf_d = virt_to_phys((void *)ep->rxbuffer);
452 if (ep->rxbuf_d == DMA_ADDR_INVALID) { 449 if (ep->rxbuf_d == DMA_ADDR_INVALID) {
453 ep->rxbuf_d = dma_map_single(udc_controller->gadget.dev.parent, 450 ep->rxbuf_d = dma_map_single(ep->udc->gadget.dev.parent,
454 ep->rxbuffer, 451 ep->rxbuffer,
455 size, 452 size,
456 DMA_FROM_DEVICE); 453 DMA_FROM_DEVICE);
457 ep->rxbufmap = 1; 454 ep->rxbufmap = 1;
458 } else { 455 } else {
459 dma_sync_single_for_device(udc_controller->gadget.dev.parent, 456 dma_sync_single_for_device(ep->udc->gadget.dev.parent,
460 ep->rxbuf_d, size, 457 ep->rxbuf_d, size,
461 DMA_FROM_DEVICE); 458 DMA_FROM_DEVICE);
462 ep->rxbufmap = 0; 459 ep->rxbufmap = 0;
@@ -489,10 +486,10 @@ static int qe_ep_register_init(struct qe_udc *udc, unsigned char pipe_num)
489 epparam = udc->ep_param[pipe_num]; 486 epparam = udc->ep_param[pipe_num];
490 487
491 usep = 0; 488 usep = 0;
492 logepnum = (ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK); 489 logepnum = (ep->ep.desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
493 usep |= (logepnum << USB_EPNUM_SHIFT); 490 usep |= (logepnum << USB_EPNUM_SHIFT);
494 491
495 switch (ep->desc->bmAttributes & 0x03) { 492 switch (ep->ep.desc->bmAttributes & 0x03) {
496 case USB_ENDPOINT_XFER_BULK: 493 case USB_ENDPOINT_XFER_BULK:
497 usep |= USB_TRANS_BULK; 494 usep |= USB_TRANS_BULK;
498 break; 495 break;
@@ -644,7 +641,7 @@ static int qe_ep_init(struct qe_udc *udc,
644 /* initialize ep structure */ 641 /* initialize ep structure */
645 ep->ep.maxpacket = max; 642 ep->ep.maxpacket = max;
646 ep->tm = (u8)(desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK); 643 ep->tm = (u8)(desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK);
647 ep->desc = desc; 644 ep->ep.desc = desc;
648 ep->stopped = 0; 645 ep->stopped = 0;
649 ep->init = 1; 646 ep->init = 1;
650 647
@@ -698,14 +695,14 @@ en_done:
698 return -ENODEV; 695 return -ENODEV;
699} 696}
700 697
701static inline void qe_usb_enable(void) 698static inline void qe_usb_enable(struct qe_udc *udc)
702{ 699{
703 setbits8(&udc_controller->usb_regs->usb_usmod, USB_MODE_EN); 700 setbits8(&udc->usb_regs->usb_usmod, USB_MODE_EN);
704} 701}
705 702
706static inline void qe_usb_disable(void) 703static inline void qe_usb_disable(struct qe_udc *udc)
707{ 704{
708 clrbits8(&udc_controller->usb_regs->usb_usmod, USB_MODE_EN); 705 clrbits8(&udc->usb_regs->usb_usmod, USB_MODE_EN);
709} 706}
710 707
711/*----------------------------------------------------------------------------* 708/*----------------------------------------------------------------------------*
@@ -1599,7 +1596,7 @@ static int qe_ep_enable(struct usb_ep *_ep,
1599 ep = container_of(_ep, struct qe_ep, ep); 1596 ep = container_of(_ep, struct qe_ep, ep);
1600 1597
1601 /* catch various bogus parameters */ 1598 /* catch various bogus parameters */
1602 if (!_ep || !desc || ep->desc || _ep->name == ep_name[0] || 1599 if (!_ep || !desc || ep->ep.desc || _ep->name == ep_name[0] ||
1603 (desc->bDescriptorType != USB_DT_ENDPOINT)) 1600 (desc->bDescriptorType != USB_DT_ENDPOINT))
1604 return -EINVAL; 1601 return -EINVAL;
1605 1602
@@ -1629,7 +1626,7 @@ static int qe_ep_disable(struct usb_ep *_ep)
1629 ep = container_of(_ep, struct qe_ep, ep); 1626 ep = container_of(_ep, struct qe_ep, ep);
1630 udc = ep->udc; 1627 udc = ep->udc;
1631 1628
1632 if (!_ep || !ep->desc) { 1629 if (!_ep || !ep->ep.desc) {
1633 dev_dbg(udc->dev, "%s not enabled\n", _ep ? ep->ep.name : NULL); 1630 dev_dbg(udc->dev, "%s not enabled\n", _ep ? ep->ep.name : NULL);
1634 return -EINVAL; 1631 return -EINVAL;
1635 } 1632 }
@@ -1637,7 +1634,6 @@ static int qe_ep_disable(struct usb_ep *_ep)
1637 spin_lock_irqsave(&udc->lock, flags); 1634 spin_lock_irqsave(&udc->lock, flags);
1638 /* Nuke all pending requests (does flush) */ 1635 /* Nuke all pending requests (does flush) */
1639 nuke(ep, -ESHUTDOWN); 1636 nuke(ep, -ESHUTDOWN);
1640 ep->desc = NULL;
1641 ep->ep.desc = NULL; 1637 ep->ep.desc = NULL;
1642 ep->stopped = 1; 1638 ep->stopped = 1;
1643 ep->tx_req = NULL; 1639 ep->tx_req = NULL;
@@ -1656,13 +1652,13 @@ static int qe_ep_disable(struct usb_ep *_ep)
1656 if (ep->dir != USB_DIR_IN) { 1652 if (ep->dir != USB_DIR_IN) {
1657 kfree(ep->rxframe); 1653 kfree(ep->rxframe);
1658 if (ep->rxbufmap) { 1654 if (ep->rxbufmap) {
1659 dma_unmap_single(udc_controller->gadget.dev.parent, 1655 dma_unmap_single(udc->gadget.dev.parent,
1660 ep->rxbuf_d, size, 1656 ep->rxbuf_d, size,
1661 DMA_FROM_DEVICE); 1657 DMA_FROM_DEVICE);
1662 ep->rxbuf_d = DMA_ADDR_INVALID; 1658 ep->rxbuf_d = DMA_ADDR_INVALID;
1663 } else { 1659 } else {
1664 dma_sync_single_for_cpu( 1660 dma_sync_single_for_cpu(
1665 udc_controller->gadget.dev.parent, 1661 udc->gadget.dev.parent,
1666 ep->rxbuf_d, size, 1662 ep->rxbuf_d, size,
1667 DMA_FROM_DEVICE); 1663 DMA_FROM_DEVICE);
1668 } 1664 }
@@ -1715,7 +1711,7 @@ static int __qe_ep_queue(struct usb_ep *_ep, struct usb_request *_req)
1715 dev_dbg(udc->dev, "bad params\n"); 1711 dev_dbg(udc->dev, "bad params\n");
1716 return -EINVAL; 1712 return -EINVAL;
1717 } 1713 }
1718 if (!_ep || (!ep->desc && ep_index(ep))) { 1714 if (!_ep || (!ep->ep.desc && ep_index(ep))) {
1719 dev_dbg(udc->dev, "bad ep\n"); 1715 dev_dbg(udc->dev, "bad ep\n");
1720 return -EINVAL; 1716 return -EINVAL;
1721 } 1717 }
@@ -1826,7 +1822,7 @@ static int qe_ep_set_halt(struct usb_ep *_ep, int value)
1826 struct qe_udc *udc; 1822 struct qe_udc *udc;
1827 1823
1828 ep = container_of(_ep, struct qe_ep, ep); 1824 ep = container_of(_ep, struct qe_ep, ep);
1829 if (!_ep || !ep->desc) { 1825 if (!_ep || !ep->ep.desc) {
1830 status = -EINVAL; 1826 status = -EINVAL;
1831 goto out; 1827 goto out;
1832 } 1828 }
@@ -1880,9 +1876,10 @@ static struct usb_ep_ops qe_ep_ops = {
1880/* Get the current frame number */ 1876/* Get the current frame number */
1881static int qe_get_frame(struct usb_gadget *gadget) 1877static int qe_get_frame(struct usb_gadget *gadget)
1882{ 1878{
1879 struct qe_udc *udc = container_of(gadget, struct qe_udc, gadget);
1883 u16 tmp; 1880 u16 tmp;
1884 1881
1885 tmp = in_be16(&udc_controller->usb_param->frame_n); 1882 tmp = in_be16(&udc->usb_param->frame_n);
1886 if (tmp & 0x8000) 1883 if (tmp & 0x8000)
1887 tmp = tmp & 0x07ff; 1884 tmp = tmp & 0x07ff;
1888 else 1885 else
@@ -1891,57 +1888,16 @@ static int qe_get_frame(struct usb_gadget *gadget)
1891 return (int)tmp; 1888 return (int)tmp;
1892} 1889}
1893 1890
1894/* Tries to wake up the host connected to this gadget 1891static int fsl_qe_start(struct usb_gadget *gadget,
1895 * 1892 struct usb_gadget_driver *driver);
1896 * Return : 0-success 1893static int fsl_qe_stop(struct usb_gadget *gadget,
1897 * Negative-this feature not enabled by host or not supported by device hw 1894 struct usb_gadget_driver *driver);
1898 */
1899static int qe_wakeup(struct usb_gadget *gadget)
1900{
1901 return -ENOTSUPP;
1902}
1903
1904/* Notify controller that VBUS is powered, Called by whatever
1905 detects VBUS sessions */
1906static int qe_vbus_session(struct usb_gadget *gadget, int is_active)
1907{
1908 return -ENOTSUPP;
1909}
1910
1911/* constrain controller's VBUS power usage
1912 * This call is used by gadget drivers during SET_CONFIGURATION calls,
1913 * reporting how much power the device may consume. For example, this
1914 * could affect how quickly batteries are recharged.
1915 *
1916 * Returns zero on success, else negative errno.
1917 */
1918static int qe_vbus_draw(struct usb_gadget *gadget, unsigned mA)
1919{
1920 return -ENOTSUPP;
1921}
1922
1923/* Change Data+ pullup status
1924 * this func is used by usb_gadget_connect/disconnect
1925 */
1926static int qe_pullup(struct usb_gadget *gadget, int is_on)
1927{
1928 return -ENOTSUPP;
1929}
1930
1931static int fsl_qe_start(struct usb_gadget_driver *driver,
1932 int (*bind)(struct usb_gadget *));
1933static int fsl_qe_stop(struct usb_gadget_driver *driver);
1934 1895
1935/* defined in usb_gadget.h */ 1896/* defined in usb_gadget.h */
1936static struct usb_gadget_ops qe_gadget_ops = { 1897static struct usb_gadget_ops qe_gadget_ops = {
1937 .get_frame = qe_get_frame, 1898 .get_frame = qe_get_frame,
1938 .wakeup = qe_wakeup, 1899 .udc_start = fsl_qe_start,
1939/* .set_selfpowered = qe_set_selfpowered,*/ /* always selfpowered */ 1900 .udc_stop = fsl_qe_stop,
1940 .vbus_session = qe_vbus_session,
1941 .vbus_draw = qe_vbus_draw,
1942 .pullup = qe_pullup,
1943 .start = fsl_qe_start,
1944 .stop = fsl_qe_stop,
1945}; 1901};
1946 1902
1947/*------------------------------------------------------------------------- 1903/*-------------------------------------------------------------------------
@@ -2015,7 +1971,7 @@ static void ch9getstatus(struct qe_udc *udc, u8 request_type, u16 value,
2015 u16 usep; 1971 u16 usep;
2016 1972
2017 /* stall if endpoint doesn't exist */ 1973 /* stall if endpoint doesn't exist */
2018 if (!target_ep->desc) 1974 if (!target_ep->ep.desc)
2019 goto stall; 1975 goto stall;
2020 1976
2021 usep = in_be16(&udc->usb_regs->usb_usep[pipe]); 1977 usep = in_be16(&udc->usb_regs->usb_usep[pipe]);
@@ -2190,7 +2146,7 @@ static int reset_irq(struct qe_udc *udc)
2190 if (udc->usb_state == USB_STATE_DEFAULT) 2146 if (udc->usb_state == USB_STATE_DEFAULT)
2191 return 0; 2147 return 0;
2192 2148
2193 qe_usb_disable(); 2149 qe_usb_disable(udc);
2194 out_8(&udc->usb_regs->usb_usadr, 0); 2150 out_8(&udc->usb_regs->usb_usadr, 0);
2195 2151
2196 for (i = 0; i < USB_MAX_ENDPOINTS; i++) { 2152 for (i = 0; i < USB_MAX_ENDPOINTS; i++) {
@@ -2202,7 +2158,7 @@ static int reset_irq(struct qe_udc *udc)
2202 udc->usb_state = USB_STATE_DEFAULT; 2158 udc->usb_state = USB_STATE_DEFAULT;
2203 udc->ep0_state = WAIT_FOR_SETUP; 2159 udc->ep0_state = WAIT_FOR_SETUP;
2204 udc->ep0_dir = USB_DIR_OUT; 2160 udc->ep0_dir = USB_DIR_OUT;
2205 qe_usb_enable(); 2161 qe_usb_enable(udc);
2206 return 0; 2162 return 0;
2207} 2163}
2208 2164
@@ -2327,92 +2283,65 @@ static irqreturn_t qe_udc_irq(int irq, void *_udc)
2327/*------------------------------------------------------------------------- 2283/*-------------------------------------------------------------------------
2328 Gadget driver probe and unregister. 2284 Gadget driver probe and unregister.
2329 --------------------------------------------------------------------------*/ 2285 --------------------------------------------------------------------------*/
2330static int fsl_qe_start(struct usb_gadget_driver *driver, 2286static int fsl_qe_start(struct usb_gadget *gadget,
2331 int (*bind)(struct usb_gadget *)) 2287 struct usb_gadget_driver *driver)
2332{ 2288{
2333 int retval; 2289 struct qe_udc *udc;
2334 unsigned long flags = 0; 2290 unsigned long flags;
2335
2336 /* standard operations */
2337 if (!udc_controller)
2338 return -ENODEV;
2339
2340 if (!driver || driver->max_speed < USB_SPEED_FULL
2341 || !bind || !driver->disconnect || !driver->setup)
2342 return -EINVAL;
2343
2344 if (udc_controller->driver)
2345 return -EBUSY;
2346 2291
2292 udc = container_of(gadget, struct qe_udc, gadget);
2347 /* lock is needed but whether should use this lock or another */ 2293 /* lock is needed but whether should use this lock or another */
2348 spin_lock_irqsave(&udc_controller->lock, flags); 2294 spin_lock_irqsave(&udc->lock, flags);
2349 2295
2350 driver->driver.bus = NULL; 2296 driver->driver.bus = NULL;
2351 /* hook up the driver */ 2297 /* hook up the driver */
2352 udc_controller->driver = driver; 2298 udc->driver = driver;
2353 udc_controller->gadget.dev.driver = &driver->driver; 2299 udc->gadget.dev.driver = &driver->driver;
2354 udc_controller->gadget.speed = driver->max_speed; 2300 udc->gadget.speed = driver->max_speed;
2355 spin_unlock_irqrestore(&udc_controller->lock, flags);
2356
2357 retval = bind(&udc_controller->gadget);
2358 if (retval) {
2359 dev_err(udc_controller->dev, "bind to %s --> %d",
2360 driver->driver.name, retval);
2361 udc_controller->gadget.dev.driver = NULL;
2362 udc_controller->driver = NULL;
2363 return retval;
2364 }
2365 2301
2366 /* Enable IRQ reg and Set usbcmd reg EN bit */ 2302 /* Enable IRQ reg and Set usbcmd reg EN bit */
2367 qe_usb_enable(); 2303 qe_usb_enable(udc);
2368 2304
2369 out_be16(&udc_controller->usb_regs->usb_usber, 0xffff); 2305 out_be16(&udc->usb_regs->usb_usber, 0xffff);
2370 out_be16(&udc_controller->usb_regs->usb_usbmr, USB_E_DEFAULT_DEVICE); 2306 out_be16(&udc->usb_regs->usb_usbmr, USB_E_DEFAULT_DEVICE);
2371 udc_controller->usb_state = USB_STATE_ATTACHED; 2307 udc->usb_state = USB_STATE_ATTACHED;
2372 udc_controller->ep0_state = WAIT_FOR_SETUP; 2308 udc->ep0_state = WAIT_FOR_SETUP;
2373 udc_controller->ep0_dir = USB_DIR_OUT; 2309 udc->ep0_dir = USB_DIR_OUT;
2374 dev_info(udc_controller->dev, "%s bind to driver %s \n", 2310 spin_unlock_irqrestore(&udc->lock, flags);
2375 udc_controller->gadget.name, driver->driver.name); 2311
2312 dev_info(udc->dev, "%s bind to driver %s\n", udc->gadget.name,
2313 driver->driver.name);
2376 return 0; 2314 return 0;
2377} 2315}
2378 2316
2379static int fsl_qe_stop(struct usb_gadget_driver *driver) 2317static int fsl_qe_stop(struct usb_gadget *gadget,
2318 struct usb_gadget_driver *driver)
2380{ 2319{
2320 struct qe_udc *udc;
2381 struct qe_ep *loop_ep; 2321 struct qe_ep *loop_ep;
2382 unsigned long flags; 2322 unsigned long flags;
2383 2323
2384 if (!udc_controller) 2324 udc = container_of(gadget, struct qe_udc, gadget);
2385 return -ENODEV;
2386
2387 if (!driver || driver != udc_controller->driver)
2388 return -EINVAL;
2389
2390 /* stop usb controller, disable intr */ 2325 /* stop usb controller, disable intr */
2391 qe_usb_disable(); 2326 qe_usb_disable(udc);
2392 2327
2393 /* in fact, no needed */ 2328 /* in fact, no needed */
2394 udc_controller->usb_state = USB_STATE_ATTACHED; 2329 udc->usb_state = USB_STATE_ATTACHED;
2395 udc_controller->ep0_state = WAIT_FOR_SETUP; 2330 udc->ep0_state = WAIT_FOR_SETUP;
2396 udc_controller->ep0_dir = 0; 2331 udc->ep0_dir = 0;
2397 2332
2398 /* stand operation */ 2333 /* stand operation */
2399 spin_lock_irqsave(&udc_controller->lock, flags); 2334 spin_lock_irqsave(&udc->lock, flags);
2400 udc_controller->gadget.speed = USB_SPEED_UNKNOWN; 2335 udc->gadget.speed = USB_SPEED_UNKNOWN;
2401 nuke(&udc_controller->eps[0], -ESHUTDOWN); 2336 nuke(&udc->eps[0], -ESHUTDOWN);
2402 list_for_each_entry(loop_ep, &udc_controller->gadget.ep_list, 2337 list_for_each_entry(loop_ep, &udc->gadget.ep_list, ep.ep_list)
2403 ep.ep_list)
2404 nuke(loop_ep, -ESHUTDOWN); 2338 nuke(loop_ep, -ESHUTDOWN);
2405 spin_unlock_irqrestore(&udc_controller->lock, flags); 2339 spin_unlock_irqrestore(&udc->lock, flags);
2406
2407 /* report disconnect; the controller is already quiesced */
2408 driver->disconnect(&udc_controller->gadget);
2409 2340
2410 /* unbind gadget and unhook driver. */ 2341 udc->gadget.dev.driver = NULL;
2411 driver->unbind(&udc_controller->gadget); 2342 udc->driver = NULL;
2412 udc_controller->gadget.dev.driver = NULL;
2413 udc_controller->driver = NULL;
2414 2343
2415 dev_info(udc_controller->dev, "unregistered gadget driver '%s'\r\n", 2344 dev_info(udc->dev, "unregistered gadget driver '%s'\r\n",
2416 driver->driver.name); 2345 driver->driver.name);
2417 return 0; 2346 return 0;
2418} 2347}
@@ -2502,7 +2431,7 @@ static int __devinit qe_ep_config(struct qe_udc *udc, unsigned char pipe_num)
2502 ep->ep.ops = &qe_ep_ops; 2431 ep->ep.ops = &qe_ep_ops;
2503 ep->stopped = 1; 2432 ep->stopped = 1;
2504 ep->ep.maxpacket = (unsigned short) ~0; 2433 ep->ep.maxpacket = (unsigned short) ~0;
2505 ep->desc = NULL; 2434 ep->ep.desc = NULL;
2506 ep->dir = 0xff; 2435 ep->dir = 0xff;
2507 ep->epnum = (u8)pipe_num; 2436 ep->epnum = (u8)pipe_num;
2508 ep->sent = 0; 2437 ep->sent = 0;
@@ -2531,21 +2460,22 @@ static int __devinit qe_ep_config(struct qe_udc *udc, unsigned char pipe_num)
2531 *----------------------------------------------------------------------*/ 2460 *----------------------------------------------------------------------*/
2532static void qe_udc_release(struct device *dev) 2461static void qe_udc_release(struct device *dev)
2533{ 2462{
2534 int i = 0; 2463 struct qe_udc *udc = container_of(dev, struct qe_udc, gadget.dev);
2464 int i;
2535 2465
2536 complete(udc_controller->done); 2466 complete(udc->done);
2537 cpm_muram_free(cpm_muram_offset(udc_controller->ep_param[0])); 2467 cpm_muram_free(cpm_muram_offset(udc->ep_param[0]));
2538 for (i = 0; i < USB_MAX_ENDPOINTS; i++) 2468 for (i = 0; i < USB_MAX_ENDPOINTS; i++)
2539 udc_controller->ep_param[i] = NULL; 2469 udc->ep_param[i] = NULL;
2540 2470
2541 kfree(udc_controller); 2471 kfree(udc);
2542 udc_controller = NULL;
2543} 2472}
2544 2473
2545/* Driver probe functions */ 2474/* Driver probe functions */
2546static const struct of_device_id qe_udc_match[]; 2475static const struct of_device_id qe_udc_match[];
2547static int __devinit qe_udc_probe(struct platform_device *ofdev) 2476static int __devinit qe_udc_probe(struct platform_device *ofdev)
2548{ 2477{
2478 struct qe_udc *udc;
2549 const struct of_device_id *match; 2479 const struct of_device_id *match;
2550 struct device_node *np = ofdev->dev.of_node; 2480 struct device_node *np = ofdev->dev.of_node;
2551 struct qe_ep *ep; 2481 struct qe_ep *ep;
@@ -2562,44 +2492,44 @@ static int __devinit qe_udc_probe(struct platform_device *ofdev)
2562 return -ENODEV; 2492 return -ENODEV;
2563 2493
2564 /* Initialize the udc structure including QH member and other member */ 2494 /* Initialize the udc structure including QH member and other member */
2565 udc_controller = qe_udc_config(ofdev); 2495 udc = qe_udc_config(ofdev);
2566 if (!udc_controller) { 2496 if (!udc) {
2567 dev_err(&ofdev->dev, "failed to initialize\n"); 2497 dev_err(&ofdev->dev, "failed to initialize\n");
2568 return -ENOMEM; 2498 return -ENOMEM;
2569 } 2499 }
2570 2500
2571 udc_controller->soc_type = (unsigned long)match->data; 2501 udc->soc_type = (unsigned long)match->data;
2572 udc_controller->usb_regs = of_iomap(np, 0); 2502 udc->usb_regs = of_iomap(np, 0);
2573 if (!udc_controller->usb_regs) { 2503 if (!udc->usb_regs) {
2574 ret = -ENOMEM; 2504 ret = -ENOMEM;
2575 goto err1; 2505 goto err1;
2576 } 2506 }
2577 2507
2578 /* initialize usb hw reg except for regs for EP, 2508 /* initialize usb hw reg except for regs for EP,
2579 * leave usbintr reg untouched*/ 2509 * leave usbintr reg untouched*/
2580 qe_udc_reg_init(udc_controller); 2510 qe_udc_reg_init(udc);
2581 2511
2582 /* here comes the stand operations for probe 2512 /* here comes the stand operations for probe
2583 * set the qe_udc->gadget.xxx */ 2513 * set the qe_udc->gadget.xxx */
2584 udc_controller->gadget.ops = &qe_gadget_ops; 2514 udc->gadget.ops = &qe_gadget_ops;
2585 2515
2586 /* gadget.ep0 is a pointer */ 2516 /* gadget.ep0 is a pointer */
2587 udc_controller->gadget.ep0 = &udc_controller->eps[0].ep; 2517 udc->gadget.ep0 = &udc->eps[0].ep;
2588 2518
2589 INIT_LIST_HEAD(&udc_controller->gadget.ep_list); 2519 INIT_LIST_HEAD(&udc->gadget.ep_list);
2590 2520
2591 /* modify in register gadget process */ 2521 /* modify in register gadget process */
2592 udc_controller->gadget.speed = USB_SPEED_UNKNOWN; 2522 udc->gadget.speed = USB_SPEED_UNKNOWN;
2593 2523
2594 /* name: Identifies the controller hardware type. */ 2524 /* name: Identifies the controller hardware type. */
2595 udc_controller->gadget.name = driver_name; 2525 udc->gadget.name = driver_name;
2596 2526
2597 device_initialize(&udc_controller->gadget.dev); 2527 device_initialize(&udc->gadget.dev);
2598 2528
2599 dev_set_name(&udc_controller->gadget.dev, "gadget"); 2529 dev_set_name(&udc->gadget.dev, "gadget");
2600 2530
2601 udc_controller->gadget.dev.release = qe_udc_release; 2531 udc->gadget.dev.release = qe_udc_release;
2602 udc_controller->gadget.dev.parent = &ofdev->dev; 2532 udc->gadget.dev.parent = &ofdev->dev;
2603 2533
2604 /* initialize qe_ep struct */ 2534 /* initialize qe_ep struct */
2605 for (i = 0; i < USB_MAX_ENDPOINTS ; i++) { 2535 for (i = 0; i < USB_MAX_ENDPOINTS ; i++) {
@@ -2608,104 +2538,104 @@ static int __devinit qe_udc_probe(struct platform_device *ofdev)
2608 2538
2609 /* setup the qe_ep struct and link ep.ep.list 2539 /* setup the qe_ep struct and link ep.ep.list
2610 * into gadget.ep_list */ 2540 * into gadget.ep_list */
2611 qe_ep_config(udc_controller, (unsigned char)i); 2541 qe_ep_config(udc, (unsigned char)i);
2612 } 2542 }
2613 2543
2614 /* ep0 initialization in here */ 2544 /* ep0 initialization in here */
2615 ret = qe_ep_init(udc_controller, 0, &qe_ep0_desc); 2545 ret = qe_ep_init(udc, 0, &qe_ep0_desc);
2616 if (ret) 2546 if (ret)
2617 goto err2; 2547 goto err2;
2618 2548
2619 /* create a buf for ZLP send, need to remain zeroed */ 2549 /* create a buf for ZLP send, need to remain zeroed */
2620 udc_controller->nullbuf = kzalloc(256, GFP_KERNEL); 2550 udc->nullbuf = kzalloc(256, GFP_KERNEL);
2621 if (udc_controller->nullbuf == NULL) { 2551 if (udc->nullbuf == NULL) {
2622 dev_err(udc_controller->dev, "cannot alloc nullbuf\n"); 2552 dev_err(udc->dev, "cannot alloc nullbuf\n");
2623 ret = -ENOMEM; 2553 ret = -ENOMEM;
2624 goto err3; 2554 goto err3;
2625 } 2555 }
2626 2556
2627 /* buffer for data of get_status request */ 2557 /* buffer for data of get_status request */
2628 udc_controller->statusbuf = kzalloc(2, GFP_KERNEL); 2558 udc->statusbuf = kzalloc(2, GFP_KERNEL);
2629 if (udc_controller->statusbuf == NULL) { 2559 if (udc->statusbuf == NULL) {
2630 ret = -ENOMEM; 2560 ret = -ENOMEM;
2631 goto err4; 2561 goto err4;
2632 } 2562 }
2633 2563
2634 udc_controller->nullp = virt_to_phys((void *)udc_controller->nullbuf); 2564 udc->nullp = virt_to_phys((void *)udc->nullbuf);
2635 if (udc_controller->nullp == DMA_ADDR_INVALID) { 2565 if (udc->nullp == DMA_ADDR_INVALID) {
2636 udc_controller->nullp = dma_map_single( 2566 udc->nullp = dma_map_single(
2637 udc_controller->gadget.dev.parent, 2567 udc->gadget.dev.parent,
2638 udc_controller->nullbuf, 2568 udc->nullbuf,
2639 256, 2569 256,
2640 DMA_TO_DEVICE); 2570 DMA_TO_DEVICE);
2641 udc_controller->nullmap = 1; 2571 udc->nullmap = 1;
2642 } else { 2572 } else {
2643 dma_sync_single_for_device(udc_controller->gadget.dev.parent, 2573 dma_sync_single_for_device(udc->gadget.dev.parent,
2644 udc_controller->nullp, 256, 2574 udc->nullp, 256,
2645 DMA_TO_DEVICE); 2575 DMA_TO_DEVICE);
2646 } 2576 }
2647 2577
2648 tasklet_init(&udc_controller->rx_tasklet, ep_rx_tasklet, 2578 tasklet_init(&udc->rx_tasklet, ep_rx_tasklet,
2649 (unsigned long)udc_controller); 2579 (unsigned long)udc);
2650 /* request irq and disable DR */ 2580 /* request irq and disable DR */
2651 udc_controller->usb_irq = irq_of_parse_and_map(np, 0); 2581 udc->usb_irq = irq_of_parse_and_map(np, 0);
2652 if (!udc_controller->usb_irq) { 2582 if (!udc->usb_irq) {
2653 ret = -EINVAL; 2583 ret = -EINVAL;
2654 goto err_noirq; 2584 goto err_noirq;
2655 } 2585 }
2656 2586
2657 ret = request_irq(udc_controller->usb_irq, qe_udc_irq, 0, 2587 ret = request_irq(udc->usb_irq, qe_udc_irq, 0,
2658 driver_name, udc_controller); 2588 driver_name, udc);
2659 if (ret) { 2589 if (ret) {
2660 dev_err(udc_controller->dev, "cannot request irq %d err %d \n", 2590 dev_err(udc->dev, "cannot request irq %d err %d\n",
2661 udc_controller->usb_irq, ret); 2591 udc->usb_irq, ret);
2662 goto err5; 2592 goto err5;
2663 } 2593 }
2664 2594
2665 ret = device_add(&udc_controller->gadget.dev); 2595 ret = device_add(&udc->gadget.dev);
2666 if (ret) 2596 if (ret)
2667 goto err6; 2597 goto err6;
2668 2598
2669 ret = usb_add_gadget_udc(&ofdev->dev, &udc_controller->gadget); 2599 ret = usb_add_gadget_udc(&ofdev->dev, &udc->gadget);
2670 if (ret) 2600 if (ret)
2671 goto err7; 2601 goto err7;
2672 2602
2673 dev_info(udc_controller->dev, 2603 dev_set_drvdata(&ofdev->dev, udc);
2604 dev_info(udc->dev,
2674 "%s USB controller initialized as device\n", 2605 "%s USB controller initialized as device\n",
2675 (udc_controller->soc_type == PORT_QE) ? "QE" : "CPM"); 2606 (udc->soc_type == PORT_QE) ? "QE" : "CPM");
2676 return 0; 2607 return 0;
2677 2608
2678err7: 2609err7:
2679 device_unregister(&udc_controller->gadget.dev); 2610 device_unregister(&udc->gadget.dev);
2680err6: 2611err6:
2681 free_irq(udc_controller->usb_irq, udc_controller); 2612 free_irq(udc->usb_irq, udc);
2682err5: 2613err5:
2683 irq_dispose_mapping(udc_controller->usb_irq); 2614 irq_dispose_mapping(udc->usb_irq);
2684err_noirq: 2615err_noirq:
2685 if (udc_controller->nullmap) { 2616 if (udc->nullmap) {
2686 dma_unmap_single(udc_controller->gadget.dev.parent, 2617 dma_unmap_single(udc->gadget.dev.parent,
2687 udc_controller->nullp, 256, 2618 udc->nullp, 256,
2688 DMA_TO_DEVICE); 2619 DMA_TO_DEVICE);
2689 udc_controller->nullp = DMA_ADDR_INVALID; 2620 udc->nullp = DMA_ADDR_INVALID;
2690 } else { 2621 } else {
2691 dma_sync_single_for_cpu(udc_controller->gadget.dev.parent, 2622 dma_sync_single_for_cpu(udc->gadget.dev.parent,
2692 udc_controller->nullp, 256, 2623 udc->nullp, 256,
2693 DMA_TO_DEVICE); 2624 DMA_TO_DEVICE);
2694 } 2625 }
2695 kfree(udc_controller->statusbuf); 2626 kfree(udc->statusbuf);
2696err4: 2627err4:
2697 kfree(udc_controller->nullbuf); 2628 kfree(udc->nullbuf);
2698err3: 2629err3:
2699 ep = &udc_controller->eps[0]; 2630 ep = &udc->eps[0];
2700 cpm_muram_free(cpm_muram_offset(ep->rxbase)); 2631 cpm_muram_free(cpm_muram_offset(ep->rxbase));
2701 kfree(ep->rxframe); 2632 kfree(ep->rxframe);
2702 kfree(ep->rxbuffer); 2633 kfree(ep->rxbuffer);
2703 kfree(ep->txframe); 2634 kfree(ep->txframe);
2704err2: 2635err2:
2705 iounmap(udc_controller->usb_regs); 2636 iounmap(udc->usb_regs);
2706err1: 2637err1:
2707 kfree(udc_controller); 2638 kfree(udc);
2708 udc_controller = NULL;
2709 return ret; 2639 return ret;
2710} 2640}
2711 2641
@@ -2723,44 +2653,41 @@ static int qe_udc_resume(struct platform_device *dev)
2723 2653
2724static int __devexit qe_udc_remove(struct platform_device *ofdev) 2654static int __devexit qe_udc_remove(struct platform_device *ofdev)
2725{ 2655{
2656 struct qe_udc *udc = dev_get_drvdata(&ofdev->dev);
2726 struct qe_ep *ep; 2657 struct qe_ep *ep;
2727 unsigned int size; 2658 unsigned int size;
2728
2729 DECLARE_COMPLETION(done); 2659 DECLARE_COMPLETION(done);
2730 2660
2731 if (!udc_controller) 2661 usb_del_gadget_udc(&udc->gadget);
2732 return -ENODEV;
2733
2734 usb_del_gadget_udc(&udc_controller->gadget);
2735 2662
2736 udc_controller->done = &done; 2663 udc->done = &done;
2737 tasklet_disable(&udc_controller->rx_tasklet); 2664 tasklet_disable(&udc->rx_tasklet);
2738 2665
2739 if (udc_controller->nullmap) { 2666 if (udc->nullmap) {
2740 dma_unmap_single(udc_controller->gadget.dev.parent, 2667 dma_unmap_single(udc->gadget.dev.parent,
2741 udc_controller->nullp, 256, 2668 udc->nullp, 256,
2742 DMA_TO_DEVICE); 2669 DMA_TO_DEVICE);
2743 udc_controller->nullp = DMA_ADDR_INVALID; 2670 udc->nullp = DMA_ADDR_INVALID;
2744 } else { 2671 } else {
2745 dma_sync_single_for_cpu(udc_controller->gadget.dev.parent, 2672 dma_sync_single_for_cpu(udc->gadget.dev.parent,
2746 udc_controller->nullp, 256, 2673 udc->nullp, 256,
2747 DMA_TO_DEVICE); 2674 DMA_TO_DEVICE);
2748 } 2675 }
2749 kfree(udc_controller->statusbuf); 2676 kfree(udc->statusbuf);
2750 kfree(udc_controller->nullbuf); 2677 kfree(udc->nullbuf);
2751 2678
2752 ep = &udc_controller->eps[0]; 2679 ep = &udc->eps[0];
2753 cpm_muram_free(cpm_muram_offset(ep->rxbase)); 2680 cpm_muram_free(cpm_muram_offset(ep->rxbase));
2754 size = (ep->ep.maxpacket + USB_CRC_SIZE + 2) * (USB_BDRING_LEN + 1); 2681 size = (ep->ep.maxpacket + USB_CRC_SIZE + 2) * (USB_BDRING_LEN + 1);
2755 2682
2756 kfree(ep->rxframe); 2683 kfree(ep->rxframe);
2757 if (ep->rxbufmap) { 2684 if (ep->rxbufmap) {
2758 dma_unmap_single(udc_controller->gadget.dev.parent, 2685 dma_unmap_single(udc->gadget.dev.parent,
2759 ep->rxbuf_d, size, 2686 ep->rxbuf_d, size,
2760 DMA_FROM_DEVICE); 2687 DMA_FROM_DEVICE);
2761 ep->rxbuf_d = DMA_ADDR_INVALID; 2688 ep->rxbuf_d = DMA_ADDR_INVALID;
2762 } else { 2689 } else {
2763 dma_sync_single_for_cpu(udc_controller->gadget.dev.parent, 2690 dma_sync_single_for_cpu(udc->gadget.dev.parent,
2764 ep->rxbuf_d, size, 2691 ep->rxbuf_d, size,
2765 DMA_FROM_DEVICE); 2692 DMA_FROM_DEVICE);
2766 } 2693 }
@@ -2768,14 +2695,14 @@ static int __devexit qe_udc_remove(struct platform_device *ofdev)
2768 kfree(ep->rxbuffer); 2695 kfree(ep->rxbuffer);
2769 kfree(ep->txframe); 2696 kfree(ep->txframe);
2770 2697
2771 free_irq(udc_controller->usb_irq, udc_controller); 2698 free_irq(udc->usb_irq, udc);
2772 irq_dispose_mapping(udc_controller->usb_irq); 2699 irq_dispose_mapping(udc->usb_irq);
2773 2700
2774 tasklet_kill(&udc_controller->rx_tasklet); 2701 tasklet_kill(&udc->rx_tasklet);
2775 2702
2776 iounmap(udc_controller->usb_regs); 2703 iounmap(udc->usb_regs);
2777 2704
2778 device_unregister(&udc_controller->gadget.dev); 2705 device_unregister(&udc->gadget.dev);
2779 /* wait for release() of gadget.dev to free udc */ 2706 /* wait for release() of gadget.dev to free udc */
2780 wait_for_completion(&done); 2707 wait_for_completion(&done);
2781 2708
diff --git a/drivers/usb/gadget/fsl_qe_udc.h b/drivers/usb/gadget/fsl_qe_udc.h
index 1da5fb03d218..4c07ca9cebf3 100644
--- a/drivers/usb/gadget/fsl_qe_udc.h
+++ b/drivers/usb/gadget/fsl_qe_udc.h
@@ -266,7 +266,6 @@ struct qe_ep {
266 struct usb_ep ep; 266 struct usb_ep ep;
267 struct list_head queue; 267 struct list_head queue;
268 struct qe_udc *udc; 268 struct qe_udc *udc;
269 const struct usb_endpoint_descriptor *desc;
270 struct usb_gadget *gadget; 269 struct usb_gadget *gadget;
271 270
272 u8 state; 271 u8 state;
diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
index 55abfb6bd612..28316858208b 100644
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (C) 2004-2007,2011 Freescale Semiconductor, Inc. 2 * Copyright (C) 2004-2007,2011-2012 Freescale Semiconductor, Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Author: Li Yang <leoli@freescale.com> 5 * Author: Li Yang <leoli@freescale.com>
@@ -58,9 +58,8 @@ static const char driver_name[] = "fsl-usb2-udc";
58static const char driver_desc[] = DRIVER_DESC; 58static const char driver_desc[] = DRIVER_DESC;
59 59
60static struct usb_dr_device *dr_regs; 60static struct usb_dr_device *dr_regs;
61#ifndef CONFIG_ARCH_MXC 61
62static struct usb_sys_interface *usb_sys_regs; 62static struct usb_sys_interface *usb_sys_regs;
63#endif
64 63
65/* it is initialized in probe() */ 64/* it is initialized in probe() */
66static struct fsl_udc *udc_controller = NULL; 65static struct fsl_udc *udc_controller = NULL;
@@ -244,10 +243,9 @@ static int dr_controller_setup(struct fsl_udc *udc)
244{ 243{
245 unsigned int tmp, portctrl, ep_num; 244 unsigned int tmp, portctrl, ep_num;
246 unsigned int max_no_of_ep; 245 unsigned int max_no_of_ep;
247#ifndef CONFIG_ARCH_MXC
248 unsigned int ctrl; 246 unsigned int ctrl;
249#endif
250 unsigned long timeout; 247 unsigned long timeout;
248
251#define FSL_UDC_RESET_TIMEOUT 1000 249#define FSL_UDC_RESET_TIMEOUT 1000
252 250
253 /* Config PHY interface */ 251 /* Config PHY interface */
@@ -255,12 +253,32 @@ static int dr_controller_setup(struct fsl_udc *udc)
255 portctrl &= ~(PORTSCX_PHY_TYPE_SEL | PORTSCX_PORT_WIDTH); 253 portctrl &= ~(PORTSCX_PHY_TYPE_SEL | PORTSCX_PORT_WIDTH);
256 switch (udc->phy_mode) { 254 switch (udc->phy_mode) {
257 case FSL_USB2_PHY_ULPI: 255 case FSL_USB2_PHY_ULPI:
256 if (udc->pdata->have_sysif_regs) {
257 if (udc->pdata->controller_ver) {
258 /* controller version 1.6 or above */
259 ctrl = __raw_readl(&usb_sys_regs->control);
260 ctrl &= ~USB_CTRL_UTMI_PHY_EN;
261 ctrl |= USB_CTRL_USB_EN;
262 __raw_writel(ctrl, &usb_sys_regs->control);
263 }
264 }
258 portctrl |= PORTSCX_PTS_ULPI; 265 portctrl |= PORTSCX_PTS_ULPI;
259 break; 266 break;
260 case FSL_USB2_PHY_UTMI_WIDE: 267 case FSL_USB2_PHY_UTMI_WIDE:
261 portctrl |= PORTSCX_PTW_16BIT; 268 portctrl |= PORTSCX_PTW_16BIT;
262 /* fall through */ 269 /* fall through */
263 case FSL_USB2_PHY_UTMI: 270 case FSL_USB2_PHY_UTMI:
271 if (udc->pdata->have_sysif_regs) {
272 if (udc->pdata->controller_ver) {
273 /* controller version 1.6 or above */
274 ctrl = __raw_readl(&usb_sys_regs->control);
275 ctrl |= (USB_CTRL_UTMI_PHY_EN |
276 USB_CTRL_USB_EN);
277 __raw_writel(ctrl, &usb_sys_regs->control);
278 mdelay(FSL_UTMI_PHY_DLY); /* Delay for UTMI
279 PHY CLK to become stable - 10ms*/
280 }
281 }
264 portctrl |= PORTSCX_PTS_UTMI; 282 portctrl |= PORTSCX_PTS_UTMI;
265 break; 283 break;
266 case FSL_USB2_PHY_SERIAL: 284 case FSL_USB2_PHY_SERIAL:
@@ -549,7 +567,7 @@ static int fsl_ep_enable(struct usb_ep *_ep,
549 ep = container_of(_ep, struct fsl_ep, ep); 567 ep = container_of(_ep, struct fsl_ep, ep);
550 568
551 /* catch various bogus parameters */ 569 /* catch various bogus parameters */
552 if (!_ep || !desc || ep->desc 570 if (!_ep || !desc || ep->ep.desc
553 || (desc->bDescriptorType != USB_DT_ENDPOINT)) 571 || (desc->bDescriptorType != USB_DT_ENDPOINT))
554 return -EINVAL; 572 return -EINVAL;
555 573
@@ -590,7 +608,7 @@ static int fsl_ep_enable(struct usb_ep *_ep,
590 608
591 spin_lock_irqsave(&udc->lock, flags); 609 spin_lock_irqsave(&udc->lock, flags);
592 ep->ep.maxpacket = max; 610 ep->ep.maxpacket = max;
593 ep->desc = desc; 611 ep->ep.desc = desc;
594 ep->stopped = 0; 612 ep->stopped = 0;
595 613
596 /* Controller related setup */ 614 /* Controller related setup */
@@ -614,7 +632,7 @@ static int fsl_ep_enable(struct usb_ep *_ep,
614 retval = 0; 632 retval = 0;
615 633
616 VDBG("enabled %s (ep%d%s) maxpacket %d",ep->ep.name, 634 VDBG("enabled %s (ep%d%s) maxpacket %d",ep->ep.name,
617 ep->desc->bEndpointAddress & 0x0f, 635 ep->ep.desc->bEndpointAddress & 0x0f,
618 (desc->bEndpointAddress & USB_DIR_IN) 636 (desc->bEndpointAddress & USB_DIR_IN)
619 ? "in" : "out", max); 637 ? "in" : "out", max);
620en_done: 638en_done:
@@ -634,7 +652,7 @@ static int fsl_ep_disable(struct usb_ep *_ep)
634 int ep_num; 652 int ep_num;
635 653
636 ep = container_of(_ep, struct fsl_ep, ep); 654 ep = container_of(_ep, struct fsl_ep, ep);
637 if (!_ep || !ep->desc) { 655 if (!_ep || !ep->ep.desc) {
638 VDBG("%s not enabled", _ep ? ep->ep.name : NULL); 656 VDBG("%s not enabled", _ep ? ep->ep.name : NULL);
639 return -EINVAL; 657 return -EINVAL;
640 } 658 }
@@ -657,7 +675,6 @@ static int fsl_ep_disable(struct usb_ep *_ep)
657 /* nuke all pending requests (does flush) */ 675 /* nuke all pending requests (does flush) */
658 nuke(ep, -ESHUTDOWN); 676 nuke(ep, -ESHUTDOWN);
659 677
660 ep->desc = NULL;
661 ep->ep.desc = NULL; 678 ep->ep.desc = NULL;
662 ep->stopped = 1; 679 ep->stopped = 1;
663 spin_unlock_irqrestore(&udc->lock, flags); 680 spin_unlock_irqrestore(&udc->lock, flags);
@@ -736,6 +753,8 @@ static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req)
736 lastreq = list_entry(ep->queue.prev, struct fsl_req, queue); 753 lastreq = list_entry(ep->queue.prev, struct fsl_req, queue);
737 lastreq->tail->next_td_ptr = 754 lastreq->tail->next_td_ptr =
738 cpu_to_hc32(req->head->td_dma & DTD_ADDR_MASK); 755 cpu_to_hc32(req->head->td_dma & DTD_ADDR_MASK);
756 /* Ensure dTD's next dtd pointer to be updated */
757 wmb();
739 /* Read prime bit, if 1 goto done */ 758 /* Read prime bit, if 1 goto done */
740 if (fsl_readl(&dr_regs->endpointprime) & bitmask) 759 if (fsl_readl(&dr_regs->endpointprime) & bitmask)
741 return; 760 return;
@@ -874,11 +893,11 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
874 VDBG("%s, bad params", __func__); 893 VDBG("%s, bad params", __func__);
875 return -EINVAL; 894 return -EINVAL;
876 } 895 }
877 if (unlikely(!_ep || !ep->desc)) { 896 if (unlikely(!_ep || !ep->ep.desc)) {
878 VDBG("%s, bad ep", __func__); 897 VDBG("%s, bad ep", __func__);
879 return -EINVAL; 898 return -EINVAL;
880 } 899 }
881 if (usb_endpoint_xfer_isoc(ep->desc)) { 900 if (usb_endpoint_xfer_isoc(ep->ep.desc)) {
882 if (req->req.length > ep->ep.maxpacket) 901 if (req->req.length > ep->ep.maxpacket)
883 return -EMSGSIZE; 902 return -EMSGSIZE;
884 } 903 }
@@ -1017,12 +1036,12 @@ static int fsl_ep_set_halt(struct usb_ep *_ep, int value)
1017 1036
1018 ep = container_of(_ep, struct fsl_ep, ep); 1037 ep = container_of(_ep, struct fsl_ep, ep);
1019 udc = ep->udc; 1038 udc = ep->udc;
1020 if (!_ep || !ep->desc) { 1039 if (!_ep || !ep->ep.desc) {
1021 status = -EINVAL; 1040 status = -EINVAL;
1022 goto out; 1041 goto out;
1023 } 1042 }
1024 1043
1025 if (usb_endpoint_xfer_isoc(ep->desc)) { 1044 if (usb_endpoint_xfer_isoc(ep->ep.desc)) {
1026 status = -EOPNOTSUPP; 1045 status = -EOPNOTSUPP;
1027 goto out; 1046 goto out;
1028 } 1047 }
@@ -1061,7 +1080,7 @@ static int fsl_ep_fifo_status(struct usb_ep *_ep)
1061 struct ep_queue_head *qh; 1080 struct ep_queue_head *qh;
1062 1081
1063 ep = container_of(_ep, struct fsl_ep, ep); 1082 ep = container_of(_ep, struct fsl_ep, ep);
1064 if (!_ep || (!ep->desc && ep_index(ep) != 0)) 1083 if (!_ep || (!ep->ep.desc && ep_index(ep) != 0))
1065 return -ENODEV; 1084 return -ENODEV;
1066 1085
1067 udc = (struct fsl_udc *)ep->udc; 1086 udc = (struct fsl_udc *)ep->udc;
@@ -1094,7 +1113,7 @@ static void fsl_ep_fifo_flush(struct usb_ep *_ep)
1094 return; 1113 return;
1095 } else { 1114 } else {
1096 ep = container_of(_ep, struct fsl_ep, ep); 1115 ep = container_of(_ep, struct fsl_ep, ep);
1097 if (!ep->desc) 1116 if (!ep->ep.desc)
1098 return; 1117 return;
1099 } 1118 }
1100 ep_num = ep_index(ep); 1119 ep_num = ep_index(ep);
@@ -1349,7 +1368,7 @@ static void ch9getstatus(struct fsl_udc *udc, u8 request_type, u16 value,
1349 target_ep = get_ep_by_pipe(udc, get_pipe_by_windex(index)); 1368 target_ep = get_ep_by_pipe(udc, get_pipe_by_windex(index));
1350 1369
1351 /* stall if endpoint doesn't exist */ 1370 /* stall if endpoint doesn't exist */
1352 if (!target_ep->desc) 1371 if (!target_ep->ep.desc)
1353 goto stall; 1372 goto stall;
1354 tmp = dr_ep_get_stall(ep_index(target_ep), ep_is_in(target_ep)) 1373 tmp = dr_ep_get_stall(ep_index(target_ep), ep_is_in(target_ep))
1355 << USB_ENDPOINT_HALT; 1374 << USB_ENDPOINT_HALT;
@@ -2259,7 +2278,7 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
2259 } 2278 }
2260 /* other gadget->eplist ep */ 2279 /* other gadget->eplist ep */
2261 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) { 2280 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
2262 if (ep->desc) { 2281 if (ep->ep.desc) {
2263 t = scnprintf(next, size, 2282 t = scnprintf(next, size,
2264 "\nFor %s Maxpkt is 0x%x " 2283 "\nFor %s Maxpkt is 0x%x "
2265 "index is 0x%x\n", 2284 "index is 0x%x\n",
diff --git a/drivers/usb/gadget/fsl_usb2_udc.h b/drivers/usb/gadget/fsl_usb2_udc.h
index e651469fd39b..5cd7b7e7ddb4 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.h
+++ b/drivers/usb/gadget/fsl_usb2_udc.h
@@ -1,4 +1,12 @@
1/* 1/*
2 * Copyright (C) 2004,2012 Freescale Semiconductor, Inc
3 * All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version.
9 *
2 * Freescale USB device/endpoint management registers 10 * Freescale USB device/endpoint management registers
3 */ 11 */
4#ifndef __FSL_USB2_UDC_H 12#ifndef __FSL_USB2_UDC_H
@@ -348,6 +356,9 @@ struct usb_sys_interface {
348/* control Register Bit Masks */ 356/* control Register Bit Masks */
349#define USB_CTRL_IOENB 0x00000004 357#define USB_CTRL_IOENB 0x00000004
350#define USB_CTRL_ULPI_INT0EN 0x00000001 358#define USB_CTRL_ULPI_INT0EN 0x00000001
359#define USB_CTRL_UTMI_PHY_EN 0x00000200
360#define USB_CTRL_USB_EN 0x00000004
361#define USB_CTRL_ULPI_PHY_CLK_SEL 0x00000400
351 362
352/* Endpoint Queue Head data struct 363/* Endpoint Queue Head data struct
353 * Rem: all the variables of qh are LittleEndian Mode 364 * Rem: all the variables of qh are LittleEndian Mode
@@ -450,7 +461,6 @@ struct fsl_ep {
450 struct list_head queue; 461 struct list_head queue;
451 struct fsl_udc *udc; 462 struct fsl_udc *udc;
452 struct ep_queue_head *qh; 463 struct ep_queue_head *qh;
453 const struct usb_endpoint_descriptor *desc;
454 struct usb_gadget *gadget; 464 struct usb_gadget *gadget;
455 465
456 char name[14]; 466 char name[14];
diff --git a/drivers/usb/gadget/fusb300_udc.c b/drivers/usb/gadget/fusb300_udc.c
index 5831cb4a0b35..cdd94540e1cd 100644
--- a/drivers/usb/gadget/fusb300_udc.c
+++ b/drivers/usb/gadget/fusb300_udc.c
@@ -203,7 +203,7 @@ static int config_ep(struct fusb300_ep *ep,
203 struct fusb300 *fusb300 = ep->fusb300; 203 struct fusb300 *fusb300 = ep->fusb300;
204 struct fusb300_ep_info info; 204 struct fusb300_ep_info info;
205 205
206 ep->desc = desc; 206 ep->ep.desc = desc;
207 207
208 info.interval = 0; 208 info.interval = 0;
209 info.addrofs = 0; 209 info.addrofs = 0;
@@ -443,7 +443,7 @@ static int fusb300_queue(struct usb_ep *_ep, struct usb_request *_req,
443 req->req.actual = 0; 443 req->req.actual = 0;
444 req->req.status = -EINPROGRESS; 444 req->req.status = -EINPROGRESS;
445 445
446 if (ep->desc == NULL) /* ep0 */ 446 if (ep->ep.desc == NULL) /* ep0 */
447 ep0_queue(ep, req); 447 ep0_queue(ep, req);
448 else if (request && !ep->stall) 448 else if (request && !ep->stall)
449 enable_fifo_int(ep); 449 enable_fifo_int(ep);
diff --git a/drivers/usb/gadget/fusb300_udc.h b/drivers/usb/gadget/fusb300_udc.h
index 92745bd03064..542cd83cc806 100644
--- a/drivers/usb/gadget/fusb300_udc.h
+++ b/drivers/usb/gadget/fusb300_udc.h
@@ -650,7 +650,6 @@ struct fusb300_ep {
650 650
651 unsigned char epnum; 651 unsigned char epnum;
652 unsigned char type; 652 unsigned char type;
653 const struct usb_endpoint_descriptor *desc;
654}; 653};
655 654
656struct fusb300 { 655struct fusb300 {
diff --git a/drivers/usb/gadget/g_ffs.c b/drivers/usb/gadget/g_ffs.c
index a85eaf40b948..d3ace9002a6a 100644
--- a/drivers/usb/gadget/g_ffs.c
+++ b/drivers/usb/gadget/g_ffs.c
@@ -67,6 +67,15 @@ MODULE_LICENSE("GPL");
67#define GFS_VENDOR_ID 0x1d6b /* Linux Foundation */ 67#define GFS_VENDOR_ID 0x1d6b /* Linux Foundation */
68#define GFS_PRODUCT_ID 0x0105 /* FunctionFS Gadget */ 68#define GFS_PRODUCT_ID 0x0105 /* FunctionFS Gadget */
69 69
70#define GFS_MAX_DEVS 10
71
72struct gfs_ffs_obj {
73 const char *name;
74 bool mounted;
75 bool desc_ready;
76 struct ffs_data *ffs_data;
77};
78
70static struct usb_device_descriptor gfs_dev_desc = { 79static struct usb_device_descriptor gfs_dev_desc = {
71 .bLength = sizeof gfs_dev_desc, 80 .bLength = sizeof gfs_dev_desc,
72 .bDescriptorType = USB_DT_DEVICE, 81 .bDescriptorType = USB_DT_DEVICE,
@@ -78,12 +87,17 @@ static struct usb_device_descriptor gfs_dev_desc = {
78 .idProduct = cpu_to_le16(GFS_PRODUCT_ID), 87 .idProduct = cpu_to_le16(GFS_PRODUCT_ID),
79}; 88};
80 89
90static char *func_names[GFS_MAX_DEVS];
91static unsigned int func_num;
92
81module_param_named(bDeviceClass, gfs_dev_desc.bDeviceClass, byte, 0644); 93module_param_named(bDeviceClass, gfs_dev_desc.bDeviceClass, byte, 0644);
82MODULE_PARM_DESC(bDeviceClass, "USB Device class"); 94MODULE_PARM_DESC(bDeviceClass, "USB Device class");
83module_param_named(bDeviceSubClass, gfs_dev_desc.bDeviceSubClass, byte, 0644); 95module_param_named(bDeviceSubClass, gfs_dev_desc.bDeviceSubClass, byte, 0644);
84MODULE_PARM_DESC(bDeviceSubClass, "USB Device subclass"); 96MODULE_PARM_DESC(bDeviceSubClass, "USB Device subclass");
85module_param_named(bDeviceProtocol, gfs_dev_desc.bDeviceProtocol, byte, 0644); 97module_param_named(bDeviceProtocol, gfs_dev_desc.bDeviceProtocol, byte, 0644);
86MODULE_PARM_DESC(bDeviceProtocol, "USB Device protocol"); 98MODULE_PARM_DESC(bDeviceProtocol, "USB Device protocol");
99module_param_array_named(functions, func_names, charp, &func_num, 0);
100MODULE_PARM_DESC(functions, "USB Functions list");
87 101
88static const struct usb_descriptor_header *gfs_otg_desc[] = { 102static const struct usb_descriptor_header *gfs_otg_desc[] = {
89 (const struct usb_descriptor_header *) 103 (const struct usb_descriptor_header *)
@@ -158,13 +172,34 @@ static struct usb_composite_driver gfs_driver = {
158 .iProduct = DRIVER_DESC, 172 .iProduct = DRIVER_DESC,
159}; 173};
160 174
161static struct ffs_data *gfs_ffs_data; 175static DEFINE_MUTEX(gfs_lock);
162static unsigned long gfs_registered; 176static unsigned int missing_funcs;
177static bool gfs_ether_setup;
178static bool gfs_registered;
179static bool gfs_single_func;
180static struct gfs_ffs_obj *ffs_tab;
163 181
164static int __init gfs_init(void) 182static int __init gfs_init(void)
165{ 183{
184 int i;
185
166 ENTER(); 186 ENTER();
167 187
188 if (!func_num) {
189 gfs_single_func = true;
190 func_num = 1;
191 }
192
193 ffs_tab = kcalloc(func_num, sizeof *ffs_tab, GFP_KERNEL);
194 if (!ffs_tab)
195 return -ENOMEM;
196
197 if (!gfs_single_func)
198 for (i = 0; i < func_num; i++)
199 ffs_tab[i].name = func_names[i];
200
201 missing_funcs = func_num;
202
168 return functionfs_init(); 203 return functionfs_init();
169} 204}
170module_init(gfs_init); 205module_init(gfs_init);
@@ -172,63 +207,165 @@ module_init(gfs_init);
172static void __exit gfs_exit(void) 207static void __exit gfs_exit(void)
173{ 208{
174 ENTER(); 209 ENTER();
210 mutex_lock(&gfs_lock);
175 211
176 if (test_and_clear_bit(0, &gfs_registered)) 212 if (gfs_registered)
177 usb_composite_unregister(&gfs_driver); 213 usb_composite_unregister(&gfs_driver);
214 gfs_registered = false;
178 215
179 functionfs_cleanup(); 216 functionfs_cleanup();
217
218 mutex_unlock(&gfs_lock);
219 kfree(ffs_tab);
180} 220}
181module_exit(gfs_exit); 221module_exit(gfs_exit);
182 222
223static struct gfs_ffs_obj *gfs_find_dev(const char *dev_name)
224{
225 int i;
226
227 ENTER();
228
229 if (gfs_single_func)
230 return &ffs_tab[0];
231
232 for (i = 0; i < func_num; i++)
233 if (strcmp(ffs_tab[i].name, dev_name) == 0)
234 return &ffs_tab[i];
235
236 return NULL;
237}
238
183static int functionfs_ready_callback(struct ffs_data *ffs) 239static int functionfs_ready_callback(struct ffs_data *ffs)
184{ 240{
241 struct gfs_ffs_obj *ffs_obj;
185 int ret; 242 int ret;
186 243
187 ENTER(); 244 ENTER();
245 mutex_lock(&gfs_lock);
246
247 ffs_obj = ffs->private_data;
248 if (!ffs_obj) {
249 ret = -EINVAL;
250 goto done;
251 }
252
253 if (WARN_ON(ffs_obj->desc_ready)) {
254 ret = -EBUSY;
255 goto done;
256 }
257 ffs_obj->desc_ready = true;
258 ffs_obj->ffs_data = ffs;
188 259
189 if (WARN_ON(test_and_set_bit(0, &gfs_registered))) 260 if (--missing_funcs) {
190 return -EBUSY; 261 ret = 0;
262 goto done;
263 }
264
265 if (gfs_registered) {
266 ret = -EBUSY;
267 goto done;
268 }
269 gfs_registered = true;
191 270
192 gfs_ffs_data = ffs;
193 ret = usb_composite_probe(&gfs_driver, gfs_bind); 271 ret = usb_composite_probe(&gfs_driver, gfs_bind);
194 if (unlikely(ret < 0)) 272 if (unlikely(ret < 0))
195 clear_bit(0, &gfs_registered); 273 gfs_registered = false;
274
275done:
276 mutex_unlock(&gfs_lock);
196 return ret; 277 return ret;
197} 278}
198 279
199static void functionfs_closed_callback(struct ffs_data *ffs) 280static void functionfs_closed_callback(struct ffs_data *ffs)
200{ 281{
282 struct gfs_ffs_obj *ffs_obj;
283
201 ENTER(); 284 ENTER();
285 mutex_lock(&gfs_lock);
202 286
203 if (test_and_clear_bit(0, &gfs_registered)) 287 ffs_obj = ffs->private_data;
288 if (!ffs_obj)
289 goto done;
290
291 ffs_obj->desc_ready = false;
292 missing_funcs++;
293
294 if (gfs_registered)
204 usb_composite_unregister(&gfs_driver); 295 usb_composite_unregister(&gfs_driver);
296 gfs_registered = false;
297
298done:
299 mutex_unlock(&gfs_lock);
205} 300}
206 301
207static int functionfs_check_dev_callback(const char *dev_name) 302static void *functionfs_acquire_dev_callback(const char *dev_name)
208{ 303{
209 return 0; 304 struct gfs_ffs_obj *ffs_dev;
305
306 ENTER();
307 mutex_lock(&gfs_lock);
308
309 ffs_dev = gfs_find_dev(dev_name);
310 if (!ffs_dev) {
311 ffs_dev = ERR_PTR(-ENODEV);
312 goto done;
313 }
314
315 if (ffs_dev->mounted) {
316 ffs_dev = ERR_PTR(-EBUSY);
317 goto done;
318 }
319 ffs_dev->mounted = true;
320
321done:
322 mutex_unlock(&gfs_lock);
323 return ffs_dev;
210} 324}
211 325
326static void functionfs_release_dev_callback(struct ffs_data *ffs_data)
327{
328 struct gfs_ffs_obj *ffs_dev;
329
330 ENTER();
331 mutex_lock(&gfs_lock);
332
333 ffs_dev = ffs_data->private_data;
334 if (ffs_dev)
335 ffs_dev->mounted = false;
336
337 mutex_unlock(&gfs_lock);
338}
339
340/*
341 * It is assumed that gfs_bind is called from a context where gfs_lock is held
342 */
212static int gfs_bind(struct usb_composite_dev *cdev) 343static int gfs_bind(struct usb_composite_dev *cdev)
213{ 344{
214 int ret, i; 345 int ret, i;
215 346
216 ENTER(); 347 ENTER();
217 348
218 if (WARN_ON(!gfs_ffs_data)) 349 if (missing_funcs)
219 return -ENODEV; 350 return -ENODEV;
220 351
221 ret = gether_setup(cdev->gadget, gfs_hostaddr); 352 ret = gether_setup(cdev->gadget, gfs_hostaddr);
222 if (unlikely(ret < 0)) 353 if (unlikely(ret < 0))
223 goto error_quick; 354 goto error_quick;
355 gfs_ether_setup = true;
224 356
225 ret = usb_string_ids_tab(cdev, gfs_strings); 357 ret = usb_string_ids_tab(cdev, gfs_strings);
226 if (unlikely(ret < 0)) 358 if (unlikely(ret < 0))
227 goto error; 359 goto error;
228 360
229 ret = functionfs_bind(gfs_ffs_data, cdev); 361 for (i = func_num; --i; ) {
230 if (unlikely(ret < 0)) 362 ret = functionfs_bind(ffs_tab[i].ffs_data, cdev);
231 goto error; 363 if (unlikely(ret < 0)) {
364 while (++i < func_num)
365 functionfs_unbind(ffs_tab[i].ffs_data);
366 goto error;
367 }
368 }
232 369
233 for (i = 0; i < ARRAY_SIZE(gfs_configurations); ++i) { 370 for (i = 0; i < ARRAY_SIZE(gfs_configurations); ++i) {
234 struct gfs_configuration *c = gfs_configurations + i; 371 struct gfs_configuration *c = gfs_configurations + i;
@@ -246,16 +383,22 @@ static int gfs_bind(struct usb_composite_dev *cdev)
246 return 0; 383 return 0;
247 384
248error_unbind: 385error_unbind:
249 functionfs_unbind(gfs_ffs_data); 386 for (i = 0; i < func_num; i++)
387 functionfs_unbind(ffs_tab[i].ffs_data);
250error: 388error:
251 gether_cleanup(); 389 gether_cleanup();
252error_quick: 390error_quick:
253 gfs_ffs_data = NULL; 391 gfs_ether_setup = false;
254 return ret; 392 return ret;
255} 393}
256 394
395/*
396 * It is assumed that gfs_unbind is called from a context where gfs_lock is held
397 */
257static int gfs_unbind(struct usb_composite_dev *cdev) 398static int gfs_unbind(struct usb_composite_dev *cdev)
258{ 399{
400 int i;
401
259 ENTER(); 402 ENTER();
260 403
261 /* 404 /*
@@ -266,22 +409,29 @@ static int gfs_unbind(struct usb_composite_dev *cdev)
266 * from composite on orror recovery, but what you're gonna 409 * from composite on orror recovery, but what you're gonna
267 * do...? 410 * do...?
268 */ 411 */
269 if (gfs_ffs_data) { 412 if (gfs_ether_setup)
270 gether_cleanup(); 413 gether_cleanup();
271 functionfs_unbind(gfs_ffs_data); 414 gfs_ether_setup = false;
272 gfs_ffs_data = NULL; 415
273 } 416 for (i = func_num; --i; )
417 if (ffs_tab[i].ffs_data)
418 functionfs_unbind(ffs_tab[i].ffs_data);
274 419
275 return 0; 420 return 0;
276} 421}
277 422
423/*
424 * It is assumed that gfs_do_config is called from a context where
425 * gfs_lock is held
426 */
278static int gfs_do_config(struct usb_configuration *c) 427static int gfs_do_config(struct usb_configuration *c)
279{ 428{
280 struct gfs_configuration *gc = 429 struct gfs_configuration *gc =
281 container_of(c, struct gfs_configuration, c); 430 container_of(c, struct gfs_configuration, c);
431 int i;
282 int ret; 432 int ret;
283 433
284 if (WARN_ON(!gfs_ffs_data)) 434 if (missing_funcs)
285 return -ENODEV; 435 return -ENODEV;
286 436
287 if (gadget_is_otg(c->cdev->gadget)) { 437 if (gadget_is_otg(c->cdev->gadget)) {
@@ -295,9 +445,11 @@ static int gfs_do_config(struct usb_configuration *c)
295 return ret; 445 return ret;
296 } 446 }
297 447
298 ret = functionfs_bind_config(c->cdev, c, gfs_ffs_data); 448 for (i = 0; i < func_num; i++) {
299 if (unlikely(ret < 0)) 449 ret = functionfs_bind_config(c->cdev, c, ffs_tab[i].ffs_data);
300 return ret; 450 if (unlikely(ret < 0))
451 return ret;
452 }
301 453
302 /* 454 /*
303 * After previous do_configs there may be some invalid 455 * After previous do_configs there may be some invalid
diff --git a/drivers/usb/gadget/g_zero.h b/drivers/usb/gadget/g_zero.h
index e84b3c47ed3c..71ca193358b8 100644
--- a/drivers/usb/gadget/g_zero.h
+++ b/drivers/usb/gadget/g_zero.h
@@ -13,10 +13,11 @@ extern unsigned buflen;
13extern const struct usb_descriptor_header *otg_desc[]; 13extern const struct usb_descriptor_header *otg_desc[];
14 14
15/* common utilities */ 15/* common utilities */
16struct usb_request *alloc_ep_req(struct usb_ep *ep); 16struct usb_request *alloc_ep_req(struct usb_ep *ep, int len);
17void free_ep_req(struct usb_ep *ep, struct usb_request *req); 17void free_ep_req(struct usb_ep *ep, struct usb_request *req);
18void disable_endpoints(struct usb_composite_dev *cdev, 18void disable_endpoints(struct usb_composite_dev *cdev,
19 struct usb_ep *in, struct usb_ep *out); 19 struct usb_ep *in, struct usb_ep *out,
20 struct usb_ep *iso_in, struct usb_ep *iso_out);
20 21
21/* configuration-specific linkup */ 22/* configuration-specific linkup */
22int sourcesink_add(struct usb_composite_dev *cdev, bool autoresume); 23int sourcesink_add(struct usb_composite_dev *cdev, bool autoresume);
diff --git a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h
index a8855d0b7f3b..b8b3a3411218 100644
--- a/drivers/usb/gadget/gadget_chips.h
+++ b/drivers/usb/gadget/gadget_chips.h
@@ -37,6 +37,7 @@
37#define gadget_is_goku(g) (!strcmp("goku_udc", (g)->name)) 37#define gadget_is_goku(g) (!strcmp("goku_udc", (g)->name))
38#define gadget_is_imx(g) (!strcmp("imx_udc", (g)->name)) 38#define gadget_is_imx(g) (!strcmp("imx_udc", (g)->name))
39#define gadget_is_langwell(g) (!strcmp("langwell_udc", (g)->name)) 39#define gadget_is_langwell(g) (!strcmp("langwell_udc", (g)->name))
40#define gadget_is_lpc32xx(g) (!strcmp("lpc32xx_udc", (g)->name))
40#define gadget_is_m66592(g) (!strcmp("m66592_udc", (g)->name)) 41#define gadget_is_m66592(g) (!strcmp("m66592_udc", (g)->name))
41#define gadget_is_musbhdrc(g) (!strcmp("musb-hdrc", (g)->name)) 42#define gadget_is_musbhdrc(g) (!strcmp("musb-hdrc", (g)->name))
42#define gadget_is_net2272(g) (!strcmp("net2272", (g)->name)) 43#define gadget_is_net2272(g) (!strcmp("net2272", (g)->name))
@@ -118,6 +119,8 @@ static inline int usb_gadget_controller_number(struct usb_gadget *gadget)
118 return 0x31; 119 return 0x31;
119 else if (gadget_is_dwc3(gadget)) 120 else if (gadget_is_dwc3(gadget))
120 return 0x32; 121 return 0x32;
122 else if (gadget_is_lpc32xx(gadget))
123 return 0x33;
121 124
122 return -ENOENT; 125 return -ENOENT;
123} 126}
diff --git a/drivers/usb/gadget/goku_udc.c b/drivers/usb/gadget/goku_udc.c
index e151d6b87dee..b241e6c6a7f2 100644
--- a/drivers/usb/gadget/goku_udc.c
+++ b/drivers/usb/gadget/goku_udc.c
@@ -102,7 +102,7 @@ goku_ep_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
102 unsigned long flags; 102 unsigned long flags;
103 103
104 ep = container_of(_ep, struct goku_ep, ep); 104 ep = container_of(_ep, struct goku_ep, ep);
105 if (!_ep || !desc || ep->desc 105 if (!_ep || !desc || ep->ep.desc
106 || desc->bDescriptorType != USB_DT_ENDPOINT) 106 || desc->bDescriptorType != USB_DT_ENDPOINT)
107 return -EINVAL; 107 return -EINVAL;
108 dev = ep->dev; 108 dev = ep->dev;
@@ -176,7 +176,7 @@ goku_ep_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
176 command(ep->dev->regs, COMMAND_RESET, ep->num); 176 command(ep->dev->regs, COMMAND_RESET, ep->num);
177 ep->ep.maxpacket = max; 177 ep->ep.maxpacket = max;
178 ep->stopped = 0; 178 ep->stopped = 0;
179 ep->desc = desc; 179 ep->ep.desc = desc;
180 spin_unlock_irqrestore(&ep->dev->lock, flags); 180 spin_unlock_irqrestore(&ep->dev->lock, flags);
181 181
182 DBG(dev, "enable %s %s %s maxpacket %u\n", ep->ep.name, 182 DBG(dev, "enable %s %s %s maxpacket %u\n", ep->ep.name,
@@ -233,7 +233,6 @@ static void ep_reset(struct goku_udc_regs __iomem *regs, struct goku_ep *ep)
233 } 233 }
234 234
235 ep->ep.maxpacket = MAX_FIFO_SIZE; 235 ep->ep.maxpacket = MAX_FIFO_SIZE;
236 ep->desc = NULL;
237 ep->ep.desc = NULL; 236 ep->ep.desc = NULL;
238 ep->stopped = 1; 237 ep->stopped = 1;
239 ep->irqs = 0; 238 ep->irqs = 0;
@@ -247,7 +246,7 @@ static int goku_ep_disable(struct usb_ep *_ep)
247 unsigned long flags; 246 unsigned long flags;
248 247
249 ep = container_of(_ep, struct goku_ep, ep); 248 ep = container_of(_ep, struct goku_ep, ep);
250 if (!_ep || !ep->desc) 249 if (!_ep || !ep->ep.desc)
251 return -ENODEV; 250 return -ENODEV;
252 dev = ep->dev; 251 dev = ep->dev;
253 if (dev->ep0state == EP0_SUSPEND) 252 if (dev->ep0state == EP0_SUSPEND)
@@ -722,7 +721,7 @@ goku_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
722 || !_req->buf || !list_empty(&req->queue))) 721 || !_req->buf || !list_empty(&req->queue)))
723 return -EINVAL; 722 return -EINVAL;
724 ep = container_of(_ep, struct goku_ep, ep); 723 ep = container_of(_ep, struct goku_ep, ep);
725 if (unlikely(!_ep || (!ep->desc && ep->num != 0))) 724 if (unlikely(!_ep || (!ep->ep.desc && ep->num != 0)))
726 return -EINVAL; 725 return -EINVAL;
727 dev = ep->dev; 726 dev = ep->dev;
728 if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) 727 if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN))
@@ -815,7 +814,7 @@ static int goku_dequeue(struct usb_ep *_ep, struct usb_request *_req)
815 unsigned long flags; 814 unsigned long flags;
816 815
817 ep = container_of(_ep, struct goku_ep, ep); 816 ep = container_of(_ep, struct goku_ep, ep);
818 if (!_ep || !_req || (!ep->desc && ep->num != 0)) 817 if (!_ep || !_req || (!ep->ep.desc && ep->num != 0))
819 return -EINVAL; 818 return -EINVAL;
820 dev = ep->dev; 819 dev = ep->dev;
821 if (!dev->driver) 820 if (!dev->driver)
@@ -896,7 +895,7 @@ static int goku_set_halt(struct usb_ep *_ep, int value)
896 return -EINVAL; 895 return -EINVAL;
897 896
898 /* don't change EPxSTATUS_EP_INVALID to READY */ 897 /* don't change EPxSTATUS_EP_INVALID to READY */
899 } else if (!ep->desc) { 898 } else if (!ep->ep.desc) {
900 DBG(ep->dev, "%s %s inactive?\n", __func__, ep->ep.name); 899 DBG(ep->dev, "%s %s inactive?\n", __func__, ep->ep.name);
901 return -EINVAL; 900 return -EINVAL;
902 } 901 }
@@ -955,7 +954,7 @@ static void goku_fifo_flush(struct usb_ep *_ep)
955 VDBG(ep->dev, "%s %s\n", __func__, ep->ep.name); 954 VDBG(ep->dev, "%s %s\n", __func__, ep->ep.name);
956 955
957 /* don't change EPxSTATUS_EP_INVALID to READY */ 956 /* don't change EPxSTATUS_EP_INVALID to READY */
958 if (!ep->desc && ep->num != 0) { 957 if (!ep->ep.desc && ep->num != 0) {
959 DBG(ep->dev, "%s %s inactive?\n", __func__, ep->ep.name); 958 DBG(ep->dev, "%s %s inactive?\n", __func__, ep->ep.name);
960 return; 959 return;
961 } 960 }
@@ -1152,7 +1151,7 @@ udc_proc_read(char *buffer, char **start, off_t off, int count,
1152 struct goku_ep *ep = &dev->ep [i]; 1151 struct goku_ep *ep = &dev->ep [i];
1153 struct goku_request *req; 1152 struct goku_request *req;
1154 1153
1155 if (i && !ep->desc) 1154 if (i && !ep->ep.desc)
1156 continue; 1155 continue;
1157 1156
1158 tmp = readl(ep->reg_status); 1157 tmp = readl(ep->reg_status);
@@ -1473,7 +1472,8 @@ static void ep0_setup(struct goku_udc *dev)
1473 case USB_RECIP_ENDPOINT: 1472 case USB_RECIP_ENDPOINT:
1474 tmp = le16_to_cpu(ctrl.wIndex) & 0x0f; 1473 tmp = le16_to_cpu(ctrl.wIndex) & 0x0f;
1475 /* active endpoint */ 1474 /* active endpoint */
1476 if (tmp > 3 || (!dev->ep[tmp].desc && tmp != 0)) 1475 if (tmp > 3 ||
1476 (!dev->ep[tmp].ep.desc && tmp != 0))
1477 goto stall; 1477 goto stall;
1478 if (ctrl.wIndex & cpu_to_le16( 1478 if (ctrl.wIndex & cpu_to_le16(
1479 USB_DIR_IN)) { 1479 USB_DIR_IN)) {
@@ -1895,14 +1895,4 @@ static struct pci_driver goku_pci_driver = {
1895 /* FIXME add power management support */ 1895 /* FIXME add power management support */
1896}; 1896};
1897 1897
1898static int __init init (void) 1898module_pci_driver(goku_pci_driver);
1899{
1900 return pci_register_driver (&goku_pci_driver);
1901}
1902module_init (init);
1903
1904static void __exit cleanup (void)
1905{
1906 pci_unregister_driver (&goku_pci_driver);
1907}
1908module_exit (cleanup);
diff --git a/drivers/usb/gadget/goku_udc.h b/drivers/usb/gadget/goku_udc.h
index e7e0c69d3b1f..85cdce0d1901 100644
--- a/drivers/usb/gadget/goku_udc.h
+++ b/drivers/usb/gadget/goku_udc.h
@@ -216,7 +216,6 @@ struct goku_ep {
216 216
217 /* analogous to a host-side qh */ 217 /* analogous to a host-side qh */
218 struct list_head queue; 218 struct list_head queue;
219 const struct usb_endpoint_descriptor *desc;
220 219
221 u32 __iomem *reg_fifo; 220 u32 __iomem *reg_fifo;
222 u32 __iomem *reg_mode; 221 u32 __iomem *reg_mode;
diff --git a/drivers/usb/gadget/imx_udc.c b/drivers/usb/gadget/imx_udc.c
index 8d1c75abd73d..54034f84f992 100644
--- a/drivers/usb/gadget/imx_udc.c
+++ b/drivers/usb/gadget/imx_udc.c
@@ -1237,14 +1237,15 @@ irq_handler_t intr_handler(int i)
1237 ******************************************************************************* 1237 *******************************************************************************
1238 */ 1238 */
1239 1239
1240static int imx_udc_start(struct usb_gadget_driver *driver, 1240static int imx_udc_start(struct usb_gadget *gadget,
1241 int (*bind)(struct usb_gadget *)); 1241 struct usb_gadget_driver *driver);
1242static int imx_udc_stop(struct usb_gadget_driver *driver); 1242static int imx_udc_stop(struct usb_gadget *gadget,
1243 struct usb_gadget_driver *driver);
1243static const struct usb_gadget_ops imx_udc_ops = { 1244static const struct usb_gadget_ops imx_udc_ops = {
1244 .get_frame = imx_udc_get_frame, 1245 .get_frame = imx_udc_get_frame,
1245 .wakeup = imx_udc_wakeup, 1246 .wakeup = imx_udc_wakeup,
1246 .start = imx_udc_start, 1247 .udc_start = imx_udc_start,
1247 .stop = imx_udc_stop, 1248 .udc_stop = imx_udc_stop,
1248}; 1249};
1249 1250
1250static struct imx_udc_struct controller = { 1251static struct imx_udc_struct controller = {
@@ -1329,23 +1330,13 @@ static struct imx_udc_struct controller = {
1329 * USB gadget driver functions 1330 * USB gadget driver functions
1330 ******************************************************************************* 1331 *******************************************************************************
1331 */ 1332 */
1332static int imx_udc_start(struct usb_gadget_driver *driver, 1333static int imx_udc_start(struct usb_gadget *gadget,
1333 int (*bind)(struct usb_gadget *)) 1334 struct usb_gadget_driver *driver)
1334{ 1335{
1335 struct imx_udc_struct *imx_usb = &controller; 1336 struct imx_udc_struct *imx_usb;
1336 int retval; 1337 int retval;
1337 1338
1338 if (!driver 1339 imx_usb = container_of(gadget, struct imx_udc_struct, gadget);
1339 || driver->max_speed < USB_SPEED_FULL
1340 || !bind
1341 || !driver->disconnect
1342 || !driver->setup)
1343 return -EINVAL;
1344 if (!imx_usb)
1345 return -ENODEV;
1346 if (imx_usb->driver)
1347 return -EBUSY;
1348
1349 /* first hook up the driver ... */ 1340 /* first hook up the driver ... */
1350 imx_usb->driver = driver; 1341 imx_usb->driver = driver;
1351 imx_usb->gadget.dev.driver = &driver->driver; 1342 imx_usb->gadget.dev.driver = &driver->driver;
@@ -1353,14 +1344,6 @@ static int imx_udc_start(struct usb_gadget_driver *driver,
1353 retval = device_add(&imx_usb->gadget.dev); 1344 retval = device_add(&imx_usb->gadget.dev);
1354 if (retval) 1345 if (retval)
1355 goto fail; 1346 goto fail;
1356 retval = bind(&imx_usb->gadget);
1357 if (retval) {
1358 D_ERR(imx_usb->dev, "<%s> bind to driver %s --> error %d\n",
1359 __func__, driver->driver.name, retval);
1360 device_del(&imx_usb->gadget.dev);
1361
1362 goto fail;
1363 }
1364 1347
1365 D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n", 1348 D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n",
1366 __func__, driver->driver.name); 1349 __func__, driver->driver.name);
@@ -1374,20 +1357,16 @@ fail:
1374 return retval; 1357 return retval;
1375} 1358}
1376 1359
1377static int imx_udc_stop(struct usb_gadget_driver *driver) 1360static int imx_udc_stop(struct usb_gadget *gadget,
1361 struct usb_gadget_driver *driver)
1378{ 1362{
1379 struct imx_udc_struct *imx_usb = &controller; 1363 struct imx_udc_struct *imx_usb = container_of(gadget,
1380 1364 struct imx_udc_struct, gadget);
1381 if (!imx_usb)
1382 return -ENODEV;
1383 if (!driver || driver != imx_usb->driver || !driver->unbind)
1384 return -EINVAL;
1385 1365
1386 udc_stop_activity(imx_usb, driver); 1366 udc_stop_activity(imx_usb, driver);
1387 imx_udc_disable(imx_usb); 1367 imx_udc_disable(imx_usb);
1388 del_timer(&imx_usb->timer); 1368 del_timer(&imx_usb->timer);
1389 1369
1390 driver->unbind(&imx_usb->gadget);
1391 imx_usb->gadget.dev.driver = NULL; 1370 imx_usb->gadget.dev.driver = NULL;
1392 imx_usb->driver = NULL; 1371 imx_usb->driver = NULL;
1393 1372
diff --git a/drivers/usb/gadget/langwell_udc.c b/drivers/usb/gadget/langwell_udc.c
deleted file mode 100644
index f9cedd52cf20..000000000000
--- a/drivers/usb/gadget/langwell_udc.c
+++ /dev/null
@@ -1,3434 +0,0 @@
1/*
2 * Intel Langwell USB Device Controller driver
3 * Copyright (C) 2008-2009, Intel Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 */
9
10
11/* #undef DEBUG */
12/* #undef VERBOSE_DEBUG */
13
14#include <linux/module.h>
15#include <linux/pci.h>
16#include <linux/dma-mapping.h>
17#include <linux/kernel.h>
18#include <linux/delay.h>
19#include <linux/ioport.h>
20#include <linux/sched.h>
21#include <linux/slab.h>
22#include <linux/errno.h>
23#include <linux/init.h>
24#include <linux/timer.h>
25#include <linux/list.h>
26#include <linux/interrupt.h>
27#include <linux/moduleparam.h>
28#include <linux/device.h>
29#include <linux/usb/ch9.h>
30#include <linux/usb/gadget.h>
31#include <linux/usb/otg.h>
32#include <linux/pm.h>
33#include <linux/io.h>
34#include <linux/irq.h>
35#include <asm/unaligned.h>
36
37#include "langwell_udc.h"
38
39
40#define DRIVER_DESC "Intel Langwell USB Device Controller driver"
41#define DRIVER_VERSION "16 May 2009"
42
43static const char driver_name[] = "langwell_udc";
44static const char driver_desc[] = DRIVER_DESC;
45
46
47/* for endpoint 0 operations */
48static const struct usb_endpoint_descriptor
49langwell_ep0_desc = {
50 .bLength = USB_DT_ENDPOINT_SIZE,
51 .bDescriptorType = USB_DT_ENDPOINT,
52 .bEndpointAddress = 0,
53 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
54 .wMaxPacketSize = EP0_MAX_PKT_SIZE,
55};
56
57
58/*-------------------------------------------------------------------------*/
59/* debugging */
60
61#ifdef VERBOSE_DEBUG
62static inline void print_all_registers(struct langwell_udc *dev)
63{
64 int i;
65
66 /* Capability Registers */
67 dev_dbg(&dev->pdev->dev,
68 "Capability Registers (offset: 0x%04x, length: 0x%08x)\n",
69 CAP_REG_OFFSET, (u32)sizeof(struct langwell_cap_regs));
70 dev_dbg(&dev->pdev->dev, "caplength=0x%02x\n",
71 readb(&dev->cap_regs->caplength));
72 dev_dbg(&dev->pdev->dev, "hciversion=0x%04x\n",
73 readw(&dev->cap_regs->hciversion));
74 dev_dbg(&dev->pdev->dev, "hcsparams=0x%08x\n",
75 readl(&dev->cap_regs->hcsparams));
76 dev_dbg(&dev->pdev->dev, "hccparams=0x%08x\n",
77 readl(&dev->cap_regs->hccparams));
78 dev_dbg(&dev->pdev->dev, "dciversion=0x%04x\n",
79 readw(&dev->cap_regs->dciversion));
80 dev_dbg(&dev->pdev->dev, "dccparams=0x%08x\n",
81 readl(&dev->cap_regs->dccparams));
82
83 /* Operational Registers */
84 dev_dbg(&dev->pdev->dev,
85 "Operational Registers (offset: 0x%04x, length: 0x%08x)\n",
86 OP_REG_OFFSET, (u32)sizeof(struct langwell_op_regs));
87 dev_dbg(&dev->pdev->dev, "extsts=0x%08x\n",
88 readl(&dev->op_regs->extsts));
89 dev_dbg(&dev->pdev->dev, "extintr=0x%08x\n",
90 readl(&dev->op_regs->extintr));
91 dev_dbg(&dev->pdev->dev, "usbcmd=0x%08x\n",
92 readl(&dev->op_regs->usbcmd));
93 dev_dbg(&dev->pdev->dev, "usbsts=0x%08x\n",
94 readl(&dev->op_regs->usbsts));
95 dev_dbg(&dev->pdev->dev, "usbintr=0x%08x\n",
96 readl(&dev->op_regs->usbintr));
97 dev_dbg(&dev->pdev->dev, "frindex=0x%08x\n",
98 readl(&dev->op_regs->frindex));
99 dev_dbg(&dev->pdev->dev, "ctrldssegment=0x%08x\n",
100 readl(&dev->op_regs->ctrldssegment));
101 dev_dbg(&dev->pdev->dev, "deviceaddr=0x%08x\n",
102 readl(&dev->op_regs->deviceaddr));
103 dev_dbg(&dev->pdev->dev, "endpointlistaddr=0x%08x\n",
104 readl(&dev->op_regs->endpointlistaddr));
105 dev_dbg(&dev->pdev->dev, "ttctrl=0x%08x\n",
106 readl(&dev->op_regs->ttctrl));
107 dev_dbg(&dev->pdev->dev, "burstsize=0x%08x\n",
108 readl(&dev->op_regs->burstsize));
109 dev_dbg(&dev->pdev->dev, "txfilltuning=0x%08x\n",
110 readl(&dev->op_regs->txfilltuning));
111 dev_dbg(&dev->pdev->dev, "txttfilltuning=0x%08x\n",
112 readl(&dev->op_regs->txttfilltuning));
113 dev_dbg(&dev->pdev->dev, "ic_usb=0x%08x\n",
114 readl(&dev->op_regs->ic_usb));
115 dev_dbg(&dev->pdev->dev, "ulpi_viewport=0x%08x\n",
116 readl(&dev->op_regs->ulpi_viewport));
117 dev_dbg(&dev->pdev->dev, "configflag=0x%08x\n",
118 readl(&dev->op_regs->configflag));
119 dev_dbg(&dev->pdev->dev, "portsc1=0x%08x\n",
120 readl(&dev->op_regs->portsc1));
121 dev_dbg(&dev->pdev->dev, "devlc=0x%08x\n",
122 readl(&dev->op_regs->devlc));
123 dev_dbg(&dev->pdev->dev, "otgsc=0x%08x\n",
124 readl(&dev->op_regs->otgsc));
125 dev_dbg(&dev->pdev->dev, "usbmode=0x%08x\n",
126 readl(&dev->op_regs->usbmode));
127 dev_dbg(&dev->pdev->dev, "endptnak=0x%08x\n",
128 readl(&dev->op_regs->endptnak));
129 dev_dbg(&dev->pdev->dev, "endptnaken=0x%08x\n",
130 readl(&dev->op_regs->endptnaken));
131 dev_dbg(&dev->pdev->dev, "endptsetupstat=0x%08x\n",
132 readl(&dev->op_regs->endptsetupstat));
133 dev_dbg(&dev->pdev->dev, "endptprime=0x%08x\n",
134 readl(&dev->op_regs->endptprime));
135 dev_dbg(&dev->pdev->dev, "endptflush=0x%08x\n",
136 readl(&dev->op_regs->endptflush));
137 dev_dbg(&dev->pdev->dev, "endptstat=0x%08x\n",
138 readl(&dev->op_regs->endptstat));
139 dev_dbg(&dev->pdev->dev, "endptcomplete=0x%08x\n",
140 readl(&dev->op_regs->endptcomplete));
141
142 for (i = 0; i < dev->ep_max / 2; i++) {
143 dev_dbg(&dev->pdev->dev, "endptctrl[%d]=0x%08x\n",
144 i, readl(&dev->op_regs->endptctrl[i]));
145 }
146}
147#else
148
149#define print_all_registers(dev) do { } while (0)
150
151#endif /* VERBOSE_DEBUG */
152
153
154/*-------------------------------------------------------------------------*/
155
156#define is_in(ep) (((ep)->ep_num == 0) ? ((ep)->dev->ep0_dir == \
157 USB_DIR_IN) : (usb_endpoint_dir_in((ep)->desc)))
158
159#define DIR_STRING(ep) (is_in(ep) ? "in" : "out")
160
161
162static char *type_string(const struct usb_endpoint_descriptor *desc)
163{
164 switch (usb_endpoint_type(desc)) {
165 case USB_ENDPOINT_XFER_BULK:
166 return "bulk";
167 case USB_ENDPOINT_XFER_ISOC:
168 return "iso";
169 case USB_ENDPOINT_XFER_INT:
170 return "int";
171 };
172
173 return "control";
174}
175
176
177/* configure endpoint control registers */
178static void ep_reset(struct langwell_ep *ep, unsigned char ep_num,
179 unsigned char is_in, unsigned char ep_type)
180{
181 struct langwell_udc *dev;
182 u32 endptctrl;
183
184 dev = ep->dev;
185 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
186
187 endptctrl = readl(&dev->op_regs->endptctrl[ep_num]);
188 if (is_in) { /* TX */
189 if (ep_num)
190 endptctrl |= EPCTRL_TXR;
191 endptctrl |= EPCTRL_TXE;
192 endptctrl |= ep_type << EPCTRL_TXT_SHIFT;
193 } else { /* RX */
194 if (ep_num)
195 endptctrl |= EPCTRL_RXR;
196 endptctrl |= EPCTRL_RXE;
197 endptctrl |= ep_type << EPCTRL_RXT_SHIFT;
198 }
199
200 writel(endptctrl, &dev->op_regs->endptctrl[ep_num]);
201
202 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
203}
204
205
206/* reset ep0 dQH and endptctrl */
207static void ep0_reset(struct langwell_udc *dev)
208{
209 struct langwell_ep *ep;
210 int i;
211
212 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
213
214 /* ep0 in and out */
215 for (i = 0; i < 2; i++) {
216 ep = &dev->ep[i];
217 ep->dev = dev;
218
219 /* ep0 dQH */
220 ep->dqh = &dev->ep_dqh[i];
221
222 /* configure ep0 endpoint capabilities in dQH */
223 ep->dqh->dqh_ios = 1;
224 ep->dqh->dqh_mpl = EP0_MAX_PKT_SIZE;
225
226 /* enable ep0-in HW zero length termination select */
227 if (is_in(ep))
228 ep->dqh->dqh_zlt = 0;
229 ep->dqh->dqh_mult = 0;
230
231 ep->dqh->dtd_next = DTD_TERM;
232
233 /* configure ep0 control registers */
234 ep_reset(&dev->ep[0], 0, i, USB_ENDPOINT_XFER_CONTROL);
235 }
236
237 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
238}
239
240
241/*-------------------------------------------------------------------------*/
242
243/* endpoints operations */
244
245/* configure endpoint, making it usable */
246static int langwell_ep_enable(struct usb_ep *_ep,
247 const struct usb_endpoint_descriptor *desc)
248{
249 struct langwell_udc *dev;
250 struct langwell_ep *ep;
251 u16 max = 0;
252 unsigned long flags;
253 int i, retval = 0;
254 unsigned char zlt, ios = 0, mult = 0;
255
256 ep = container_of(_ep, struct langwell_ep, ep);
257 dev = ep->dev;
258 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
259
260 if (!_ep || !desc || ep->desc
261 || desc->bDescriptorType != USB_DT_ENDPOINT)
262 return -EINVAL;
263
264 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
265 return -ESHUTDOWN;
266
267 max = usb_endpoint_maxp(desc);
268
269 /*
270 * disable HW zero length termination select
271 * driver handles zero length packet through req->req.zero
272 */
273 zlt = 1;
274
275 /*
276 * sanity check type, direction, address, and then
277 * initialize the endpoint capabilities fields in dQH
278 */
279 switch (usb_endpoint_type(desc)) {
280 case USB_ENDPOINT_XFER_CONTROL:
281 ios = 1;
282 break;
283 case USB_ENDPOINT_XFER_BULK:
284 if ((dev->gadget.speed == USB_SPEED_HIGH
285 && max != 512)
286 || (dev->gadget.speed == USB_SPEED_FULL
287 && max > 64)) {
288 goto done;
289 }
290 break;
291 case USB_ENDPOINT_XFER_INT:
292 if (strstr(ep->ep.name, "-iso")) /* bulk is ok */
293 goto done;
294
295 switch (dev->gadget.speed) {
296 case USB_SPEED_HIGH:
297 if (max <= 1024)
298 break;
299 case USB_SPEED_FULL:
300 if (max <= 64)
301 break;
302 default:
303 if (max <= 8)
304 break;
305 goto done;
306 }
307 break;
308 case USB_ENDPOINT_XFER_ISOC:
309 if (strstr(ep->ep.name, "-bulk")
310 || strstr(ep->ep.name, "-int"))
311 goto done;
312
313 switch (dev->gadget.speed) {
314 case USB_SPEED_HIGH:
315 if (max <= 1024)
316 break;
317 case USB_SPEED_FULL:
318 if (max <= 1023)
319 break;
320 default:
321 goto done;
322 }
323 /*
324 * FIXME:
325 * calculate transactions needed for high bandwidth iso
326 */
327 mult = (unsigned char)(1 + ((max >> 11) & 0x03));
328 max = max & 0x8ff; /* bit 0~10 */
329 /* 3 transactions at most */
330 if (mult > 3)
331 goto done;
332 break;
333 default:
334 goto done;
335 }
336
337 spin_lock_irqsave(&dev->lock, flags);
338
339 ep->ep.maxpacket = max;
340 ep->desc = desc;
341 ep->stopped = 0;
342 ep->ep_num = usb_endpoint_num(desc);
343
344 /* ep_type */
345 ep->ep_type = usb_endpoint_type(desc);
346
347 /* configure endpoint control registers */
348 ep_reset(ep, ep->ep_num, is_in(ep), ep->ep_type);
349
350 /* configure endpoint capabilities in dQH */
351 i = ep->ep_num * 2 + is_in(ep);
352 ep->dqh = &dev->ep_dqh[i];
353 ep->dqh->dqh_ios = ios;
354 ep->dqh->dqh_mpl = cpu_to_le16(max);
355 ep->dqh->dqh_zlt = zlt;
356 ep->dqh->dqh_mult = mult;
357 ep->dqh->dtd_next = DTD_TERM;
358
359 dev_dbg(&dev->pdev->dev, "enabled %s (ep%d%s-%s), max %04x\n",
360 _ep->name,
361 ep->ep_num,
362 DIR_STRING(ep),
363 type_string(desc),
364 max);
365
366 spin_unlock_irqrestore(&dev->lock, flags);
367done:
368 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
369 return retval;
370}
371
372
373/*-------------------------------------------------------------------------*/
374
375/* retire a request */
376static void done(struct langwell_ep *ep, struct langwell_request *req,
377 int status)
378{
379 struct langwell_udc *dev = ep->dev;
380 unsigned stopped = ep->stopped;
381 struct langwell_dtd *curr_dtd, *next_dtd;
382 int i;
383
384 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
385
386 /* remove the req from ep->queue */
387 list_del_init(&req->queue);
388
389 if (req->req.status == -EINPROGRESS)
390 req->req.status = status;
391 else
392 status = req->req.status;
393
394 /* free dTD for the request */
395 next_dtd = req->head;
396 for (i = 0; i < req->dtd_count; i++) {
397 curr_dtd = next_dtd;
398 if (i != req->dtd_count - 1)
399 next_dtd = curr_dtd->next_dtd_virt;
400 dma_pool_free(dev->dtd_pool, curr_dtd, curr_dtd->dtd_dma);
401 }
402
403 usb_gadget_unmap_request(&dev->gadget, &req->req, is_in(ep));
404
405 if (status != -ESHUTDOWN)
406 dev_dbg(&dev->pdev->dev,
407 "complete %s, req %p, stat %d, len %u/%u\n",
408 ep->ep.name, &req->req, status,
409 req->req.actual, req->req.length);
410
411 /* don't modify queue heads during completion callback */
412 ep->stopped = 1;
413
414 spin_unlock(&dev->lock);
415 /* complete routine from gadget driver */
416 if (req->req.complete)
417 req->req.complete(&ep->ep, &req->req);
418
419 spin_lock(&dev->lock);
420 ep->stopped = stopped;
421
422 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
423}
424
425
426static void langwell_ep_fifo_flush(struct usb_ep *_ep);
427
428/* delete all endpoint requests, called with spinlock held */
429static void nuke(struct langwell_ep *ep, int status)
430{
431 /* called with spinlock held */
432 ep->stopped = 1;
433
434 /* endpoint fifo flush */
435 if (&ep->ep && ep->desc)
436 langwell_ep_fifo_flush(&ep->ep);
437
438 while (!list_empty(&ep->queue)) {
439 struct langwell_request *req = NULL;
440 req = list_entry(ep->queue.next, struct langwell_request,
441 queue);
442 done(ep, req, status);
443 }
444}
445
446
447/*-------------------------------------------------------------------------*/
448
449/* endpoint is no longer usable */
450static int langwell_ep_disable(struct usb_ep *_ep)
451{
452 struct langwell_ep *ep;
453 unsigned long flags;
454 struct langwell_udc *dev;
455 int ep_num;
456 u32 endptctrl;
457
458 ep = container_of(_ep, struct langwell_ep, ep);
459 dev = ep->dev;
460 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
461
462 if (!_ep || !ep->desc)
463 return -EINVAL;
464
465 spin_lock_irqsave(&dev->lock, flags);
466
467 /* disable endpoint control register */
468 ep_num = ep->ep_num;
469 endptctrl = readl(&dev->op_regs->endptctrl[ep_num]);
470 if (is_in(ep))
471 endptctrl &= ~EPCTRL_TXE;
472 else
473 endptctrl &= ~EPCTRL_RXE;
474 writel(endptctrl, &dev->op_regs->endptctrl[ep_num]);
475
476 /* nuke all pending requests (does flush) */
477 nuke(ep, -ESHUTDOWN);
478
479 ep->desc = NULL;
480 ep->ep.desc = NULL;
481 ep->stopped = 1;
482
483 spin_unlock_irqrestore(&dev->lock, flags);
484
485 dev_dbg(&dev->pdev->dev, "disabled %s\n", _ep->name);
486 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
487
488 return 0;
489}
490
491
492/* allocate a request object to use with this endpoint */
493static struct usb_request *langwell_alloc_request(struct usb_ep *_ep,
494 gfp_t gfp_flags)
495{
496 struct langwell_ep *ep;
497 struct langwell_udc *dev;
498 struct langwell_request *req = NULL;
499
500 if (!_ep)
501 return NULL;
502
503 ep = container_of(_ep, struct langwell_ep, ep);
504 dev = ep->dev;
505 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
506
507 req = kzalloc(sizeof(*req), gfp_flags);
508 if (!req)
509 return NULL;
510
511 req->req.dma = DMA_ADDR_INVALID;
512 INIT_LIST_HEAD(&req->queue);
513
514 dev_vdbg(&dev->pdev->dev, "alloc request for %s\n", _ep->name);
515 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
516 return &req->req;
517}
518
519
520/* free a request object */
521static void langwell_free_request(struct usb_ep *_ep,
522 struct usb_request *_req)
523{
524 struct langwell_ep *ep;
525 struct langwell_udc *dev;
526 struct langwell_request *req = NULL;
527
528 ep = container_of(_ep, struct langwell_ep, ep);
529 dev = ep->dev;
530 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
531
532 if (!_ep || !_req)
533 return;
534
535 req = container_of(_req, struct langwell_request, req);
536 WARN_ON(!list_empty(&req->queue));
537
538 if (_req)
539 kfree(req);
540
541 dev_vdbg(&dev->pdev->dev, "free request for %s\n", _ep->name);
542 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
543}
544
545
546/*-------------------------------------------------------------------------*/
547
548/* queue dTD and PRIME endpoint */
549static int queue_dtd(struct langwell_ep *ep, struct langwell_request *req)
550{
551 u32 bit_mask, usbcmd, endptstat, dtd_dma;
552 u8 dtd_status;
553 int i;
554 struct langwell_dqh *dqh;
555 struct langwell_udc *dev;
556
557 dev = ep->dev;
558 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
559
560 i = ep->ep_num * 2 + is_in(ep);
561 dqh = &dev->ep_dqh[i];
562
563 if (ep->ep_num)
564 dev_vdbg(&dev->pdev->dev, "%s\n", ep->name);
565 else
566 /* ep0 */
567 dev_vdbg(&dev->pdev->dev, "%s-%s\n", ep->name, DIR_STRING(ep));
568
569 dev_vdbg(&dev->pdev->dev, "ep_dqh[%d] addr: 0x%p\n",
570 i, &(dev->ep_dqh[i]));
571
572 bit_mask = is_in(ep) ?
573 (1 << (ep->ep_num + 16)) : (1 << (ep->ep_num));
574
575 dev_vdbg(&dev->pdev->dev, "bit_mask = 0x%08x\n", bit_mask);
576
577 /* check if the pipe is empty */
578 if (!(list_empty(&ep->queue))) {
579 /* add dTD to the end of linked list */
580 struct langwell_request *lastreq;
581 lastreq = list_entry(ep->queue.prev,
582 struct langwell_request, queue);
583
584 lastreq->tail->dtd_next =
585 cpu_to_le32(req->head->dtd_dma & DTD_NEXT_MASK);
586
587 /* read prime bit, if 1 goto out */
588 if (readl(&dev->op_regs->endptprime) & bit_mask)
589 goto out;
590
591 do {
592 /* set ATDTW bit in USBCMD */
593 usbcmd = readl(&dev->op_regs->usbcmd);
594 writel(usbcmd | CMD_ATDTW, &dev->op_regs->usbcmd);
595
596 /* read correct status bit */
597 endptstat = readl(&dev->op_regs->endptstat) & bit_mask;
598
599 } while (!(readl(&dev->op_regs->usbcmd) & CMD_ATDTW));
600
601 /* write ATDTW bit to 0 */
602 usbcmd = readl(&dev->op_regs->usbcmd);
603 writel(usbcmd & ~CMD_ATDTW, &dev->op_regs->usbcmd);
604
605 if (endptstat)
606 goto out;
607 }
608
609 /* write dQH next pointer and terminate bit to 0 */
610 dtd_dma = req->head->dtd_dma & DTD_NEXT_MASK;
611 dqh->dtd_next = cpu_to_le32(dtd_dma);
612
613 /* clear active and halt bit */
614 dtd_status = (u8) ~(DTD_STS_ACTIVE | DTD_STS_HALTED);
615 dqh->dtd_status &= dtd_status;
616 dev_vdbg(&dev->pdev->dev, "dqh->dtd_status = 0x%x\n", dqh->dtd_status);
617
618 /* ensure that updates to the dQH will occur before priming */
619 wmb();
620
621 /* write 1 to endptprime register to PRIME endpoint */
622 bit_mask = is_in(ep) ? (1 << (ep->ep_num + 16)) : (1 << ep->ep_num);
623 dev_vdbg(&dev->pdev->dev, "endprime bit_mask = 0x%08x\n", bit_mask);
624 writel(bit_mask, &dev->op_regs->endptprime);
625out:
626 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
627 return 0;
628}
629
630
631/* fill in the dTD structure to build a transfer descriptor */
632static struct langwell_dtd *build_dtd(struct langwell_request *req,
633 unsigned *length, dma_addr_t *dma, int *is_last)
634{
635 u32 buf_ptr;
636 struct langwell_dtd *dtd;
637 struct langwell_udc *dev;
638 int i;
639
640 dev = req->ep->dev;
641 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
642
643 /* the maximum transfer length, up to 16k bytes */
644 *length = min(req->req.length - req->req.actual,
645 (unsigned)DTD_MAX_TRANSFER_LENGTH);
646
647 /* create dTD dma_pool resource */
648 dtd = dma_pool_alloc(dev->dtd_pool, GFP_KERNEL, dma);
649 if (dtd == NULL)
650 return dtd;
651 dtd->dtd_dma = *dma;
652
653 /* initialize buffer page pointers */
654 buf_ptr = (u32)(req->req.dma + req->req.actual);
655 for (i = 0; i < 5; i++)
656 dtd->dtd_buf[i] = cpu_to_le32(buf_ptr + i * PAGE_SIZE);
657
658 req->req.actual += *length;
659
660 /* fill in total bytes with transfer size */
661 dtd->dtd_total = cpu_to_le16(*length);
662 dev_vdbg(&dev->pdev->dev, "dtd->dtd_total = %d\n", dtd->dtd_total);
663
664 /* set is_last flag if req->req.zero is set or not */
665 if (req->req.zero) {
666 if (*length == 0 || (*length % req->ep->ep.maxpacket) != 0)
667 *is_last = 1;
668 else
669 *is_last = 0;
670 } else if (req->req.length == req->req.actual) {
671 *is_last = 1;
672 } else
673 *is_last = 0;
674
675 if (*is_last == 0)
676 dev_vdbg(&dev->pdev->dev, "multi-dtd request!\n");
677
678 /* set interrupt on complete bit for the last dTD */
679 if (*is_last && !req->req.no_interrupt)
680 dtd->dtd_ioc = 1;
681
682 /* set multiplier override 0 for non-ISO and non-TX endpoint */
683 dtd->dtd_multo = 0;
684
685 /* set the active bit of status field to 1 */
686 dtd->dtd_status = DTD_STS_ACTIVE;
687 dev_vdbg(&dev->pdev->dev, "dtd->dtd_status = 0x%02x\n",
688 dtd->dtd_status);
689
690 dev_vdbg(&dev->pdev->dev, "length = %d, dma addr= 0x%08x\n",
691 *length, (int)*dma);
692 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
693 return dtd;
694}
695
696
697/* generate dTD linked list for a request */
698static int req_to_dtd(struct langwell_request *req)
699{
700 unsigned count;
701 int is_last, is_first = 1;
702 struct langwell_dtd *dtd, *last_dtd = NULL;
703 struct langwell_udc *dev;
704 dma_addr_t dma;
705
706 dev = req->ep->dev;
707 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
708 do {
709 dtd = build_dtd(req, &count, &dma, &is_last);
710 if (dtd == NULL)
711 return -ENOMEM;
712
713 if (is_first) {
714 is_first = 0;
715 req->head = dtd;
716 } else {
717 last_dtd->dtd_next = cpu_to_le32(dma);
718 last_dtd->next_dtd_virt = dtd;
719 }
720 last_dtd = dtd;
721 req->dtd_count++;
722 } while (!is_last);
723
724 /* set terminate bit to 1 for the last dTD */
725 dtd->dtd_next = DTD_TERM;
726
727 req->tail = dtd;
728
729 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
730 return 0;
731}
732
733/*-------------------------------------------------------------------------*/
734
735/* queue (submits) an I/O requests to an endpoint */
736static int langwell_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
737 gfp_t gfp_flags)
738{
739 struct langwell_request *req;
740 struct langwell_ep *ep;
741 struct langwell_udc *dev;
742 unsigned long flags;
743 int is_iso = 0;
744 int ret;
745
746 /* always require a cpu-view buffer */
747 req = container_of(_req, struct langwell_request, req);
748 ep = container_of(_ep, struct langwell_ep, ep);
749
750 if (!_req || !_req->complete || !_req->buf
751 || !list_empty(&req->queue)) {
752 return -EINVAL;
753 }
754
755 if (unlikely(!_ep || !ep->desc))
756 return -EINVAL;
757
758 dev = ep->dev;
759 req->ep = ep;
760 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
761
762 if (usb_endpoint_xfer_isoc(ep->desc)) {
763 if (req->req.length > ep->ep.maxpacket)
764 return -EMSGSIZE;
765 is_iso = 1;
766 }
767
768 if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN))
769 return -ESHUTDOWN;
770
771 /* set up dma mapping */
772 ret = usb_gadget_map_request(&dev->gadget, &req->req, is_in(ep));
773 if (ret)
774 return ret;
775
776 dev_dbg(&dev->pdev->dev,
777 "%s queue req %p, len %u, buf %p, dma 0x%08x\n",
778 _ep->name,
779 _req, _req->length, _req->buf, (int)_req->dma);
780
781 _req->status = -EINPROGRESS;
782 _req->actual = 0;
783 req->dtd_count = 0;
784
785 spin_lock_irqsave(&dev->lock, flags);
786
787 /* build and put dTDs to endpoint queue */
788 if (!req_to_dtd(req)) {
789 queue_dtd(ep, req);
790 } else {
791 spin_unlock_irqrestore(&dev->lock, flags);
792 return -ENOMEM;
793 }
794
795 /* update ep0 state */
796 if (ep->ep_num == 0)
797 dev->ep0_state = DATA_STATE_XMIT;
798
799 if (likely(req != NULL)) {
800 list_add_tail(&req->queue, &ep->queue);
801 dev_vdbg(&dev->pdev->dev, "list_add_tail()\n");
802 }
803
804 spin_unlock_irqrestore(&dev->lock, flags);
805
806 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
807 return 0;
808}
809
810
811/* dequeue (cancels, unlinks) an I/O request from an endpoint */
812static int langwell_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
813{
814 struct langwell_ep *ep;
815 struct langwell_udc *dev;
816 struct langwell_request *req;
817 unsigned long flags;
818 int stopped, ep_num, retval = 0;
819 u32 endptctrl;
820
821 ep = container_of(_ep, struct langwell_ep, ep);
822 dev = ep->dev;
823 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
824
825 if (!_ep || !ep->desc || !_req)
826 return -EINVAL;
827
828 if (!dev->driver)
829 return -ESHUTDOWN;
830
831 spin_lock_irqsave(&dev->lock, flags);
832 stopped = ep->stopped;
833
834 /* quiesce dma while we patch the queue */
835 ep->stopped = 1;
836 ep_num = ep->ep_num;
837
838 /* disable endpoint control register */
839 endptctrl = readl(&dev->op_regs->endptctrl[ep_num]);
840 if (is_in(ep))
841 endptctrl &= ~EPCTRL_TXE;
842 else
843 endptctrl &= ~EPCTRL_RXE;
844 writel(endptctrl, &dev->op_regs->endptctrl[ep_num]);
845
846 /* make sure it's still queued on this endpoint */
847 list_for_each_entry(req, &ep->queue, queue) {
848 if (&req->req == _req)
849 break;
850 }
851
852 if (&req->req != _req) {
853 retval = -EINVAL;
854 goto done;
855 }
856
857 /* queue head may be partially complete. */
858 if (ep->queue.next == &req->queue) {
859 dev_dbg(&dev->pdev->dev, "unlink (%s) dma\n", _ep->name);
860 _req->status = -ECONNRESET;
861 langwell_ep_fifo_flush(&ep->ep);
862
863 /* not the last request in endpoint queue */
864 if (likely(ep->queue.next == &req->queue)) {
865 struct langwell_dqh *dqh;
866 struct langwell_request *next_req;
867
868 dqh = ep->dqh;
869 next_req = list_entry(req->queue.next,
870 struct langwell_request, queue);
871
872 /* point the dQH to the first dTD of next request */
873 writel((u32) next_req->head, &dqh->dqh_current);
874 }
875 } else {
876 struct langwell_request *prev_req;
877
878 prev_req = list_entry(req->queue.prev,
879 struct langwell_request, queue);
880 writel(readl(&req->tail->dtd_next),
881 &prev_req->tail->dtd_next);
882 }
883
884 done(ep, req, -ECONNRESET);
885
886done:
887 /* enable endpoint again */
888 endptctrl = readl(&dev->op_regs->endptctrl[ep_num]);
889 if (is_in(ep))
890 endptctrl |= EPCTRL_TXE;
891 else
892 endptctrl |= EPCTRL_RXE;
893 writel(endptctrl, &dev->op_regs->endptctrl[ep_num]);
894
895 ep->stopped = stopped;
896 spin_unlock_irqrestore(&dev->lock, flags);
897
898 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
899 return retval;
900}
901
902
903/*-------------------------------------------------------------------------*/
904
905/* endpoint set/clear halt */
906static void ep_set_halt(struct langwell_ep *ep, int value)
907{
908 u32 endptctrl = 0;
909 int ep_num;
910 struct langwell_udc *dev = ep->dev;
911 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
912
913 ep_num = ep->ep_num;
914 endptctrl = readl(&dev->op_regs->endptctrl[ep_num]);
915
916 /* value: 1 - set halt, 0 - clear halt */
917 if (value) {
918 /* set the stall bit */
919 if (is_in(ep))
920 endptctrl |= EPCTRL_TXS;
921 else
922 endptctrl |= EPCTRL_RXS;
923 } else {
924 /* clear the stall bit and reset data toggle */
925 if (is_in(ep)) {
926 endptctrl &= ~EPCTRL_TXS;
927 endptctrl |= EPCTRL_TXR;
928 } else {
929 endptctrl &= ~EPCTRL_RXS;
930 endptctrl |= EPCTRL_RXR;
931 }
932 }
933
934 writel(endptctrl, &dev->op_regs->endptctrl[ep_num]);
935
936 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
937}
938
939
940/* set the endpoint halt feature */
941static int langwell_ep_set_halt(struct usb_ep *_ep, int value)
942{
943 struct langwell_ep *ep;
944 struct langwell_udc *dev;
945 unsigned long flags;
946 int retval = 0;
947
948 ep = container_of(_ep, struct langwell_ep, ep);
949 dev = ep->dev;
950
951 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
952
953 if (!_ep || !ep->desc)
954 return -EINVAL;
955
956 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
957 return -ESHUTDOWN;
958
959 if (usb_endpoint_xfer_isoc(ep->desc))
960 return -EOPNOTSUPP;
961
962 spin_lock_irqsave(&dev->lock, flags);
963
964 /*
965 * attempt to halt IN ep will fail if any transfer requests
966 * are still queue
967 */
968 if (!list_empty(&ep->queue) && is_in(ep) && value) {
969 /* IN endpoint FIFO holds bytes */
970 dev_dbg(&dev->pdev->dev, "%s FIFO holds bytes\n", _ep->name);
971 retval = -EAGAIN;
972 goto done;
973 }
974
975 /* endpoint set/clear halt */
976 if (ep->ep_num) {
977 ep_set_halt(ep, value);
978 } else { /* endpoint 0 */
979 dev->ep0_state = WAIT_FOR_SETUP;
980 dev->ep0_dir = USB_DIR_OUT;
981 }
982done:
983 spin_unlock_irqrestore(&dev->lock, flags);
984 dev_dbg(&dev->pdev->dev, "%s %s halt\n",
985 _ep->name, value ? "set" : "clear");
986 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
987 return retval;
988}
989
990
991/* set the halt feature and ignores clear requests */
992static int langwell_ep_set_wedge(struct usb_ep *_ep)
993{
994 struct langwell_ep *ep;
995 struct langwell_udc *dev;
996
997 ep = container_of(_ep, struct langwell_ep, ep);
998 dev = ep->dev;
999
1000 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1001
1002 if (!_ep || !ep->desc)
1003 return -EINVAL;
1004
1005 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1006 return usb_ep_set_halt(_ep);
1007}
1008
1009
1010/* flush contents of a fifo */
1011static void langwell_ep_fifo_flush(struct usb_ep *_ep)
1012{
1013 struct langwell_ep *ep;
1014 struct langwell_udc *dev;
1015 u32 flush_bit;
1016 unsigned long timeout;
1017
1018 ep = container_of(_ep, struct langwell_ep, ep);
1019 dev = ep->dev;
1020
1021 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1022
1023 if (!_ep || !ep->desc) {
1024 dev_vdbg(&dev->pdev->dev, "ep or ep->desc is NULL\n");
1025 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1026 return;
1027 }
1028
1029 dev_vdbg(&dev->pdev->dev, "%s-%s fifo flush\n",
1030 _ep->name, DIR_STRING(ep));
1031
1032 /* flush endpoint buffer */
1033 if (ep->ep_num == 0)
1034 flush_bit = (1 << 16) | 1;
1035 else if (is_in(ep))
1036 flush_bit = 1 << (ep->ep_num + 16); /* TX */
1037 else
1038 flush_bit = 1 << ep->ep_num; /* RX */
1039
1040 /* wait until flush complete */
1041 timeout = jiffies + FLUSH_TIMEOUT;
1042 do {
1043 writel(flush_bit, &dev->op_regs->endptflush);
1044 while (readl(&dev->op_regs->endptflush)) {
1045 if (time_after(jiffies, timeout)) {
1046 dev_err(&dev->pdev->dev, "ep flush timeout\n");
1047 goto done;
1048 }
1049 cpu_relax();
1050 }
1051 } while (readl(&dev->op_regs->endptstat) & flush_bit);
1052done:
1053 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1054}
1055
1056
1057/* endpoints operations structure */
1058static const struct usb_ep_ops langwell_ep_ops = {
1059
1060 /* configure endpoint, making it usable */
1061 .enable = langwell_ep_enable,
1062
1063 /* endpoint is no longer usable */
1064 .disable = langwell_ep_disable,
1065
1066 /* allocate a request object to use with this endpoint */
1067 .alloc_request = langwell_alloc_request,
1068
1069 /* free a request object */
1070 .free_request = langwell_free_request,
1071
1072 /* queue (submits) an I/O requests to an endpoint */
1073 .queue = langwell_ep_queue,
1074
1075 /* dequeue (cancels, unlinks) an I/O request from an endpoint */
1076 .dequeue = langwell_ep_dequeue,
1077
1078 /* set the endpoint halt feature */
1079 .set_halt = langwell_ep_set_halt,
1080
1081 /* set the halt feature and ignores clear requests */
1082 .set_wedge = langwell_ep_set_wedge,
1083
1084 /* flush contents of a fifo */
1085 .fifo_flush = langwell_ep_fifo_flush,
1086};
1087
1088
1089/*-------------------------------------------------------------------------*/
1090
1091/* device controller usb_gadget_ops structure */
1092
1093/* returns the current frame number */
1094static int langwell_get_frame(struct usb_gadget *_gadget)
1095{
1096 struct langwell_udc *dev;
1097 u16 retval;
1098
1099 if (!_gadget)
1100 return -ENODEV;
1101
1102 dev = container_of(_gadget, struct langwell_udc, gadget);
1103 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1104
1105 retval = readl(&dev->op_regs->frindex) & FRINDEX_MASK;
1106
1107 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1108 return retval;
1109}
1110
1111
1112/* enter or exit PHY low power state */
1113static void langwell_phy_low_power(struct langwell_udc *dev, bool flag)
1114{
1115 u32 devlc;
1116 u8 devlc_byte2;
1117 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1118
1119 devlc = readl(&dev->op_regs->devlc);
1120 dev_vdbg(&dev->pdev->dev, "devlc = 0x%08x\n", devlc);
1121
1122 if (flag)
1123 devlc |= LPM_PHCD;
1124 else
1125 devlc &= ~LPM_PHCD;
1126
1127 /* FIXME: workaround for Langwell A1/A2/A3 sighting */
1128 devlc_byte2 = (devlc >> 16) & 0xff;
1129 writeb(devlc_byte2, (u8 *)&dev->op_regs->devlc + 2);
1130
1131 devlc = readl(&dev->op_regs->devlc);
1132 dev_vdbg(&dev->pdev->dev,
1133 "%s PHY low power suspend, devlc = 0x%08x\n",
1134 flag ? "enter" : "exit", devlc);
1135}
1136
1137
1138/* tries to wake up the host connected to this gadget */
1139static int langwell_wakeup(struct usb_gadget *_gadget)
1140{
1141 struct langwell_udc *dev;
1142 u32 portsc1;
1143 unsigned long flags;
1144
1145 if (!_gadget)
1146 return 0;
1147
1148 dev = container_of(_gadget, struct langwell_udc, gadget);
1149 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1150
1151 /* remote wakeup feature not enabled by host */
1152 if (!dev->remote_wakeup) {
1153 dev_info(&dev->pdev->dev, "remote wakeup is disabled\n");
1154 return -ENOTSUPP;
1155 }
1156
1157 spin_lock_irqsave(&dev->lock, flags);
1158
1159 portsc1 = readl(&dev->op_regs->portsc1);
1160 if (!(portsc1 & PORTS_SUSP)) {
1161 spin_unlock_irqrestore(&dev->lock, flags);
1162 return 0;
1163 }
1164
1165 /* LPM L1 to L0 or legacy remote wakeup */
1166 if (dev->lpm && dev->lpm_state == LPM_L1)
1167 dev_info(&dev->pdev->dev, "LPM L1 to L0 remote wakeup\n");
1168 else
1169 dev_info(&dev->pdev->dev, "device remote wakeup\n");
1170
1171 /* exit PHY low power suspend */
1172 if (dev->pdev->device != 0x0829)
1173 langwell_phy_low_power(dev, 0);
1174
1175 /* force port resume */
1176 portsc1 |= PORTS_FPR;
1177 writel(portsc1, &dev->op_regs->portsc1);
1178
1179 spin_unlock_irqrestore(&dev->lock, flags);
1180
1181 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1182 return 0;
1183}
1184
1185
1186/* notify controller that VBUS is powered or not */
1187static int langwell_vbus_session(struct usb_gadget *_gadget, int is_active)
1188{
1189 struct langwell_udc *dev;
1190 unsigned long flags;
1191 u32 usbcmd;
1192
1193 if (!_gadget)
1194 return -ENODEV;
1195
1196 dev = container_of(_gadget, struct langwell_udc, gadget);
1197 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1198
1199 spin_lock_irqsave(&dev->lock, flags);
1200 dev_vdbg(&dev->pdev->dev, "VBUS status: %s\n",
1201 is_active ? "on" : "off");
1202
1203 dev->vbus_active = (is_active != 0);
1204 if (dev->driver && dev->softconnected && dev->vbus_active) {
1205 usbcmd = readl(&dev->op_regs->usbcmd);
1206 usbcmd |= CMD_RUNSTOP;
1207 writel(usbcmd, &dev->op_regs->usbcmd);
1208 } else {
1209 usbcmd = readl(&dev->op_regs->usbcmd);
1210 usbcmd &= ~CMD_RUNSTOP;
1211 writel(usbcmd, &dev->op_regs->usbcmd);
1212 }
1213
1214 spin_unlock_irqrestore(&dev->lock, flags);
1215
1216 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1217 return 0;
1218}
1219
1220
1221/* constrain controller's VBUS power usage */
1222static int langwell_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1223{
1224 struct langwell_udc *dev;
1225
1226 if (!_gadget)
1227 return -ENODEV;
1228
1229 dev = container_of(_gadget, struct langwell_udc, gadget);
1230 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1231
1232 if (dev->transceiver) {
1233 dev_vdbg(&dev->pdev->dev, "usb_phy_set_power\n");
1234 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1235 return usb_phy_set_power(dev->transceiver, mA);
1236 }
1237
1238 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1239 return -ENOTSUPP;
1240}
1241
1242
1243/* D+ pullup, software-controlled connect/disconnect to USB host */
1244static int langwell_pullup(struct usb_gadget *_gadget, int is_on)
1245{
1246 struct langwell_udc *dev;
1247 u32 usbcmd;
1248 unsigned long flags;
1249
1250 if (!_gadget)
1251 return -ENODEV;
1252
1253 dev = container_of(_gadget, struct langwell_udc, gadget);
1254
1255 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1256
1257 spin_lock_irqsave(&dev->lock, flags);
1258 dev->softconnected = (is_on != 0);
1259
1260 if (dev->driver && dev->softconnected && dev->vbus_active) {
1261 usbcmd = readl(&dev->op_regs->usbcmd);
1262 usbcmd |= CMD_RUNSTOP;
1263 writel(usbcmd, &dev->op_regs->usbcmd);
1264 } else {
1265 usbcmd = readl(&dev->op_regs->usbcmd);
1266 usbcmd &= ~CMD_RUNSTOP;
1267 writel(usbcmd, &dev->op_regs->usbcmd);
1268 }
1269 spin_unlock_irqrestore(&dev->lock, flags);
1270
1271 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1272 return 0;
1273}
1274
1275static int langwell_start(struct usb_gadget *g,
1276 struct usb_gadget_driver *driver);
1277
1278static int langwell_stop(struct usb_gadget *g,
1279 struct usb_gadget_driver *driver);
1280
1281/* device controller usb_gadget_ops structure */
1282static const struct usb_gadget_ops langwell_ops = {
1283
1284 /* returns the current frame number */
1285 .get_frame = langwell_get_frame,
1286
1287 /* tries to wake up the host connected to this gadget */
1288 .wakeup = langwell_wakeup,
1289
1290 /* set the device selfpowered feature, always selfpowered */
1291 /* .set_selfpowered = langwell_set_selfpowered, */
1292
1293 /* notify controller that VBUS is powered or not */
1294 .vbus_session = langwell_vbus_session,
1295
1296 /* constrain controller's VBUS power usage */
1297 .vbus_draw = langwell_vbus_draw,
1298
1299 /* D+ pullup, software-controlled connect/disconnect to USB host */
1300 .pullup = langwell_pullup,
1301
1302 .udc_start = langwell_start,
1303 .udc_stop = langwell_stop,
1304};
1305
1306
1307/*-------------------------------------------------------------------------*/
1308
1309/* device controller operations */
1310
1311/* reset device controller */
1312static int langwell_udc_reset(struct langwell_udc *dev)
1313{
1314 u32 usbcmd, usbmode, devlc, endpointlistaddr;
1315 u8 devlc_byte0, devlc_byte2;
1316 unsigned long timeout;
1317
1318 if (!dev)
1319 return -EINVAL;
1320
1321 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1322
1323 /* set controller to stop state */
1324 usbcmd = readl(&dev->op_regs->usbcmd);
1325 usbcmd &= ~CMD_RUNSTOP;
1326 writel(usbcmd, &dev->op_regs->usbcmd);
1327
1328 /* reset device controller */
1329 usbcmd = readl(&dev->op_regs->usbcmd);
1330 usbcmd |= CMD_RST;
1331 writel(usbcmd, &dev->op_regs->usbcmd);
1332
1333 /* wait for reset to complete */
1334 timeout = jiffies + RESET_TIMEOUT;
1335 while (readl(&dev->op_regs->usbcmd) & CMD_RST) {
1336 if (time_after(jiffies, timeout)) {
1337 dev_err(&dev->pdev->dev, "device reset timeout\n");
1338 return -ETIMEDOUT;
1339 }
1340 cpu_relax();
1341 }
1342
1343 /* set controller to device mode */
1344 usbmode = readl(&dev->op_regs->usbmode);
1345 usbmode |= MODE_DEVICE;
1346
1347 /* turn setup lockout off, require setup tripwire in usbcmd */
1348 usbmode |= MODE_SLOM;
1349
1350 writel(usbmode, &dev->op_regs->usbmode);
1351 usbmode = readl(&dev->op_regs->usbmode);
1352 dev_vdbg(&dev->pdev->dev, "usbmode=0x%08x\n", usbmode);
1353
1354 /* Write-Clear setup status */
1355 writel(0, &dev->op_regs->usbsts);
1356
1357 /* if support USB LPM, ACK all LPM token */
1358 if (dev->lpm) {
1359 devlc = readl(&dev->op_regs->devlc);
1360 dev_vdbg(&dev->pdev->dev, "devlc = 0x%08x\n", devlc);
1361 /* FIXME: workaround for Langwell A1/A2/A3 sighting */
1362 devlc &= ~LPM_STL; /* don't STALL LPM token */
1363 devlc &= ~LPM_NYT_ACK; /* ACK LPM token */
1364 devlc_byte0 = devlc & 0xff;
1365 devlc_byte2 = (devlc >> 16) & 0xff;
1366 writeb(devlc_byte0, (u8 *)&dev->op_regs->devlc);
1367 writeb(devlc_byte2, (u8 *)&dev->op_regs->devlc + 2);
1368 devlc = readl(&dev->op_regs->devlc);
1369 dev_vdbg(&dev->pdev->dev,
1370 "ACK LPM token, devlc = 0x%08x\n", devlc);
1371 }
1372
1373 /* fill endpointlistaddr register */
1374 endpointlistaddr = dev->ep_dqh_dma;
1375 endpointlistaddr &= ENDPOINTLISTADDR_MASK;
1376 writel(endpointlistaddr, &dev->op_regs->endpointlistaddr);
1377
1378 dev_vdbg(&dev->pdev->dev,
1379 "dQH base (vir: %p, phy: 0x%08x), endpointlistaddr=0x%08x\n",
1380 dev->ep_dqh, endpointlistaddr,
1381 readl(&dev->op_regs->endpointlistaddr));
1382 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1383 return 0;
1384}
1385
1386
1387/* reinitialize device controller endpoints */
1388static int eps_reinit(struct langwell_udc *dev)
1389{
1390 struct langwell_ep *ep;
1391 char name[14];
1392 int i;
1393
1394 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1395
1396 /* initialize ep0 */
1397 ep = &dev->ep[0];
1398 ep->dev = dev;
1399 strncpy(ep->name, "ep0", sizeof(ep->name));
1400 ep->ep.name = ep->name;
1401 ep->ep.ops = &langwell_ep_ops;
1402 ep->stopped = 0;
1403 ep->ep.maxpacket = EP0_MAX_PKT_SIZE;
1404 ep->ep_num = 0;
1405 ep->desc = &langwell_ep0_desc;
1406 INIT_LIST_HEAD(&ep->queue);
1407
1408 ep->ep_type = USB_ENDPOINT_XFER_CONTROL;
1409
1410 /* initialize other endpoints */
1411 for (i = 2; i < dev->ep_max; i++) {
1412 ep = &dev->ep[i];
1413 if (i % 2)
1414 snprintf(name, sizeof(name), "ep%din", i / 2);
1415 else
1416 snprintf(name, sizeof(name), "ep%dout", i / 2);
1417 ep->dev = dev;
1418 strncpy(ep->name, name, sizeof(ep->name));
1419 ep->ep.name = ep->name;
1420
1421 ep->ep.ops = &langwell_ep_ops;
1422 ep->stopped = 0;
1423 ep->ep.maxpacket = (unsigned short) ~0;
1424 ep->ep_num = i / 2;
1425
1426 INIT_LIST_HEAD(&ep->queue);
1427 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
1428 }
1429
1430 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1431 return 0;
1432}
1433
1434
1435/* enable interrupt and set controller to run state */
1436static void langwell_udc_start(struct langwell_udc *dev)
1437{
1438 u32 usbintr, usbcmd;
1439 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1440
1441 /* enable interrupts */
1442 usbintr = INTR_ULPIE /* ULPI */
1443 | INTR_SLE /* suspend */
1444 /* | INTR_SRE SOF received */
1445 | INTR_URE /* USB reset */
1446 | INTR_AAE /* async advance */
1447 | INTR_SEE /* system error */
1448 | INTR_FRE /* frame list rollover */
1449 | INTR_PCE /* port change detect */
1450 | INTR_UEE /* USB error interrupt */
1451 | INTR_UE; /* USB interrupt */
1452 writel(usbintr, &dev->op_regs->usbintr);
1453
1454 /* clear stopped bit */
1455 dev->stopped = 0;
1456
1457 /* set controller to run */
1458 usbcmd = readl(&dev->op_regs->usbcmd);
1459 usbcmd |= CMD_RUNSTOP;
1460 writel(usbcmd, &dev->op_regs->usbcmd);
1461
1462 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1463}
1464
1465
1466/* disable interrupt and set controller to stop state */
1467static void langwell_udc_stop(struct langwell_udc *dev)
1468{
1469 u32 usbcmd;
1470
1471 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1472
1473 /* disable all interrupts */
1474 writel(0, &dev->op_regs->usbintr);
1475
1476 /* set stopped bit */
1477 dev->stopped = 1;
1478
1479 /* set controller to stop state */
1480 usbcmd = readl(&dev->op_regs->usbcmd);
1481 usbcmd &= ~CMD_RUNSTOP;
1482 writel(usbcmd, &dev->op_regs->usbcmd);
1483
1484 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1485}
1486
1487
1488/* stop all USB activities */
1489static void stop_activity(struct langwell_udc *dev)
1490{
1491 struct langwell_ep *ep;
1492 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1493
1494 nuke(&dev->ep[0], -ESHUTDOWN);
1495
1496 list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) {
1497 nuke(ep, -ESHUTDOWN);
1498 }
1499
1500 /* report disconnect; the driver is already quiesced */
1501 if (dev->driver) {
1502 spin_unlock(&dev->lock);
1503 dev->driver->disconnect(&dev->gadget);
1504 spin_lock(&dev->lock);
1505 }
1506
1507 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1508}
1509
1510
1511/*-------------------------------------------------------------------------*/
1512
1513/* device "function" sysfs attribute file */
1514static ssize_t show_function(struct device *_dev,
1515 struct device_attribute *attr, char *buf)
1516{
1517 struct langwell_udc *dev = dev_get_drvdata(_dev);
1518
1519 if (!dev->driver || !dev->driver->function
1520 || strlen(dev->driver->function) > PAGE_SIZE)
1521 return 0;
1522
1523 return scnprintf(buf, PAGE_SIZE, "%s\n", dev->driver->function);
1524}
1525static DEVICE_ATTR(function, S_IRUGO, show_function, NULL);
1526
1527
1528static inline enum usb_device_speed lpm_device_speed(u32 reg)
1529{
1530 switch (LPM_PSPD(reg)) {
1531 case LPM_SPEED_HIGH:
1532 return USB_SPEED_HIGH;
1533 case LPM_SPEED_FULL:
1534 return USB_SPEED_FULL;
1535 case LPM_SPEED_LOW:
1536 return USB_SPEED_LOW;
1537 default:
1538 return USB_SPEED_UNKNOWN;
1539 }
1540}
1541
1542/* device "langwell_udc" sysfs attribute file */
1543static ssize_t show_langwell_udc(struct device *_dev,
1544 struct device_attribute *attr, char *buf)
1545{
1546 struct langwell_udc *dev = dev_get_drvdata(_dev);
1547 struct langwell_request *req;
1548 struct langwell_ep *ep = NULL;
1549 char *next;
1550 unsigned size;
1551 unsigned t;
1552 unsigned i;
1553 unsigned long flags;
1554 u32 tmp_reg;
1555
1556 next = buf;
1557 size = PAGE_SIZE;
1558 spin_lock_irqsave(&dev->lock, flags);
1559
1560 /* driver basic information */
1561 t = scnprintf(next, size,
1562 DRIVER_DESC "\n"
1563 "%s version: %s\n"
1564 "Gadget driver: %s\n\n",
1565 driver_name, DRIVER_VERSION,
1566 dev->driver ? dev->driver->driver.name : "(none)");
1567 size -= t;
1568 next += t;
1569
1570 /* device registers */
1571 tmp_reg = readl(&dev->op_regs->usbcmd);
1572 t = scnprintf(next, size,
1573 "USBCMD reg:\n"
1574 "SetupTW: %d\n"
1575 "Run/Stop: %s\n\n",
1576 (tmp_reg & CMD_SUTW) ? 1 : 0,
1577 (tmp_reg & CMD_RUNSTOP) ? "Run" : "Stop");
1578 size -= t;
1579 next += t;
1580
1581 tmp_reg = readl(&dev->op_regs->usbsts);
1582 t = scnprintf(next, size,
1583 "USB Status Reg:\n"
1584 "Device Suspend: %d\n"
1585 "Reset Received: %d\n"
1586 "System Error: %s\n"
1587 "USB Error Interrupt: %s\n\n",
1588 (tmp_reg & STS_SLI) ? 1 : 0,
1589 (tmp_reg & STS_URI) ? 1 : 0,
1590 (tmp_reg & STS_SEI) ? "Error" : "No error",
1591 (tmp_reg & STS_UEI) ? "Error detected" : "No error");
1592 size -= t;
1593 next += t;
1594
1595 tmp_reg = readl(&dev->op_regs->usbintr);
1596 t = scnprintf(next, size,
1597 "USB Intrrupt Enable Reg:\n"
1598 "Sleep Enable: %d\n"
1599 "SOF Received Enable: %d\n"
1600 "Reset Enable: %d\n"
1601 "System Error Enable: %d\n"
1602 "Port Change Dectected Enable: %d\n"
1603 "USB Error Intr Enable: %d\n"
1604 "USB Intr Enable: %d\n\n",
1605 (tmp_reg & INTR_SLE) ? 1 : 0,
1606 (tmp_reg & INTR_SRE) ? 1 : 0,
1607 (tmp_reg & INTR_URE) ? 1 : 0,
1608 (tmp_reg & INTR_SEE) ? 1 : 0,
1609 (tmp_reg & INTR_PCE) ? 1 : 0,
1610 (tmp_reg & INTR_UEE) ? 1 : 0,
1611 (tmp_reg & INTR_UE) ? 1 : 0);
1612 size -= t;
1613 next += t;
1614
1615 tmp_reg = readl(&dev->op_regs->frindex);
1616 t = scnprintf(next, size,
1617 "USB Frame Index Reg:\n"
1618 "Frame Number is 0x%08x\n\n",
1619 (tmp_reg & FRINDEX_MASK));
1620 size -= t;
1621 next += t;
1622
1623 tmp_reg = readl(&dev->op_regs->deviceaddr);
1624 t = scnprintf(next, size,
1625 "USB Device Address Reg:\n"
1626 "Device Addr is 0x%x\n\n",
1627 USBADR(tmp_reg));
1628 size -= t;
1629 next += t;
1630
1631 tmp_reg = readl(&dev->op_regs->endpointlistaddr);
1632 t = scnprintf(next, size,
1633 "USB Endpoint List Address Reg:\n"
1634 "Endpoint List Pointer is 0x%x\n\n",
1635 EPBASE(tmp_reg));
1636 size -= t;
1637 next += t;
1638
1639 tmp_reg = readl(&dev->op_regs->portsc1);
1640 t = scnprintf(next, size,
1641 "USB Port Status & Control Reg:\n"
1642 "Port Reset: %s\n"
1643 "Port Suspend Mode: %s\n"
1644 "Over-current Change: %s\n"
1645 "Port Enable/Disable Change: %s\n"
1646 "Port Enabled/Disabled: %s\n"
1647 "Current Connect Status: %s\n"
1648 "LPM Suspend Status: %s\n\n",
1649 (tmp_reg & PORTS_PR) ? "Reset" : "Not Reset",
1650 (tmp_reg & PORTS_SUSP) ? "Suspend " : "Not Suspend",
1651 (tmp_reg & PORTS_OCC) ? "Detected" : "No",
1652 (tmp_reg & PORTS_PEC) ? "Changed" : "Not Changed",
1653 (tmp_reg & PORTS_PE) ? "Enable" : "Not Correct",
1654 (tmp_reg & PORTS_CCS) ? "Attached" : "Not Attached",
1655 (tmp_reg & PORTS_SLP) ? "LPM L1" : "LPM L0");
1656 size -= t;
1657 next += t;
1658
1659 tmp_reg = readl(&dev->op_regs->devlc);
1660 t = scnprintf(next, size,
1661 "Device LPM Control Reg:\n"
1662 "Parallel Transceiver : %d\n"
1663 "Serial Transceiver : %d\n"
1664 "Port Speed: %s\n"
1665 "Port Force Full Speed Connenct: %s\n"
1666 "PHY Low Power Suspend Clock: %s\n"
1667 "BmAttributes: %d\n\n",
1668 LPM_PTS(tmp_reg),
1669 (tmp_reg & LPM_STS) ? 1 : 0,
1670 usb_speed_string(lpm_device_speed(tmp_reg)),
1671 (tmp_reg & LPM_PFSC) ? "Force Full Speed" : "Not Force",
1672 (tmp_reg & LPM_PHCD) ? "Disabled" : "Enabled",
1673 LPM_BA(tmp_reg));
1674 size -= t;
1675 next += t;
1676
1677 tmp_reg = readl(&dev->op_regs->usbmode);
1678 t = scnprintf(next, size,
1679 "USB Mode Reg:\n"
1680 "Controller Mode is : %s\n\n", ({
1681 char *s;
1682 switch (MODE_CM(tmp_reg)) {
1683 case MODE_IDLE:
1684 s = "Idle"; break;
1685 case MODE_DEVICE:
1686 s = "Device Controller"; break;
1687 case MODE_HOST:
1688 s = "Host Controller"; break;
1689 default:
1690 s = "None"; break;
1691 }
1692 s;
1693 }));
1694 size -= t;
1695 next += t;
1696
1697 tmp_reg = readl(&dev->op_regs->endptsetupstat);
1698 t = scnprintf(next, size,
1699 "Endpoint Setup Status Reg:\n"
1700 "SETUP on ep 0x%04x\n\n",
1701 tmp_reg & SETUPSTAT_MASK);
1702 size -= t;
1703 next += t;
1704
1705 for (i = 0; i < dev->ep_max / 2; i++) {
1706 tmp_reg = readl(&dev->op_regs->endptctrl[i]);
1707 t = scnprintf(next, size, "EP Ctrl Reg [%d]: 0x%08x\n",
1708 i, tmp_reg);
1709 size -= t;
1710 next += t;
1711 }
1712 tmp_reg = readl(&dev->op_regs->endptprime);
1713 t = scnprintf(next, size, "EP Prime Reg: 0x%08x\n\n", tmp_reg);
1714 size -= t;
1715 next += t;
1716
1717 /* langwell_udc, langwell_ep, langwell_request structure information */
1718 ep = &dev->ep[0];
1719 t = scnprintf(next, size, "%s MaxPacketSize: 0x%x, ep_num: %d\n",
1720 ep->ep.name, ep->ep.maxpacket, ep->ep_num);
1721 size -= t;
1722 next += t;
1723
1724 if (list_empty(&ep->queue)) {
1725 t = scnprintf(next, size, "its req queue is empty\n\n");
1726 size -= t;
1727 next += t;
1728 } else {
1729 list_for_each_entry(req, &ep->queue, queue) {
1730 t = scnprintf(next, size,
1731 "req %p actual 0x%x length 0x%x buf %p\n",
1732 &req->req, req->req.actual,
1733 req->req.length, req->req.buf);
1734 size -= t;
1735 next += t;
1736 }
1737 }
1738 /* other gadget->eplist ep */
1739 list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) {
1740 if (ep->desc) {
1741 t = scnprintf(next, size,
1742 "\n%s MaxPacketSize: 0x%x, "
1743 "ep_num: %d\n",
1744 ep->ep.name, ep->ep.maxpacket,
1745 ep->ep_num);
1746 size -= t;
1747 next += t;
1748
1749 if (list_empty(&ep->queue)) {
1750 t = scnprintf(next, size,
1751 "its req queue is empty\n\n");
1752 size -= t;
1753 next += t;
1754 } else {
1755 list_for_each_entry(req, &ep->queue, queue) {
1756 t = scnprintf(next, size,
1757 "req %p actual 0x%x length "
1758 "0x%x buf %p\n",
1759 &req->req, req->req.actual,
1760 req->req.length, req->req.buf);
1761 size -= t;
1762 next += t;
1763 }
1764 }
1765 }
1766 }
1767
1768 spin_unlock_irqrestore(&dev->lock, flags);
1769 return PAGE_SIZE - size;
1770}
1771static DEVICE_ATTR(langwell_udc, S_IRUGO, show_langwell_udc, NULL);
1772
1773
1774/* device "remote_wakeup" sysfs attribute file */
1775static ssize_t store_remote_wakeup(struct device *_dev,
1776 struct device_attribute *attr, const char *buf, size_t count)
1777{
1778 struct langwell_udc *dev = dev_get_drvdata(_dev);
1779 unsigned long flags;
1780 ssize_t rc = count;
1781
1782 if (count > 2)
1783 return -EINVAL;
1784
1785 if (count > 0 && buf[count-1] == '\n')
1786 ((char *) buf)[count-1] = 0;
1787
1788 if (buf[0] != '1')
1789 return -EINVAL;
1790
1791 /* force remote wakeup enabled in case gadget driver doesn't support */
1792 spin_lock_irqsave(&dev->lock, flags);
1793 dev->remote_wakeup = 1;
1794 dev->dev_status |= (1 << USB_DEVICE_REMOTE_WAKEUP);
1795 spin_unlock_irqrestore(&dev->lock, flags);
1796
1797 langwell_wakeup(&dev->gadget);
1798
1799 return rc;
1800}
1801static DEVICE_ATTR(remote_wakeup, S_IWUSR, NULL, store_remote_wakeup);
1802
1803
1804/*-------------------------------------------------------------------------*/
1805
1806/*
1807 * when a driver is successfully registered, it will receive
1808 * control requests including set_configuration(), which enables
1809 * non-control requests. then usb traffic follows until a
1810 * disconnect is reported. then a host may connect again, or
1811 * the driver might get unbound.
1812 */
1813
1814static int langwell_start(struct usb_gadget *g,
1815 struct usb_gadget_driver *driver)
1816{
1817 struct langwell_udc *dev = gadget_to_langwell(g);
1818 unsigned long flags;
1819 int retval;
1820
1821 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1822
1823 spin_lock_irqsave(&dev->lock, flags);
1824
1825 /* hook up the driver ... */
1826 driver->driver.bus = NULL;
1827 dev->driver = driver;
1828 dev->gadget.dev.driver = &driver->driver;
1829
1830 spin_unlock_irqrestore(&dev->lock, flags);
1831
1832 retval = device_create_file(&dev->pdev->dev, &dev_attr_function);
1833 if (retval)
1834 goto err;
1835
1836 dev->usb_state = USB_STATE_ATTACHED;
1837 dev->ep0_state = WAIT_FOR_SETUP;
1838 dev->ep0_dir = USB_DIR_OUT;
1839
1840 /* enable interrupt and set controller to run state */
1841 if (dev->got_irq)
1842 langwell_udc_start(dev);
1843
1844 dev_vdbg(&dev->pdev->dev,
1845 "After langwell_udc_start(), print all registers:\n");
1846 print_all_registers(dev);
1847
1848 dev_info(&dev->pdev->dev, "register driver: %s\n",
1849 driver->driver.name);
1850 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1851
1852 return 0;
1853
1854err:
1855 dev->gadget.dev.driver = NULL;
1856 dev->driver = NULL;
1857
1858 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1859
1860 return retval;
1861}
1862
1863/* unregister gadget driver */
1864static int langwell_stop(struct usb_gadget *g,
1865 struct usb_gadget_driver *driver)
1866{
1867 struct langwell_udc *dev = gadget_to_langwell(g);
1868 unsigned long flags;
1869
1870 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1871
1872 /* exit PHY low power suspend */
1873 if (dev->pdev->device != 0x0829)
1874 langwell_phy_low_power(dev, 0);
1875
1876 /* unbind OTG transceiver */
1877 if (dev->transceiver)
1878 (void)otg_set_peripheral(dev->transceiver->otg, 0);
1879
1880 /* disable interrupt and set controller to stop state */
1881 langwell_udc_stop(dev);
1882
1883 dev->usb_state = USB_STATE_ATTACHED;
1884 dev->ep0_state = WAIT_FOR_SETUP;
1885 dev->ep0_dir = USB_DIR_OUT;
1886
1887 spin_lock_irqsave(&dev->lock, flags);
1888
1889 /* stop all usb activities */
1890 dev->gadget.speed = USB_SPEED_UNKNOWN;
1891 dev->gadget.dev.driver = NULL;
1892 dev->driver = NULL;
1893 stop_activity(dev);
1894 spin_unlock_irqrestore(&dev->lock, flags);
1895
1896 device_remove_file(&dev->pdev->dev, &dev_attr_function);
1897
1898 dev_info(&dev->pdev->dev, "unregistered driver '%s'\n",
1899 driver->driver.name);
1900 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1901
1902 return 0;
1903}
1904
1905/*-------------------------------------------------------------------------*/
1906
1907/*
1908 * setup tripwire is used as a semaphore to ensure that the setup data
1909 * payload is extracted from a dQH without being corrupted
1910 */
1911static void setup_tripwire(struct langwell_udc *dev)
1912{
1913 u32 usbcmd,
1914 endptsetupstat;
1915 unsigned long timeout;
1916 struct langwell_dqh *dqh;
1917
1918 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1919
1920 /* ep0 OUT dQH */
1921 dqh = &dev->ep_dqh[EP_DIR_OUT];
1922
1923 /* Write-Clear endptsetupstat */
1924 endptsetupstat = readl(&dev->op_regs->endptsetupstat);
1925 writel(endptsetupstat, &dev->op_regs->endptsetupstat);
1926
1927 /* wait until endptsetupstat is cleared */
1928 timeout = jiffies + SETUPSTAT_TIMEOUT;
1929 while (readl(&dev->op_regs->endptsetupstat)) {
1930 if (time_after(jiffies, timeout)) {
1931 dev_err(&dev->pdev->dev, "setup_tripwire timeout\n");
1932 break;
1933 }
1934 cpu_relax();
1935 }
1936
1937 /* while a hazard exists when setup packet arrives */
1938 do {
1939 /* set setup tripwire bit */
1940 usbcmd = readl(&dev->op_regs->usbcmd);
1941 writel(usbcmd | CMD_SUTW, &dev->op_regs->usbcmd);
1942
1943 /* copy the setup packet to local buffer */
1944 memcpy(&dev->local_setup_buff, &dqh->dqh_setup, 8);
1945 } while (!(readl(&dev->op_regs->usbcmd) & CMD_SUTW));
1946
1947 /* Write-Clear setup tripwire bit */
1948 usbcmd = readl(&dev->op_regs->usbcmd);
1949 writel(usbcmd & ~CMD_SUTW, &dev->op_regs->usbcmd);
1950
1951 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1952}
1953
1954
1955/* protocol ep0 stall, will automatically be cleared on new transaction */
1956static void ep0_stall(struct langwell_udc *dev)
1957{
1958 u32 endptctrl;
1959
1960 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1961
1962 /* set TX and RX to stall */
1963 endptctrl = readl(&dev->op_regs->endptctrl[0]);
1964 endptctrl |= EPCTRL_TXS | EPCTRL_RXS;
1965 writel(endptctrl, &dev->op_regs->endptctrl[0]);
1966
1967 /* update ep0 state */
1968 dev->ep0_state = WAIT_FOR_SETUP;
1969 dev->ep0_dir = USB_DIR_OUT;
1970
1971 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1972}
1973
1974
1975/* PRIME a status phase for ep0 */
1976static int prime_status_phase(struct langwell_udc *dev, int dir)
1977{
1978 struct langwell_request *req;
1979 struct langwell_ep *ep;
1980 int status = 0;
1981
1982 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
1983
1984 if (dir == EP_DIR_IN)
1985 dev->ep0_dir = USB_DIR_IN;
1986 else
1987 dev->ep0_dir = USB_DIR_OUT;
1988
1989 ep = &dev->ep[0];
1990 dev->ep0_state = WAIT_FOR_OUT_STATUS;
1991
1992 req = dev->status_req;
1993
1994 req->ep = ep;
1995 req->req.length = 0;
1996 req->req.status = -EINPROGRESS;
1997 req->req.actual = 0;
1998 req->req.complete = NULL;
1999 req->dtd_count = 0;
2000
2001 if (!req_to_dtd(req))
2002 status = queue_dtd(ep, req);
2003 else
2004 return -ENOMEM;
2005
2006 if (status)
2007 dev_err(&dev->pdev->dev, "can't queue ep0 status request\n");
2008
2009 list_add_tail(&req->queue, &ep->queue);
2010
2011 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2012 return status;
2013}
2014
2015
2016/* SET_ADDRESS request routine */
2017static void set_address(struct langwell_udc *dev, u16 value,
2018 u16 index, u16 length)
2019{
2020 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2021
2022 /* save the new address to device struct */
2023 dev->dev_addr = (u8) value;
2024 dev_vdbg(&dev->pdev->dev, "dev->dev_addr = %d\n", dev->dev_addr);
2025
2026 /* update usb state */
2027 dev->usb_state = USB_STATE_ADDRESS;
2028
2029 /* STATUS phase */
2030 if (prime_status_phase(dev, EP_DIR_IN))
2031 ep0_stall(dev);
2032
2033 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2034}
2035
2036
2037/* return endpoint by windex */
2038static struct langwell_ep *get_ep_by_windex(struct langwell_udc *dev,
2039 u16 wIndex)
2040{
2041 struct langwell_ep *ep;
2042 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2043
2044 if ((wIndex & USB_ENDPOINT_NUMBER_MASK) == 0)
2045 return &dev->ep[0];
2046
2047 list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) {
2048 u8 bEndpointAddress;
2049 if (!ep->desc)
2050 continue;
2051
2052 bEndpointAddress = ep->desc->bEndpointAddress;
2053 if ((wIndex ^ bEndpointAddress) & USB_DIR_IN)
2054 continue;
2055
2056 if ((wIndex & USB_ENDPOINT_NUMBER_MASK)
2057 == (bEndpointAddress & USB_ENDPOINT_NUMBER_MASK))
2058 return ep;
2059 }
2060
2061 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2062 return NULL;
2063}
2064
2065
2066/* return whether endpoint is stalled, 0: not stalled; 1: stalled */
2067static int ep_is_stall(struct langwell_ep *ep)
2068{
2069 struct langwell_udc *dev = ep->dev;
2070 u32 endptctrl;
2071 int retval;
2072
2073 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2074
2075 endptctrl = readl(&dev->op_regs->endptctrl[ep->ep_num]);
2076 if (is_in(ep))
2077 retval = endptctrl & EPCTRL_TXS ? 1 : 0;
2078 else
2079 retval = endptctrl & EPCTRL_RXS ? 1 : 0;
2080
2081 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2082 return retval;
2083}
2084
2085
2086/* GET_STATUS request routine */
2087static void get_status(struct langwell_udc *dev, u8 request_type, u16 value,
2088 u16 index, u16 length)
2089{
2090 struct langwell_request *req;
2091 struct langwell_ep *ep;
2092 u16 status_data = 0; /* 16 bits cpu view status data */
2093 int status = 0;
2094
2095 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2096
2097 ep = &dev->ep[0];
2098
2099 if ((request_type & USB_RECIP_MASK) == USB_RECIP_DEVICE) {
2100 /* get device status */
2101 status_data = dev->dev_status;
2102 } else if ((request_type & USB_RECIP_MASK) == USB_RECIP_INTERFACE) {
2103 /* get interface status */
2104 status_data = 0;
2105 } else if ((request_type & USB_RECIP_MASK) == USB_RECIP_ENDPOINT) {
2106 /* get endpoint status */
2107 struct langwell_ep *epn;
2108 epn = get_ep_by_windex(dev, index);
2109 /* stall if endpoint doesn't exist */
2110 if (!epn)
2111 goto stall;
2112
2113 status_data = ep_is_stall(epn) << USB_ENDPOINT_HALT;
2114 }
2115
2116 dev_dbg(&dev->pdev->dev, "get status data: 0x%04x\n", status_data);
2117
2118 dev->ep0_dir = USB_DIR_IN;
2119
2120 /* borrow the per device status_req */
2121 req = dev->status_req;
2122
2123 /* fill in the reqest structure */
2124 *((u16 *) req->req.buf) = cpu_to_le16(status_data);
2125 req->ep = ep;
2126 req->req.length = 2;
2127 req->req.status = -EINPROGRESS;
2128 req->req.actual = 0;
2129 req->req.complete = NULL;
2130 req->dtd_count = 0;
2131
2132 /* prime the data phase */
2133 if (!req_to_dtd(req))
2134 status = queue_dtd(ep, req);
2135 else /* no mem */
2136 goto stall;
2137
2138 if (status) {
2139 dev_err(&dev->pdev->dev,
2140 "response error on GET_STATUS request\n");
2141 goto stall;
2142 }
2143
2144 list_add_tail(&req->queue, &ep->queue);
2145 dev->ep0_state = DATA_STATE_XMIT;
2146
2147 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2148 return;
2149stall:
2150 ep0_stall(dev);
2151 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2152}
2153
2154
2155/* setup packet interrupt handler */
2156static void handle_setup_packet(struct langwell_udc *dev,
2157 struct usb_ctrlrequest *setup)
2158{
2159 u16 wValue = le16_to_cpu(setup->wValue);
2160 u16 wIndex = le16_to_cpu(setup->wIndex);
2161 u16 wLength = le16_to_cpu(setup->wLength);
2162 u32 portsc1;
2163
2164 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2165
2166 /* ep0 fifo flush */
2167 nuke(&dev->ep[0], -ESHUTDOWN);
2168
2169 dev_dbg(&dev->pdev->dev, "SETUP %02x.%02x v%04x i%04x l%04x\n",
2170 setup->bRequestType, setup->bRequest,
2171 wValue, wIndex, wLength);
2172
2173 /* RNDIS gadget delegate */
2174 if ((setup->bRequestType == 0x21) && (setup->bRequest == 0x00)) {
2175 /* USB_CDC_SEND_ENCAPSULATED_COMMAND */
2176 goto delegate;
2177 }
2178
2179 /* USB_CDC_GET_ENCAPSULATED_RESPONSE */
2180 if ((setup->bRequestType == 0xa1) && (setup->bRequest == 0x01)) {
2181 /* USB_CDC_GET_ENCAPSULATED_RESPONSE */
2182 goto delegate;
2183 }
2184
2185 /* We process some stardard setup requests here */
2186 switch (setup->bRequest) {
2187 case USB_REQ_GET_STATUS:
2188 dev_dbg(&dev->pdev->dev, "SETUP: USB_REQ_GET_STATUS\n");
2189 /* get status, DATA and STATUS phase */
2190 if ((setup->bRequestType & (USB_DIR_IN | USB_TYPE_MASK))
2191 != (USB_DIR_IN | USB_TYPE_STANDARD))
2192 break;
2193 get_status(dev, setup->bRequestType, wValue, wIndex, wLength);
2194 goto end;
2195
2196 case USB_REQ_SET_ADDRESS:
2197 dev_dbg(&dev->pdev->dev, "SETUP: USB_REQ_SET_ADDRESS\n");
2198 /* STATUS phase */
2199 if (setup->bRequestType != (USB_DIR_OUT | USB_TYPE_STANDARD
2200 | USB_RECIP_DEVICE))
2201 break;
2202 set_address(dev, wValue, wIndex, wLength);
2203 goto end;
2204
2205 case USB_REQ_CLEAR_FEATURE:
2206 case USB_REQ_SET_FEATURE:
2207 /* STATUS phase */
2208 {
2209 int rc = -EOPNOTSUPP;
2210 if (setup->bRequest == USB_REQ_SET_FEATURE)
2211 dev_dbg(&dev->pdev->dev,
2212 "SETUP: USB_REQ_SET_FEATURE\n");
2213 else if (setup->bRequest == USB_REQ_CLEAR_FEATURE)
2214 dev_dbg(&dev->pdev->dev,
2215 "SETUP: USB_REQ_CLEAR_FEATURE\n");
2216
2217 if ((setup->bRequestType & (USB_RECIP_MASK | USB_TYPE_MASK))
2218 == (USB_RECIP_ENDPOINT | USB_TYPE_STANDARD)) {
2219 struct langwell_ep *epn;
2220 epn = get_ep_by_windex(dev, wIndex);
2221 /* stall if endpoint doesn't exist */
2222 if (!epn) {
2223 ep0_stall(dev);
2224 goto end;
2225 }
2226
2227 if (wValue != 0 || wLength != 0
2228 || epn->ep_num > dev->ep_max)
2229 break;
2230
2231 spin_unlock(&dev->lock);
2232 rc = langwell_ep_set_halt(&epn->ep,
2233 (setup->bRequest == USB_REQ_SET_FEATURE)
2234 ? 1 : 0);
2235 spin_lock(&dev->lock);
2236
2237 } else if ((setup->bRequestType & (USB_RECIP_MASK
2238 | USB_TYPE_MASK)) == (USB_RECIP_DEVICE
2239 | USB_TYPE_STANDARD)) {
2240 rc = 0;
2241 switch (wValue) {
2242 case USB_DEVICE_REMOTE_WAKEUP:
2243 if (setup->bRequest == USB_REQ_SET_FEATURE) {
2244 dev->remote_wakeup = 1;
2245 dev->dev_status |= (1 << wValue);
2246 } else {
2247 dev->remote_wakeup = 0;
2248 dev->dev_status &= ~(1 << wValue);
2249 }
2250 break;
2251 case USB_DEVICE_TEST_MODE:
2252 dev_dbg(&dev->pdev->dev, "SETUP: TEST MODE\n");
2253 if ((wIndex & 0xff) ||
2254 (dev->gadget.speed != USB_SPEED_HIGH))
2255 ep0_stall(dev);
2256
2257 switch (wIndex >> 8) {
2258 case TEST_J:
2259 case TEST_K:
2260 case TEST_SE0_NAK:
2261 case TEST_PACKET:
2262 case TEST_FORCE_EN:
2263 if (prime_status_phase(dev, EP_DIR_IN))
2264 ep0_stall(dev);
2265 portsc1 = readl(&dev->op_regs->portsc1);
2266 portsc1 |= (wIndex & 0xf00) << 8;
2267 writel(portsc1, &dev->op_regs->portsc1);
2268 goto end;
2269 default:
2270 rc = -EOPNOTSUPP;
2271 }
2272 break;
2273 default:
2274 rc = -EOPNOTSUPP;
2275 break;
2276 }
2277
2278 if (!gadget_is_otg(&dev->gadget))
2279 break;
2280 else if (setup->bRequest == USB_DEVICE_B_HNP_ENABLE)
2281 dev->gadget.b_hnp_enable = 1;
2282 else if (setup->bRequest == USB_DEVICE_A_HNP_SUPPORT)
2283 dev->gadget.a_hnp_support = 1;
2284 else if (setup->bRequest ==
2285 USB_DEVICE_A_ALT_HNP_SUPPORT)
2286 dev->gadget.a_alt_hnp_support = 1;
2287 else
2288 break;
2289 } else
2290 break;
2291
2292 if (rc == 0) {
2293 if (prime_status_phase(dev, EP_DIR_IN))
2294 ep0_stall(dev);
2295 }
2296 goto end;
2297 }
2298
2299 case USB_REQ_GET_DESCRIPTOR:
2300 dev_dbg(&dev->pdev->dev,
2301 "SETUP: USB_REQ_GET_DESCRIPTOR\n");
2302 goto delegate;
2303
2304 case USB_REQ_SET_DESCRIPTOR:
2305 dev_dbg(&dev->pdev->dev,
2306 "SETUP: USB_REQ_SET_DESCRIPTOR unsupported\n");
2307 goto delegate;
2308
2309 case USB_REQ_GET_CONFIGURATION:
2310 dev_dbg(&dev->pdev->dev,
2311 "SETUP: USB_REQ_GET_CONFIGURATION\n");
2312 goto delegate;
2313
2314 case USB_REQ_SET_CONFIGURATION:
2315 dev_dbg(&dev->pdev->dev,
2316 "SETUP: USB_REQ_SET_CONFIGURATION\n");
2317 goto delegate;
2318
2319 case USB_REQ_GET_INTERFACE:
2320 dev_dbg(&dev->pdev->dev,
2321 "SETUP: USB_REQ_GET_INTERFACE\n");
2322 goto delegate;
2323
2324 case USB_REQ_SET_INTERFACE:
2325 dev_dbg(&dev->pdev->dev,
2326 "SETUP: USB_REQ_SET_INTERFACE\n");
2327 goto delegate;
2328
2329 case USB_REQ_SYNCH_FRAME:
2330 dev_dbg(&dev->pdev->dev,
2331 "SETUP: USB_REQ_SYNCH_FRAME unsupported\n");
2332 goto delegate;
2333
2334 default:
2335 /* delegate USB standard requests to the gadget driver */
2336 goto delegate;
2337delegate:
2338 /* USB requests handled by gadget */
2339 if (wLength) {
2340 /* DATA phase from gadget, STATUS phase from udc */
2341 dev->ep0_dir = (setup->bRequestType & USB_DIR_IN)
2342 ? USB_DIR_IN : USB_DIR_OUT;
2343 dev_vdbg(&dev->pdev->dev,
2344 "dev->ep0_dir = 0x%x, wLength = %d\n",
2345 dev->ep0_dir, wLength);
2346 spin_unlock(&dev->lock);
2347 if (dev->driver->setup(&dev->gadget,
2348 &dev->local_setup_buff) < 0)
2349 ep0_stall(dev);
2350 spin_lock(&dev->lock);
2351 dev->ep0_state = (setup->bRequestType & USB_DIR_IN)
2352 ? DATA_STATE_XMIT : DATA_STATE_RECV;
2353 } else {
2354 /* no DATA phase, IN STATUS phase from gadget */
2355 dev->ep0_dir = USB_DIR_IN;
2356 dev_vdbg(&dev->pdev->dev,
2357 "dev->ep0_dir = 0x%x, wLength = %d\n",
2358 dev->ep0_dir, wLength);
2359 spin_unlock(&dev->lock);
2360 if (dev->driver->setup(&dev->gadget,
2361 &dev->local_setup_buff) < 0)
2362 ep0_stall(dev);
2363 spin_lock(&dev->lock);
2364 dev->ep0_state = WAIT_FOR_OUT_STATUS;
2365 }
2366 break;
2367 }
2368end:
2369 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2370}
2371
2372
2373/* transfer completion, process endpoint request and free the completed dTDs
2374 * for this request
2375 */
2376static int process_ep_req(struct langwell_udc *dev, int index,
2377 struct langwell_request *curr_req)
2378{
2379 struct langwell_dtd *curr_dtd;
2380 struct langwell_dqh *curr_dqh;
2381 int td_complete, actual, remaining_length;
2382 int i, dir;
2383 u8 dtd_status = 0;
2384 int retval = 0;
2385
2386 curr_dqh = &dev->ep_dqh[index];
2387 dir = index % 2;
2388
2389 curr_dtd = curr_req->head;
2390 td_complete = 0;
2391 actual = curr_req->req.length;
2392
2393 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2394
2395 for (i = 0; i < curr_req->dtd_count; i++) {
2396
2397 /* command execution states by dTD */
2398 dtd_status = curr_dtd->dtd_status;
2399
2400 barrier();
2401 remaining_length = le16_to_cpu(curr_dtd->dtd_total);
2402 actual -= remaining_length;
2403
2404 if (!dtd_status) {
2405 /* transfers completed successfully */
2406 if (!remaining_length) {
2407 td_complete++;
2408 dev_vdbg(&dev->pdev->dev,
2409 "dTD transmitted successfully\n");
2410 } else {
2411 if (dir) {
2412 dev_vdbg(&dev->pdev->dev,
2413 "TX dTD remains data\n");
2414 retval = -EPROTO;
2415 break;
2416
2417 } else {
2418 td_complete++;
2419 break;
2420 }
2421 }
2422 } else {
2423 /* transfers completed with errors */
2424 if (dtd_status & DTD_STS_ACTIVE) {
2425 dev_dbg(&dev->pdev->dev,
2426 "dTD status ACTIVE dQH[%d]\n", index);
2427 retval = 1;
2428 return retval;
2429 } else if (dtd_status & DTD_STS_HALTED) {
2430 dev_err(&dev->pdev->dev,
2431 "dTD error %08x dQH[%d]\n",
2432 dtd_status, index);
2433 /* clear the errors and halt condition */
2434 curr_dqh->dtd_status = 0;
2435 retval = -EPIPE;
2436 break;
2437 } else if (dtd_status & DTD_STS_DBE) {
2438 dev_dbg(&dev->pdev->dev,
2439 "data buffer (overflow) error\n");
2440 retval = -EPROTO;
2441 break;
2442 } else if (dtd_status & DTD_STS_TRE) {
2443 dev_dbg(&dev->pdev->dev,
2444 "transaction(ISO) error\n");
2445 retval = -EILSEQ;
2446 break;
2447 } else
2448 dev_err(&dev->pdev->dev,
2449 "unknown error (0x%x)!\n",
2450 dtd_status);
2451 }
2452
2453 if (i != curr_req->dtd_count - 1)
2454 curr_dtd = (struct langwell_dtd *)
2455 curr_dtd->next_dtd_virt;
2456 }
2457
2458 if (retval)
2459 return retval;
2460
2461 curr_req->req.actual = actual;
2462
2463 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2464 return 0;
2465}
2466
2467
2468/* complete DATA or STATUS phase of ep0 prime status phase if needed */
2469static void ep0_req_complete(struct langwell_udc *dev,
2470 struct langwell_ep *ep0, struct langwell_request *req)
2471{
2472 u32 new_addr;
2473 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2474
2475 if (dev->usb_state == USB_STATE_ADDRESS) {
2476 /* set the new address */
2477 new_addr = (u32)dev->dev_addr;
2478 writel(new_addr << USBADR_SHIFT, &dev->op_regs->deviceaddr);
2479
2480 new_addr = USBADR(readl(&dev->op_regs->deviceaddr));
2481 dev_vdbg(&dev->pdev->dev, "new_addr = %d\n", new_addr);
2482 }
2483
2484 done(ep0, req, 0);
2485
2486 switch (dev->ep0_state) {
2487 case DATA_STATE_XMIT:
2488 /* receive status phase */
2489 if (prime_status_phase(dev, EP_DIR_OUT))
2490 ep0_stall(dev);
2491 break;
2492 case DATA_STATE_RECV:
2493 /* send status phase */
2494 if (prime_status_phase(dev, EP_DIR_IN))
2495 ep0_stall(dev);
2496 break;
2497 case WAIT_FOR_OUT_STATUS:
2498 dev->ep0_state = WAIT_FOR_SETUP;
2499 break;
2500 case WAIT_FOR_SETUP:
2501 dev_err(&dev->pdev->dev, "unexpect ep0 packets\n");
2502 break;
2503 default:
2504 ep0_stall(dev);
2505 break;
2506 }
2507
2508 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2509}
2510
2511
2512/* USB transfer completion interrupt */
2513static void handle_trans_complete(struct langwell_udc *dev)
2514{
2515 u32 complete_bits;
2516 int i, ep_num, dir, bit_mask, status;
2517 struct langwell_ep *epn;
2518 struct langwell_request *curr_req, *temp_req;
2519
2520 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2521
2522 complete_bits = readl(&dev->op_regs->endptcomplete);
2523 dev_vdbg(&dev->pdev->dev, "endptcomplete register: 0x%08x\n",
2524 complete_bits);
2525
2526 /* Write-Clear the bits in endptcomplete register */
2527 writel(complete_bits, &dev->op_regs->endptcomplete);
2528
2529 if (!complete_bits) {
2530 dev_dbg(&dev->pdev->dev, "complete_bits = 0\n");
2531 goto done;
2532 }
2533
2534 for (i = 0; i < dev->ep_max; i++) {
2535 ep_num = i / 2;
2536 dir = i % 2;
2537
2538 bit_mask = 1 << (ep_num + 16 * dir);
2539
2540 if (!(complete_bits & bit_mask))
2541 continue;
2542
2543 /* ep0 */
2544 if (i == 1)
2545 epn = &dev->ep[0];
2546 else
2547 epn = &dev->ep[i];
2548
2549 if (epn->name == NULL) {
2550 dev_warn(&dev->pdev->dev, "invalid endpoint\n");
2551 continue;
2552 }
2553
2554 if (i < 2)
2555 /* ep0 in and out */
2556 dev_dbg(&dev->pdev->dev, "%s-%s transfer completed\n",
2557 epn->name,
2558 is_in(epn) ? "in" : "out");
2559 else
2560 dev_dbg(&dev->pdev->dev, "%s transfer completed\n",
2561 epn->name);
2562
2563 /* process the req queue until an uncomplete request */
2564 list_for_each_entry_safe(curr_req, temp_req,
2565 &epn->queue, queue) {
2566 status = process_ep_req(dev, i, curr_req);
2567 dev_vdbg(&dev->pdev->dev, "%s req status: %d\n",
2568 epn->name, status);
2569
2570 if (status)
2571 break;
2572
2573 /* write back status to req */
2574 curr_req->req.status = status;
2575
2576 /* ep0 request completion */
2577 if (ep_num == 0) {
2578 ep0_req_complete(dev, epn, curr_req);
2579 break;
2580 } else {
2581 done(epn, curr_req, status);
2582 }
2583 }
2584 }
2585done:
2586 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2587}
2588
2589/* port change detect interrupt handler */
2590static void handle_port_change(struct langwell_udc *dev)
2591{
2592 u32 portsc1, devlc;
2593
2594 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2595
2596 if (dev->bus_reset)
2597 dev->bus_reset = 0;
2598
2599 portsc1 = readl(&dev->op_regs->portsc1);
2600 devlc = readl(&dev->op_regs->devlc);
2601 dev_vdbg(&dev->pdev->dev, "portsc1 = 0x%08x, devlc = 0x%08x\n",
2602 portsc1, devlc);
2603
2604 /* bus reset is finished */
2605 if (!(portsc1 & PORTS_PR)) {
2606 /* get the speed */
2607 dev->gadget.speed = lpm_device_speed(devlc);
2608 dev_vdbg(&dev->pdev->dev, "dev->gadget.speed = %d\n",
2609 dev->gadget.speed);
2610 }
2611
2612 /* LPM L0 to L1 */
2613 if (dev->lpm && dev->lpm_state == LPM_L0)
2614 if (portsc1 & PORTS_SUSP && portsc1 & PORTS_SLP) {
2615 dev_info(&dev->pdev->dev, "LPM L0 to L1\n");
2616 dev->lpm_state = LPM_L1;
2617 }
2618
2619 /* LPM L1 to L0, force resume or remote wakeup finished */
2620 if (dev->lpm && dev->lpm_state == LPM_L1)
2621 if (!(portsc1 & PORTS_SUSP)) {
2622 dev_info(&dev->pdev->dev, "LPM L1 to L0\n");
2623 dev->lpm_state = LPM_L0;
2624 }
2625
2626 /* update USB state */
2627 if (!dev->resume_state)
2628 dev->usb_state = USB_STATE_DEFAULT;
2629
2630 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2631}
2632
2633
2634/* USB reset interrupt handler */
2635static void handle_usb_reset(struct langwell_udc *dev)
2636{
2637 u32 deviceaddr,
2638 endptsetupstat,
2639 endptcomplete;
2640 unsigned long timeout;
2641
2642 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2643
2644 /* Write-Clear the device address */
2645 deviceaddr = readl(&dev->op_regs->deviceaddr);
2646 writel(deviceaddr & ~USBADR_MASK, &dev->op_regs->deviceaddr);
2647
2648 dev->dev_addr = 0;
2649
2650 /* clear usb state */
2651 dev->resume_state = 0;
2652
2653 /* LPM L1 to L0, reset */
2654 if (dev->lpm)
2655 dev->lpm_state = LPM_L0;
2656
2657 dev->ep0_dir = USB_DIR_OUT;
2658 dev->ep0_state = WAIT_FOR_SETUP;
2659
2660 /* remote wakeup reset to 0 when the device is reset */
2661 dev->remote_wakeup = 0;
2662 dev->dev_status = 1 << USB_DEVICE_SELF_POWERED;
2663 dev->gadget.b_hnp_enable = 0;
2664 dev->gadget.a_hnp_support = 0;
2665 dev->gadget.a_alt_hnp_support = 0;
2666
2667 /* Write-Clear all the setup token semaphores */
2668 endptsetupstat = readl(&dev->op_regs->endptsetupstat);
2669 writel(endptsetupstat, &dev->op_regs->endptsetupstat);
2670
2671 /* Write-Clear all the endpoint complete status bits */
2672 endptcomplete = readl(&dev->op_regs->endptcomplete);
2673 writel(endptcomplete, &dev->op_regs->endptcomplete);
2674
2675 /* wait until all endptprime bits cleared */
2676 timeout = jiffies + PRIME_TIMEOUT;
2677 while (readl(&dev->op_regs->endptprime)) {
2678 if (time_after(jiffies, timeout)) {
2679 dev_err(&dev->pdev->dev, "USB reset timeout\n");
2680 break;
2681 }
2682 cpu_relax();
2683 }
2684
2685 /* write 1s to endptflush register to clear any primed buffers */
2686 writel((u32) ~0, &dev->op_regs->endptflush);
2687
2688 if (readl(&dev->op_regs->portsc1) & PORTS_PR) {
2689 dev_vdbg(&dev->pdev->dev, "USB bus reset\n");
2690 /* bus is reseting */
2691 dev->bus_reset = 1;
2692
2693 /* reset all the queues, stop all USB activities */
2694 stop_activity(dev);
2695 dev->usb_state = USB_STATE_DEFAULT;
2696 } else {
2697 dev_vdbg(&dev->pdev->dev, "device controller reset\n");
2698 /* controller reset */
2699 langwell_udc_reset(dev);
2700
2701 /* reset all the queues, stop all USB activities */
2702 stop_activity(dev);
2703
2704 /* reset ep0 dQH and endptctrl */
2705 ep0_reset(dev);
2706
2707 /* enable interrupt and set controller to run state */
2708 langwell_udc_start(dev);
2709
2710 dev->usb_state = USB_STATE_ATTACHED;
2711 }
2712
2713 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2714}
2715
2716
2717/* USB bus suspend/resume interrupt */
2718static void handle_bus_suspend(struct langwell_udc *dev)
2719{
2720 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
2721
2722 dev->resume_state = dev->usb_state;
2723 dev->usb_state = USB_STATE_SUSPENDED;
2724
2725 /* report suspend to the driver */
2726 if (dev->driver) {
2727 if (dev->driver->suspend) {
2728 spin_unlock(&dev->lock);
2729 dev->driver->suspend(&dev->gadget);
2730 spin_lock(&dev->lock);
2731 dev_dbg(&dev->pdev->dev, "suspend %s\n",
2732 dev->driver->driver.name);
2733 }
2734 }
2735
2736 /* enter PHY low power suspend */
2737 if (dev->pdev->device != 0x0829)
2738 langwell_phy_low_power(dev, 0);
2739
2740 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2741}
2742
2743
2744static void handle_bus_resume(struct langwell_udc *dev)
2745{
2746 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
2747
2748 dev->usb_state = dev->resume_state;
2749 dev->resume_state = 0;
2750
2751 /* exit PHY low power suspend */
2752 if (dev->pdev->device != 0x0829)
2753 langwell_phy_low_power(dev, 0);
2754
2755 /* report resume to the driver */
2756 if (dev->driver) {
2757 if (dev->driver->resume) {
2758 spin_unlock(&dev->lock);
2759 dev->driver->resume(&dev->gadget);
2760 spin_lock(&dev->lock);
2761 dev_dbg(&dev->pdev->dev, "resume %s\n",
2762 dev->driver->driver.name);
2763 }
2764 }
2765
2766 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2767}
2768
2769
2770/* USB device controller interrupt handler */
2771static irqreturn_t langwell_irq(int irq, void *_dev)
2772{
2773 struct langwell_udc *dev = _dev;
2774 u32 usbsts,
2775 usbintr,
2776 irq_sts,
2777 portsc1;
2778
2779 dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
2780
2781 if (dev->stopped) {
2782 dev_vdbg(&dev->pdev->dev, "handle IRQ_NONE\n");
2783 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2784 return IRQ_NONE;
2785 }
2786
2787 spin_lock(&dev->lock);
2788
2789 /* USB status */
2790 usbsts = readl(&dev->op_regs->usbsts);
2791
2792 /* USB interrupt enable */
2793 usbintr = readl(&dev->op_regs->usbintr);
2794
2795 irq_sts = usbsts & usbintr;
2796 dev_vdbg(&dev->pdev->dev,
2797 "usbsts = 0x%08x, usbintr = 0x%08x, irq_sts = 0x%08x\n",
2798 usbsts, usbintr, irq_sts);
2799
2800 if (!irq_sts) {
2801 dev_vdbg(&dev->pdev->dev, "handle IRQ_NONE\n");
2802 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2803 spin_unlock(&dev->lock);
2804 return IRQ_NONE;
2805 }
2806
2807 /* Write-Clear interrupt status bits */
2808 writel(irq_sts, &dev->op_regs->usbsts);
2809
2810 /* resume from suspend */
2811 portsc1 = readl(&dev->op_regs->portsc1);
2812 if (dev->usb_state == USB_STATE_SUSPENDED)
2813 if (!(portsc1 & PORTS_SUSP))
2814 handle_bus_resume(dev);
2815
2816 /* USB interrupt */
2817 if (irq_sts & STS_UI) {
2818 dev_vdbg(&dev->pdev->dev, "USB interrupt\n");
2819
2820 /* setup packet received from ep0 */
2821 if (readl(&dev->op_regs->endptsetupstat)
2822 & EP0SETUPSTAT_MASK) {
2823 dev_vdbg(&dev->pdev->dev,
2824 "USB SETUP packet received interrupt\n");
2825 /* setup tripwire semaphone */
2826 setup_tripwire(dev);
2827 handle_setup_packet(dev, &dev->local_setup_buff);
2828 }
2829
2830 /* USB transfer completion */
2831 if (readl(&dev->op_regs->endptcomplete)) {
2832 dev_vdbg(&dev->pdev->dev,
2833 "USB transfer completion interrupt\n");
2834 handle_trans_complete(dev);
2835 }
2836 }
2837
2838 /* SOF received interrupt (for ISO transfer) */
2839 if (irq_sts & STS_SRI) {
2840 /* FIXME */
2841 /* dev_vdbg(&dev->pdev->dev, "SOF received interrupt\n"); */
2842 }
2843
2844 /* port change detect interrupt */
2845 if (irq_sts & STS_PCI) {
2846 dev_vdbg(&dev->pdev->dev, "port change detect interrupt\n");
2847 handle_port_change(dev);
2848 }
2849
2850 /* suspend interrupt */
2851 if (irq_sts & STS_SLI) {
2852 dev_vdbg(&dev->pdev->dev, "suspend interrupt\n");
2853 handle_bus_suspend(dev);
2854 }
2855
2856 /* USB reset interrupt */
2857 if (irq_sts & STS_URI) {
2858 dev_vdbg(&dev->pdev->dev, "USB reset interrupt\n");
2859 handle_usb_reset(dev);
2860 }
2861
2862 /* USB error or system error interrupt */
2863 if (irq_sts & (STS_UEI | STS_SEI)) {
2864 /* FIXME */
2865 dev_warn(&dev->pdev->dev, "error IRQ, irq_sts: %x\n", irq_sts);
2866 }
2867
2868 spin_unlock(&dev->lock);
2869
2870 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2871 return IRQ_HANDLED;
2872}
2873
2874
2875/*-------------------------------------------------------------------------*/
2876
2877/* release device structure */
2878static void gadget_release(struct device *_dev)
2879{
2880 struct langwell_udc *dev = dev_get_drvdata(_dev);
2881
2882 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
2883
2884 complete(dev->done);
2885
2886 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2887 kfree(dev);
2888}
2889
2890
2891/* enable SRAM caching if SRAM detected */
2892static void sram_init(struct langwell_udc *dev)
2893{
2894 struct pci_dev *pdev = dev->pdev;
2895
2896 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
2897
2898 dev->sram_addr = pci_resource_start(pdev, 1);
2899 dev->sram_size = pci_resource_len(pdev, 1);
2900 dev_info(&dev->pdev->dev, "Found private SRAM at %x size:%x\n",
2901 dev->sram_addr, dev->sram_size);
2902 dev->got_sram = 1;
2903
2904 if (pci_request_region(pdev, 1, kobject_name(&pdev->dev.kobj))) {
2905 dev_warn(&dev->pdev->dev, "SRAM request failed\n");
2906 dev->got_sram = 0;
2907 } else if (!dma_declare_coherent_memory(&pdev->dev, dev->sram_addr,
2908 dev->sram_addr, dev->sram_size, DMA_MEMORY_MAP)) {
2909 dev_warn(&dev->pdev->dev, "SRAM DMA declare failed\n");
2910 pci_release_region(pdev, 1);
2911 dev->got_sram = 0;
2912 }
2913
2914 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2915}
2916
2917
2918/* release SRAM caching */
2919static void sram_deinit(struct langwell_udc *dev)
2920{
2921 struct pci_dev *pdev = dev->pdev;
2922
2923 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
2924
2925 dma_release_declared_memory(&pdev->dev);
2926 pci_release_region(pdev, 1);
2927
2928 dev->got_sram = 0;
2929
2930 dev_info(&dev->pdev->dev, "release SRAM caching\n");
2931 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2932}
2933
2934
2935/* tear down the binding between this driver and the pci device */
2936static void langwell_udc_remove(struct pci_dev *pdev)
2937{
2938 struct langwell_udc *dev = pci_get_drvdata(pdev);
2939
2940 DECLARE_COMPLETION(done);
2941
2942 BUG_ON(dev->driver);
2943 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
2944
2945 dev->done = &done;
2946
2947 /* free dTD dma_pool and dQH */
2948 if (dev->dtd_pool)
2949 dma_pool_destroy(dev->dtd_pool);
2950
2951 if (dev->ep_dqh)
2952 dma_free_coherent(&pdev->dev, dev->ep_dqh_size,
2953 dev->ep_dqh, dev->ep_dqh_dma);
2954
2955 /* release SRAM caching */
2956 if (dev->has_sram && dev->got_sram)
2957 sram_deinit(dev);
2958
2959 if (dev->status_req) {
2960 kfree(dev->status_req->req.buf);
2961 kfree(dev->status_req);
2962 }
2963
2964 kfree(dev->ep);
2965
2966 /* disable IRQ handler */
2967 if (dev->got_irq)
2968 free_irq(pdev->irq, dev);
2969
2970 if (dev->cap_regs)
2971 iounmap(dev->cap_regs);
2972
2973 if (dev->region)
2974 release_mem_region(pci_resource_start(pdev, 0),
2975 pci_resource_len(pdev, 0));
2976
2977 if (dev->enabled)
2978 pci_disable_device(pdev);
2979
2980 dev->cap_regs = NULL;
2981
2982 dev_info(&dev->pdev->dev, "unbind\n");
2983 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
2984
2985 device_unregister(&dev->gadget.dev);
2986 device_remove_file(&pdev->dev, &dev_attr_langwell_udc);
2987 device_remove_file(&pdev->dev, &dev_attr_remote_wakeup);
2988
2989 pci_set_drvdata(pdev, NULL);
2990
2991 /* free dev, wait for the release() finished */
2992 wait_for_completion(&done);
2993}
2994
2995
2996/*
2997 * wrap this driver around the specified device, but
2998 * don't respond over USB until a gadget driver binds to us.
2999 */
3000static int langwell_udc_probe(struct pci_dev *pdev,
3001 const struct pci_device_id *id)
3002{
3003 struct langwell_udc *dev;
3004 unsigned long resource, len;
3005 void __iomem *base = NULL;
3006 size_t size;
3007 int retval;
3008
3009 /* alloc, and start init */
3010 dev = kzalloc(sizeof *dev, GFP_KERNEL);
3011 if (dev == NULL) {
3012 retval = -ENOMEM;
3013 goto error;
3014 }
3015
3016 /* initialize device spinlock */
3017 spin_lock_init(&dev->lock);
3018
3019 dev->pdev = pdev;
3020 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
3021
3022 pci_set_drvdata(pdev, dev);
3023
3024 /* now all the pci goodies ... */
3025 if (pci_enable_device(pdev) < 0) {
3026 retval = -ENODEV;
3027 goto error;
3028 }
3029 dev->enabled = 1;
3030
3031 /* control register: BAR 0 */
3032 resource = pci_resource_start(pdev, 0);
3033 len = pci_resource_len(pdev, 0);
3034 if (!request_mem_region(resource, len, driver_name)) {
3035 dev_err(&dev->pdev->dev, "controller already in use\n");
3036 retval = -EBUSY;
3037 goto error;
3038 }
3039 dev->region = 1;
3040
3041 base = ioremap_nocache(resource, len);
3042 if (base == NULL) {
3043 dev_err(&dev->pdev->dev, "can't map memory\n");
3044 retval = -EFAULT;
3045 goto error;
3046 }
3047
3048 dev->cap_regs = (struct langwell_cap_regs __iomem *) base;
3049 dev_vdbg(&dev->pdev->dev, "dev->cap_regs: %p\n", dev->cap_regs);
3050 dev->op_regs = (struct langwell_op_regs __iomem *)
3051 (base + OP_REG_OFFSET);
3052 dev_vdbg(&dev->pdev->dev, "dev->op_regs: %p\n", dev->op_regs);
3053
3054 /* irq setup after old hardware is cleaned up */
3055 if (!pdev->irq) {
3056 dev_err(&dev->pdev->dev, "No IRQ. Check PCI setup!\n");
3057 retval = -ENODEV;
3058 goto error;
3059 }
3060
3061 dev->has_sram = 1;
3062 dev->got_sram = 0;
3063 dev_vdbg(&dev->pdev->dev, "dev->has_sram: %d\n", dev->has_sram);
3064
3065 /* enable SRAM caching if detected */
3066 if (dev->has_sram && !dev->got_sram)
3067 sram_init(dev);
3068
3069 dev_info(&dev->pdev->dev,
3070 "irq %d, io mem: 0x%08lx, len: 0x%08lx, pci mem 0x%p\n",
3071 pdev->irq, resource, len, base);
3072 /* enables bus-mastering for device dev */
3073 pci_set_master(pdev);
3074
3075 if (request_irq(pdev->irq, langwell_irq, IRQF_SHARED,
3076 driver_name, dev) != 0) {
3077 dev_err(&dev->pdev->dev,
3078 "request interrupt %d failed\n", pdev->irq);
3079 retval = -EBUSY;
3080 goto error;
3081 }
3082 dev->got_irq = 1;
3083
3084 /* set stopped bit */
3085 dev->stopped = 1;
3086
3087 /* capabilities and endpoint number */
3088 dev->lpm = (readl(&dev->cap_regs->hccparams) & HCC_LEN) ? 1 : 0;
3089 dev->dciversion = readw(&dev->cap_regs->dciversion);
3090 dev->devcap = (readl(&dev->cap_regs->dccparams) & DEVCAP) ? 1 : 0;
3091 dev_vdbg(&dev->pdev->dev, "dev->lpm: %d\n", dev->lpm);
3092 dev_vdbg(&dev->pdev->dev, "dev->dciversion: 0x%04x\n",
3093 dev->dciversion);
3094 dev_vdbg(&dev->pdev->dev, "dccparams: 0x%08x\n",
3095 readl(&dev->cap_regs->dccparams));
3096 dev_vdbg(&dev->pdev->dev, "dev->devcap: %d\n", dev->devcap);
3097 if (!dev->devcap) {
3098 dev_err(&dev->pdev->dev, "can't support device mode\n");
3099 retval = -ENODEV;
3100 goto error;
3101 }
3102
3103 /* a pair of endpoints (out/in) for each address */
3104 dev->ep_max = DEN(readl(&dev->cap_regs->dccparams)) * 2;
3105 dev_vdbg(&dev->pdev->dev, "dev->ep_max: %d\n", dev->ep_max);
3106
3107 /* allocate endpoints memory */
3108 dev->ep = kzalloc(sizeof(struct langwell_ep) * dev->ep_max,
3109 GFP_KERNEL);
3110 if (!dev->ep) {
3111 dev_err(&dev->pdev->dev, "allocate endpoints memory failed\n");
3112 retval = -ENOMEM;
3113 goto error;
3114 }
3115
3116 /* allocate device dQH memory */
3117 size = dev->ep_max * sizeof(struct langwell_dqh);
3118 dev_vdbg(&dev->pdev->dev, "orig size = %zd\n", size);
3119 if (size < DQH_ALIGNMENT)
3120 size = DQH_ALIGNMENT;
3121 else if ((size % DQH_ALIGNMENT) != 0) {
3122 size += DQH_ALIGNMENT + 1;
3123 size &= ~(DQH_ALIGNMENT - 1);
3124 }
3125 dev->ep_dqh = dma_alloc_coherent(&pdev->dev, size,
3126 &dev->ep_dqh_dma, GFP_KERNEL);
3127 if (!dev->ep_dqh) {
3128 dev_err(&dev->pdev->dev, "allocate dQH memory failed\n");
3129 retval = -ENOMEM;
3130 goto error;
3131 }
3132 dev->ep_dqh_size = size;
3133 dev_vdbg(&dev->pdev->dev, "ep_dqh_size = %zd\n", dev->ep_dqh_size);
3134
3135 /* initialize ep0 status request structure */
3136 dev->status_req = kzalloc(sizeof(struct langwell_request), GFP_KERNEL);
3137 if (!dev->status_req) {
3138 dev_err(&dev->pdev->dev,
3139 "allocate status_req memory failed\n");
3140 retval = -ENOMEM;
3141 goto error;
3142 }
3143 INIT_LIST_HEAD(&dev->status_req->queue);
3144
3145 /* allocate a small amount of memory to get valid address */
3146 dev->status_req->req.buf = kmalloc(8, GFP_KERNEL);
3147 dev->status_req->req.dma = virt_to_phys(dev->status_req->req.buf);
3148
3149 dev->resume_state = USB_STATE_NOTATTACHED;
3150 dev->usb_state = USB_STATE_POWERED;
3151 dev->ep0_dir = USB_DIR_OUT;
3152
3153 /* remote wakeup reset to 0 when the device is reset */
3154 dev->remote_wakeup = 0;
3155 dev->dev_status = 1 << USB_DEVICE_SELF_POWERED;
3156
3157 /* reset device controller */
3158 langwell_udc_reset(dev);
3159
3160 /* initialize gadget structure */
3161 dev->gadget.ops = &langwell_ops; /* usb_gadget_ops */
3162 dev->gadget.ep0 = &dev->ep[0].ep; /* gadget ep0 */
3163 INIT_LIST_HEAD(&dev->gadget.ep_list); /* ep_list */
3164 dev->gadget.speed = USB_SPEED_UNKNOWN; /* speed */
3165 dev->gadget.max_speed = USB_SPEED_HIGH; /* support dual speed */
3166
3167 /* the "gadget" abstracts/virtualizes the controller */
3168 dev_set_name(&dev->gadget.dev, "gadget");
3169 dev->gadget.dev.parent = &pdev->dev;
3170 dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
3171 dev->gadget.dev.release = gadget_release;
3172 dev->gadget.name = driver_name; /* gadget name */
3173
3174 /* controller endpoints reinit */
3175 eps_reinit(dev);
3176
3177 /* reset ep0 dQH and endptctrl */
3178 ep0_reset(dev);
3179
3180 /* create dTD dma_pool resource */
3181 dev->dtd_pool = dma_pool_create("langwell_dtd",
3182 &dev->pdev->dev,
3183 sizeof(struct langwell_dtd),
3184 DTD_ALIGNMENT,
3185 DMA_BOUNDARY);
3186
3187 if (!dev->dtd_pool) {
3188 retval = -ENOMEM;
3189 goto error;
3190 }
3191
3192 /* done */
3193 dev_info(&dev->pdev->dev, "%s\n", driver_desc);
3194 dev_info(&dev->pdev->dev, "irq %d, pci mem %p\n", pdev->irq, base);
3195 dev_info(&dev->pdev->dev, "Driver version: " DRIVER_VERSION "\n");
3196 dev_info(&dev->pdev->dev, "Support (max) %d endpoints\n", dev->ep_max);
3197 dev_info(&dev->pdev->dev, "Device interface version: 0x%04x\n",
3198 dev->dciversion);
3199 dev_info(&dev->pdev->dev, "Controller mode: %s\n",
3200 dev->devcap ? "Device" : "Host");
3201 dev_info(&dev->pdev->dev, "Support USB LPM: %s\n",
3202 dev->lpm ? "Yes" : "No");
3203
3204 dev_vdbg(&dev->pdev->dev,
3205 "After langwell_udc_probe(), print all registers:\n");
3206 print_all_registers(dev);
3207
3208 retval = device_register(&dev->gadget.dev);
3209 if (retval)
3210 goto error;
3211
3212 retval = usb_add_gadget_udc(&pdev->dev, &dev->gadget);
3213 if (retval)
3214 goto error;
3215
3216 retval = device_create_file(&pdev->dev, &dev_attr_langwell_udc);
3217 if (retval)
3218 goto error;
3219
3220 retval = device_create_file(&pdev->dev, &dev_attr_remote_wakeup);
3221 if (retval)
3222 goto error_attr1;
3223
3224 dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
3225 return 0;
3226
3227error_attr1:
3228 device_remove_file(&pdev->dev, &dev_attr_langwell_udc);
3229error:
3230 if (dev) {
3231 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
3232 langwell_udc_remove(pdev);
3233 }
3234
3235 return retval;
3236}
3237
3238
3239/* device controller suspend */
3240static int langwell_udc_suspend(struct pci_dev *pdev, pm_message_t state)
3241{
3242 struct langwell_udc *dev = pci_get_drvdata(pdev);
3243
3244 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
3245
3246 usb_del_gadget_udc(&dev->gadget);
3247 /* disable interrupt and set controller to stop state */
3248 langwell_udc_stop(dev);
3249
3250 /* disable IRQ handler */
3251 if (dev->got_irq)
3252 free_irq(pdev->irq, dev);
3253 dev->got_irq = 0;
3254
3255 /* save PCI state */
3256 pci_save_state(pdev);
3257
3258 spin_lock_irq(&dev->lock);
3259 /* stop all usb activities */
3260 stop_activity(dev);
3261 spin_unlock_irq(&dev->lock);
3262
3263 /* free dTD dma_pool and dQH */
3264 if (dev->dtd_pool)
3265 dma_pool_destroy(dev->dtd_pool);
3266
3267 if (dev->ep_dqh)
3268 dma_free_coherent(&pdev->dev, dev->ep_dqh_size,
3269 dev->ep_dqh, dev->ep_dqh_dma);
3270
3271 /* release SRAM caching */
3272 if (dev->has_sram && dev->got_sram)
3273 sram_deinit(dev);
3274
3275 /* set device power state */
3276 pci_set_power_state(pdev, PCI_D3hot);
3277
3278 /* enter PHY low power suspend */
3279 if (dev->pdev->device != 0x0829)
3280 langwell_phy_low_power(dev, 1);
3281
3282 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
3283 return 0;
3284}
3285
3286
3287/* device controller resume */
3288static int langwell_udc_resume(struct pci_dev *pdev)
3289{
3290 struct langwell_udc *dev = pci_get_drvdata(pdev);
3291 size_t size;
3292
3293 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
3294
3295 /* exit PHY low power suspend */
3296 if (dev->pdev->device != 0x0829)
3297 langwell_phy_low_power(dev, 0);
3298
3299 /* set device D0 power state */
3300 pci_set_power_state(pdev, PCI_D0);
3301
3302 /* enable SRAM caching if detected */
3303 if (dev->has_sram && !dev->got_sram)
3304 sram_init(dev);
3305
3306 /* allocate device dQH memory */
3307 size = dev->ep_max * sizeof(struct langwell_dqh);
3308 dev_vdbg(&dev->pdev->dev, "orig size = %zd\n", size);
3309 if (size < DQH_ALIGNMENT)
3310 size = DQH_ALIGNMENT;
3311 else if ((size % DQH_ALIGNMENT) != 0) {
3312 size += DQH_ALIGNMENT + 1;
3313 size &= ~(DQH_ALIGNMENT - 1);
3314 }
3315 dev->ep_dqh = dma_alloc_coherent(&pdev->dev, size,
3316 &dev->ep_dqh_dma, GFP_KERNEL);
3317 if (!dev->ep_dqh) {
3318 dev_err(&dev->pdev->dev, "allocate dQH memory failed\n");
3319 return -ENOMEM;
3320 }
3321 dev->ep_dqh_size = size;
3322 dev_vdbg(&dev->pdev->dev, "ep_dqh_size = %zd\n", dev->ep_dqh_size);
3323
3324 /* create dTD dma_pool resource */
3325 dev->dtd_pool = dma_pool_create("langwell_dtd",
3326 &dev->pdev->dev,
3327 sizeof(struct langwell_dtd),
3328 DTD_ALIGNMENT,
3329 DMA_BOUNDARY);
3330
3331 if (!dev->dtd_pool)
3332 return -ENOMEM;
3333
3334 /* restore PCI state */
3335 pci_restore_state(pdev);
3336
3337 /* enable IRQ handler */
3338 if (request_irq(pdev->irq, langwell_irq, IRQF_SHARED,
3339 driver_name, dev) != 0) {
3340 dev_err(&dev->pdev->dev, "request interrupt %d failed\n",
3341 pdev->irq);
3342 return -EBUSY;
3343 }
3344 dev->got_irq = 1;
3345
3346 /* reset and start controller to run state */
3347 if (dev->stopped) {
3348 /* reset device controller */
3349 langwell_udc_reset(dev);
3350
3351 /* reset ep0 dQH and endptctrl */
3352 ep0_reset(dev);
3353
3354 /* start device if gadget is loaded */
3355 if (dev->driver)
3356 langwell_udc_start(dev);
3357 }
3358
3359 /* reset USB status */
3360 dev->usb_state = USB_STATE_ATTACHED;
3361 dev->ep0_state = WAIT_FOR_SETUP;
3362 dev->ep0_dir = USB_DIR_OUT;
3363
3364 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
3365 return 0;
3366}
3367
3368
3369/* pci driver shutdown */
3370static void langwell_udc_shutdown(struct pci_dev *pdev)
3371{
3372 struct langwell_udc *dev = pci_get_drvdata(pdev);
3373 u32 usbmode;
3374
3375 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
3376
3377 /* reset controller mode to IDLE */
3378 usbmode = readl(&dev->op_regs->usbmode);
3379 dev_dbg(&dev->pdev->dev, "usbmode = 0x%08x\n", usbmode);
3380 usbmode &= (~3 | MODE_IDLE);
3381 writel(usbmode, &dev->op_regs->usbmode);
3382
3383 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
3384}
3385
3386/*-------------------------------------------------------------------------*/
3387
3388static const struct pci_device_id pci_ids[] = { {
3389 .class = ((PCI_CLASS_SERIAL_USB << 8) | 0xfe),
3390 .class_mask = ~0,
3391 .vendor = 0x8086,
3392 .device = 0x0811,
3393 .subvendor = PCI_ANY_ID,
3394 .subdevice = PCI_ANY_ID,
3395}, { /* end: all zeroes */ }
3396};
3397
3398MODULE_DEVICE_TABLE(pci, pci_ids);
3399
3400
3401static struct pci_driver langwell_pci_driver = {
3402 .name = (char *) driver_name,
3403 .id_table = pci_ids,
3404
3405 .probe = langwell_udc_probe,
3406 .remove = langwell_udc_remove,
3407
3408 /* device controller suspend/resume */
3409 .suspend = langwell_udc_suspend,
3410 .resume = langwell_udc_resume,
3411
3412 .shutdown = langwell_udc_shutdown,
3413};
3414
3415
3416static int __init init(void)
3417{
3418 return pci_register_driver(&langwell_pci_driver);
3419}
3420module_init(init);
3421
3422
3423static void __exit cleanup(void)
3424{
3425 pci_unregister_driver(&langwell_pci_driver);
3426}
3427module_exit(cleanup);
3428
3429
3430MODULE_DESCRIPTION(DRIVER_DESC);
3431MODULE_AUTHOR("Xiaochen Shen <xiaochen.shen@intel.com>");
3432MODULE_VERSION(DRIVER_VERSION);
3433MODULE_LICENSE("GPL");
3434
diff --git a/drivers/usb/gadget/langwell_udc.h b/drivers/usb/gadget/langwell_udc.h
deleted file mode 100644
index 8c8087abb481..000000000000
--- a/drivers/usb/gadget/langwell_udc.h
+++ /dev/null
@@ -1,224 +0,0 @@
1/*
2 * Intel Langwell USB Device Controller driver
3 * Copyright (C) 2008-2009, Intel Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 */
9
10#include <linux/usb/langwell_udc.h>
11
12/*-------------------------------------------------------------------------*/
13
14/* driver data structures and utilities */
15
16/*
17 * dTD: Device Endpoint Transfer Descriptor
18 * describe to the device controller the location and quantity of
19 * data to be send/received for given transfer
20 */
21struct langwell_dtd {
22 u32 dtd_next;
23/* bits 31:5, next transfer element pointer */
24#define DTD_NEXT(d) (((d)>>5)&0x7ffffff)
25#define DTD_NEXT_MASK (0x7ffffff << 5)
26/* terminate */
27#define DTD_TERM BIT(0)
28 /* bits 7:0, execution back states */
29 u32 dtd_status:8;
30#define DTD_STATUS(d) (((d)>>0)&0xff)
31#define DTD_STS_ACTIVE BIT(7) /* active */
32#define DTD_STS_HALTED BIT(6) /* halted */
33#define DTD_STS_DBE BIT(5) /* data buffer error */
34#define DTD_STS_TRE BIT(3) /* transaction error */
35 /* bits 9:8 */
36 u32 dtd_res0:2;
37 /* bits 11:10, multipier override */
38 u32 dtd_multo:2;
39#define DTD_MULTO (BIT(11) | BIT(10))
40 /* bits 14:12 */
41 u32 dtd_res1:3;
42 /* bit 15, interrupt on complete */
43 u32 dtd_ioc:1;
44#define DTD_IOC BIT(15)
45 /* bits 30:16, total bytes */
46 u32 dtd_total:15;
47#define DTD_TOTAL(d) (((d)>>16)&0x7fff)
48#define DTD_MAX_TRANSFER_LENGTH 0x4000
49 /* bit 31 */
50 u32 dtd_res2:1;
51 /* dTD buffer pointer page 0 to 4 */
52 u32 dtd_buf[5];
53#define DTD_OFFSET_MASK 0xfff
54/* bits 31:12, buffer pointer */
55#define DTD_BUFFER(d) (((d)>>12)&0x3ff)
56/* bits 11:0, current offset */
57#define DTD_C_OFFSET(d) (((d)>>0)&0xfff)
58/* bits 10:0, frame number */
59#define DTD_FRAME(d) (((d)>>0)&0x7ff)
60
61 /* driver-private parts */
62
63 /* dtd dma address */
64 dma_addr_t dtd_dma;
65 /* next dtd virtual address */
66 struct langwell_dtd *next_dtd_virt;
67};
68
69
70/*
71 * dQH: Device Endpoint Queue Head
72 * describe where all transfers are managed
73 * 48-byte data structure, aligned on 64-byte boundary
74 *
75 * These are associated with dTD structure
76 */
77struct langwell_dqh {
78 /* endpoint capabilities and characteristics */
79 u32 dqh_res0:15; /* bits 14:0 */
80 u32 dqh_ios:1; /* bit 15, interrupt on setup */
81#define DQH_IOS BIT(15)
82 u32 dqh_mpl:11; /* bits 26:16, maximum packet length */
83#define DQH_MPL (0x7ff << 16)
84 u32 dqh_res1:2; /* bits 28:27 */
85 u32 dqh_zlt:1; /* bit 29, zero length termination */
86#define DQH_ZLT BIT(29)
87 u32 dqh_mult:2; /* bits 31:30 */
88#define DQH_MULT (BIT(30) | BIT(31))
89
90 /* current dTD pointer */
91 u32 dqh_current; /* locate the transfer in progress */
92#define DQH_C_DTD(e) \
93 (((e)>>5)&0x7ffffff) /* bits 31:5, current dTD pointer */
94
95 /* transfer overlay, hardware parts of a struct langwell_dtd */
96 u32 dtd_next;
97 u32 dtd_status:8; /* bits 7:0, execution back states */
98 u32 dtd_res0:2; /* bits 9:8 */
99 u32 dtd_multo:2; /* bits 11:10, multipier override */
100 u32 dtd_res1:3; /* bits 14:12 */
101 u32 dtd_ioc:1; /* bit 15, interrupt on complete */
102 u32 dtd_total:15; /* bits 30:16, total bytes */
103 u32 dtd_res2:1; /* bit 31 */
104 u32 dtd_buf[5]; /* dTD buffer pointer page 0 to 4 */
105
106 u32 dqh_res2;
107 struct usb_ctrlrequest dqh_setup; /* setup packet buffer */
108} __attribute__ ((aligned(64)));
109
110
111/* endpoint data structure */
112struct langwell_ep {
113 struct usb_ep ep;
114 dma_addr_t dma;
115 struct langwell_udc *dev;
116 unsigned long irqs;
117 struct list_head queue;
118 struct langwell_dqh *dqh;
119 const struct usb_endpoint_descriptor *desc;
120 char name[14];
121 unsigned stopped:1,
122 ep_type:2,
123 ep_num:8;
124};
125
126
127/* request data structure */
128struct langwell_request {
129 struct usb_request req;
130 struct langwell_dtd *dtd, *head, *tail;
131 struct langwell_ep *ep;
132 dma_addr_t dtd_dma;
133 struct list_head queue;
134 unsigned dtd_count;
135 unsigned mapped:1;
136};
137
138
139/* ep0 transfer state */
140enum ep0_state {
141 WAIT_FOR_SETUP,
142 DATA_STATE_XMIT,
143 DATA_STATE_NEED_ZLP,
144 WAIT_FOR_OUT_STATUS,
145 DATA_STATE_RECV,
146};
147
148
149/* device suspend state */
150enum lpm_state {
151 LPM_L0, /* on */
152 LPM_L1, /* LPM L1 sleep */
153 LPM_L2, /* suspend */
154 LPM_L3, /* off */
155};
156
157
158/* device data structure */
159struct langwell_udc {
160 /* each pci device provides one gadget, several endpoints */
161 struct usb_gadget gadget;
162 spinlock_t lock; /* device lock */
163 struct langwell_ep *ep;
164 struct usb_gadget_driver *driver;
165 struct usb_phy *transceiver;
166 u8 dev_addr;
167 u32 usb_state;
168 u32 resume_state;
169 u32 bus_reset;
170 enum lpm_state lpm_state;
171 enum ep0_state ep0_state;
172 u32 ep0_dir;
173 u16 dciversion;
174 unsigned ep_max;
175 unsigned devcap:1,
176 enabled:1,
177 region:1,
178 got_irq:1,
179 powered:1,
180 remote_wakeup:1,
181 rate:1,
182 is_reset:1,
183 softconnected:1,
184 vbus_active:1,
185 suspended:1,
186 stopped:1,
187 lpm:1, /* LPM capability */
188 has_sram:1, /* SRAM caching */
189 got_sram:1;
190
191 /* pci state used to access those endpoints */
192 struct pci_dev *pdev;
193
194 /* Langwell otg transceiver */
195 struct langwell_otg *lotg;
196
197 /* control registers */
198 struct langwell_cap_regs __iomem *cap_regs;
199 struct langwell_op_regs __iomem *op_regs;
200
201 struct usb_ctrlrequest local_setup_buff;
202 struct langwell_dqh *ep_dqh;
203 size_t ep_dqh_size;
204 dma_addr_t ep_dqh_dma;
205
206 /* ep0 status request */
207 struct langwell_request *status_req;
208
209 /* dma pool */
210 struct dma_pool *dtd_pool;
211
212 /* make sure release() is done */
213 struct completion *done;
214
215 /* for private SRAM caching */
216 unsigned int sram_addr;
217 unsigned int sram_size;
218
219 /* device status data for get_status request */
220 u16 dev_status;
221};
222
223#define gadget_to_langwell(g) container_of((g), struct langwell_udc, gadget)
224
diff --git a/drivers/usb/gadget/lpc32xx_udc.c b/drivers/usb/gadget/lpc32xx_udc.c
new file mode 100644
index 000000000000..262acfd53e32
--- /dev/null
+++ b/drivers/usb/gadget/lpc32xx_udc.c
@@ -0,0 +1,3538 @@
1/*
2 * USB Gadget driver for LPC32xx
3 *
4 * Authors:
5 * Kevin Wells <kevin.wells@nxp.com>
6 * Mike James
7 * Roland Stigge <stigge@antcom.de>
8 *
9 * Copyright (C) 2006 Philips Semiconductors
10 * Copyright (C) 2009 NXP Semiconductors
11 * Copyright (C) 2012 Roland Stigge
12 *
13 * Note: This driver is based on original work done by Mike James for
14 * the LPC3180.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 2 of the License, or
19 * (at your option) any later version.
20 *
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 *
26 * You should have received a copy of the GNU General Public License
27 * along with this program; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 */
30
31#include <linux/kernel.h>
32#include <linux/module.h>
33#include <linux/platform_device.h>
34#include <linux/delay.h>
35#include <linux/ioport.h>
36#include <linux/slab.h>
37#include <linux/errno.h>
38#include <linux/init.h>
39#include <linux/list.h>
40#include <linux/interrupt.h>
41#include <linux/proc_fs.h>
42#include <linux/clk.h>
43#include <linux/usb/ch9.h>
44#include <linux/usb/gadget.h>
45#include <linux/i2c.h>
46#include <linux/kthread.h>
47#include <linux/freezer.h>
48#include <linux/dma-mapping.h>
49#include <linux/dmapool.h>
50#include <linux/workqueue.h>
51#include <linux/of.h>
52#include <linux/usb/isp1301.h>
53
54#include <asm/byteorder.h>
55#include <mach/hardware.h>
56#include <linux/io.h>
57#include <asm/irq.h>
58#include <asm/system.h>
59
60#include <mach/platform.h>
61#include <mach/irqs.h>
62#include <mach/board.h>
63#ifdef CONFIG_USB_GADGET_DEBUG_FILES
64#include <linux/seq_file.h>
65#endif
66
67/*
68 * USB device configuration structure
69 */
70typedef void (*usc_chg_event)(int);
71struct lpc32xx_usbd_cfg {
72 int vbus_drv_pol; /* 0=active low drive for VBUS via ISP1301 */
73 usc_chg_event conn_chgb; /* Connection change event (optional) */
74 usc_chg_event susp_chgb; /* Suspend/resume event (optional) */
75 usc_chg_event rmwk_chgb; /* Enable/disable remote wakeup */
76};
77
78/*
79 * controller driver data structures
80 */
81
82/* 16 endpoints (not to be confused with 32 hardware endpoints) */
83#define NUM_ENDPOINTS 16
84
85/*
86 * IRQ indices make reading the code a little easier
87 */
88#define IRQ_USB_LP 0
89#define IRQ_USB_HP 1
90#define IRQ_USB_DEVDMA 2
91#define IRQ_USB_ATX 3
92
93#define EP_OUT 0 /* RX (from host) */
94#define EP_IN 1 /* TX (to host) */
95
96/* Returns the interrupt mask for the selected hardware endpoint */
97#define EP_MASK_SEL(ep, dir) (1 << (((ep) * 2) + dir))
98
99#define EP_INT_TYPE 0
100#define EP_ISO_TYPE 1
101#define EP_BLK_TYPE 2
102#define EP_CTL_TYPE 3
103
104/* EP0 states */
105#define WAIT_FOR_SETUP 0 /* Wait for setup packet */
106#define DATA_IN 1 /* Expect dev->host transfer */
107#define DATA_OUT 2 /* Expect host->dev transfer */
108
109/* DD (DMA Descriptor) structure, requires word alignment, this is already
110 * defined in the LPC32XX USB device header file, but this version is slightly
111 * modified to tag some work data with each DMA descriptor. */
112struct lpc32xx_usbd_dd_gad {
113 u32 dd_next_phy;
114 u32 dd_setup;
115 u32 dd_buffer_addr;
116 u32 dd_status;
117 u32 dd_iso_ps_mem_addr;
118 u32 this_dma;
119 u32 iso_status[6]; /* 5 spare */
120 u32 dd_next_v;
121};
122
123/*
124 * Logical endpoint structure
125 */
126struct lpc32xx_ep {
127 struct usb_ep ep;
128 struct list_head queue;
129 struct lpc32xx_udc *udc;
130
131 u32 hwep_num_base; /* Physical hardware EP */
132 u32 hwep_num; /* Maps to hardware endpoint */
133 u32 maxpacket;
134 u32 lep;
135
136 bool is_in;
137 bool req_pending;
138 u32 eptype;
139
140 u32 totalints;
141
142 bool wedge;
143
144 const struct usb_endpoint_descriptor *desc;
145};
146
147/*
148 * Common UDC structure
149 */
150struct lpc32xx_udc {
151 struct usb_gadget gadget;
152 struct usb_gadget_driver *driver;
153 struct platform_device *pdev;
154 struct device *dev;
155 struct dentry *pde;
156 spinlock_t lock;
157 struct i2c_client *isp1301_i2c_client;
158
159 /* Board and device specific */
160 struct lpc32xx_usbd_cfg *board;
161 u32 io_p_start;
162 u32 io_p_size;
163 void __iomem *udp_baseaddr;
164 int udp_irq[4];
165 struct clk *usb_pll_clk;
166 struct clk *usb_slv_clk;
167
168 /* DMA support */
169 u32 *udca_v_base;
170 u32 udca_p_base;
171 struct dma_pool *dd_cache;
172
173 /* Common EP and control data */
174 u32 enabled_devints;
175 u32 enabled_hwepints;
176 u32 dev_status;
177 u32 realized_eps;
178
179 /* VBUS detection, pullup, and power flags */
180 u8 vbus;
181 u8 last_vbus;
182 int pullup;
183 int poweron;
184
185 /* Work queues related to I2C support */
186 struct work_struct pullup_job;
187 struct work_struct vbus_job;
188 struct work_struct power_job;
189
190 /* USB device peripheral - various */
191 struct lpc32xx_ep ep[NUM_ENDPOINTS];
192 bool enabled;
193 bool clocked;
194 bool suspended;
195 bool selfpowered;
196 int ep0state;
197 atomic_t enabled_ep_cnt;
198 wait_queue_head_t ep_disable_wait_queue;
199};
200
201/*
202 * Endpoint request
203 */
204struct lpc32xx_request {
205 struct usb_request req;
206 struct list_head queue;
207 struct lpc32xx_usbd_dd_gad *dd_desc_ptr;
208 bool mapped;
209 bool send_zlp;
210};
211
212static inline struct lpc32xx_udc *to_udc(struct usb_gadget *g)
213{
214 return container_of(g, struct lpc32xx_udc, gadget);
215}
216
217#define ep_dbg(epp, fmt, arg...) \
218 dev_dbg(epp->udc->dev, "%s: " fmt, __func__, ## arg)
219#define ep_err(epp, fmt, arg...) \
220 dev_err(epp->udc->dev, "%s: " fmt, __func__, ## arg)
221#define ep_info(epp, fmt, arg...) \
222 dev_info(epp->udc->dev, "%s: " fmt, __func__, ## arg)
223#define ep_warn(epp, fmt, arg...) \
224 dev_warn(epp->udc->dev, "%s:" fmt, __func__, ## arg)
225
226#define UDCA_BUFF_SIZE (128)
227
228/* TODO: When the clock framework is introduced in LPC32xx, IO_ADDRESS will
229 * be replaced with an inremap()ed pointer, see USB_OTG_CLK_CTRL()
230 * */
231#define USB_CTRL IO_ADDRESS(LPC32XX_CLK_PM_BASE + 0x64)
232#define USB_CLOCK_MASK (AHB_M_CLOCK_ON | OTG_CLOCK_ON | \
233 DEV_CLOCK_ON | I2C_CLOCK_ON)
234
235/* USB_CTRL bit defines */
236#define USB_SLAVE_HCLK_EN (1 << 24)
237#define USB_HOST_NEED_CLK_EN (1 << 21)
238#define USB_DEV_NEED_CLK_EN (1 << 22)
239
240#define USB_OTG_CLK_CTRL(udc) ((udc)->udp_baseaddr + 0xFF4)
241#define USB_OTG_CLK_STAT(udc) ((udc)->udp_baseaddr + 0xFF8)
242
243/* USB_OTG_CLK_CTRL bit defines */
244#define AHB_M_CLOCK_ON (1 << 4)
245#define OTG_CLOCK_ON (1 << 3)
246#define I2C_CLOCK_ON (1 << 2)
247#define DEV_CLOCK_ON (1 << 1)
248#define HOST_CLOCK_ON (1 << 0)
249
250#define USB_OTG_STAT_CONTROL(udc) (udc->udp_baseaddr + 0x110)
251
252/* USB_OTG_STAT_CONTROL bit defines */
253#define TRANSPARENT_I2C_EN (1 << 7)
254#define HOST_EN (1 << 0)
255
256/**********************************************************************
257 * USB device controller register offsets
258 **********************************************************************/
259
260#define USBD_DEVINTST(x) ((x) + 0x200)
261#define USBD_DEVINTEN(x) ((x) + 0x204)
262#define USBD_DEVINTCLR(x) ((x) + 0x208)
263#define USBD_DEVINTSET(x) ((x) + 0x20C)
264#define USBD_CMDCODE(x) ((x) + 0x210)
265#define USBD_CMDDATA(x) ((x) + 0x214)
266#define USBD_RXDATA(x) ((x) + 0x218)
267#define USBD_TXDATA(x) ((x) + 0x21C)
268#define USBD_RXPLEN(x) ((x) + 0x220)
269#define USBD_TXPLEN(x) ((x) + 0x224)
270#define USBD_CTRL(x) ((x) + 0x228)
271#define USBD_DEVINTPRI(x) ((x) + 0x22C)
272#define USBD_EPINTST(x) ((x) + 0x230)
273#define USBD_EPINTEN(x) ((x) + 0x234)
274#define USBD_EPINTCLR(x) ((x) + 0x238)
275#define USBD_EPINTSET(x) ((x) + 0x23C)
276#define USBD_EPINTPRI(x) ((x) + 0x240)
277#define USBD_REEP(x) ((x) + 0x244)
278#define USBD_EPIND(x) ((x) + 0x248)
279#define USBD_EPMAXPSIZE(x) ((x) + 0x24C)
280/* DMA support registers only below */
281/* Set, clear, or get enabled state of the DMA request status. If
282 * enabled, an IN or OUT token will start a DMA transfer for the EP */
283#define USBD_DMARST(x) ((x) + 0x250)
284#define USBD_DMARCLR(x) ((x) + 0x254)
285#define USBD_DMARSET(x) ((x) + 0x258)
286/* DMA UDCA head pointer */
287#define USBD_UDCAH(x) ((x) + 0x280)
288/* EP DMA status, enable, and disable. This is used to specifically
289 * enabled or disable DMA for a specific EP */
290#define USBD_EPDMAST(x) ((x) + 0x284)
291#define USBD_EPDMAEN(x) ((x) + 0x288)
292#define USBD_EPDMADIS(x) ((x) + 0x28C)
293/* DMA master interrupts enable and pending interrupts */
294#define USBD_DMAINTST(x) ((x) + 0x290)
295#define USBD_DMAINTEN(x) ((x) + 0x294)
296/* DMA end of transfer interrupt enable, disable, status */
297#define USBD_EOTINTST(x) ((x) + 0x2A0)
298#define USBD_EOTINTCLR(x) ((x) + 0x2A4)
299#define USBD_EOTINTSET(x) ((x) + 0x2A8)
300/* New DD request interrupt enable, disable, status */
301#define USBD_NDDRTINTST(x) ((x) + 0x2AC)
302#define USBD_NDDRTINTCLR(x) ((x) + 0x2B0)
303#define USBD_NDDRTINTSET(x) ((x) + 0x2B4)
304/* DMA error interrupt enable, disable, status */
305#define USBD_SYSERRTINTST(x) ((x) + 0x2B8)
306#define USBD_SYSERRTINTCLR(x) ((x) + 0x2BC)
307#define USBD_SYSERRTINTSET(x) ((x) + 0x2C0)
308
309/**********************************************************************
310 * USBD_DEVINTST/USBD_DEVINTEN/USBD_DEVINTCLR/USBD_DEVINTSET/
311 * USBD_DEVINTPRI register definitions
312 **********************************************************************/
313#define USBD_ERR_INT (1 << 9)
314#define USBD_EP_RLZED (1 << 8)
315#define USBD_TXENDPKT (1 << 7)
316#define USBD_RXENDPKT (1 << 6)
317#define USBD_CDFULL (1 << 5)
318#define USBD_CCEMPTY (1 << 4)
319#define USBD_DEV_STAT (1 << 3)
320#define USBD_EP_SLOW (1 << 2)
321#define USBD_EP_FAST (1 << 1)
322#define USBD_FRAME (1 << 0)
323
324/**********************************************************************
325 * USBD_EPINTST/USBD_EPINTEN/USBD_EPINTCLR/USBD_EPINTSET/
326 * USBD_EPINTPRI register definitions
327 **********************************************************************/
328/* End point selection macro (RX) */
329#define USBD_RX_EP_SEL(e) (1 << ((e) << 1))
330
331/* End point selection macro (TX) */
332#define USBD_TX_EP_SEL(e) (1 << (((e) << 1) + 1))
333
334/**********************************************************************
335 * USBD_REEP/USBD_DMARST/USBD_DMARCLR/USBD_DMARSET/USBD_EPDMAST/
336 * USBD_EPDMAEN/USBD_EPDMADIS/
337 * USBD_NDDRTINTST/USBD_NDDRTINTCLR/USBD_NDDRTINTSET/
338 * USBD_EOTINTST/USBD_EOTINTCLR/USBD_EOTINTSET/
339 * USBD_SYSERRTINTST/USBD_SYSERRTINTCLR/USBD_SYSERRTINTSET
340 * register definitions
341 **********************************************************************/
342/* Endpoint selection macro */
343#define USBD_EP_SEL(e) (1 << (e))
344
345/**********************************************************************
346 * SBD_DMAINTST/USBD_DMAINTEN
347 **********************************************************************/
348#define USBD_SYS_ERR_INT (1 << 2)
349#define USBD_NEW_DD_INT (1 << 1)
350#define USBD_EOT_INT (1 << 0)
351
352/**********************************************************************
353 * USBD_RXPLEN register definitions
354 **********************************************************************/
355#define USBD_PKT_RDY (1 << 11)
356#define USBD_DV (1 << 10)
357#define USBD_PK_LEN_MASK 0x3FF
358
359/**********************************************************************
360 * USBD_CTRL register definitions
361 **********************************************************************/
362#define USBD_LOG_ENDPOINT(e) ((e) << 2)
363#define USBD_WR_EN (1 << 1)
364#define USBD_RD_EN (1 << 0)
365
366/**********************************************************************
367 * USBD_CMDCODE register definitions
368 **********************************************************************/
369#define USBD_CMD_CODE(c) ((c) << 16)
370#define USBD_CMD_PHASE(p) ((p) << 8)
371
372/**********************************************************************
373 * USBD_DMARST/USBD_DMARCLR/USBD_DMARSET register definitions
374 **********************************************************************/
375#define USBD_DMAEP(e) (1 << (e))
376
377/* DD (DMA Descriptor) structure, requires word alignment */
378struct lpc32xx_usbd_dd {
379 u32 *dd_next;
380 u32 dd_setup;
381 u32 dd_buffer_addr;
382 u32 dd_status;
383 u32 dd_iso_ps_mem_addr;
384};
385
386/* dd_setup bit defines */
387#define DD_SETUP_ATLE_DMA_MODE 0x01
388#define DD_SETUP_NEXT_DD_VALID 0x04
389#define DD_SETUP_ISO_EP 0x10
390#define DD_SETUP_PACKETLEN(n) (((n) & 0x7FF) << 5)
391#define DD_SETUP_DMALENBYTES(n) (((n) & 0xFFFF) << 16)
392
393/* dd_status bit defines */
394#define DD_STATUS_DD_RETIRED 0x01
395#define DD_STATUS_STS_MASK 0x1E
396#define DD_STATUS_STS_NS 0x00 /* Not serviced */
397#define DD_STATUS_STS_BS 0x02 /* Being serviced */
398#define DD_STATUS_STS_NC 0x04 /* Normal completion */
399#define DD_STATUS_STS_DUR 0x06 /* Data underrun (short packet) */
400#define DD_STATUS_STS_DOR 0x08 /* Data overrun */
401#define DD_STATUS_STS_SE 0x12 /* System error */
402#define DD_STATUS_PKT_VAL 0x20 /* Packet valid */
403#define DD_STATUS_LSB_EX 0x40 /* LS byte extracted (ATLE) */
404#define DD_STATUS_MSB_EX 0x80 /* MS byte extracted (ATLE) */
405#define DD_STATUS_MLEN(n) (((n) >> 8) & 0x3F)
406#define DD_STATUS_CURDMACNT(n) (((n) >> 16) & 0xFFFF)
407
408/*
409 *
410 * Protocol engine bits below
411 *
412 */
413/* Device Interrupt Bit Definitions */
414#define FRAME_INT 0x00000001
415#define EP_FAST_INT 0x00000002
416#define EP_SLOW_INT 0x00000004
417#define DEV_STAT_INT 0x00000008
418#define CCEMTY_INT 0x00000010
419#define CDFULL_INT 0x00000020
420#define RxENDPKT_INT 0x00000040
421#define TxENDPKT_INT 0x00000080
422#define EP_RLZED_INT 0x00000100
423#define ERR_INT 0x00000200
424
425/* Rx & Tx Packet Length Definitions */
426#define PKT_LNGTH_MASK 0x000003FF
427#define PKT_DV 0x00000400
428#define PKT_RDY 0x00000800
429
430/* USB Control Definitions */
431#define CTRL_RD_EN 0x00000001
432#define CTRL_WR_EN 0x00000002
433
434/* Command Codes */
435#define CMD_SET_ADDR 0x00D00500
436#define CMD_CFG_DEV 0x00D80500
437#define CMD_SET_MODE 0x00F30500
438#define CMD_RD_FRAME 0x00F50500
439#define DAT_RD_FRAME 0x00F50200
440#define CMD_RD_TEST 0x00FD0500
441#define DAT_RD_TEST 0x00FD0200
442#define CMD_SET_DEV_STAT 0x00FE0500
443#define CMD_GET_DEV_STAT 0x00FE0500
444#define DAT_GET_DEV_STAT 0x00FE0200
445#define CMD_GET_ERR_CODE 0x00FF0500
446#define DAT_GET_ERR_CODE 0x00FF0200
447#define CMD_RD_ERR_STAT 0x00FB0500
448#define DAT_RD_ERR_STAT 0x00FB0200
449#define DAT_WR_BYTE(x) (0x00000100 | ((x) << 16))
450#define CMD_SEL_EP(x) (0x00000500 | ((x) << 16))
451#define DAT_SEL_EP(x) (0x00000200 | ((x) << 16))
452#define CMD_SEL_EP_CLRI(x) (0x00400500 | ((x) << 16))
453#define DAT_SEL_EP_CLRI(x) (0x00400200 | ((x) << 16))
454#define CMD_SET_EP_STAT(x) (0x00400500 | ((x) << 16))
455#define CMD_CLR_BUF 0x00F20500
456#define DAT_CLR_BUF 0x00F20200
457#define CMD_VALID_BUF 0x00FA0500
458
459/* Device Address Register Definitions */
460#define DEV_ADDR_MASK 0x7F
461#define DEV_EN 0x80
462
463/* Device Configure Register Definitions */
464#define CONF_DVICE 0x01
465
466/* Device Mode Register Definitions */
467#define AP_CLK 0x01
468#define INAK_CI 0x02
469#define INAK_CO 0x04
470#define INAK_II 0x08
471#define INAK_IO 0x10
472#define INAK_BI 0x20
473#define INAK_BO 0x40
474
475/* Device Status Register Definitions */
476#define DEV_CON 0x01
477#define DEV_CON_CH 0x02
478#define DEV_SUS 0x04
479#define DEV_SUS_CH 0x08
480#define DEV_RST 0x10
481
482/* Error Code Register Definitions */
483#define ERR_EC_MASK 0x0F
484#define ERR_EA 0x10
485
486/* Error Status Register Definitions */
487#define ERR_PID 0x01
488#define ERR_UEPKT 0x02
489#define ERR_DCRC 0x04
490#define ERR_TIMOUT 0x08
491#define ERR_EOP 0x10
492#define ERR_B_OVRN 0x20
493#define ERR_BTSTF 0x40
494#define ERR_TGL 0x80
495
496/* Endpoint Select Register Definitions */
497#define EP_SEL_F 0x01
498#define EP_SEL_ST 0x02
499#define EP_SEL_STP 0x04
500#define EP_SEL_PO 0x08
501#define EP_SEL_EPN 0x10
502#define EP_SEL_B_1_FULL 0x20
503#define EP_SEL_B_2_FULL 0x40
504
505/* Endpoint Status Register Definitions */
506#define EP_STAT_ST 0x01
507#define EP_STAT_DA 0x20
508#define EP_STAT_RF_MO 0x40
509#define EP_STAT_CND_ST 0x80
510
511/* Clear Buffer Register Definitions */
512#define CLR_BUF_PO 0x01
513
514/* DMA Interrupt Bit Definitions */
515#define EOT_INT 0x01
516#define NDD_REQ_INT 0x02
517#define SYS_ERR_INT 0x04
518
519#define DRIVER_VERSION "1.03"
520static const char driver_name[] = "lpc32xx_udc";
521
522/*
523 *
524 * proc interface support
525 *
526 */
527#ifdef CONFIG_USB_GADGET_DEBUG_FILES
528static char *epnames[] = {"INT", "ISO", "BULK", "CTRL"};
529static const char debug_filename[] = "driver/udc";
530
531static void proc_ep_show(struct seq_file *s, struct lpc32xx_ep *ep)
532{
533 struct lpc32xx_request *req;
534
535 seq_printf(s, "\n");
536 seq_printf(s, "%12s, maxpacket %4d %3s",
537 ep->ep.name, ep->ep.maxpacket,
538 ep->is_in ? "in" : "out");
539 seq_printf(s, " type %4s", epnames[ep->eptype]);
540 seq_printf(s, " ints: %12d", ep->totalints);
541
542 if (list_empty(&ep->queue))
543 seq_printf(s, "\t(queue empty)\n");
544 else {
545 list_for_each_entry(req, &ep->queue, queue) {
546 u32 length = req->req.actual;
547
548 seq_printf(s, "\treq %p len %d/%d buf %p\n",
549 &req->req, length,
550 req->req.length, req->req.buf);
551 }
552 }
553}
554
555static int proc_udc_show(struct seq_file *s, void *unused)
556{
557 struct lpc32xx_udc *udc = s->private;
558 struct lpc32xx_ep *ep;
559 unsigned long flags;
560
561 seq_printf(s, "%s: version %s\n", driver_name, DRIVER_VERSION);
562
563 spin_lock_irqsave(&udc->lock, flags);
564
565 seq_printf(s, "vbus %s, pullup %s, %s powered%s, gadget %s\n\n",
566 udc->vbus ? "present" : "off",
567 udc->enabled ? (udc->vbus ? "active" : "enabled") :
568 "disabled",
569 udc->selfpowered ? "self" : "VBUS",
570 udc->suspended ? ", suspended" : "",
571 udc->driver ? udc->driver->driver.name : "(none)");
572
573 if (udc->enabled && udc->vbus) {
574 proc_ep_show(s, &udc->ep[0]);
575 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
576 if (ep->desc)
577 proc_ep_show(s, ep);
578 }
579 }
580
581 spin_unlock_irqrestore(&udc->lock, flags);
582
583 return 0;
584}
585
586static int proc_udc_open(struct inode *inode, struct file *file)
587{
588 return single_open(file, proc_udc_show, PDE(inode)->data);
589}
590
591static const struct file_operations proc_ops = {
592 .owner = THIS_MODULE,
593 .open = proc_udc_open,
594 .read = seq_read,
595 .llseek = seq_lseek,
596 .release = single_release,
597};
598
599static void create_debug_file(struct lpc32xx_udc *udc)
600{
601 udc->pde = debugfs_create_file(debug_filename, 0, NULL, udc, &proc_ops);
602}
603
604static void remove_debug_file(struct lpc32xx_udc *udc)
605{
606 if (udc->pde)
607 debugfs_remove(udc->pde);
608}
609
610#else
611static inline void create_debug_file(struct lpc32xx_udc *udc) {}
612static inline void remove_debug_file(struct lpc32xx_udc *udc) {}
613#endif
614
615/* Primary initialization sequence for the ISP1301 transceiver */
616static void isp1301_udc_configure(struct lpc32xx_udc *udc)
617{
618 /* LPC32XX only supports DAT_SE0 USB mode */
619 /* This sequence is important */
620
621 /* Disable transparent UART mode first */
622 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
623 (ISP1301_I2C_MODE_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR),
624 MC1_UART_EN);
625
626 /* Set full speed and SE0 mode */
627 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
628 (ISP1301_I2C_MODE_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR), ~0);
629 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
630 ISP1301_I2C_MODE_CONTROL_1, (MC1_SPEED_REG | MC1_DAT_SE0));
631
632 /*
633 * The PSW_OE enable bit state is reversed in the ISP1301 User's Guide
634 */
635 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
636 (ISP1301_I2C_MODE_CONTROL_2 | ISP1301_I2C_REG_CLEAR_ADDR), ~0);
637 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
638 ISP1301_I2C_MODE_CONTROL_2, (MC2_BI_DI | MC2_SPD_SUSP_CTRL));
639
640 /* Driver VBUS_DRV high or low depending on board setup */
641 if (udc->board->vbus_drv_pol != 0)
642 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
643 ISP1301_I2C_OTG_CONTROL_1, OTG1_VBUS_DRV);
644 else
645 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
646 ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR,
647 OTG1_VBUS_DRV);
648
649 /* Bi-directional mode with suspend control
650 * Enable both pulldowns for now - the pullup will be enable when VBUS
651 * is detected */
652 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
653 (ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR), ~0);
654 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
655 ISP1301_I2C_OTG_CONTROL_1,
656 (0 | OTG1_DM_PULLDOWN | OTG1_DP_PULLDOWN));
657
658 /* Discharge VBUS (just in case) */
659 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
660 ISP1301_I2C_OTG_CONTROL_1, OTG1_VBUS_DISCHRG);
661 msleep(1);
662 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
663 (ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR),
664 OTG1_VBUS_DISCHRG);
665
666 /* Clear and enable VBUS high edge interrupt */
667 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
668 ISP1301_I2C_INTERRUPT_LATCH | ISP1301_I2C_REG_CLEAR_ADDR, ~0);
669 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
670 ISP1301_I2C_INTERRUPT_FALLING | ISP1301_I2C_REG_CLEAR_ADDR, ~0);
671 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
672 ISP1301_I2C_INTERRUPT_FALLING, INT_VBUS_VLD);
673 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
674 ISP1301_I2C_INTERRUPT_RISING | ISP1301_I2C_REG_CLEAR_ADDR, ~0);
675 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
676 ISP1301_I2C_INTERRUPT_RISING, INT_VBUS_VLD);
677
678 /* Enable usb_need_clk clock after transceiver is initialized */
679 writel((readl(USB_CTRL) | (1 << 22)), USB_CTRL);
680
681 dev_info(udc->dev, "ISP1301 Vendor ID : 0x%04x\n",
682 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x00));
683 dev_info(udc->dev, "ISP1301 Product ID : 0x%04x\n",
684 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x02));
685 dev_info(udc->dev, "ISP1301 Version ID : 0x%04x\n",
686 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x14));
687}
688
689/* Enables or disables the USB device pullup via the ISP1301 transceiver */
690static void isp1301_pullup_set(struct lpc32xx_udc *udc)
691{
692 if (udc->pullup)
693 /* Enable pullup for bus signalling */
694 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
695 ISP1301_I2C_OTG_CONTROL_1, OTG1_DP_PULLUP);
696 else
697 /* Enable pullup for bus signalling */
698 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
699 ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR,
700 OTG1_DP_PULLUP);
701}
702
703static void pullup_work(struct work_struct *work)
704{
705 struct lpc32xx_udc *udc =
706 container_of(work, struct lpc32xx_udc, pullup_job);
707
708 isp1301_pullup_set(udc);
709}
710
711static void isp1301_pullup_enable(struct lpc32xx_udc *udc, int en_pullup,
712 int block)
713{
714 if (en_pullup == udc->pullup)
715 return;
716
717 udc->pullup = en_pullup;
718 if (block)
719 isp1301_pullup_set(udc);
720 else
721 /* defer slow i2c pull up setting */
722 schedule_work(&udc->pullup_job);
723}
724
725#ifdef CONFIG_PM
726/* Powers up or down the ISP1301 transceiver */
727static void isp1301_set_powerstate(struct lpc32xx_udc *udc, int enable)
728{
729 if (enable != 0)
730 /* Power up ISP1301 - this ISP1301 will automatically wakeup
731 when VBUS is detected */
732 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
733 ISP1301_I2C_MODE_CONTROL_2 | ISP1301_I2C_REG_CLEAR_ADDR,
734 MC2_GLOBAL_PWR_DN);
735 else
736 /* Power down ISP1301 */
737 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
738 ISP1301_I2C_MODE_CONTROL_2, MC2_GLOBAL_PWR_DN);
739}
740
741static void power_work(struct work_struct *work)
742{
743 struct lpc32xx_udc *udc =
744 container_of(work, struct lpc32xx_udc, power_job);
745
746 isp1301_set_powerstate(udc, udc->poweron);
747}
748#endif
749
750/*
751 *
752 * USB protocol engine command/data read/write helper functions
753 *
754 */
755/* Issues a single command to the USB device state machine */
756static void udc_protocol_cmd_w(struct lpc32xx_udc *udc, u32 cmd)
757{
758 u32 pass = 0;
759 int to;
760
761 /* EP may lock on CLRI if this read isn't done */
762 u32 tmp = readl(USBD_DEVINTST(udc->udp_baseaddr));
763 (void) tmp;
764
765 while (pass == 0) {
766 writel(USBD_CCEMPTY, USBD_DEVINTCLR(udc->udp_baseaddr));
767
768 /* Write command code */
769 writel(cmd, USBD_CMDCODE(udc->udp_baseaddr));
770 to = 10000;
771 while (((readl(USBD_DEVINTST(udc->udp_baseaddr)) &
772 USBD_CCEMPTY) == 0) && (to > 0)) {
773 to--;
774 }
775
776 if (to > 0)
777 pass = 1;
778
779 cpu_relax();
780 }
781}
782
783/* Issues 2 commands (or command and data) to the USB device state machine */
784static inline void udc_protocol_cmd_data_w(struct lpc32xx_udc *udc, u32 cmd,
785 u32 data)
786{
787 udc_protocol_cmd_w(udc, cmd);
788 udc_protocol_cmd_w(udc, data);
789}
790
791/* Issues a single command to the USB device state machine and reads
792 * response data */
793static u32 udc_protocol_cmd_r(struct lpc32xx_udc *udc, u32 cmd)
794{
795 u32 tmp;
796 int to = 1000;
797
798 /* Write a command and read data from the protocol engine */
799 writel((USBD_CDFULL | USBD_CCEMPTY),
800 USBD_DEVINTCLR(udc->udp_baseaddr));
801
802 /* Write command code */
803 udc_protocol_cmd_w(udc, cmd);
804
805 tmp = readl(USBD_DEVINTST(udc->udp_baseaddr));
806 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) & USBD_CDFULL))
807 && (to > 0))
808 to--;
809 if (!to)
810 dev_dbg(udc->dev,
811 "Protocol engine didn't receive response (CDFULL)\n");
812
813 return readl(USBD_CMDDATA(udc->udp_baseaddr));
814}
815
816/*
817 *
818 * USB device interrupt mask support functions
819 *
820 */
821/* Enable one or more USB device interrupts */
822static inline void uda_enable_devint(struct lpc32xx_udc *udc, u32 devmask)
823{
824 udc->enabled_devints |= devmask;
825 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr));
826}
827
828/* Disable one or more USB device interrupts */
829static inline void uda_disable_devint(struct lpc32xx_udc *udc, u32 mask)
830{
831 udc->enabled_devints &= ~mask;
832 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr));
833}
834
835/* Clear one or more USB device interrupts */
836static inline void uda_clear_devint(struct lpc32xx_udc *udc, u32 mask)
837{
838 writel(mask, USBD_DEVINTCLR(udc->udp_baseaddr));
839}
840
841/*
842 *
843 * Endpoint interrupt disable/enable functions
844 *
845 */
846/* Enable one or more USB endpoint interrupts */
847static void uda_enable_hwepint(struct lpc32xx_udc *udc, u32 hwep)
848{
849 udc->enabled_hwepints |= (1 << hwep);
850 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr));
851}
852
853/* Disable one or more USB endpoint interrupts */
854static void uda_disable_hwepint(struct lpc32xx_udc *udc, u32 hwep)
855{
856 udc->enabled_hwepints &= ~(1 << hwep);
857 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr));
858}
859
860/* Clear one or more USB endpoint interrupts */
861static inline void uda_clear_hwepint(struct lpc32xx_udc *udc, u32 hwep)
862{
863 writel((1 << hwep), USBD_EPINTCLR(udc->udp_baseaddr));
864}
865
866/* Enable DMA for the HW channel */
867static inline void udc_ep_dma_enable(struct lpc32xx_udc *udc, u32 hwep)
868{
869 writel((1 << hwep), USBD_EPDMAEN(udc->udp_baseaddr));
870}
871
872/* Disable DMA for the HW channel */
873static inline void udc_ep_dma_disable(struct lpc32xx_udc *udc, u32 hwep)
874{
875 writel((1 << hwep), USBD_EPDMADIS(udc->udp_baseaddr));
876}
877
878/*
879 *
880 * Endpoint realize/unrealize functions
881 *
882 */
883/* Before an endpoint can be used, it needs to be realized
884 * in the USB protocol engine - this realizes the endpoint.
885 * The interrupt (FIFO or DMA) is not enabled with this function */
886static void udc_realize_hwep(struct lpc32xx_udc *udc, u32 hwep,
887 u32 maxpacket)
888{
889 int to = 1000;
890
891 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr));
892 writel(hwep, USBD_EPIND(udc->udp_baseaddr));
893 udc->realized_eps |= (1 << hwep);
894 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr));
895 writel(maxpacket, USBD_EPMAXPSIZE(udc->udp_baseaddr));
896
897 /* Wait until endpoint is realized in hardware */
898 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) &
899 USBD_EP_RLZED)) && (to > 0))
900 to--;
901 if (!to)
902 dev_dbg(udc->dev, "EP not correctly realized in hardware\n");
903
904 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr));
905}
906
907/* Unrealize an EP */
908static void udc_unrealize_hwep(struct lpc32xx_udc *udc, u32 hwep)
909{
910 udc->realized_eps &= ~(1 << hwep);
911 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr));
912}
913
914/*
915 *
916 * Endpoint support functions
917 *
918 */
919/* Select and clear endpoint interrupt */
920static u32 udc_selep_clrint(struct lpc32xx_udc *udc, u32 hwep)
921{
922 udc_protocol_cmd_w(udc, CMD_SEL_EP_CLRI(hwep));
923 return udc_protocol_cmd_r(udc, DAT_SEL_EP_CLRI(hwep));
924}
925
926/* Disables the endpoint in the USB protocol engine */
927static void udc_disable_hwep(struct lpc32xx_udc *udc, u32 hwep)
928{
929 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
930 DAT_WR_BYTE(EP_STAT_DA));
931}
932
933/* Stalls the endpoint - endpoint will return STALL */
934static void udc_stall_hwep(struct lpc32xx_udc *udc, u32 hwep)
935{
936 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
937 DAT_WR_BYTE(EP_STAT_ST));
938}
939
940/* Clear stall or reset endpoint */
941static void udc_clrstall_hwep(struct lpc32xx_udc *udc, u32 hwep)
942{
943 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
944 DAT_WR_BYTE(0));
945}
946
947/* Select an endpoint for endpoint status, clear, validate */
948static void udc_select_hwep(struct lpc32xx_udc *udc, u32 hwep)
949{
950 udc_protocol_cmd_w(udc, CMD_SEL_EP(hwep));
951}
952
953/*
954 *
955 * Endpoint buffer management functions
956 *
957 */
958/* Clear the current endpoint's buffer */
959static void udc_clr_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep)
960{
961 udc_select_hwep(udc, hwep);
962 udc_protocol_cmd_w(udc, CMD_CLR_BUF);
963}
964
965/* Validate the current endpoint's buffer */
966static void udc_val_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep)
967{
968 udc_select_hwep(udc, hwep);
969 udc_protocol_cmd_w(udc, CMD_VALID_BUF);
970}
971
972static inline u32 udc_clearep_getsts(struct lpc32xx_udc *udc, u32 hwep)
973{
974 /* Clear EP interrupt */
975 uda_clear_hwepint(udc, hwep);
976 return udc_selep_clrint(udc, hwep);
977}
978
979/*
980 *
981 * USB EP DMA support
982 *
983 */
984/* Allocate a DMA Descriptor */
985static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc)
986{
987 dma_addr_t dma;
988 struct lpc32xx_usbd_dd_gad *dd;
989
990 dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc(
991 udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma);
992 if (dd)
993 dd->this_dma = dma;
994
995 return dd;
996}
997
998/* Free a DMA Descriptor */
999static void udc_dd_free(struct lpc32xx_udc *udc, struct lpc32xx_usbd_dd_gad *dd)
1000{
1001 dma_pool_free(udc->dd_cache, dd, dd->this_dma);
1002}
1003
1004/*
1005 *
1006 * USB setup and shutdown functions
1007 *
1008 */
1009/* Enables or disables most of the USB system clocks when low power mode is
1010 * needed. Clocks are typically started on a connection event, and disabled
1011 * when a cable is disconnected */
1012#define OTGOFF_CLK_MASK (AHB_M_CLOCK_ON | I2C_CLOCK_ON)
1013static void udc_clk_set(struct lpc32xx_udc *udc, int enable)
1014{
1015 int to = 1000;
1016
1017 if (enable != 0) {
1018 if (udc->clocked)
1019 return;
1020
1021 udc->clocked = 1;
1022
1023 /* 48MHz PLL up */
1024 clk_enable(udc->usb_pll_clk);
1025
1026 /* Enable the USB device clock */
1027 writel(readl(USB_CTRL) | USB_DEV_NEED_CLK_EN,
1028 USB_CTRL);
1029
1030 /* Set to enable all needed USB OTG clocks */
1031 writel(USB_CLOCK_MASK, USB_OTG_CLK_CTRL(udc));
1032
1033 while (((readl(USB_OTG_CLK_STAT(udc)) & USB_CLOCK_MASK) !=
1034 USB_CLOCK_MASK) && (to > 0))
1035 to--;
1036 if (!to)
1037 dev_dbg(udc->dev, "Cannot enable USB OTG clocking\n");
1038 } else {
1039 if (!udc->clocked)
1040 return;
1041
1042 udc->clocked = 0;
1043
1044 /* Never disable the USB_HCLK during normal operation */
1045
1046 /* 48MHz PLL dpwn */
1047 clk_disable(udc->usb_pll_clk);
1048
1049 /* Enable the USB device clock */
1050 writel(readl(USB_CTRL) & ~USB_DEV_NEED_CLK_EN,
1051 USB_CTRL);
1052
1053 /* Set to enable all needed USB OTG clocks */
1054 writel(OTGOFF_CLK_MASK, USB_OTG_CLK_CTRL(udc));
1055
1056 while (((readl(USB_OTG_CLK_STAT(udc)) &
1057 OTGOFF_CLK_MASK) !=
1058 OTGOFF_CLK_MASK) && (to > 0))
1059 to--;
1060 if (!to)
1061 dev_dbg(udc->dev, "Cannot disable USB OTG clocking\n");
1062 }
1063}
1064
1065/* Set/reset USB device address */
1066static void udc_set_address(struct lpc32xx_udc *udc, u32 addr)
1067{
1068 /* Address will be latched at the end of the status phase, or
1069 latched immediately if function is called twice */
1070 udc_protocol_cmd_data_w(udc, CMD_SET_ADDR,
1071 DAT_WR_BYTE(DEV_EN | addr));
1072}
1073
1074/* Setup up a IN request for DMA transfer - this consists of determining the
1075 * list of DMA addresses for the transfer, allocating DMA Descriptors,
1076 * installing the DD into the UDCA, and then enabling the DMA for that EP */
1077static int udc_ep_in_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1078{
1079 struct lpc32xx_request *req;
1080 u32 hwep = ep->hwep_num;
1081
1082 ep->req_pending = 1;
1083
1084 /* There will always be a request waiting here */
1085 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
1086
1087 /* Place the DD Descriptor into the UDCA */
1088 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma;
1089
1090 /* Enable DMA and interrupt for the HW EP */
1091 udc_ep_dma_enable(udc, hwep);
1092
1093 /* Clear ZLP if last packet is not of MAXP size */
1094 if (req->req.length % ep->ep.maxpacket)
1095 req->send_zlp = 0;
1096
1097 return 0;
1098}
1099
1100/* Setup up a OUT request for DMA transfer - this consists of determining the
1101 * list of DMA addresses for the transfer, allocating DMA Descriptors,
1102 * installing the DD into the UDCA, and then enabling the DMA for that EP */
1103static int udc_ep_out_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1104{
1105 struct lpc32xx_request *req;
1106 u32 hwep = ep->hwep_num;
1107
1108 ep->req_pending = 1;
1109
1110 /* There will always be a request waiting here */
1111 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
1112
1113 /* Place the DD Descriptor into the UDCA */
1114 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma;
1115
1116 /* Enable DMA and interrupt for the HW EP */
1117 udc_ep_dma_enable(udc, hwep);
1118 return 0;
1119}
1120
1121static void udc_disable(struct lpc32xx_udc *udc)
1122{
1123 u32 i;
1124
1125 /* Disable device */
1126 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0));
1127 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(0));
1128
1129 /* Disable all device interrupts (including EP0) */
1130 uda_disable_devint(udc, 0x3FF);
1131
1132 /* Disable and reset all endpoint interrupts */
1133 for (i = 0; i < 32; i++) {
1134 uda_disable_hwepint(udc, i);
1135 uda_clear_hwepint(udc, i);
1136 udc_disable_hwep(udc, i);
1137 udc_unrealize_hwep(udc, i);
1138 udc->udca_v_base[i] = 0;
1139
1140 /* Disable and clear all interrupts and DMA */
1141 udc_ep_dma_disable(udc, i);
1142 writel((1 << i), USBD_EOTINTCLR(udc->udp_baseaddr));
1143 writel((1 << i), USBD_NDDRTINTCLR(udc->udp_baseaddr));
1144 writel((1 << i), USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1145 writel((1 << i), USBD_DMARCLR(udc->udp_baseaddr));
1146 }
1147
1148 /* Disable DMA interrupts */
1149 writel(0, USBD_DMAINTEN(udc->udp_baseaddr));
1150
1151 writel(0, USBD_UDCAH(udc->udp_baseaddr));
1152}
1153
1154static void udc_enable(struct lpc32xx_udc *udc)
1155{
1156 u32 i;
1157 struct lpc32xx_ep *ep = &udc->ep[0];
1158
1159 /* Start with known state */
1160 udc_disable(udc);
1161
1162 /* Enable device */
1163 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(DEV_CON));
1164
1165 /* EP interrupts on high priority, FRAME interrupt on low priority */
1166 writel(USBD_EP_FAST, USBD_DEVINTPRI(udc->udp_baseaddr));
1167 writel(0xFFFF, USBD_EPINTPRI(udc->udp_baseaddr));
1168
1169 /* Clear any pending device interrupts */
1170 writel(0x3FF, USBD_DEVINTCLR(udc->udp_baseaddr));
1171
1172 /* Setup UDCA - not yet used (DMA) */
1173 writel(udc->udca_p_base, USBD_UDCAH(udc->udp_baseaddr));
1174
1175 /* Only enable EP0 in and out for now, EP0 only works in FIFO mode */
1176 for (i = 0; i <= 1; i++) {
1177 udc_realize_hwep(udc, i, ep->ep.maxpacket);
1178 uda_enable_hwepint(udc, i);
1179 udc_select_hwep(udc, i);
1180 udc_clrstall_hwep(udc, i);
1181 udc_clr_buffer_hwep(udc, i);
1182 }
1183
1184 /* Device interrupt setup */
1185 uda_clear_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW |
1186 USBD_EP_FAST));
1187 uda_enable_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW |
1188 USBD_EP_FAST));
1189
1190 /* Set device address to 0 - called twice to force a latch in the USB
1191 engine without the need of a setup packet status closure */
1192 udc_set_address(udc, 0);
1193 udc_set_address(udc, 0);
1194
1195 /* Enable master DMA interrupts */
1196 writel((USBD_SYS_ERR_INT | USBD_EOT_INT),
1197 USBD_DMAINTEN(udc->udp_baseaddr));
1198
1199 udc->dev_status = 0;
1200}
1201
1202/*
1203 *
1204 * USB device board specific events handled via callbacks
1205 *
1206 */
1207/* Connection change event - notify board function of change */
1208static void uda_power_event(struct lpc32xx_udc *udc, u32 conn)
1209{
1210 /* Just notify of a connection change event (optional) */
1211 if (udc->board->conn_chgb != NULL)
1212 udc->board->conn_chgb(conn);
1213}
1214
1215/* Suspend/resume event - notify board function of change */
1216static void uda_resm_susp_event(struct lpc32xx_udc *udc, u32 conn)
1217{
1218 /* Just notify of a Suspend/resume change event (optional) */
1219 if (udc->board->susp_chgb != NULL)
1220 udc->board->susp_chgb(conn);
1221
1222 if (conn)
1223 udc->suspended = 0;
1224 else
1225 udc->suspended = 1;
1226}
1227
1228/* Remote wakeup enable/disable - notify board function of change */
1229static void uda_remwkp_cgh(struct lpc32xx_udc *udc)
1230{
1231 if (udc->board->rmwk_chgb != NULL)
1232 udc->board->rmwk_chgb(udc->dev_status &
1233 (1 << USB_DEVICE_REMOTE_WAKEUP));
1234}
1235
1236/* Reads data from FIFO, adjusts for alignment and data size */
1237static void udc_pop_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes)
1238{
1239 int n, i, bl;
1240 u16 *p16;
1241 u32 *p32, tmp, cbytes;
1242
1243 /* Use optimal data transfer method based on source address and size */
1244 switch (((u32) data) & 0x3) {
1245 case 0: /* 32-bit aligned */
1246 p32 = (u32 *) data;
1247 cbytes = (bytes & ~0x3);
1248
1249 /* Copy 32-bit aligned data first */
1250 for (n = 0; n < cbytes; n += 4)
1251 *p32++ = readl(USBD_RXDATA(udc->udp_baseaddr));
1252
1253 /* Handle any remaining bytes */
1254 bl = bytes - cbytes;
1255 if (bl) {
1256 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1257 for (n = 0; n < bl; n++)
1258 data[cbytes + n] = ((tmp >> (n * 8)) & 0xFF);
1259
1260 }
1261 break;
1262
1263 case 1: /* 8-bit aligned */
1264 case 3:
1265 /* Each byte has to be handled independently */
1266 for (n = 0; n < bytes; n += 4) {
1267 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1268
1269 bl = bytes - n;
1270 if (bl > 3)
1271 bl = 3;
1272
1273 for (i = 0; i < bl; i++)
1274 data[n + i] = (u8) ((tmp >> (n * 8)) & 0xFF);
1275 }
1276 break;
1277
1278 case 2: /* 16-bit aligned */
1279 p16 = (u16 *) data;
1280 cbytes = (bytes & ~0x3);
1281
1282 /* Copy 32-bit sized objects first with 16-bit alignment */
1283 for (n = 0; n < cbytes; n += 4) {
1284 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1285 *p16++ = (u16)(tmp & 0xFFFF);
1286 *p16++ = (u16)((tmp >> 16) & 0xFFFF);
1287 }
1288
1289 /* Handle any remaining bytes */
1290 bl = bytes - cbytes;
1291 if (bl) {
1292 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1293 for (n = 0; n < bl; n++)
1294 data[cbytes + n] = ((tmp >> (n * 8)) & 0xFF);
1295 }
1296 break;
1297 }
1298}
1299
1300/* Read data from the FIFO for an endpoint. This function is for endpoints (such
1301 * as EP0) that don't use DMA. This function should only be called if a packet
1302 * is known to be ready to read for the endpoint. Note that the endpoint must
1303 * be selected in the protocol engine prior to this call. */
1304static u32 udc_read_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data,
1305 u32 bytes)
1306{
1307 u32 tmpv;
1308 int to = 1000;
1309 u32 tmp, hwrep = ((hwep & 0x1E) << 1) | CTRL_RD_EN;
1310
1311 /* Setup read of endpoint */
1312 writel(hwrep, USBD_CTRL(udc->udp_baseaddr));
1313
1314 /* Wait until packet is ready */
1315 while ((((tmpv = readl(USBD_RXPLEN(udc->udp_baseaddr))) &
1316 PKT_RDY) == 0) && (to > 0))
1317 to--;
1318 if (!to)
1319 dev_dbg(udc->dev, "No packet ready on FIFO EP read\n");
1320
1321 /* Mask out count */
1322 tmp = tmpv & PKT_LNGTH_MASK;
1323 if (bytes < tmp)
1324 tmp = bytes;
1325
1326 if ((tmp > 0) && (data != NULL))
1327 udc_pop_fifo(udc, (u8 *) data, tmp);
1328
1329 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr));
1330
1331 /* Clear the buffer */
1332 udc_clr_buffer_hwep(udc, hwep);
1333
1334 return tmp;
1335}
1336
1337/* Stuffs data into the FIFO, adjusts for alignment and data size */
1338static void udc_stuff_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes)
1339{
1340 int n, i, bl;
1341 u16 *p16;
1342 u32 *p32, tmp, cbytes;
1343
1344 /* Use optimal data transfer method based on source address and size */
1345 switch (((u32) data) & 0x3) {
1346 case 0: /* 32-bit aligned */
1347 p32 = (u32 *) data;
1348 cbytes = (bytes & ~0x3);
1349
1350 /* Copy 32-bit aligned data first */
1351 for (n = 0; n < cbytes; n += 4)
1352 writel(*p32++, USBD_TXDATA(udc->udp_baseaddr));
1353
1354 /* Handle any remaining bytes */
1355 bl = bytes - cbytes;
1356 if (bl) {
1357 tmp = 0;
1358 for (n = 0; n < bl; n++)
1359 tmp |= data[cbytes + n] << (n * 8);
1360
1361 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1362 }
1363 break;
1364
1365 case 1: /* 8-bit aligned */
1366 case 3:
1367 /* Each byte has to be handled independently */
1368 for (n = 0; n < bytes; n += 4) {
1369 bl = bytes - n;
1370 if (bl > 4)
1371 bl = 4;
1372
1373 tmp = 0;
1374 for (i = 0; i < bl; i++)
1375 tmp |= data[n + i] << (i * 8);
1376
1377 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1378 }
1379 break;
1380
1381 case 2: /* 16-bit aligned */
1382 p16 = (u16 *) data;
1383 cbytes = (bytes & ~0x3);
1384
1385 /* Copy 32-bit aligned data first */
1386 for (n = 0; n < cbytes; n += 4) {
1387 tmp = *p16++ & 0xFFFF;
1388 tmp |= (*p16++ & 0xFFFF) << 16;
1389 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1390 }
1391
1392 /* Handle any remaining bytes */
1393 bl = bytes - cbytes;
1394 if (bl) {
1395 tmp = 0;
1396 for (n = 0; n < bl; n++)
1397 tmp |= data[cbytes + n] << (n * 8);
1398
1399 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1400 }
1401 break;
1402 }
1403}
1404
1405/* Write data to the FIFO for an endpoint. This function is for endpoints (such
1406 * as EP0) that don't use DMA. Note that the endpoint must be selected in the
1407 * protocol engine prior to this call. */
1408static void udc_write_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data,
1409 u32 bytes)
1410{
1411 u32 hwwep = ((hwep & 0x1E) << 1) | CTRL_WR_EN;
1412
1413 if ((bytes > 0) && (data == NULL))
1414 return;
1415
1416 /* Setup write of endpoint */
1417 writel(hwwep, USBD_CTRL(udc->udp_baseaddr));
1418
1419 writel(bytes, USBD_TXPLEN(udc->udp_baseaddr));
1420
1421 /* Need at least 1 byte to trigger TX */
1422 if (bytes == 0)
1423 writel(0, USBD_TXDATA(udc->udp_baseaddr));
1424 else
1425 udc_stuff_fifo(udc, (u8 *) data, bytes);
1426
1427 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr));
1428
1429 udc_val_buffer_hwep(udc, hwep);
1430}
1431
1432/* USB device reset - resets USB to a default state with just EP0
1433 enabled */
1434static void uda_usb_reset(struct lpc32xx_udc *udc)
1435{
1436 u32 i = 0;
1437 /* Re-init device controller and EP0 */
1438 udc_enable(udc);
1439 udc->gadget.speed = USB_SPEED_FULL;
1440
1441 for (i = 1; i < NUM_ENDPOINTS; i++) {
1442 struct lpc32xx_ep *ep = &udc->ep[i];
1443 ep->req_pending = 0;
1444 }
1445}
1446
1447/* Send a ZLP on EP0 */
1448static void udc_ep0_send_zlp(struct lpc32xx_udc *udc)
1449{
1450 udc_write_hwep(udc, EP_IN, NULL, 0);
1451}
1452
1453/* Get current frame number */
1454static u16 udc_get_current_frame(struct lpc32xx_udc *udc)
1455{
1456 u16 flo, fhi;
1457
1458 udc_protocol_cmd_w(udc, CMD_RD_FRAME);
1459 flo = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME);
1460 fhi = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME);
1461
1462 return (fhi << 8) | flo;
1463}
1464
1465/* Set the device as configured - enables all endpoints */
1466static inline void udc_set_device_configured(struct lpc32xx_udc *udc)
1467{
1468 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(CONF_DVICE));
1469}
1470
1471/* Set the device as unconfigured - disables all endpoints */
1472static inline void udc_set_device_unconfigured(struct lpc32xx_udc *udc)
1473{
1474 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0));
1475}
1476
1477/* reinit == restore initial software state */
1478static void udc_reinit(struct lpc32xx_udc *udc)
1479{
1480 u32 i;
1481
1482 INIT_LIST_HEAD(&udc->gadget.ep_list);
1483 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list);
1484
1485 for (i = 0; i < NUM_ENDPOINTS; i++) {
1486 struct lpc32xx_ep *ep = &udc->ep[i];
1487
1488 if (i != 0)
1489 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
1490 ep->desc = NULL;
1491 ep->ep.maxpacket = ep->maxpacket;
1492 INIT_LIST_HEAD(&ep->queue);
1493 ep->req_pending = 0;
1494 }
1495
1496 udc->ep0state = WAIT_FOR_SETUP;
1497}
1498
1499/* Must be called with lock */
1500static void done(struct lpc32xx_ep *ep, struct lpc32xx_request *req, int status)
1501{
1502 struct lpc32xx_udc *udc = ep->udc;
1503
1504 list_del_init(&req->queue);
1505 if (req->req.status == -EINPROGRESS)
1506 req->req.status = status;
1507 else
1508 status = req->req.status;
1509
1510 if (ep->lep) {
1511 enum dma_data_direction direction;
1512
1513 if (ep->is_in)
1514 direction = DMA_TO_DEVICE;
1515 else
1516 direction = DMA_FROM_DEVICE;
1517
1518 if (req->mapped) {
1519 dma_unmap_single(ep->udc->gadget.dev.parent,
1520 req->req.dma, req->req.length,
1521 direction);
1522 req->req.dma = 0;
1523 req->mapped = 0;
1524 } else
1525 dma_sync_single_for_cpu(ep->udc->gadget.dev.parent,
1526 req->req.dma, req->req.length,
1527 direction);
1528
1529 /* Free DDs */
1530 udc_dd_free(udc, req->dd_desc_ptr);
1531 }
1532
1533 if (status && status != -ESHUTDOWN)
1534 ep_dbg(ep, "%s done %p, status %d\n", ep->ep.name, req, status);
1535
1536 ep->req_pending = 0;
1537 spin_unlock(&udc->lock);
1538 req->req.complete(&ep->ep, &req->req);
1539 spin_lock(&udc->lock);
1540}
1541
1542/* Must be called with lock */
1543static void nuke(struct lpc32xx_ep *ep, int status)
1544{
1545 struct lpc32xx_request *req;
1546
1547 while (!list_empty(&ep->queue)) {
1548 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
1549 done(ep, req, status);
1550 }
1551
1552 if (ep->desc && status == -ESHUTDOWN) {
1553 uda_disable_hwepint(ep->udc, ep->hwep_num);
1554 udc_disable_hwep(ep->udc, ep->hwep_num);
1555 }
1556}
1557
1558/* IN endpoint 0 transfer */
1559static int udc_ep0_in_req(struct lpc32xx_udc *udc)
1560{
1561 struct lpc32xx_request *req;
1562 struct lpc32xx_ep *ep0 = &udc->ep[0];
1563 u32 tsend, ts = 0;
1564
1565 if (list_empty(&ep0->queue))
1566 /* Nothing to send */
1567 return 0;
1568 else
1569 req = list_entry(ep0->queue.next, struct lpc32xx_request,
1570 queue);
1571
1572 tsend = ts = req->req.length - req->req.actual;
1573 if (ts == 0) {
1574 /* Send a ZLP */
1575 udc_ep0_send_zlp(udc);
1576 done(ep0, req, 0);
1577 return 1;
1578 } else if (ts > ep0->ep.maxpacket)
1579 ts = ep0->ep.maxpacket; /* Just send what we can */
1580
1581 /* Write data to the EP0 FIFO and start transfer */
1582 udc_write_hwep(udc, EP_IN, (req->req.buf + req->req.actual), ts);
1583
1584 /* Increment data pointer */
1585 req->req.actual += ts;
1586
1587 if (tsend >= ep0->ep.maxpacket)
1588 return 0; /* Stay in data transfer state */
1589
1590 /* Transfer request is complete */
1591 udc->ep0state = WAIT_FOR_SETUP;
1592 done(ep0, req, 0);
1593 return 1;
1594}
1595
1596/* OUT endpoint 0 transfer */
1597static int udc_ep0_out_req(struct lpc32xx_udc *udc)
1598{
1599 struct lpc32xx_request *req;
1600 struct lpc32xx_ep *ep0 = &udc->ep[0];
1601 u32 tr, bufferspace;
1602
1603 if (list_empty(&ep0->queue))
1604 return 0;
1605 else
1606 req = list_entry(ep0->queue.next, struct lpc32xx_request,
1607 queue);
1608
1609 if (req) {
1610 if (req->req.length == 0) {
1611 /* Just dequeue request */
1612 done(ep0, req, 0);
1613 udc->ep0state = WAIT_FOR_SETUP;
1614 return 1;
1615 }
1616
1617 /* Get data from FIFO */
1618 bufferspace = req->req.length - req->req.actual;
1619 if (bufferspace > ep0->ep.maxpacket)
1620 bufferspace = ep0->ep.maxpacket;
1621
1622 /* Copy data to buffer */
1623 prefetchw(req->req.buf + req->req.actual);
1624 tr = udc_read_hwep(udc, EP_OUT, req->req.buf + req->req.actual,
1625 bufferspace);
1626 req->req.actual += bufferspace;
1627
1628 if (tr < ep0->ep.maxpacket) {
1629 /* This is the last packet */
1630 done(ep0, req, 0);
1631 udc->ep0state = WAIT_FOR_SETUP;
1632 return 1;
1633 }
1634 }
1635
1636 return 0;
1637}
1638
1639/* Must be called with lock */
1640static void stop_activity(struct lpc32xx_udc *udc)
1641{
1642 struct usb_gadget_driver *driver = udc->driver;
1643 int i;
1644
1645 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
1646 driver = NULL;
1647
1648 udc->gadget.speed = USB_SPEED_UNKNOWN;
1649 udc->suspended = 0;
1650
1651 for (i = 0; i < NUM_ENDPOINTS; i++) {
1652 struct lpc32xx_ep *ep = &udc->ep[i];
1653 nuke(ep, -ESHUTDOWN);
1654 }
1655 if (driver) {
1656 spin_unlock(&udc->lock);
1657 driver->disconnect(&udc->gadget);
1658 spin_lock(&udc->lock);
1659 }
1660
1661 isp1301_pullup_enable(udc, 0, 0);
1662 udc_disable(udc);
1663 udc_reinit(udc);
1664}
1665
1666/*
1667 * Activate or kill host pullup
1668 * Can be called with or without lock
1669 */
1670static void pullup(struct lpc32xx_udc *udc, int is_on)
1671{
1672 if (!udc->clocked)
1673 return;
1674
1675 if (!udc->enabled || !udc->vbus)
1676 is_on = 0;
1677
1678 if (is_on != udc->pullup)
1679 isp1301_pullup_enable(udc, is_on, 0);
1680}
1681
1682/* Must be called without lock */
1683static int lpc32xx_ep_disable(struct usb_ep *_ep)
1684{
1685 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
1686 struct lpc32xx_udc *udc = ep->udc;
1687 unsigned long flags;
1688
1689 if ((ep->hwep_num_base == 0) || (ep->hwep_num == 0))
1690 return -EINVAL;
1691 spin_lock_irqsave(&udc->lock, flags);
1692
1693 nuke(ep, -ESHUTDOWN);
1694
1695 /* restore the endpoint's pristine config */
1696 ep->desc = NULL;
1697
1698 /* Clear all DMA statuses for this EP */
1699 udc_ep_dma_disable(udc, ep->hwep_num);
1700 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr));
1701 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr));
1702 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1703 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr));
1704
1705 /* Remove the DD pointer in the UDCA */
1706 udc->udca_v_base[ep->hwep_num] = 0;
1707
1708 /* Disable and reset endpoint and interrupt */
1709 uda_clear_hwepint(udc, ep->hwep_num);
1710 udc_unrealize_hwep(udc, ep->hwep_num);
1711
1712 ep->hwep_num = 0;
1713
1714 spin_unlock_irqrestore(&udc->lock, flags);
1715
1716 atomic_dec(&udc->enabled_ep_cnt);
1717 wake_up(&udc->ep_disable_wait_queue);
1718
1719 return 0;
1720}
1721
1722/* Must be called without lock */
1723static int lpc32xx_ep_enable(struct usb_ep *_ep,
1724 const struct usb_endpoint_descriptor *desc)
1725{
1726 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
1727 struct lpc32xx_udc *udc = ep->udc;
1728 u16 maxpacket;
1729 u32 tmp;
1730 unsigned long flags;
1731
1732 /* Verify EP data */
1733 if ((!_ep) || (!ep) || (!desc) || (ep->desc) ||
1734 (desc->bDescriptorType != USB_DT_ENDPOINT)) {
1735 dev_dbg(udc->dev, "bad ep or descriptor\n");
1736 return -EINVAL;
1737 }
1738 maxpacket = usb_endpoint_maxp(desc);
1739 if ((maxpacket == 0) || (maxpacket > ep->maxpacket)) {
1740 dev_dbg(udc->dev, "bad ep descriptor's packet size\n");
1741 return -EINVAL;
1742 }
1743
1744 /* Don't touch EP0 */
1745 if (ep->hwep_num_base == 0) {
1746 dev_dbg(udc->dev, "Can't re-enable EP0!!!\n");
1747 return -EINVAL;
1748 }
1749
1750 /* Is driver ready? */
1751 if ((!udc->driver) || (udc->gadget.speed == USB_SPEED_UNKNOWN)) {
1752 dev_dbg(udc->dev, "bogus device state\n");
1753 return -ESHUTDOWN;
1754 }
1755
1756 tmp = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
1757 switch (tmp) {
1758 case USB_ENDPOINT_XFER_CONTROL:
1759 return -EINVAL;
1760
1761 case USB_ENDPOINT_XFER_INT:
1762 if (maxpacket > ep->maxpacket) {
1763 dev_dbg(udc->dev,
1764 "Bad INT endpoint maxpacket %d\n", maxpacket);
1765 return -EINVAL;
1766 }
1767 break;
1768
1769 case USB_ENDPOINT_XFER_BULK:
1770 switch (maxpacket) {
1771 case 8:
1772 case 16:
1773 case 32:
1774 case 64:
1775 break;
1776
1777 default:
1778 dev_dbg(udc->dev,
1779 "Bad BULK endpoint maxpacket %d\n", maxpacket);
1780 return -EINVAL;
1781 }
1782 break;
1783
1784 case USB_ENDPOINT_XFER_ISOC:
1785 break;
1786 }
1787 spin_lock_irqsave(&udc->lock, flags);
1788
1789 /* Initialize endpoint to match the selected descriptor */
1790 ep->is_in = (desc->bEndpointAddress & USB_DIR_IN) != 0;
1791 ep->desc = desc;
1792 ep->ep.maxpacket = maxpacket;
1793
1794 /* Map hardware endpoint from base and direction */
1795 if (ep->is_in)
1796 /* IN endpoints are offset 1 from the OUT endpoint */
1797 ep->hwep_num = ep->hwep_num_base + EP_IN;
1798 else
1799 ep->hwep_num = ep->hwep_num_base;
1800
1801 ep_dbg(ep, "EP enabled: %s, HW:%d, MP:%d IN:%d\n", ep->ep.name,
1802 ep->hwep_num, maxpacket, (ep->is_in == 1));
1803
1804 /* Realize the endpoint, interrupt is enabled later when
1805 * buffers are queued, IN EPs will NAK until buffers are ready */
1806 udc_realize_hwep(udc, ep->hwep_num, ep->ep.maxpacket);
1807 udc_clr_buffer_hwep(udc, ep->hwep_num);
1808 uda_disable_hwepint(udc, ep->hwep_num);
1809 udc_clrstall_hwep(udc, ep->hwep_num);
1810
1811 /* Clear all DMA statuses for this EP */
1812 udc_ep_dma_disable(udc, ep->hwep_num);
1813 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr));
1814 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr));
1815 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1816 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr));
1817
1818 spin_unlock_irqrestore(&udc->lock, flags);
1819
1820 atomic_inc(&udc->enabled_ep_cnt);
1821 return 0;
1822}
1823
1824/*
1825 * Allocate a USB request list
1826 * Can be called with or without lock
1827 */
1828static struct usb_request *lpc32xx_ep_alloc_request(struct usb_ep *_ep,
1829 gfp_t gfp_flags)
1830{
1831 struct lpc32xx_request *req;
1832
1833 req = kzalloc(sizeof(struct lpc32xx_request), gfp_flags);
1834 if (!req)
1835 return NULL;
1836
1837 INIT_LIST_HEAD(&req->queue);
1838 return &req->req;
1839}
1840
1841/*
1842 * De-allocate a USB request list
1843 * Can be called with or without lock
1844 */
1845static void lpc32xx_ep_free_request(struct usb_ep *_ep,
1846 struct usb_request *_req)
1847{
1848 struct lpc32xx_request *req;
1849
1850 req = container_of(_req, struct lpc32xx_request, req);
1851 BUG_ON(!list_empty(&req->queue));
1852 kfree(req);
1853}
1854
1855/* Must be called without lock */
1856static int lpc32xx_ep_queue(struct usb_ep *_ep,
1857 struct usb_request *_req, gfp_t gfp_flags)
1858{
1859 struct lpc32xx_request *req;
1860 struct lpc32xx_ep *ep;
1861 struct lpc32xx_udc *udc;
1862 unsigned long flags;
1863 int status = 0;
1864
1865 req = container_of(_req, struct lpc32xx_request, req);
1866 ep = container_of(_ep, struct lpc32xx_ep, ep);
1867
1868 if (!_req || !_req->complete || !_req->buf ||
1869 !list_empty(&req->queue))
1870 return -EINVAL;
1871
1872 udc = ep->udc;
1873
1874 if (!_ep || (!ep->desc && ep->hwep_num_base != 0)) {
1875 dev_dbg(udc->dev, "invalid ep\n");
1876 return -EINVAL;
1877 }
1878
1879
1880 if ((!udc) || (!udc->driver) ||
1881 (udc->gadget.speed == USB_SPEED_UNKNOWN)) {
1882 dev_dbg(udc->dev, "invalid device\n");
1883 return -EINVAL;
1884 }
1885
1886 if (ep->lep) {
1887 enum dma_data_direction direction;
1888 struct lpc32xx_usbd_dd_gad *dd;
1889
1890 /* Map DMA pointer */
1891 if (ep->is_in)
1892 direction = DMA_TO_DEVICE;
1893 else
1894 direction = DMA_FROM_DEVICE;
1895
1896 if (req->req.dma == 0) {
1897 req->req.dma = dma_map_single(
1898 ep->udc->gadget.dev.parent,
1899 req->req.buf, req->req.length, direction);
1900 req->mapped = 1;
1901 } else {
1902 dma_sync_single_for_device(
1903 ep->udc->gadget.dev.parent, req->req.dma,
1904 req->req.length, direction);
1905 req->mapped = 0;
1906 }
1907
1908 /* For the request, build a list of DDs */
1909 dd = udc_dd_alloc(udc);
1910 if (!dd) {
1911 /* Error allocating DD */
1912 return -ENOMEM;
1913 }
1914 req->dd_desc_ptr = dd;
1915
1916 /* Setup the DMA descriptor */
1917 dd->dd_next_phy = dd->dd_next_v = 0;
1918 dd->dd_buffer_addr = req->req.dma;
1919 dd->dd_status = 0;
1920
1921 /* Special handling for ISO EPs */
1922 if (ep->eptype == EP_ISO_TYPE) {
1923 dd->dd_setup = DD_SETUP_ISO_EP |
1924 DD_SETUP_PACKETLEN(0) |
1925 DD_SETUP_DMALENBYTES(1);
1926 dd->dd_iso_ps_mem_addr = dd->this_dma + 24;
1927 if (ep->is_in)
1928 dd->iso_status[0] = req->req.length;
1929 else
1930 dd->iso_status[0] = 0;
1931 } else
1932 dd->dd_setup = DD_SETUP_PACKETLEN(ep->ep.maxpacket) |
1933 DD_SETUP_DMALENBYTES(req->req.length);
1934 }
1935
1936 ep_dbg(ep, "%s queue req %p len %d buf %p (in=%d) z=%d\n", _ep->name,
1937 _req, _req->length, _req->buf, ep->is_in, _req->zero);
1938
1939 spin_lock_irqsave(&udc->lock, flags);
1940
1941 _req->status = -EINPROGRESS;
1942 _req->actual = 0;
1943 req->send_zlp = _req->zero;
1944
1945 /* Kickstart empty queues */
1946 if (list_empty(&ep->queue)) {
1947 list_add_tail(&req->queue, &ep->queue);
1948
1949 if (ep->hwep_num_base == 0) {
1950 /* Handle expected data direction */
1951 if (ep->is_in) {
1952 /* IN packet to host */
1953 udc->ep0state = DATA_IN;
1954 status = udc_ep0_in_req(udc);
1955 } else {
1956 /* OUT packet from host */
1957 udc->ep0state = DATA_OUT;
1958 status = udc_ep0_out_req(udc);
1959 }
1960 } else if (ep->is_in) {
1961 /* IN packet to host and kick off transfer */
1962 if (!ep->req_pending)
1963 udc_ep_in_req_dma(udc, ep);
1964 } else
1965 /* OUT packet from host and kick off list */
1966 if (!ep->req_pending)
1967 udc_ep_out_req_dma(udc, ep);
1968 } else
1969 list_add_tail(&req->queue, &ep->queue);
1970
1971 spin_unlock_irqrestore(&udc->lock, flags);
1972
1973 return (status < 0) ? status : 0;
1974}
1975
1976/* Must be called without lock */
1977static int lpc32xx_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
1978{
1979 struct lpc32xx_ep *ep;
1980 struct lpc32xx_request *req;
1981 unsigned long flags;
1982
1983 ep = container_of(_ep, struct lpc32xx_ep, ep);
1984 if (!_ep || ep->hwep_num_base == 0)
1985 return -EINVAL;
1986
1987 spin_lock_irqsave(&ep->udc->lock, flags);
1988
1989 /* make sure it's actually queued on this endpoint */
1990 list_for_each_entry(req, &ep->queue, queue) {
1991 if (&req->req == _req)
1992 break;
1993 }
1994 if (&req->req != _req) {
1995 spin_unlock_irqrestore(&ep->udc->lock, flags);
1996 return -EINVAL;
1997 }
1998
1999 done(ep, req, -ECONNRESET);
2000
2001 spin_unlock_irqrestore(&ep->udc->lock, flags);
2002
2003 return 0;
2004}
2005
2006/* Must be called without lock */
2007static int lpc32xx_ep_set_halt(struct usb_ep *_ep, int value)
2008{
2009 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
2010 struct lpc32xx_udc *udc = ep->udc;
2011 unsigned long flags;
2012
2013 if ((!ep) || (ep->desc == NULL) || (ep->hwep_num <= 1))
2014 return -EINVAL;
2015
2016 /* Don't halt an IN EP */
2017 if (ep->is_in)
2018 return -EAGAIN;
2019
2020 spin_lock_irqsave(&udc->lock, flags);
2021
2022 if (value == 1) {
2023 /* stall */
2024 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num),
2025 DAT_WR_BYTE(EP_STAT_ST));
2026 } else {
2027 /* End stall */
2028 ep->wedge = 0;
2029 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num),
2030 DAT_WR_BYTE(0));
2031 }
2032
2033 spin_unlock_irqrestore(&udc->lock, flags);
2034
2035 return 0;
2036}
2037
2038/* set the halt feature and ignores clear requests */
2039static int lpc32xx_ep_set_wedge(struct usb_ep *_ep)
2040{
2041 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
2042
2043 if (!_ep || !ep->udc)
2044 return -EINVAL;
2045
2046 ep->wedge = 1;
2047
2048 return usb_ep_set_halt(_ep);
2049}
2050
2051static const struct usb_ep_ops lpc32xx_ep_ops = {
2052 .enable = lpc32xx_ep_enable,
2053 .disable = lpc32xx_ep_disable,
2054 .alloc_request = lpc32xx_ep_alloc_request,
2055 .free_request = lpc32xx_ep_free_request,
2056 .queue = lpc32xx_ep_queue,
2057 .dequeue = lpc32xx_ep_dequeue,
2058 .set_halt = lpc32xx_ep_set_halt,
2059 .set_wedge = lpc32xx_ep_set_wedge,
2060};
2061
2062/* Send a ZLP on a non-0 IN EP */
2063void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
2064{
2065 /* Clear EP status */
2066 udc_clearep_getsts(udc, ep->hwep_num);
2067
2068 /* Send ZLP via FIFO mechanism */
2069 udc_write_hwep(udc, ep->hwep_num, NULL, 0);
2070}
2071
2072/*
2073 * Handle EP completion for ZLP
2074 * This function will only be called when a delayed ZLP needs to be sent out
2075 * after a DMA transfer has filled both buffers.
2076 */
2077void udc_handle_eps(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
2078{
2079 u32 epstatus;
2080 struct lpc32xx_request *req;
2081
2082 if (ep->hwep_num <= 0)
2083 return;
2084
2085 uda_clear_hwepint(udc, ep->hwep_num);
2086
2087 /* If this interrupt isn't enabled, return now */
2088 if (!(udc->enabled_hwepints & (1 << ep->hwep_num)))
2089 return;
2090
2091 /* Get endpoint status */
2092 epstatus = udc_clearep_getsts(udc, ep->hwep_num);
2093
2094 /*
2095 * This should never happen, but protect against writing to the
2096 * buffer when full.
2097 */
2098 if (epstatus & EP_SEL_F)
2099 return;
2100
2101 if (ep->is_in) {
2102 udc_send_in_zlp(udc, ep);
2103 uda_disable_hwepint(udc, ep->hwep_num);
2104 } else
2105 return;
2106
2107 /* If there isn't a request waiting, something went wrong */
2108 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
2109 if (req) {
2110 done(ep, req, 0);
2111
2112 /* Start another request if ready */
2113 if (!list_empty(&ep->queue)) {
2114 if (ep->is_in)
2115 udc_ep_in_req_dma(udc, ep);
2116 else
2117 udc_ep_out_req_dma(udc, ep);
2118 } else
2119 ep->req_pending = 0;
2120 }
2121}
2122
2123
2124/* DMA end of transfer completion */
2125static void udc_handle_dma_ep(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
2126{
2127 u32 status, epstatus;
2128 struct lpc32xx_request *req;
2129 struct lpc32xx_usbd_dd_gad *dd;
2130
2131#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2132 ep->totalints++;
2133#endif
2134
2135 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
2136 if (!req) {
2137 ep_err(ep, "DMA interrupt on no req!\n");
2138 return;
2139 }
2140 dd = req->dd_desc_ptr;
2141
2142 /* DMA descriptor should always be retired for this call */
2143 if (!(dd->dd_status & DD_STATUS_DD_RETIRED))
2144 ep_warn(ep, "DMA descriptor did not retire\n");
2145
2146 /* Disable DMA */
2147 udc_ep_dma_disable(udc, ep->hwep_num);
2148 writel((1 << ep->hwep_num), USBD_EOTINTCLR(udc->udp_baseaddr));
2149 writel((1 << ep->hwep_num), USBD_NDDRTINTCLR(udc->udp_baseaddr));
2150
2151 /* System error? */
2152 if (readl(USBD_SYSERRTINTST(udc->udp_baseaddr)) &
2153 (1 << ep->hwep_num)) {
2154 writel((1 << ep->hwep_num),
2155 USBD_SYSERRTINTCLR(udc->udp_baseaddr));
2156 ep_err(ep, "AHB critical error!\n");
2157 ep->req_pending = 0;
2158
2159 /* The error could have occurred on a packet of a multipacket
2160 * transfer, so recovering the transfer is not possible. Close
2161 * the request with an error */
2162 done(ep, req, -ECONNABORTED);
2163 return;
2164 }
2165
2166 /* Handle the current DD's status */
2167 status = dd->dd_status;
2168 switch (status & DD_STATUS_STS_MASK) {
2169 case DD_STATUS_STS_NS:
2170 /* DD not serviced? This shouldn't happen! */
2171 ep->req_pending = 0;
2172 ep_err(ep, "DMA critical EP error: DD not serviced (0x%x)!\n",
2173 status);
2174
2175 done(ep, req, -ECONNABORTED);
2176 return;
2177
2178 case DD_STATUS_STS_BS:
2179 /* Interrupt only fires on EOT - This shouldn't happen! */
2180 ep->req_pending = 0;
2181 ep_err(ep, "DMA critical EP error: EOT prior to service completion (0x%x)!\n",
2182 status);
2183 done(ep, req, -ECONNABORTED);
2184 return;
2185
2186 case DD_STATUS_STS_NC:
2187 case DD_STATUS_STS_DUR:
2188 /* Really just a short packet, not an underrun */
2189 /* This is a good status and what we expect */
2190 break;
2191
2192 default:
2193 /* Data overrun, system error, or unknown */
2194 ep->req_pending = 0;
2195 ep_err(ep, "DMA critical EP error: System error (0x%x)!\n",
2196 status);
2197 done(ep, req, -ECONNABORTED);
2198 return;
2199 }
2200
2201 /* ISO endpoints are handled differently */
2202 if (ep->eptype == EP_ISO_TYPE) {
2203 if (ep->is_in)
2204 req->req.actual = req->req.length;
2205 else
2206 req->req.actual = dd->iso_status[0] & 0xFFFF;
2207 } else
2208 req->req.actual += DD_STATUS_CURDMACNT(status);
2209
2210 /* Send a ZLP if necessary. This will be done for non-int
2211 * packets which have a size that is a divisor of MAXP */
2212 if (req->send_zlp) {
2213 /*
2214 * If at least 1 buffer is available, send the ZLP now.
2215 * Otherwise, the ZLP send needs to be deferred until a
2216 * buffer is available.
2217 */
2218 if (udc_clearep_getsts(udc, ep->hwep_num) & EP_SEL_F) {
2219 udc_clearep_getsts(udc, ep->hwep_num);
2220 uda_enable_hwepint(udc, ep->hwep_num);
2221 epstatus = udc_clearep_getsts(udc, ep->hwep_num);
2222
2223 /* Let the EP interrupt handle the ZLP */
2224 return;
2225 } else
2226 udc_send_in_zlp(udc, ep);
2227 }
2228
2229 /* Transfer request is complete */
2230 done(ep, req, 0);
2231
2232 /* Start another request if ready */
2233 udc_clearep_getsts(udc, ep->hwep_num);
2234 if (!list_empty((&ep->queue))) {
2235 if (ep->is_in)
2236 udc_ep_in_req_dma(udc, ep);
2237 else
2238 udc_ep_out_req_dma(udc, ep);
2239 } else
2240 ep->req_pending = 0;
2241
2242}
2243
2244/*
2245 *
2246 * Endpoint 0 functions
2247 *
2248 */
2249static void udc_handle_dev(struct lpc32xx_udc *udc)
2250{
2251 u32 tmp;
2252
2253 udc_protocol_cmd_w(udc, CMD_GET_DEV_STAT);
2254 tmp = udc_protocol_cmd_r(udc, DAT_GET_DEV_STAT);
2255
2256 if (tmp & DEV_RST)
2257 uda_usb_reset(udc);
2258 else if (tmp & DEV_CON_CH)
2259 uda_power_event(udc, (tmp & DEV_CON));
2260 else if (tmp & DEV_SUS_CH) {
2261 if (tmp & DEV_SUS) {
2262 if (udc->vbus == 0)
2263 stop_activity(udc);
2264 else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) &&
2265 udc->driver) {
2266 /* Power down transceiver */
2267 udc->poweron = 0;
2268 schedule_work(&udc->pullup_job);
2269 uda_resm_susp_event(udc, 1);
2270 }
2271 } else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) &&
2272 udc->driver && udc->vbus) {
2273 uda_resm_susp_event(udc, 0);
2274 /* Power up transceiver */
2275 udc->poweron = 1;
2276 schedule_work(&udc->pullup_job);
2277 }
2278 }
2279}
2280
2281static int udc_get_status(struct lpc32xx_udc *udc, u16 reqtype, u16 wIndex)
2282{
2283 struct lpc32xx_ep *ep;
2284 u32 ep0buff = 0, tmp;
2285
2286 switch (reqtype & USB_RECIP_MASK) {
2287 case USB_RECIP_INTERFACE:
2288 break; /* Not supported */
2289
2290 case USB_RECIP_DEVICE:
2291 ep0buff = (udc->selfpowered << USB_DEVICE_SELF_POWERED);
2292 if (udc->dev_status & (1 << USB_DEVICE_REMOTE_WAKEUP))
2293 ep0buff |= (1 << USB_DEVICE_REMOTE_WAKEUP);
2294 break;
2295
2296 case USB_RECIP_ENDPOINT:
2297 tmp = wIndex & USB_ENDPOINT_NUMBER_MASK;
2298 ep = &udc->ep[tmp];
2299 if ((tmp == 0) || (tmp >= NUM_ENDPOINTS) || (tmp && !ep->desc))
2300 return -EOPNOTSUPP;
2301
2302 if (wIndex & USB_DIR_IN) {
2303 if (!ep->is_in)
2304 return -EOPNOTSUPP; /* Something's wrong */
2305 } else if (ep->is_in)
2306 return -EOPNOTSUPP; /* Not an IN endpoint */
2307
2308 /* Get status of the endpoint */
2309 udc_protocol_cmd_w(udc, CMD_SEL_EP(ep->hwep_num));
2310 tmp = udc_protocol_cmd_r(udc, DAT_SEL_EP(ep->hwep_num));
2311
2312 if (tmp & EP_SEL_ST)
2313 ep0buff = (1 << USB_ENDPOINT_HALT);
2314 else
2315 ep0buff = 0;
2316 break;
2317
2318 default:
2319 break;
2320 }
2321
2322 /* Return data */
2323 udc_write_hwep(udc, EP_IN, &ep0buff, 2);
2324
2325 return 0;
2326}
2327
2328static void udc_handle_ep0_setup(struct lpc32xx_udc *udc)
2329{
2330 struct lpc32xx_ep *ep, *ep0 = &udc->ep[0];
2331 struct usb_ctrlrequest ctrlpkt;
2332 int i, bytes;
2333 u16 wIndex, wValue, wLength, reqtype, req, tmp;
2334
2335 /* Nuke previous transfers */
2336 nuke(ep0, -EPROTO);
2337
2338 /* Get setup packet */
2339 bytes = udc_read_hwep(udc, EP_OUT, (u32 *) &ctrlpkt, 8);
2340 if (bytes != 8) {
2341 ep_warn(ep0, "Incorrectly sized setup packet (s/b 8, is %d)!\n",
2342 bytes);
2343 return;
2344 }
2345
2346 /* Native endianness */
2347 wIndex = le16_to_cpu(ctrlpkt.wIndex);
2348 wValue = le16_to_cpu(ctrlpkt.wValue);
2349 wLength = le16_to_cpu(ctrlpkt.wLength);
2350 reqtype = le16_to_cpu(ctrlpkt.bRequestType);
2351
2352 /* Set direction of EP0 */
2353 if (likely(reqtype & USB_DIR_IN))
2354 ep0->is_in = 1;
2355 else
2356 ep0->is_in = 0;
2357
2358 /* Handle SETUP packet */
2359 req = le16_to_cpu(ctrlpkt.bRequest);
2360 switch (req) {
2361 case USB_REQ_CLEAR_FEATURE:
2362 case USB_REQ_SET_FEATURE:
2363 switch (reqtype) {
2364 case (USB_TYPE_STANDARD | USB_RECIP_DEVICE):
2365 if (wValue != USB_DEVICE_REMOTE_WAKEUP)
2366 goto stall; /* Nothing else handled */
2367
2368 /* Tell board about event */
2369 if (req == USB_REQ_CLEAR_FEATURE)
2370 udc->dev_status &=
2371 ~(1 << USB_DEVICE_REMOTE_WAKEUP);
2372 else
2373 udc->dev_status |=
2374 (1 << USB_DEVICE_REMOTE_WAKEUP);
2375 uda_remwkp_cgh(udc);
2376 goto zlp_send;
2377
2378 case (USB_TYPE_STANDARD | USB_RECIP_ENDPOINT):
2379 tmp = wIndex & USB_ENDPOINT_NUMBER_MASK;
2380 if ((wValue != USB_ENDPOINT_HALT) ||
2381 (tmp >= NUM_ENDPOINTS))
2382 break;
2383
2384 /* Find hardware endpoint from logical endpoint */
2385 ep = &udc->ep[tmp];
2386 tmp = ep->hwep_num;
2387 if (tmp == 0)
2388 break;
2389
2390 if (req == USB_REQ_SET_FEATURE)
2391 udc_stall_hwep(udc, tmp);
2392 else if (!ep->wedge)
2393 udc_clrstall_hwep(udc, tmp);
2394
2395 goto zlp_send;
2396
2397 default:
2398 break;
2399 }
2400
2401
2402 case USB_REQ_SET_ADDRESS:
2403 if (reqtype == (USB_TYPE_STANDARD | USB_RECIP_DEVICE)) {
2404 udc_set_address(udc, wValue);
2405 goto zlp_send;
2406 }
2407 break;
2408
2409 case USB_REQ_GET_STATUS:
2410 udc_get_status(udc, reqtype, wIndex);
2411 return;
2412
2413 default:
2414 break; /* Let GadgetFS handle the descriptor instead */
2415 }
2416
2417 if (likely(udc->driver)) {
2418 /* device-2-host (IN) or no data setup command, process
2419 * immediately */
2420 spin_unlock(&udc->lock);
2421 i = udc->driver->setup(&udc->gadget, &ctrlpkt);
2422
2423 spin_lock(&udc->lock);
2424 if (req == USB_REQ_SET_CONFIGURATION) {
2425 /* Configuration is set after endpoints are realized */
2426 if (wValue) {
2427 /* Set configuration */
2428 udc_set_device_configured(udc);
2429
2430 udc_protocol_cmd_data_w(udc, CMD_SET_MODE,
2431 DAT_WR_BYTE(AP_CLK |
2432 INAK_BI | INAK_II));
2433 } else {
2434 /* Clear configuration */
2435 udc_set_device_unconfigured(udc);
2436
2437 /* Disable NAK interrupts */
2438 udc_protocol_cmd_data_w(udc, CMD_SET_MODE,
2439 DAT_WR_BYTE(AP_CLK));
2440 }
2441 }
2442
2443 if (i < 0) {
2444 /* setup processing failed, force stall */
2445 dev_err(udc->dev,
2446 "req %02x.%02x protocol STALL; stat %d\n",
2447 reqtype, req, i);
2448 udc->ep0state = WAIT_FOR_SETUP;
2449 goto stall;
2450 }
2451 }
2452
2453 if (!ep0->is_in)
2454 udc_ep0_send_zlp(udc); /* ZLP IN packet on data phase */
2455
2456 return;
2457
2458stall:
2459 udc_stall_hwep(udc, EP_IN);
2460 return;
2461
2462zlp_send:
2463 udc_ep0_send_zlp(udc);
2464 return;
2465}
2466
2467/* IN endpoint 0 transfer */
2468static void udc_handle_ep0_in(struct lpc32xx_udc *udc)
2469{
2470 struct lpc32xx_ep *ep0 = &udc->ep[0];
2471 u32 epstatus;
2472
2473 /* Clear EP interrupt */
2474 epstatus = udc_clearep_getsts(udc, EP_IN);
2475
2476#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2477 ep0->totalints++;
2478#endif
2479
2480 /* Stalled? Clear stall and reset buffers */
2481 if (epstatus & EP_SEL_ST) {
2482 udc_clrstall_hwep(udc, EP_IN);
2483 nuke(ep0, -ECONNABORTED);
2484 udc->ep0state = WAIT_FOR_SETUP;
2485 return;
2486 }
2487
2488 /* Is a buffer available? */
2489 if (!(epstatus & EP_SEL_F)) {
2490 /* Handle based on current state */
2491 if (udc->ep0state == DATA_IN)
2492 udc_ep0_in_req(udc);
2493 else {
2494 /* Unknown state for EP0 oe end of DATA IN phase */
2495 nuke(ep0, -ECONNABORTED);
2496 udc->ep0state = WAIT_FOR_SETUP;
2497 }
2498 }
2499}
2500
2501/* OUT endpoint 0 transfer */
2502static void udc_handle_ep0_out(struct lpc32xx_udc *udc)
2503{
2504 struct lpc32xx_ep *ep0 = &udc->ep[0];
2505 u32 epstatus;
2506
2507 /* Clear EP interrupt */
2508 epstatus = udc_clearep_getsts(udc, EP_OUT);
2509
2510
2511#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2512 ep0->totalints++;
2513#endif
2514
2515 /* Stalled? */
2516 if (epstatus & EP_SEL_ST) {
2517 udc_clrstall_hwep(udc, EP_OUT);
2518 nuke(ep0, -ECONNABORTED);
2519 udc->ep0state = WAIT_FOR_SETUP;
2520 return;
2521 }
2522
2523 /* A NAK may occur if a packet couldn't be received yet */
2524 if (epstatus & EP_SEL_EPN)
2525 return;
2526 /* Setup packet incoming? */
2527 if (epstatus & EP_SEL_STP) {
2528 nuke(ep0, 0);
2529 udc->ep0state = WAIT_FOR_SETUP;
2530 }
2531
2532 /* Data available? */
2533 if (epstatus & EP_SEL_F)
2534 /* Handle based on current state */
2535 switch (udc->ep0state) {
2536 case WAIT_FOR_SETUP:
2537 udc_handle_ep0_setup(udc);
2538 break;
2539
2540 case DATA_OUT:
2541 udc_ep0_out_req(udc);
2542 break;
2543
2544 default:
2545 /* Unknown state for EP0 */
2546 nuke(ep0, -ECONNABORTED);
2547 udc->ep0state = WAIT_FOR_SETUP;
2548 }
2549}
2550
2551/* Must be called without lock */
2552static int lpc32xx_get_frame(struct usb_gadget *gadget)
2553{
2554 int frame;
2555 unsigned long flags;
2556 struct lpc32xx_udc *udc = to_udc(gadget);
2557
2558 if (!udc->clocked)
2559 return -EINVAL;
2560
2561 spin_lock_irqsave(&udc->lock, flags);
2562
2563 frame = (int) udc_get_current_frame(udc);
2564
2565 spin_unlock_irqrestore(&udc->lock, flags);
2566
2567 return frame;
2568}
2569
2570static int lpc32xx_wakeup(struct usb_gadget *gadget)
2571{
2572 return -ENOTSUPP;
2573}
2574
2575static int lpc32xx_set_selfpowered(struct usb_gadget *gadget, int is_on)
2576{
2577 struct lpc32xx_udc *udc = to_udc(gadget);
2578
2579 /* Always self-powered */
2580 udc->selfpowered = (is_on != 0);
2581
2582 return 0;
2583}
2584
2585/*
2586 * vbus is here! turn everything on that's ready
2587 * Must be called without lock
2588 */
2589static int lpc32xx_vbus_session(struct usb_gadget *gadget, int is_active)
2590{
2591 unsigned long flags;
2592 struct lpc32xx_udc *udc = to_udc(gadget);
2593
2594 spin_lock_irqsave(&udc->lock, flags);
2595
2596 /* Doesn't need lock */
2597 if (udc->driver) {
2598 udc_clk_set(udc, 1);
2599 udc_enable(udc);
2600 pullup(udc, is_active);
2601 } else {
2602 stop_activity(udc);
2603 pullup(udc, 0);
2604
2605 spin_unlock_irqrestore(&udc->lock, flags);
2606 /*
2607 * Wait for all the endpoints to disable,
2608 * before disabling clocks. Don't wait if
2609 * endpoints are not enabled.
2610 */
2611 if (atomic_read(&udc->enabled_ep_cnt))
2612 wait_event_interruptible(udc->ep_disable_wait_queue,
2613 (atomic_read(&udc->enabled_ep_cnt) == 0));
2614
2615 spin_lock_irqsave(&udc->lock, flags);
2616
2617 udc_clk_set(udc, 0);
2618 }
2619
2620 spin_unlock_irqrestore(&udc->lock, flags);
2621
2622 return 0;
2623}
2624
2625/* Can be called with or without lock */
2626static int lpc32xx_pullup(struct usb_gadget *gadget, int is_on)
2627{
2628 struct lpc32xx_udc *udc = to_udc(gadget);
2629
2630 /* Doesn't need lock */
2631 pullup(udc, is_on);
2632
2633 return 0;
2634}
2635
2636static int lpc32xx_start(struct usb_gadget_driver *driver,
2637 int (*bind)(struct usb_gadget *));
2638static int lpc32xx_stop(struct usb_gadget_driver *driver);
2639
2640static const struct usb_gadget_ops lpc32xx_udc_ops = {
2641 .get_frame = lpc32xx_get_frame,
2642 .wakeup = lpc32xx_wakeup,
2643 .set_selfpowered = lpc32xx_set_selfpowered,
2644 .vbus_session = lpc32xx_vbus_session,
2645 .pullup = lpc32xx_pullup,
2646 .start = lpc32xx_start,
2647 .stop = lpc32xx_stop,
2648};
2649
2650static void nop_release(struct device *dev)
2651{
2652 /* nothing to free */
2653}
2654
2655static struct lpc32xx_udc controller = {
2656 .gadget = {
2657 .ops = &lpc32xx_udc_ops,
2658 .ep0 = &controller.ep[0].ep,
2659 .name = driver_name,
2660 .dev = {
2661 .init_name = "gadget",
2662 .release = nop_release,
2663 }
2664 },
2665 .ep[0] = {
2666 .ep = {
2667 .name = "ep0",
2668 .ops = &lpc32xx_ep_ops,
2669 },
2670 .udc = &controller,
2671 .maxpacket = 64,
2672 .hwep_num_base = 0,
2673 .hwep_num = 0, /* Can be 0 or 1, has special handling */
2674 .lep = 0,
2675 .eptype = EP_CTL_TYPE,
2676 },
2677 .ep[1] = {
2678 .ep = {
2679 .name = "ep1-int",
2680 .ops = &lpc32xx_ep_ops,
2681 },
2682 .udc = &controller,
2683 .maxpacket = 64,
2684 .hwep_num_base = 2,
2685 .hwep_num = 0, /* 2 or 3, will be set later */
2686 .lep = 1,
2687 .eptype = EP_INT_TYPE,
2688 },
2689 .ep[2] = {
2690 .ep = {
2691 .name = "ep2-bulk",
2692 .ops = &lpc32xx_ep_ops,
2693 },
2694 .udc = &controller,
2695 .maxpacket = 64,
2696 .hwep_num_base = 4,
2697 .hwep_num = 0, /* 4 or 5, will be set later */
2698 .lep = 2,
2699 .eptype = EP_BLK_TYPE,
2700 },
2701 .ep[3] = {
2702 .ep = {
2703 .name = "ep3-iso",
2704 .ops = &lpc32xx_ep_ops,
2705 },
2706 .udc = &controller,
2707 .maxpacket = 1023,
2708 .hwep_num_base = 6,
2709 .hwep_num = 0, /* 6 or 7, will be set later */
2710 .lep = 3,
2711 .eptype = EP_ISO_TYPE,
2712 },
2713 .ep[4] = {
2714 .ep = {
2715 .name = "ep4-int",
2716 .ops = &lpc32xx_ep_ops,
2717 },
2718 .udc = &controller,
2719 .maxpacket = 64,
2720 .hwep_num_base = 8,
2721 .hwep_num = 0, /* 8 or 9, will be set later */
2722 .lep = 4,
2723 .eptype = EP_INT_TYPE,
2724 },
2725 .ep[5] = {
2726 .ep = {
2727 .name = "ep5-bulk",
2728 .ops = &lpc32xx_ep_ops,
2729 },
2730 .udc = &controller,
2731 .maxpacket = 64,
2732 .hwep_num_base = 10,
2733 .hwep_num = 0, /* 10 or 11, will be set later */
2734 .lep = 5,
2735 .eptype = EP_BLK_TYPE,
2736 },
2737 .ep[6] = {
2738 .ep = {
2739 .name = "ep6-iso",
2740 .ops = &lpc32xx_ep_ops,
2741 },
2742 .udc = &controller,
2743 .maxpacket = 1023,
2744 .hwep_num_base = 12,
2745 .hwep_num = 0, /* 12 or 13, will be set later */
2746 .lep = 6,
2747 .eptype = EP_ISO_TYPE,
2748 },
2749 .ep[7] = {
2750 .ep = {
2751 .name = "ep7-int",
2752 .ops = &lpc32xx_ep_ops,
2753 },
2754 .udc = &controller,
2755 .maxpacket = 64,
2756 .hwep_num_base = 14,
2757 .hwep_num = 0,
2758 .lep = 7,
2759 .eptype = EP_INT_TYPE,
2760 },
2761 .ep[8] = {
2762 .ep = {
2763 .name = "ep8-bulk",
2764 .ops = &lpc32xx_ep_ops,
2765 },
2766 .udc = &controller,
2767 .maxpacket = 64,
2768 .hwep_num_base = 16,
2769 .hwep_num = 0,
2770 .lep = 8,
2771 .eptype = EP_BLK_TYPE,
2772 },
2773 .ep[9] = {
2774 .ep = {
2775 .name = "ep9-iso",
2776 .ops = &lpc32xx_ep_ops,
2777 },
2778 .udc = &controller,
2779 .maxpacket = 1023,
2780 .hwep_num_base = 18,
2781 .hwep_num = 0,
2782 .lep = 9,
2783 .eptype = EP_ISO_TYPE,
2784 },
2785 .ep[10] = {
2786 .ep = {
2787 .name = "ep10-int",
2788 .ops = &lpc32xx_ep_ops,
2789 },
2790 .udc = &controller,
2791 .maxpacket = 64,
2792 .hwep_num_base = 20,
2793 .hwep_num = 0,
2794 .lep = 10,
2795 .eptype = EP_INT_TYPE,
2796 },
2797 .ep[11] = {
2798 .ep = {
2799 .name = "ep11-bulk",
2800 .ops = &lpc32xx_ep_ops,
2801 },
2802 .udc = &controller,
2803 .maxpacket = 64,
2804 .hwep_num_base = 22,
2805 .hwep_num = 0,
2806 .lep = 11,
2807 .eptype = EP_BLK_TYPE,
2808 },
2809 .ep[12] = {
2810 .ep = {
2811 .name = "ep12-iso",
2812 .ops = &lpc32xx_ep_ops,
2813 },
2814 .udc = &controller,
2815 .maxpacket = 1023,
2816 .hwep_num_base = 24,
2817 .hwep_num = 0,
2818 .lep = 12,
2819 .eptype = EP_ISO_TYPE,
2820 },
2821 .ep[13] = {
2822 .ep = {
2823 .name = "ep13-int",
2824 .ops = &lpc32xx_ep_ops,
2825 },
2826 .udc = &controller,
2827 .maxpacket = 64,
2828 .hwep_num_base = 26,
2829 .hwep_num = 0,
2830 .lep = 13,
2831 .eptype = EP_INT_TYPE,
2832 },
2833 .ep[14] = {
2834 .ep = {
2835 .name = "ep14-bulk",
2836 .ops = &lpc32xx_ep_ops,
2837 },
2838 .udc = &controller,
2839 .maxpacket = 64,
2840 .hwep_num_base = 28,
2841 .hwep_num = 0,
2842 .lep = 14,
2843 .eptype = EP_BLK_TYPE,
2844 },
2845 .ep[15] = {
2846 .ep = {
2847 .name = "ep15-bulk",
2848 .ops = &lpc32xx_ep_ops,
2849 },
2850 .udc = &controller,
2851 .maxpacket = 1023,
2852 .hwep_num_base = 30,
2853 .hwep_num = 0,
2854 .lep = 15,
2855 .eptype = EP_BLK_TYPE,
2856 },
2857};
2858
2859/* ISO and status interrupts */
2860static irqreturn_t lpc32xx_usb_lp_irq(int irq, void *_udc)
2861{
2862 u32 tmp, devstat;
2863 struct lpc32xx_udc *udc = _udc;
2864
2865 spin_lock(&udc->lock);
2866
2867 /* Read the device status register */
2868 devstat = readl(USBD_DEVINTST(udc->udp_baseaddr));
2869
2870 devstat &= ~USBD_EP_FAST;
2871 writel(devstat, USBD_DEVINTCLR(udc->udp_baseaddr));
2872 devstat = devstat & udc->enabled_devints;
2873
2874 /* Device specific handling needed? */
2875 if (devstat & USBD_DEV_STAT)
2876 udc_handle_dev(udc);
2877
2878 /* Start of frame? (devstat & FRAME_INT):
2879 * The frame interrupt isn't really needed for ISO support,
2880 * as the driver will queue the necessary packets */
2881
2882 /* Error? */
2883 if (devstat & ERR_INT) {
2884 /* All types of errors, from cable removal during transfer to
2885 * misc protocol and bit errors. These are mostly for just info,
2886 * as the USB hardware will work around these. If these errors
2887 * happen alot, something is wrong. */
2888 udc_protocol_cmd_w(udc, CMD_RD_ERR_STAT);
2889 tmp = udc_protocol_cmd_r(udc, DAT_RD_ERR_STAT);
2890 dev_dbg(udc->dev, "Device error (0x%x)!\n", tmp);
2891 }
2892
2893 spin_unlock(&udc->lock);
2894
2895 return IRQ_HANDLED;
2896}
2897
2898/* EP interrupts */
2899static irqreturn_t lpc32xx_usb_hp_irq(int irq, void *_udc)
2900{
2901 u32 tmp;
2902 struct lpc32xx_udc *udc = _udc;
2903
2904 spin_lock(&udc->lock);
2905
2906 /* Read the device status register */
2907 writel(USBD_EP_FAST, USBD_DEVINTCLR(udc->udp_baseaddr));
2908
2909 /* Endpoints */
2910 tmp = readl(USBD_EPINTST(udc->udp_baseaddr));
2911
2912 /* Special handling for EP0 */
2913 if (tmp & (EP_MASK_SEL(0, EP_OUT) | EP_MASK_SEL(0, EP_IN))) {
2914 /* Handle EP0 IN */
2915 if (tmp & (EP_MASK_SEL(0, EP_IN)))
2916 udc_handle_ep0_in(udc);
2917
2918 /* Handle EP0 OUT */
2919 if (tmp & (EP_MASK_SEL(0, EP_OUT)))
2920 udc_handle_ep0_out(udc);
2921 }
2922
2923 /* All other EPs */
2924 if (tmp & ~(EP_MASK_SEL(0, EP_OUT) | EP_MASK_SEL(0, EP_IN))) {
2925 int i;
2926
2927 /* Handle other EP interrupts */
2928 for (i = 1; i < NUM_ENDPOINTS; i++) {
2929 if (tmp & (1 << udc->ep[i].hwep_num))
2930 udc_handle_eps(udc, &udc->ep[i]);
2931 }
2932 }
2933
2934 spin_unlock(&udc->lock);
2935
2936 return IRQ_HANDLED;
2937}
2938
2939static irqreturn_t lpc32xx_usb_devdma_irq(int irq, void *_udc)
2940{
2941 struct lpc32xx_udc *udc = _udc;
2942
2943 int i;
2944 u32 tmp;
2945
2946 spin_lock(&udc->lock);
2947
2948 /* Handle EP DMA EOT interrupts */
2949 tmp = readl(USBD_EOTINTST(udc->udp_baseaddr)) |
2950 (readl(USBD_EPDMAST(udc->udp_baseaddr)) &
2951 readl(USBD_NDDRTINTST(udc->udp_baseaddr))) |
2952 readl(USBD_SYSERRTINTST(udc->udp_baseaddr));
2953 for (i = 1; i < NUM_ENDPOINTS; i++) {
2954 if (tmp & (1 << udc->ep[i].hwep_num))
2955 udc_handle_dma_ep(udc, &udc->ep[i]);
2956 }
2957
2958 spin_unlock(&udc->lock);
2959
2960 return IRQ_HANDLED;
2961}
2962
2963/*
2964 *
2965 * VBUS detection, pullup handler, and Gadget cable state notification
2966 *
2967 */
2968static void vbus_work(struct work_struct *work)
2969{
2970 u8 value;
2971 struct lpc32xx_udc *udc = container_of(work, struct lpc32xx_udc,
2972 vbus_job);
2973
2974 if (udc->enabled != 0) {
2975 /* Discharge VBUS real quick */
2976 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2977 ISP1301_I2C_OTG_CONTROL_1, OTG1_VBUS_DISCHRG);
2978
2979 /* Give VBUS some time (100mS) to discharge */
2980 msleep(100);
2981
2982 /* Disable VBUS discharge resistor */
2983 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2984 ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR,
2985 OTG1_VBUS_DISCHRG);
2986
2987 /* Clear interrupt */
2988 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2989 ISP1301_I2C_INTERRUPT_LATCH |
2990 ISP1301_I2C_REG_CLEAR_ADDR, ~0);
2991
2992 /* Get the VBUS status from the transceiver */
2993 value = i2c_smbus_read_byte_data(udc->isp1301_i2c_client,
2994 ISP1301_I2C_OTG_CONTROL_2);
2995
2996 /* VBUS on or off? */
2997 if (value & OTG_B_SESS_VLD)
2998 udc->vbus = 1;
2999 else
3000 udc->vbus = 0;
3001
3002 /* VBUS changed? */
3003 if (udc->last_vbus != udc->vbus) {
3004 udc->last_vbus = udc->vbus;
3005 lpc32xx_vbus_session(&udc->gadget, udc->vbus);
3006 }
3007 }
3008
3009 /* Re-enable after completion */
3010 enable_irq(udc->udp_irq[IRQ_USB_ATX]);
3011}
3012
3013static irqreturn_t lpc32xx_usb_vbus_irq(int irq, void *_udc)
3014{
3015 struct lpc32xx_udc *udc = _udc;
3016
3017 /* Defer handling of VBUS IRQ to work queue */
3018 disable_irq_nosync(udc->udp_irq[IRQ_USB_ATX]);
3019 schedule_work(&udc->vbus_job);
3020
3021 return IRQ_HANDLED;
3022}
3023
3024static int lpc32xx_start(struct usb_gadget_driver *driver,
3025 int (*bind)(struct usb_gadget *))
3026{
3027 struct lpc32xx_udc *udc = &controller;
3028 int retval, i;
3029
3030 if (!driver || driver->max_speed < USB_SPEED_FULL ||
3031 !bind || !driver->setup) {
3032 dev_err(udc->dev, "bad parameter.\n");
3033 return -EINVAL;
3034 }
3035
3036 if (udc->driver) {
3037 dev_err(udc->dev, "UDC already has a gadget driver\n");
3038 return -EBUSY;
3039 }
3040
3041 udc->driver = driver;
3042 udc->gadget.dev.driver = &driver->driver;
3043 udc->enabled = 1;
3044 udc->selfpowered = 1;
3045 udc->vbus = 0;
3046
3047 retval = bind(&udc->gadget);
3048 if (retval) {
3049 dev_err(udc->dev, "bind() returned %d\n", retval);
3050 udc->enabled = 0;
3051 udc->selfpowered = 0;
3052 udc->driver = NULL;
3053 udc->gadget.dev.driver = NULL;
3054 return retval;
3055 }
3056
3057 dev_dbg(udc->dev, "bound to %s\n", driver->driver.name);
3058
3059 /* Force VBUS process once to check for cable insertion */
3060 udc->last_vbus = udc->vbus = 0;
3061 schedule_work(&udc->vbus_job);
3062
3063 /* Do not re-enable ATX IRQ (3) */
3064 for (i = IRQ_USB_LP; i < IRQ_USB_ATX; i++)
3065 enable_irq(udc->udp_irq[i]);
3066
3067 return 0;
3068}
3069
3070static int lpc32xx_stop(struct usb_gadget_driver *driver)
3071{
3072 int i;
3073 struct lpc32xx_udc *udc = &controller;
3074
3075 if (!driver || driver != udc->driver || !driver->unbind)
3076 return -EINVAL;
3077
3078 /* Disable USB pullup */
3079 isp1301_pullup_enable(udc, 0, 1);
3080
3081 for (i = IRQ_USB_LP; i <= IRQ_USB_ATX; i++)
3082 disable_irq(udc->udp_irq[i]);
3083
3084 if (udc->clocked) {
3085
3086 spin_lock(&udc->lock);
3087 stop_activity(udc);
3088 spin_unlock(&udc->lock);
3089
3090 /*
3091 * Wait for all the endpoints to disable,
3092 * before disabling clocks. Don't wait if
3093 * endpoints are not enabled.
3094 */
3095 if (atomic_read(&udc->enabled_ep_cnt))
3096 wait_event_interruptible(udc->ep_disable_wait_queue,
3097 (atomic_read(&udc->enabled_ep_cnt) == 0));
3098
3099 spin_lock(&udc->lock);
3100 udc_clk_set(udc, 0);
3101 spin_unlock(&udc->lock);
3102 }
3103
3104 udc->enabled = 0;
3105 pullup(udc, 0);
3106
3107 driver->unbind(&udc->gadget);
3108 udc->gadget.dev.driver = NULL;
3109 udc->driver = NULL;
3110
3111 dev_dbg(udc->dev, "unbound from %s\n", driver->driver.name);
3112 return 0;
3113}
3114
3115static void lpc32xx_udc_shutdown(struct platform_device *dev)
3116{
3117 /* Force disconnect on reboot */
3118 struct lpc32xx_udc *udc = &controller;
3119
3120 pullup(udc, 0);
3121}
3122
3123/*
3124 * Callbacks to be overridden by options passed via OF (TODO)
3125 */
3126
3127static void lpc32xx_usbd_conn_chg(int conn)
3128{
3129 /* Do nothing, it might be nice to enable an LED
3130 * based on conn state being !0 */
3131}
3132
3133static void lpc32xx_usbd_susp_chg(int susp)
3134{
3135 /* Device suspend if susp != 0 */
3136}
3137
3138static void lpc32xx_rmwkup_chg(int remote_wakup_enable)
3139{
3140 /* Enable or disable USB remote wakeup */
3141}
3142
3143struct lpc32xx_usbd_cfg lpc32xx_usbddata = {
3144 .vbus_drv_pol = 0,
3145 .conn_chgb = &lpc32xx_usbd_conn_chg,
3146 .susp_chgb = &lpc32xx_usbd_susp_chg,
3147 .rmwk_chgb = &lpc32xx_rmwkup_chg,
3148};
3149
3150
3151static u64 lpc32xx_usbd_dmamask = ~(u32) 0x7F;
3152
3153static int __init lpc32xx_udc_probe(struct platform_device *pdev)
3154{
3155 struct device *dev = &pdev->dev;
3156 struct lpc32xx_udc *udc = &controller;
3157 int retval, i;
3158 struct resource *res;
3159 dma_addr_t dma_handle;
3160 struct device_node *isp1301_node;
3161
3162 /* init software state */
3163 udc->gadget.dev.parent = dev;
3164 udc->pdev = pdev;
3165 udc->dev = &pdev->dev;
3166 udc->enabled = 0;
3167
3168 if (pdev->dev.of_node) {
3169 isp1301_node = of_parse_phandle(pdev->dev.of_node,
3170 "transceiver", 0);
3171 } else {
3172 isp1301_node = NULL;
3173 }
3174
3175 udc->isp1301_i2c_client = isp1301_get_client(isp1301_node);
3176 if (!udc->isp1301_i2c_client)
3177 return -EPROBE_DEFER;
3178
3179 dev_info(udc->dev, "ISP1301 I2C device at address 0x%x\n",
3180 udc->isp1301_i2c_client->addr);
3181
3182 pdev->dev.dma_mask = &lpc32xx_usbd_dmamask;
3183 pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
3184
3185 udc->board = &lpc32xx_usbddata;
3186
3187 /*
3188 * Resources are mapped as follows:
3189 * IORESOURCE_MEM, base address and size of USB space
3190 * IORESOURCE_IRQ, USB device low priority interrupt number
3191 * IORESOURCE_IRQ, USB device high priority interrupt number
3192 * IORESOURCE_IRQ, USB device interrupt number
3193 * IORESOURCE_IRQ, USB transceiver interrupt number
3194 */
3195 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3196 if (!res)
3197 return -ENXIO;
3198
3199 spin_lock_init(&udc->lock);
3200
3201 /* Get IRQs */
3202 for (i = 0; i < 4; i++) {
3203 udc->udp_irq[i] = platform_get_irq(pdev, i);
3204 if (udc->udp_irq[i] < 0) {
3205 dev_err(udc->dev,
3206 "irq resource %d not available!\n", i);
3207 return udc->udp_irq[i];
3208 }
3209 }
3210
3211 udc->io_p_start = res->start;
3212 udc->io_p_size = resource_size(res);
3213 if (!request_mem_region(udc->io_p_start, udc->io_p_size, driver_name)) {
3214 dev_err(udc->dev, "someone's using UDC memory\n");
3215 return -EBUSY;
3216 }
3217
3218 udc->udp_baseaddr = ioremap(udc->io_p_start, udc->io_p_size);
3219 if (!udc->udp_baseaddr) {
3220 retval = -ENOMEM;
3221 dev_err(udc->dev, "IO map failure\n");
3222 goto io_map_fail;
3223 }
3224
3225 /* Enable AHB slave USB clock, needed for further USB clock control */
3226 writel(USB_SLAVE_HCLK_EN | (1 << 19), USB_CTRL);
3227
3228 /* Get required clocks */
3229 udc->usb_pll_clk = clk_get(&pdev->dev, "ck_pll5");
3230 if (IS_ERR(udc->usb_pll_clk)) {
3231 dev_err(udc->dev, "failed to acquire USB PLL\n");
3232 retval = PTR_ERR(udc->usb_pll_clk);
3233 goto pll_get_fail;
3234 }
3235 udc->usb_slv_clk = clk_get(&pdev->dev, "ck_usbd");
3236 if (IS_ERR(udc->usb_slv_clk)) {
3237 dev_err(udc->dev, "failed to acquire USB device clock\n");
3238 retval = PTR_ERR(udc->usb_slv_clk);
3239 goto usb_clk_get_fail;
3240 }
3241
3242 /* Setup PLL clock to 48MHz */
3243 retval = clk_enable(udc->usb_pll_clk);
3244 if (retval < 0) {
3245 dev_err(udc->dev, "failed to start USB PLL\n");
3246 goto pll_enable_fail;
3247 }
3248
3249 retval = clk_set_rate(udc->usb_pll_clk, 48000);
3250 if (retval < 0) {
3251 dev_err(udc->dev, "failed to set USB clock rate\n");
3252 goto pll_set_fail;
3253 }
3254
3255 writel(readl(USB_CTRL) | USB_DEV_NEED_CLK_EN, USB_CTRL);
3256
3257 /* Enable USB device clock */
3258 retval = clk_enable(udc->usb_slv_clk);
3259 if (retval < 0) {
3260 dev_err(udc->dev, "failed to start USB device clock\n");
3261 goto usb_clk_enable_fail;
3262 }
3263
3264 /* Set to enable all needed USB OTG clocks */
3265 writel(USB_CLOCK_MASK, USB_OTG_CLK_CTRL(udc));
3266
3267 i = 1000;
3268 while (((readl(USB_OTG_CLK_STAT(udc)) & USB_CLOCK_MASK) !=
3269 USB_CLOCK_MASK) && (i > 0))
3270 i--;
3271 if (!i)
3272 dev_dbg(udc->dev, "USB OTG clocks not correctly enabled\n");
3273
3274 /* Setup deferred workqueue data */
3275 udc->poweron = udc->pullup = 0;
3276 INIT_WORK(&udc->pullup_job, pullup_work);
3277 INIT_WORK(&udc->vbus_job, vbus_work);
3278#ifdef CONFIG_PM
3279 INIT_WORK(&udc->power_job, power_work);
3280#endif
3281
3282 /* All clocks are now on */
3283 udc->clocked = 1;
3284
3285 isp1301_udc_configure(udc);
3286 /* Allocate memory for the UDCA */
3287 udc->udca_v_base = dma_alloc_coherent(&pdev->dev, UDCA_BUFF_SIZE,
3288 &dma_handle,
3289 (GFP_KERNEL | GFP_DMA));
3290 if (!udc->udca_v_base) {
3291 dev_err(udc->dev, "error getting UDCA region\n");
3292 retval = -ENOMEM;
3293 goto i2c_fail;
3294 }
3295 udc->udca_p_base = dma_handle;
3296 dev_dbg(udc->dev, "DMA buffer(0x%x bytes), P:0x%08x, V:0x%p\n",
3297 UDCA_BUFF_SIZE, udc->udca_p_base, udc->udca_v_base);
3298
3299 /* Setup the DD DMA memory pool */
3300 udc->dd_cache = dma_pool_create("udc_dd", udc->dev,
3301 sizeof(struct lpc32xx_usbd_dd_gad),
3302 sizeof(u32), 0);
3303 if (!udc->dd_cache) {
3304 dev_err(udc->dev, "error getting DD DMA region\n");
3305 retval = -ENOMEM;
3306 goto dma_alloc_fail;
3307 }
3308
3309 /* Clear USB peripheral and initialize gadget endpoints */
3310 udc_disable(udc);
3311 udc_reinit(udc);
3312
3313 retval = device_register(&udc->gadget.dev);
3314 if (retval < 0) {
3315 dev_err(udc->dev, "Device registration failure\n");
3316 goto dev_register_fail;
3317 }
3318
3319 /* Request IRQs - low and high priority USB device IRQs are routed to
3320 * the same handler, while the DMA interrupt is routed elsewhere */
3321 retval = request_irq(udc->udp_irq[IRQ_USB_LP], lpc32xx_usb_lp_irq,
3322 0, "udc_lp", udc);
3323 if (retval < 0) {
3324 dev_err(udc->dev, "LP request irq %d failed\n",
3325 udc->udp_irq[IRQ_USB_LP]);
3326 goto irq_lp_fail;
3327 }
3328 retval = request_irq(udc->udp_irq[IRQ_USB_HP], lpc32xx_usb_hp_irq,
3329 0, "udc_hp", udc);
3330 if (retval < 0) {
3331 dev_err(udc->dev, "HP request irq %d failed\n",
3332 udc->udp_irq[IRQ_USB_HP]);
3333 goto irq_hp_fail;
3334 }
3335
3336 retval = request_irq(udc->udp_irq[IRQ_USB_DEVDMA],
3337 lpc32xx_usb_devdma_irq, 0, "udc_dma", udc);
3338 if (retval < 0) {
3339 dev_err(udc->dev, "DEV request irq %d failed\n",
3340 udc->udp_irq[IRQ_USB_DEVDMA]);
3341 goto irq_dev_fail;
3342 }
3343
3344 /* The transceiver interrupt is used for VBUS detection and will
3345 kick off the VBUS handler function */
3346 retval = request_irq(udc->udp_irq[IRQ_USB_ATX], lpc32xx_usb_vbus_irq,
3347 0, "udc_otg", udc);
3348 if (retval < 0) {
3349 dev_err(udc->dev, "VBUS request irq %d failed\n",
3350 udc->udp_irq[IRQ_USB_ATX]);
3351 goto irq_xcvr_fail;
3352 }
3353
3354 /* Initialize wait queue */
3355 init_waitqueue_head(&udc->ep_disable_wait_queue);
3356 atomic_set(&udc->enabled_ep_cnt, 0);
3357
3358 /* Keep all IRQs disabled until GadgetFS starts up */
3359 for (i = IRQ_USB_LP; i <= IRQ_USB_ATX; i++)
3360 disable_irq(udc->udp_irq[i]);
3361
3362 retval = usb_add_gadget_udc(dev, &udc->gadget);
3363 if (retval < 0)
3364 goto add_gadget_fail;
3365
3366 dev_set_drvdata(dev, udc);
3367 device_init_wakeup(dev, 1);
3368 create_debug_file(udc);
3369
3370 /* Disable clocks for now */
3371 udc_clk_set(udc, 0);
3372
3373 dev_info(udc->dev, "%s version %s\n", driver_name, DRIVER_VERSION);
3374 return 0;
3375
3376add_gadget_fail:
3377 free_irq(udc->udp_irq[IRQ_USB_ATX], udc);
3378irq_xcvr_fail:
3379 free_irq(udc->udp_irq[IRQ_USB_DEVDMA], udc);
3380irq_dev_fail:
3381 free_irq(udc->udp_irq[IRQ_USB_HP], udc);
3382irq_hp_fail:
3383 free_irq(udc->udp_irq[IRQ_USB_LP], udc);
3384irq_lp_fail:
3385 device_unregister(&udc->gadget.dev);
3386dev_register_fail:
3387 dma_pool_destroy(udc->dd_cache);
3388dma_alloc_fail:
3389 dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE,
3390 udc->udca_v_base, udc->udca_p_base);
3391i2c_fail:
3392 clk_disable(udc->usb_slv_clk);
3393usb_clk_enable_fail:
3394pll_set_fail:
3395 clk_disable(udc->usb_pll_clk);
3396pll_enable_fail:
3397 clk_put(udc->usb_slv_clk);
3398usb_clk_get_fail:
3399 clk_put(udc->usb_pll_clk);
3400pll_get_fail:
3401 iounmap(udc->udp_baseaddr);
3402io_map_fail:
3403 release_mem_region(udc->io_p_start, udc->io_p_size);
3404 dev_err(udc->dev, "%s probe failed, %d\n", driver_name, retval);
3405
3406 return retval;
3407}
3408
3409static int __devexit lpc32xx_udc_remove(struct platform_device *pdev)
3410{
3411 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3412
3413 usb_del_gadget_udc(&udc->gadget);
3414 if (udc->driver)
3415 return -EBUSY;
3416
3417 udc_clk_set(udc, 1);
3418 udc_disable(udc);
3419 pullup(udc, 0);
3420
3421 free_irq(udc->udp_irq[IRQ_USB_ATX], udc);
3422
3423 device_init_wakeup(&pdev->dev, 0);
3424 remove_debug_file(udc);
3425
3426 dma_pool_destroy(udc->dd_cache);
3427 dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE,
3428 udc->udca_v_base, udc->udca_p_base);
3429 free_irq(udc->udp_irq[IRQ_USB_DEVDMA], udc);
3430 free_irq(udc->udp_irq[IRQ_USB_HP], udc);
3431 free_irq(udc->udp_irq[IRQ_USB_LP], udc);
3432
3433 device_unregister(&udc->gadget.dev);
3434
3435 clk_disable(udc->usb_slv_clk);
3436 clk_put(udc->usb_slv_clk);
3437 clk_disable(udc->usb_pll_clk);
3438 clk_put(udc->usb_pll_clk);
3439 iounmap(udc->udp_baseaddr);
3440 release_mem_region(udc->io_p_start, udc->io_p_size);
3441
3442 return 0;
3443}
3444
3445#ifdef CONFIG_PM
3446static int lpc32xx_udc_suspend(struct platform_device *pdev, pm_message_t mesg)
3447{
3448 int to = 1000;
3449 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3450
3451 if (udc->clocked) {
3452 /* Power down ISP */
3453 udc->poweron = 0;
3454 isp1301_set_powerstate(udc, 0);
3455
3456 /* Disable clocking */
3457 udc_clk_set(udc, 0);
3458
3459 /* Keep clock flag on, so we know to re-enable clocks
3460 on resume */
3461 udc->clocked = 1;
3462
3463 /* Kill OTG and I2C clocks */
3464 writel(0, USB_OTG_CLK_CTRL(udc));
3465 while (((readl(USB_OTG_CLK_STAT(udc)) & OTGOFF_CLK_MASK) !=
3466 OTGOFF_CLK_MASK) && (to > 0))
3467 to--;
3468 if (!to)
3469 dev_dbg(udc->dev,
3470 "USB OTG clocks not correctly enabled\n");
3471
3472 /* Kill global USB clock */
3473 clk_disable(udc->usb_slv_clk);
3474 }
3475
3476 return 0;
3477}
3478
3479static int lpc32xx_udc_resume(struct platform_device *pdev)
3480{
3481 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3482
3483 if (udc->clocked) {
3484 /* Enable global USB clock */
3485 clk_enable(udc->usb_slv_clk);
3486
3487 /* Enable clocking */
3488 udc_clk_set(udc, 1);
3489
3490 /* ISP back to normal power mode */
3491 udc->poweron = 1;
3492 isp1301_set_powerstate(udc, 1);
3493 }
3494
3495 return 0;
3496}
3497#else
3498#define lpc32xx_udc_suspend NULL
3499#define lpc32xx_udc_resume NULL
3500#endif
3501
3502#ifdef CONFIG_OF
3503static struct of_device_id lpc32xx_udc_of_match[] = {
3504 { .compatible = "nxp,lpc3220-udc", },
3505 { },
3506};
3507MODULE_DEVICE_TABLE(of, lpc32xx_udc_of_match);
3508#endif
3509
3510static struct platform_driver lpc32xx_udc_driver = {
3511 .remove = __devexit_p(lpc32xx_udc_remove),
3512 .shutdown = lpc32xx_udc_shutdown,
3513 .suspend = lpc32xx_udc_suspend,
3514 .resume = lpc32xx_udc_resume,
3515 .driver = {
3516 .name = (char *) driver_name,
3517 .owner = THIS_MODULE,
3518 .of_match_table = of_match_ptr(lpc32xx_udc_of_match),
3519 },
3520};
3521
3522static int __init udc_init_module(void)
3523{
3524 return platform_driver_probe(&lpc32xx_udc_driver, lpc32xx_udc_probe);
3525}
3526module_init(udc_init_module);
3527
3528static void __exit udc_exit_module(void)
3529{
3530 platform_driver_unregister(&lpc32xx_udc_driver);
3531}
3532module_exit(udc_exit_module);
3533
3534MODULE_DESCRIPTION("LPC32XX udc driver");
3535MODULE_AUTHOR("Kevin Wells <kevin.wells@nxp.com>");
3536MODULE_AUTHOR("Roland Stigge <stigge@antcom.de>");
3537MODULE_LICENSE("GPL");
3538MODULE_ALIAS("platform:lpc32xx_udc");
diff --git a/drivers/usb/gadget/m66592-udc.c b/drivers/usb/gadget/m66592-udc.c
index 3608b3bd5732..8981fbb5748c 100644
--- a/drivers/usb/gadget/m66592-udc.c
+++ b/drivers/usb/gadget/m66592-udc.c
@@ -390,7 +390,7 @@ static int alloc_pipe_config(struct m66592_ep *ep,
390 int *counter; 390 int *counter;
391 int ret; 391 int ret;
392 392
393 ep->desc = desc; 393 ep->ep.desc = desc;
394 394
395 BUG_ON(ep->pipenum); 395 BUG_ON(ep->pipenum);
396 396
@@ -558,7 +558,7 @@ static void start_packet_read(struct m66592_ep *ep, struct m66592_request *req)
558 558
559static void start_packet(struct m66592_ep *ep, struct m66592_request *req) 559static void start_packet(struct m66592_ep *ep, struct m66592_request *req)
560{ 560{
561 if (ep->desc->bEndpointAddress & USB_DIR_IN) 561 if (ep->ep.desc->bEndpointAddress & USB_DIR_IN)
562 start_packet_write(ep, req); 562 start_packet_write(ep, req);
563 else 563 else
564 start_packet_read(ep, req); 564 start_packet_read(ep, req);
@@ -734,7 +734,7 @@ __acquires(m66592->lock)
734 734
735 if (restart) { 735 if (restart) {
736 req = list_entry(ep->queue.next, struct m66592_request, queue); 736 req = list_entry(ep->queue.next, struct m66592_request, queue);
737 if (ep->desc) 737 if (ep->ep.desc)
738 start_packet(ep, req); 738 start_packet(ep, req);
739 } 739 }
740} 740}
@@ -917,7 +917,7 @@ static void irq_pipe_ready(struct m66592 *m66592, u16 status, u16 enb)
917 ep = m66592->pipenum2ep[pipenum]; 917 ep = m66592->pipenum2ep[pipenum];
918 req = list_entry(ep->queue.next, 918 req = list_entry(ep->queue.next,
919 struct m66592_request, queue); 919 struct m66592_request, queue);
920 if (ep->desc->bEndpointAddress & USB_DIR_IN) 920 if (ep->ep.desc->bEndpointAddress & USB_DIR_IN)
921 irq_packet_write(ep, req); 921 irq_packet_write(ep, req);
922 else 922 else
923 irq_packet_read(ep, req); 923 irq_packet_read(ep, req);
@@ -1377,7 +1377,7 @@ static int m66592_queue(struct usb_ep *_ep, struct usb_request *_req,
1377 req->req.actual = 0; 1377 req->req.actual = 0;
1378 req->req.status = -EINPROGRESS; 1378 req->req.status = -EINPROGRESS;
1379 1379
1380 if (ep->desc == NULL) /* control */ 1380 if (ep->ep.desc == NULL) /* control */
1381 start_ep0(ep, req); 1381 start_ep0(ep, req);
1382 else { 1382 else {
1383 if (request && !ep->busy) 1383 if (request && !ep->busy)
diff --git a/drivers/usb/gadget/m66592-udc.h b/drivers/usb/gadget/m66592-udc.h
index 9d9f7e39f037..88c85b4116a2 100644
--- a/drivers/usb/gadget/m66592-udc.h
+++ b/drivers/usb/gadget/m66592-udc.h
@@ -456,7 +456,7 @@ struct m66592_ep {
456 unsigned use_dma:1; 456 unsigned use_dma:1;
457 u16 pipenum; 457 u16 pipenum;
458 u16 type; 458 u16 type;
459 const struct usb_endpoint_descriptor *desc; 459
460 /* register address */ 460 /* register address */
461 unsigned long fifoaddr; 461 unsigned long fifoaddr;
462 unsigned long fifosel; 462 unsigned long fifosel;
diff --git a/drivers/usb/gadget/mv_udc.h b/drivers/usb/gadget/mv_udc.h
index e2be9519abbe..9073436d8b24 100644
--- a/drivers/usb/gadget/mv_udc.h
+++ b/drivers/usb/gadget/mv_udc.h
@@ -232,7 +232,6 @@ struct mv_ep {
232 struct mv_udc *udc; 232 struct mv_udc *udc;
233 struct list_head queue; 233 struct list_head queue;
234 struct mv_dqh *dqh; 234 struct mv_dqh *dqh;
235 const struct usb_endpoint_descriptor *desc;
236 u32 direction; 235 u32 direction;
237 char name[14]; 236 char name[14];
238 unsigned stopped:1, 237 unsigned stopped:1,
diff --git a/drivers/usb/gadget/mv_udc_core.c b/drivers/usb/gadget/mv_udc_core.c
index a73cf406e2a4..dbcd1329495e 100644
--- a/drivers/usb/gadget/mv_udc_core.c
+++ b/drivers/usb/gadget/mv_udc_core.c
@@ -464,7 +464,7 @@ static int mv_ep_enable(struct usb_ep *_ep,
464 ep = container_of(_ep, struct mv_ep, ep); 464 ep = container_of(_ep, struct mv_ep, ep);
465 udc = ep->udc; 465 udc = ep->udc;
466 466
467 if (!_ep || !desc || ep->desc 467 if (!_ep || !desc || ep->ep.desc
468 || desc->bDescriptorType != USB_DT_ENDPOINT) 468 || desc->bDescriptorType != USB_DT_ENDPOINT)
469 return -EINVAL; 469 return -EINVAL;
470 470
@@ -528,7 +528,7 @@ static int mv_ep_enable(struct usb_ep *_ep,
528 dqh->size_ioc_int_sts = 0; 528 dqh->size_ioc_int_sts = 0;
529 529
530 ep->ep.maxpacket = max; 530 ep->ep.maxpacket = max;
531 ep->desc = desc; 531 ep->ep.desc = desc;
532 ep->stopped = 0; 532 ep->stopped = 0;
533 533
534 /* Enable the endpoint for Rx or Tx and set the endpoint type */ 534 /* Enable the endpoint for Rx or Tx and set the endpoint type */
@@ -580,7 +580,7 @@ static int mv_ep_disable(struct usb_ep *_ep)
580 unsigned long flags; 580 unsigned long flags;
581 581
582 ep = container_of(_ep, struct mv_ep, ep); 582 ep = container_of(_ep, struct mv_ep, ep);
583 if ((_ep == NULL) || !ep->desc) 583 if ((_ep == NULL) || !ep->ep.desc)
584 return -EINVAL; 584 return -EINVAL;
585 585
586 udc = ep->udc; 586 udc = ep->udc;
@@ -606,7 +606,6 @@ static int mv_ep_disable(struct usb_ep *_ep)
606 /* nuke all pending requests (does flush) */ 606 /* nuke all pending requests (does flush) */
607 nuke(ep, -ESHUTDOWN); 607 nuke(ep, -ESHUTDOWN);
608 608
609 ep->desc = NULL;
610 ep->ep.desc = NULL; 609 ep->ep.desc = NULL;
611 ep->stopped = 1; 610 ep->stopped = 1;
612 611
@@ -651,7 +650,7 @@ static void mv_ep_fifo_flush(struct usb_ep *_ep)
651 return; 650 return;
652 651
653 ep = container_of(_ep, struct mv_ep, ep); 652 ep = container_of(_ep, struct mv_ep, ep);
654 if (!ep->desc) 653 if (!ep->ep.desc)
655 return; 654 return;
656 655
657 udc = ep->udc; 656 udc = ep->udc;
@@ -715,11 +714,11 @@ mv_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
715 dev_err(&udc->dev->dev, "%s, bad params", __func__); 714 dev_err(&udc->dev->dev, "%s, bad params", __func__);
716 return -EINVAL; 715 return -EINVAL;
717 } 716 }
718 if (unlikely(!_ep || !ep->desc)) { 717 if (unlikely(!_ep || !ep->ep.desc)) {
719 dev_err(&udc->dev->dev, "%s, bad ep", __func__); 718 dev_err(&udc->dev->dev, "%s, bad ep", __func__);
720 return -EINVAL; 719 return -EINVAL;
721 } 720 }
722 if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) { 721 if (ep->ep.desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
723 if (req->req.length > ep->ep.maxpacket) 722 if (req->req.length > ep->ep.maxpacket)
724 return -EMSGSIZE; 723 return -EMSGSIZE;
725 } 724 }
@@ -925,12 +924,12 @@ static int mv_ep_set_halt_wedge(struct usb_ep *_ep, int halt, int wedge)
925 924
926 ep = container_of(_ep, struct mv_ep, ep); 925 ep = container_of(_ep, struct mv_ep, ep);
927 udc = ep->udc; 926 udc = ep->udc;
928 if (!_ep || !ep->desc) { 927 if (!_ep || !ep->ep.desc) {
929 status = -EINVAL; 928 status = -EINVAL;
930 goto out; 929 goto out;
931 } 930 }
932 931
933 if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) { 932 if (ep->ep.desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
934 status = -EOPNOTSUPP; 933 status = -EOPNOTSUPP;
935 goto out; 934 goto out;
936 } 935 }
@@ -1279,7 +1278,7 @@ static int eps_init(struct mv_udc *udc)
1279 ep->stopped = 0; 1278 ep->stopped = 0;
1280 ep->ep.maxpacket = EP0_MAX_PKT_SIZE; 1279 ep->ep.maxpacket = EP0_MAX_PKT_SIZE;
1281 ep->ep_num = 0; 1280 ep->ep_num = 0;
1282 ep->desc = &mv_ep0_desc; 1281 ep->ep.desc = &mv_ep0_desc;
1283 INIT_LIST_HEAD(&ep->queue); 1282 INIT_LIST_HEAD(&ep->queue);
1284 1283
1285 ep->ep_type = USB_ENDPOINT_XFER_CONTROL; 1284 ep->ep_type = USB_ENDPOINT_XFER_CONTROL;
diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c
index 3b4b6dd0f95a..7ba32469c5bd 100644
--- a/drivers/usb/gadget/omap_udc.c
+++ b/drivers/usb/gadget/omap_udc.c
@@ -153,7 +153,7 @@ static int omap_ep_enable(struct usb_ep *_ep,
153 u16 maxp; 153 u16 maxp;
154 154
155 /* catch various bogus parameters */ 155 /* catch various bogus parameters */
156 if (!_ep || !desc || ep->desc 156 if (!_ep || !desc || ep->ep.desc
157 || desc->bDescriptorType != USB_DT_ENDPOINT 157 || desc->bDescriptorType != USB_DT_ENDPOINT
158 || ep->bEndpointAddress != desc->bEndpointAddress 158 || ep->bEndpointAddress != desc->bEndpointAddress
159 || ep->maxpacket < usb_endpoint_maxp(desc)) { 159 || ep->maxpacket < usb_endpoint_maxp(desc)) {
@@ -200,7 +200,7 @@ static int omap_ep_enable(struct usb_ep *_ep,
200 200
201 spin_lock_irqsave(&udc->lock, flags); 201 spin_lock_irqsave(&udc->lock, flags);
202 202
203 ep->desc = desc; 203 ep->ep.desc = desc;
204 ep->irqs = 0; 204 ep->irqs = 0;
205 ep->stopped = 0; 205 ep->stopped = 0;
206 ep->ep.maxpacket = maxp; 206 ep->ep.maxpacket = maxp;
@@ -242,14 +242,13 @@ static int omap_ep_disable(struct usb_ep *_ep)
242 struct omap_ep *ep = container_of(_ep, struct omap_ep, ep); 242 struct omap_ep *ep = container_of(_ep, struct omap_ep, ep);
243 unsigned long flags; 243 unsigned long flags;
244 244
245 if (!_ep || !ep->desc) { 245 if (!_ep || !ep->ep.desc) {
246 DBG("%s, %s not enabled\n", __func__, 246 DBG("%s, %s not enabled\n", __func__,
247 _ep ? ep->ep.name : NULL); 247 _ep ? ep->ep.name : NULL);
248 return -EINVAL; 248 return -EINVAL;
249 } 249 }
250 250
251 spin_lock_irqsave(&ep->udc->lock, flags); 251 spin_lock_irqsave(&ep->udc->lock, flags);
252 ep->desc = NULL;
253 ep->ep.desc = NULL; 252 ep->ep.desc = NULL;
254 nuke (ep, -ESHUTDOWN); 253 nuke (ep, -ESHUTDOWN);
255 ep->ep.maxpacket = ep->maxpacket; 254 ep->ep.maxpacket = ep->maxpacket;
@@ -917,7 +916,7 @@ omap_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
917 DBG("%s, bad params\n", __func__); 916 DBG("%s, bad params\n", __func__);
918 return -EINVAL; 917 return -EINVAL;
919 } 918 }
920 if (!_ep || (!ep->desc && ep->bEndpointAddress)) { 919 if (!_ep || (!ep->ep.desc && ep->bEndpointAddress)) {
921 DBG("%s, bad ep\n", __func__); 920 DBG("%s, bad ep\n", __func__);
922 return -EINVAL; 921 return -EINVAL;
923 } 922 }
@@ -1121,7 +1120,7 @@ static int omap_ep_set_halt(struct usb_ep *_ep, int value)
1121 status = 0; 1120 status = 0;
1122 1121
1123 /* otherwise, all active non-ISO endpoints can halt */ 1122 /* otherwise, all active non-ISO endpoints can halt */
1124 } else if (ep->bmAttributes != USB_ENDPOINT_XFER_ISOC && ep->desc) { 1123 } else if (ep->bmAttributes != USB_ENDPOINT_XFER_ISOC && ep->ep.desc) {
1125 1124
1126 /* IN endpoints must already be idle */ 1125 /* IN endpoints must already be idle */
1127 if ((ep->bEndpointAddress & USB_DIR_IN) 1126 if ((ep->bEndpointAddress & USB_DIR_IN)
@@ -1625,7 +1624,7 @@ static void ep0_irq(struct omap_udc *udc, u16 irq_src)
1625 if (w_index & USB_DIR_IN) 1624 if (w_index & USB_DIR_IN)
1626 ep += 16; 1625 ep += 16;
1627 if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC 1626 if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC
1628 || !ep->desc) 1627 || !ep->ep.desc)
1629 goto do_stall; 1628 goto do_stall;
1630 use_ep(ep, 0); 1629 use_ep(ep, 0);
1631 omap_writew(udc->clr_halt, UDC_CTRL); 1630 omap_writew(udc->clr_halt, UDC_CTRL);
@@ -1653,7 +1652,7 @@ static void ep0_irq(struct omap_udc *udc, u16 irq_src)
1653 if (w_index & USB_DIR_IN) 1652 if (w_index & USB_DIR_IN)
1654 ep += 16; 1653 ep += 16;
1655 if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC 1654 if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC
1656 || ep == ep0 || !ep->desc) 1655 || ep == ep0 || !ep->ep.desc)
1657 goto do_stall; 1656 goto do_stall;
1658 if (use_dma && ep->has_dma) { 1657 if (use_dma && ep->has_dma) {
1659 /* this has rude side-effects (aborts) and 1658 /* this has rude side-effects (aborts) and
@@ -1688,7 +1687,7 @@ ep0out_status_stage:
1688 ep = &udc->ep[w_index & 0xf]; 1687 ep = &udc->ep[w_index & 0xf];
1689 if (w_index & USB_DIR_IN) 1688 if (w_index & USB_DIR_IN)
1690 ep += 16; 1689 ep += 16;
1691 if (!ep->desc) 1690 if (!ep->ep.desc)
1692 goto do_stall; 1691 goto do_stall;
1693 1692
1694 /* iso never stalls */ 1693 /* iso never stalls */
@@ -2509,7 +2508,7 @@ static int proc_udc_show(struct seq_file *s, void *_)
2509 if (tmp & UDC_ADD) { 2508 if (tmp & UDC_ADD) {
2510 list_for_each_entry (ep, &udc->gadget.ep_list, 2509 list_for_each_entry (ep, &udc->gadget.ep_list,
2511 ep.ep_list) { 2510 ep.ep_list) {
2512 if (ep->desc) 2511 if (ep->ep.desc)
2513 proc_ep_show(s, ep); 2512 proc_ep_show(s, ep);
2514 } 2513 }
2515 } 2514 }
diff --git a/drivers/usb/gadget/omap_udc.h b/drivers/usb/gadget/omap_udc.h
index 59d3b2213cb1..cfadeb5fc5de 100644
--- a/drivers/usb/gadget/omap_udc.h
+++ b/drivers/usb/gadget/omap_udc.h
@@ -140,7 +140,6 @@ struct omap_ep {
140 struct list_head queue; 140 struct list_head queue;
141 unsigned long irqs; 141 unsigned long irqs;
142 struct list_head iso; 142 struct list_head iso;
143 const struct usb_endpoint_descriptor *desc;
144 char name[14]; 143 char name[14];
145 u16 maxpacket; 144 u16 maxpacket;
146 u8 bEndpointAddress; 145 u8 bEndpointAddress;
diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c
index 65307064a6fd..1cfcc9ecbfbc 100644
--- a/drivers/usb/gadget/pch_udc.c
+++ b/drivers/usb/gadget/pch_udc.c
@@ -295,7 +295,6 @@ struct pch_udc_ep {
295 struct pch_udc_data_dma_desc *td_data; 295 struct pch_udc_data_dma_desc *td_data;
296 struct pch_udc_dev *dev; 296 struct pch_udc_dev *dev;
297 unsigned long offset_addr; 297 unsigned long offset_addr;
298 const struct usb_endpoint_descriptor *desc;
299 struct list_head queue; 298 struct list_head queue;
300 unsigned num:5, 299 unsigned num:5,
301 in:1, 300 in:1,
@@ -1705,7 +1704,7 @@ static int pch_udc_pcd_ep_enable(struct usb_ep *usbep,
1705 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN)) 1704 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1706 return -ESHUTDOWN; 1705 return -ESHUTDOWN;
1707 spin_lock_irqsave(&dev->lock, iflags); 1706 spin_lock_irqsave(&dev->lock, iflags);
1708 ep->desc = desc; 1707 ep->ep.desc = desc;
1709 ep->halted = 0; 1708 ep->halted = 0;
1710 pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc); 1709 pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc);
1711 ep->ep.maxpacket = usb_endpoint_maxp(desc); 1710 ep->ep.maxpacket = usb_endpoint_maxp(desc);
@@ -1734,7 +1733,7 @@ static int pch_udc_pcd_ep_disable(struct usb_ep *usbep)
1734 1733
1735 ep = container_of(usbep, struct pch_udc_ep, ep); 1734 ep = container_of(usbep, struct pch_udc_ep, ep);
1736 dev = ep->dev; 1735 dev = ep->dev;
1737 if ((usbep->name == ep0_string) || !ep->desc) 1736 if ((usbep->name == ep0_string) || !ep->ep.desc)
1738 return -EINVAL; 1737 return -EINVAL;
1739 1738
1740 spin_lock_irqsave(&ep->dev->lock, iflags); 1739 spin_lock_irqsave(&ep->dev->lock, iflags);
@@ -1742,7 +1741,6 @@ static int pch_udc_pcd_ep_disable(struct usb_ep *usbep)
1742 ep->halted = 1; 1741 ep->halted = 1;
1743 pch_udc_ep_disable(ep); 1742 pch_udc_ep_disable(ep);
1744 pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); 1743 pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1745 ep->desc = NULL;
1746 ep->ep.desc = NULL; 1744 ep->ep.desc = NULL;
1747 INIT_LIST_HEAD(&ep->queue); 1745 INIT_LIST_HEAD(&ep->queue);
1748 spin_unlock_irqrestore(&ep->dev->lock, iflags); 1746 spin_unlock_irqrestore(&ep->dev->lock, iflags);
@@ -1849,7 +1847,7 @@ static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
1849 return -EINVAL; 1847 return -EINVAL;
1850 ep = container_of(usbep, struct pch_udc_ep, ep); 1848 ep = container_of(usbep, struct pch_udc_ep, ep);
1851 dev = ep->dev; 1849 dev = ep->dev;
1852 if (!ep->desc && ep->num) 1850 if (!ep->ep.desc && ep->num)
1853 return -EINVAL; 1851 return -EINVAL;
1854 req = container_of(usbreq, struct pch_udc_request, req); 1852 req = container_of(usbreq, struct pch_udc_request, req);
1855 if (!list_empty(&req->queue)) 1853 if (!list_empty(&req->queue))
@@ -1949,7 +1947,7 @@ static int pch_udc_pcd_dequeue(struct usb_ep *usbep,
1949 1947
1950 ep = container_of(usbep, struct pch_udc_ep, ep); 1948 ep = container_of(usbep, struct pch_udc_ep, ep);
1951 dev = ep->dev; 1949 dev = ep->dev;
1952 if (!usbep || !usbreq || (!ep->desc && ep->num)) 1950 if (!usbep || !usbreq || (!ep->ep.desc && ep->num))
1953 return ret; 1951 return ret;
1954 req = container_of(usbreq, struct pch_udc_request, req); 1952 req = container_of(usbreq, struct pch_udc_request, req);
1955 spin_lock_irqsave(&ep->dev->lock, flags); 1953 spin_lock_irqsave(&ep->dev->lock, flags);
@@ -1988,7 +1986,7 @@ static int pch_udc_pcd_set_halt(struct usb_ep *usbep, int halt)
1988 return -EINVAL; 1986 return -EINVAL;
1989 ep = container_of(usbep, struct pch_udc_ep, ep); 1987 ep = container_of(usbep, struct pch_udc_ep, ep);
1990 dev = ep->dev; 1988 dev = ep->dev;
1991 if (!ep->desc && !ep->num) 1989 if (!ep->ep.desc && !ep->num)
1992 return -EINVAL; 1990 return -EINVAL;
1993 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN)) 1991 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1994 return -ESHUTDOWN; 1992 return -ESHUTDOWN;
@@ -2033,7 +2031,7 @@ static int pch_udc_pcd_set_wedge(struct usb_ep *usbep)
2033 return -EINVAL; 2031 return -EINVAL;
2034 ep = container_of(usbep, struct pch_udc_ep, ep); 2032 ep = container_of(usbep, struct pch_udc_ep, ep);
2035 dev = ep->dev; 2033 dev = ep->dev;
2036 if (!ep->desc && !ep->num) 2034 if (!ep->ep.desc && !ep->num)
2037 return -EINVAL; 2035 return -EINVAL;
2038 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN)) 2036 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
2039 return -ESHUTDOWN; 2037 return -ESHUTDOWN;
@@ -2065,7 +2063,7 @@ static void pch_udc_pcd_fifo_flush(struct usb_ep *usbep)
2065 return; 2063 return;
2066 2064
2067 ep = container_of(usbep, struct pch_udc_ep, ep); 2065 ep = container_of(usbep, struct pch_udc_ep, ep);
2068 if (ep->desc || !ep->num) 2066 if (ep->ep.desc || !ep->num)
2069 pch_udc_ep_fifo_flush(ep, ep->in); 2067 pch_udc_ep_fifo_flush(ep, ep->in);
2070} 2068}
2071 2069
@@ -3282,7 +3280,6 @@ static DEFINE_PCI_DEVICE_TABLE(pch_udc_pcidev_id) = {
3282 3280
3283MODULE_DEVICE_TABLE(pci, pch_udc_pcidev_id); 3281MODULE_DEVICE_TABLE(pci, pch_udc_pcidev_id);
3284 3282
3285
3286static struct pci_driver pch_udc_driver = { 3283static struct pci_driver pch_udc_driver = {
3287 .name = KBUILD_MODNAME, 3284 .name = KBUILD_MODNAME,
3288 .id_table = pch_udc_pcidev_id, 3285 .id_table = pch_udc_pcidev_id,
@@ -3293,17 +3290,7 @@ static struct pci_driver pch_udc_driver = {
3293 .shutdown = pch_udc_shutdown, 3290 .shutdown = pch_udc_shutdown,
3294}; 3291};
3295 3292
3296static int __init pch_udc_pci_init(void) 3293module_pci_driver(pch_udc_driver);
3297{
3298 return pci_register_driver(&pch_udc_driver);
3299}
3300module_init(pch_udc_pci_init);
3301
3302static void __exit pch_udc_pci_exit(void)
3303{
3304 pci_unregister_driver(&pch_udc_driver);
3305}
3306module_exit(pch_udc_pci_exit);
3307 3294
3308MODULE_DESCRIPTION("Intel EG20T USB Device Controller"); 3295MODULE_DESCRIPTION("Intel EG20T USB Device Controller");
3309MODULE_AUTHOR("LAPIS Semiconductor, <tomoya-linux@dsn.lapis-semi.com>"); 3296MODULE_AUTHOR("LAPIS Semiconductor, <tomoya-linux@dsn.lapis-semi.com>");
diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c
index 4e4dc1f5f388..f1f9290a2f47 100644
--- a/drivers/usb/gadget/printer.c
+++ b/drivers/usb/gadget/printer.c
@@ -51,6 +51,7 @@
51 * the runtime footprint, and giving us at least some parts of what 51 * the runtime footprint, and giving us at least some parts of what
52 * a "gcc --combine ... part1.c part2.c part3.c ... " build would. 52 * a "gcc --combine ... part1.c part2.c part3.c ... " build would.
53 */ 53 */
54#include "composite.c"
54#include "usbstring.c" 55#include "usbstring.c"
55#include "config.c" 56#include "config.c"
56#include "epautoconf.c" 57#include "epautoconf.c"
@@ -75,8 +76,6 @@ struct printer_dev {
75 /* lock buffer lists during read/write calls */ 76 /* lock buffer lists during read/write calls */
76 struct mutex lock_printer_io; 77 struct mutex lock_printer_io;
77 struct usb_gadget *gadget; 78 struct usb_gadget *gadget;
78 struct usb_request *req; /* for control responses */
79 u8 config;
80 s8 interface; 79 s8 interface;
81 struct usb_ep *in_ep, *out_ep; 80 struct usb_ep *in_ep, *out_ep;
82 81
@@ -100,6 +99,7 @@ struct printer_dev {
100 struct device *pdev; 99 struct device *pdev;
101 u8 printer_cdev_open; 100 u8 printer_cdev_open;
102 wait_queue_head_t wait; 101 wait_queue_head_t wait;
102 struct usb_function function;
103}; 103};
104 104
105static struct printer_dev usb_printer_gadget; 105static struct printer_dev usb_printer_gadget;
@@ -120,26 +120,6 @@ static struct printer_dev usb_printer_gadget;
120 * parameters are in UTF-8 (superset of ASCII's 7 bit characters). 120 * parameters are in UTF-8 (superset of ASCII's 7 bit characters).
121 */ 121 */
122 122
123static ushort idVendor;
124module_param(idVendor, ushort, S_IRUGO);
125MODULE_PARM_DESC(idVendor, "USB Vendor ID");
126
127static ushort idProduct;
128module_param(idProduct, ushort, S_IRUGO);
129MODULE_PARM_DESC(idProduct, "USB Product ID");
130
131static ushort bcdDevice;
132module_param(bcdDevice, ushort, S_IRUGO);
133MODULE_PARM_DESC(bcdDevice, "USB Device version (BCD)");
134
135static char *iManufacturer;
136module_param(iManufacturer, charp, S_IRUGO);
137MODULE_PARM_DESC(iManufacturer, "USB Manufacturer string");
138
139static char *iProduct;
140module_param(iProduct, charp, S_IRUGO);
141MODULE_PARM_DESC(iProduct, "USB Product string");
142
143static char *iSerialNum; 123static char *iSerialNum;
144module_param(iSerialNum, charp, S_IRUGO); 124module_param(iSerialNum, charp, S_IRUGO);
145MODULE_PARM_DESC(iSerialNum, "1"); 125MODULE_PARM_DESC(iSerialNum, "1");
@@ -154,47 +134,8 @@ module_param(qlen, uint, S_IRUGO|S_IWUSR);
154 134
155#define QLEN qlen 135#define QLEN qlen
156 136
157#ifdef CONFIG_USB_GADGET_DUALSPEED
158#define DEVSPEED USB_SPEED_HIGH
159#else /* full speed (low speed doesn't do bulk) */
160#define DEVSPEED USB_SPEED_FULL
161#endif
162
163/*-------------------------------------------------------------------------*/ 137/*-------------------------------------------------------------------------*/
164 138
165#define xprintk(d, level, fmt, args...) \
166 printk(level "%s: " fmt, DRIVER_DESC, ## args)
167
168#ifdef DEBUG
169#define DBG(dev, fmt, args...) \
170 xprintk(dev, KERN_DEBUG, fmt, ## args)
171#else
172#define DBG(dev, fmt, args...) \
173 do { } while (0)
174#endif /* DEBUG */
175
176#ifdef VERBOSE
177#define VDBG(dev, fmt, args...) \
178 xprintk(dev, KERN_DEBUG, fmt, ## args)
179#else
180#define VDBG(dev, fmt, args...) \
181 do { } while (0)
182#endif /* VERBOSE */
183
184#define ERROR(dev, fmt, args...) \
185 xprintk(dev, KERN_ERR, fmt, ## args)
186#define WARNING(dev, fmt, args...) \
187 xprintk(dev, KERN_WARNING, fmt, ## args)
188#define INFO(dev, fmt, args...) \
189 xprintk(dev, KERN_INFO, fmt, ## args)
190
191/*-------------------------------------------------------------------------*/
192
193/* USB DRIVER HOOKUP (to the hardware driver, below us), mostly
194 * ep0 implementation: descriptors, config management, setup().
195 * also optional class-specific notification interrupt transfer.
196 */
197
198/* 139/*
199 * DESCRIPTORS ... most are static, but strings and (full) configuration 140 * DESCRIPTORS ... most are static, but strings and (full) configuration
200 * descriptors are built on demand. 141 * descriptors are built on demand.
@@ -227,24 +168,6 @@ static struct usb_device_descriptor device_desc = {
227 .bNumConfigurations = 1 168 .bNumConfigurations = 1
228}; 169};
229 170
230static struct usb_otg_descriptor otg_desc = {
231 .bLength = sizeof otg_desc,
232 .bDescriptorType = USB_DT_OTG,
233 .bmAttributes = USB_OTG_SRP
234};
235
236static struct usb_config_descriptor config_desc = {
237 .bLength = sizeof config_desc,
238 .bDescriptorType = USB_DT_CONFIG,
239
240 /* compute wTotalLength on the fly */
241 .bNumInterfaces = 1,
242 .bConfigurationValue = DEV_CONFIG_VALUE,
243 .iConfiguration = 0,
244 .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
245 .bMaxPower = CONFIG_USB_GADGET_VBUS_DRAW / 2,
246};
247
248static struct usb_interface_descriptor intf_desc = { 171static struct usb_interface_descriptor intf_desc = {
249 .bLength = sizeof intf_desc, 172 .bLength = sizeof intf_desc,
250 .bDescriptorType = USB_DT_INTERFACE, 173 .bDescriptorType = USB_DT_INTERFACE,
@@ -270,16 +193,13 @@ static struct usb_endpoint_descriptor fs_ep_out_desc = {
270 .bmAttributes = USB_ENDPOINT_XFER_BULK 193 .bmAttributes = USB_ENDPOINT_XFER_BULK
271}; 194};
272 195
273static const struct usb_descriptor_header *fs_printer_function [11] = { 196static struct usb_descriptor_header *fs_printer_function[] = {
274 (struct usb_descriptor_header *) &otg_desc,
275 (struct usb_descriptor_header *) &intf_desc, 197 (struct usb_descriptor_header *) &intf_desc,
276 (struct usb_descriptor_header *) &fs_ep_in_desc, 198 (struct usb_descriptor_header *) &fs_ep_in_desc,
277 (struct usb_descriptor_header *) &fs_ep_out_desc, 199 (struct usb_descriptor_header *) &fs_ep_out_desc,
278 NULL 200 NULL
279}; 201};
280 202
281#ifdef CONFIG_USB_GADGET_DUALSPEED
282
283/* 203/*
284 * usb 2.0 devices need to expose both high speed and full speed 204 * usb 2.0 devices need to expose both high speed and full speed
285 * descriptors, unless they only run at full speed. 205 * descriptors, unless they only run at full speed.
@@ -307,23 +227,26 @@ static struct usb_qualifier_descriptor dev_qualifier = {
307 .bNumConfigurations = 1 227 .bNumConfigurations = 1
308}; 228};
309 229
310static const struct usb_descriptor_header *hs_printer_function [11] = { 230static struct usb_descriptor_header *hs_printer_function[] = {
311 (struct usb_descriptor_header *) &otg_desc,
312 (struct usb_descriptor_header *) &intf_desc, 231 (struct usb_descriptor_header *) &intf_desc,
313 (struct usb_descriptor_header *) &hs_ep_in_desc, 232 (struct usb_descriptor_header *) &hs_ep_in_desc,
314 (struct usb_descriptor_header *) &hs_ep_out_desc, 233 (struct usb_descriptor_header *) &hs_ep_out_desc,
315 NULL 234 NULL
316}; 235};
317 236
318/* maxpacket and other transfer characteristics vary by speed. */ 237static struct usb_otg_descriptor otg_descriptor = {
319#define ep_desc(g, hs, fs) (((g)->speed == USB_SPEED_HIGH)?(hs):(fs)) 238 .bLength = sizeof otg_descriptor,
320 239 .bDescriptorType = USB_DT_OTG,
321#else 240 .bmAttributes = USB_OTG_SRP,
241};
322 242
323/* if there's no high speed support, maxpacket doesn't change. */ 243static const struct usb_descriptor_header *otg_desc[] = {
324#define ep_desc(g, hs, fs) (((void)(g)), (fs)) 244 (struct usb_descriptor_header *) &otg_descriptor,
245 NULL,
246};
325 247
326#endif /* !CONFIG_USB_GADGET_DUALSPEED */ 248/* maxpacket and other transfer characteristics vary by speed. */
249#define ep_desc(g, hs, fs) (((g)->speed == USB_SPEED_HIGH)?(hs):(fs))
327 250
328/*-------------------------------------------------------------------------*/ 251/*-------------------------------------------------------------------------*/
329 252
@@ -343,11 +266,16 @@ static struct usb_string strings [] = {
343 { } /* end of list */ 266 { } /* end of list */
344}; 267};
345 268
346static struct usb_gadget_strings stringtab = { 269static struct usb_gadget_strings stringtab_dev = {
347 .language = 0x0409, /* en-us */ 270 .language = 0x0409, /* en-us */
348 .strings = strings, 271 .strings = strings,
349}; 272};
350 273
274static struct usb_gadget_strings *dev_strings[] = {
275 &stringtab_dev,
276 NULL,
277};
278
351/*-------------------------------------------------------------------------*/ 279/*-------------------------------------------------------------------------*/
352 280
353static struct usb_request * 281static struct usb_request *
@@ -937,82 +865,8 @@ static void printer_reset_interface(struct printer_dev *dev)
937 dev->interface = -1; 865 dev->interface = -1;
938} 866}
939 867
940/* change our operational config. must agree with the code
941 * that returns config descriptors, and altsetting code.
942 */
943static int
944printer_set_config(struct printer_dev *dev, unsigned number)
945{
946 int result = 0;
947 struct usb_gadget *gadget = dev->gadget;
948
949 switch (number) {
950 case DEV_CONFIG_VALUE:
951 result = 0;
952 break;
953 default:
954 result = -EINVAL;
955 /* FALL THROUGH */
956 case 0:
957 break;
958 }
959
960 if (result) {
961 usb_gadget_vbus_draw(dev->gadget,
962 dev->gadget->is_otg ? 8 : 100);
963 } else {
964 unsigned power;
965
966 power = 2 * config_desc.bMaxPower;
967 usb_gadget_vbus_draw(dev->gadget, power);
968
969 dev->config = number;
970 INFO(dev, "%s config #%d: %d mA, %s\n",
971 usb_speed_string(gadget->speed),
972 number, power, driver_desc);
973 }
974 return result;
975}
976
977static int
978config_buf(enum usb_device_speed speed, u8 *buf, u8 type, unsigned index,
979 int is_otg)
980{
981 int len;
982 const struct usb_descriptor_header **function;
983#ifdef CONFIG_USB_GADGET_DUALSPEED
984 int hs = (speed == USB_SPEED_HIGH);
985
986 if (type == USB_DT_OTHER_SPEED_CONFIG)
987 hs = !hs;
988
989 if (hs) {
990 function = hs_printer_function;
991 } else {
992 function = fs_printer_function;
993 }
994#else
995 function = fs_printer_function;
996#endif
997
998 if (index >= device_desc.bNumConfigurations)
999 return -EINVAL;
1000
1001 /* for now, don't advertise srp-only devices */
1002 if (!is_otg)
1003 function++;
1004
1005 len = usb_gadget_config_buf(&config_desc, buf, USB_DESC_BUFSIZE,
1006 function);
1007 if (len < 0)
1008 return len;
1009 ((struct usb_config_descriptor *) buf)->bDescriptorType = type;
1010 return len;
1011}
1012
1013/* Change our operational Interface. */ 868/* Change our operational Interface. */
1014static int 869static int set_interface(struct printer_dev *dev, unsigned number)
1015set_interface(struct printer_dev *dev, unsigned number)
1016{ 870{
1017 int result = 0; 871 int result = 0;
1018 872
@@ -1043,14 +897,6 @@ set_interface(struct printer_dev *dev, unsigned number)
1043 return result; 897 return result;
1044} 898}
1045 899
1046static void printer_setup_complete(struct usb_ep *ep, struct usb_request *req)
1047{
1048 if (req->status || req->actual != req->length)
1049 DBG((struct printer_dev *) ep->driver_data,
1050 "setup complete --> %d, %d/%d\n",
1051 req->status, req->actual, req->length);
1052}
1053
1054static void printer_soft_reset(struct printer_dev *dev) 900static void printer_soft_reset(struct printer_dev *dev)
1055{ 901{
1056 struct usb_request *req; 902 struct usb_request *req;
@@ -1107,11 +953,12 @@ static void printer_soft_reset(struct printer_dev *dev)
1107 * The setup() callback implements all the ep0 functionality that's not 953 * The setup() callback implements all the ep0 functionality that's not
1108 * handled lower down. 954 * handled lower down.
1109 */ 955 */
1110static int 956static int printer_func_setup(struct usb_function *f,
1111printer_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) 957 const struct usb_ctrlrequest *ctrl)
1112{ 958{
1113 struct printer_dev *dev = get_gadget_data(gadget); 959 struct printer_dev *dev = container_of(f, struct printer_dev, function);
1114 struct usb_request *req = dev->req; 960 struct usb_composite_dev *cdev = f->config->cdev;
961 struct usb_request *req = cdev->req;
1115 int value = -EOPNOTSUPP; 962 int value = -EOPNOTSUPP;
1116 u16 wIndex = le16_to_cpu(ctrl->wIndex); 963 u16 wIndex = le16_to_cpu(ctrl->wIndex);
1117 u16 wValue = le16_to_cpu(ctrl->wValue); 964 u16 wValue = le16_to_cpu(ctrl->wValue);
@@ -1120,102 +967,7 @@ printer_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1120 DBG(dev, "ctrl req%02x.%02x v%04x i%04x l%d\n", 967 DBG(dev, "ctrl req%02x.%02x v%04x i%04x l%d\n",
1121 ctrl->bRequestType, ctrl->bRequest, wValue, wIndex, wLength); 968 ctrl->bRequestType, ctrl->bRequest, wValue, wIndex, wLength);
1122 969
1123 req->complete = printer_setup_complete;
1124
1125 switch (ctrl->bRequestType&USB_TYPE_MASK) { 970 switch (ctrl->bRequestType&USB_TYPE_MASK) {
1126
1127 case USB_TYPE_STANDARD:
1128 switch (ctrl->bRequest) {
1129
1130 case USB_REQ_GET_DESCRIPTOR:
1131 if (ctrl->bRequestType != USB_DIR_IN)
1132 break;
1133 switch (wValue >> 8) {
1134
1135 case USB_DT_DEVICE:
1136 device_desc.bMaxPacketSize0 =
1137 gadget->ep0->maxpacket;
1138 value = min(wLength, (u16) sizeof device_desc);
1139 memcpy(req->buf, &device_desc, value);
1140 break;
1141#ifdef CONFIG_USB_GADGET_DUALSPEED
1142 case USB_DT_DEVICE_QUALIFIER:
1143 if (!gadget_is_dualspeed(gadget))
1144 break;
1145 /*
1146 * assumes ep0 uses the same value for both
1147 * speeds
1148 */
1149 dev_qualifier.bMaxPacketSize0 =
1150 gadget->ep0->maxpacket;
1151 value = min(wLength,
1152 (u16) sizeof dev_qualifier);
1153 memcpy(req->buf, &dev_qualifier, value);
1154 break;
1155
1156 case USB_DT_OTHER_SPEED_CONFIG:
1157 if (!gadget_is_dualspeed(gadget))
1158 break;
1159 /* FALLTHROUGH */
1160#endif /* CONFIG_USB_GADGET_DUALSPEED */
1161 case USB_DT_CONFIG:
1162 value = config_buf(gadget->speed, req->buf,
1163 wValue >> 8,
1164 wValue & 0xff,
1165 gadget->is_otg);
1166 if (value >= 0)
1167 value = min(wLength, (u16) value);
1168 break;
1169
1170 case USB_DT_STRING:
1171 value = usb_gadget_get_string(&stringtab,
1172 wValue & 0xff, req->buf);
1173 if (value >= 0)
1174 value = min(wLength, (u16) value);
1175 break;
1176 }
1177 break;
1178
1179 case USB_REQ_SET_CONFIGURATION:
1180 if (ctrl->bRequestType != 0)
1181 break;
1182 if (gadget->a_hnp_support)
1183 DBG(dev, "HNP available\n");
1184 else if (gadget->a_alt_hnp_support)
1185 DBG(dev, "HNP needs a different root port\n");
1186 value = printer_set_config(dev, wValue);
1187 if (!value)
1188 value = set_interface(dev, PRINTER_INTERFACE);
1189 break;
1190 case USB_REQ_GET_CONFIGURATION:
1191 if (ctrl->bRequestType != USB_DIR_IN)
1192 break;
1193 *(u8 *)req->buf = dev->config;
1194 value = min(wLength, (u16) 1);
1195 break;
1196
1197 case USB_REQ_SET_INTERFACE:
1198 if (ctrl->bRequestType != USB_RECIP_INTERFACE ||
1199 !dev->config)
1200 break;
1201
1202 value = set_interface(dev, PRINTER_INTERFACE);
1203 break;
1204 case USB_REQ_GET_INTERFACE:
1205 if (ctrl->bRequestType !=
1206 (USB_DIR_IN|USB_RECIP_INTERFACE)
1207 || !dev->config)
1208 break;
1209
1210 *(u8 *)req->buf = dev->interface;
1211 value = min(wLength, (u16) 1);
1212 break;
1213
1214 default:
1215 goto unknown;
1216 }
1217 break;
1218
1219 case USB_TYPE_CLASS: 971 case USB_TYPE_CLASS:
1220 switch (ctrl->bRequest) { 972 switch (ctrl->bRequest) {
1221 case 0: /* Get the IEEE-1284 PNP String */ 973 case 0: /* Get the IEEE-1284 PNP String */
@@ -1261,44 +1013,50 @@ unknown:
1261 wValue, wIndex, wLength); 1013 wValue, wIndex, wLength);
1262 break; 1014 break;
1263 } 1015 }
1264
1265 /* respond with data transfer before status phase? */
1266 if (value >= 0) {
1267 req->length = value;
1268 req->zero = value < wLength;
1269 value = usb_ep_queue(gadget->ep0, req, GFP_ATOMIC);
1270 if (value < 0) {
1271 DBG(dev, "ep_queue --> %d\n", value);
1272 req->status = 0;
1273 printer_setup_complete(gadget->ep0, req);
1274 }
1275 }
1276
1277 /* host either stalls (value < 0) or reports success */ 1016 /* host either stalls (value < 0) or reports success */
1278 return value; 1017 return value;
1279} 1018}
1280 1019
1281static void 1020static int __init printer_func_bind(struct usb_configuration *c,
1282printer_disconnect(struct usb_gadget *gadget) 1021 struct usb_function *f)
1283{ 1022{
1284 struct printer_dev *dev = get_gadget_data(gadget); 1023 return 0;
1024}
1025
1026static void printer_func_unbind(struct usb_configuration *c,
1027 struct usb_function *f)
1028{
1029}
1030
1031static int printer_func_set_alt(struct usb_function *f,
1032 unsigned intf, unsigned alt)
1033{
1034 struct printer_dev *dev = container_of(f, struct printer_dev, function);
1035 int ret = -ENOTSUPP;
1036
1037 if (!alt)
1038 ret = set_interface(dev, PRINTER_INTERFACE);
1039 return ret;
1040}
1041
1042static void printer_func_disable(struct usb_function *f)
1043{
1044 struct printer_dev *dev = container_of(f, struct printer_dev, function);
1285 unsigned long flags; 1045 unsigned long flags;
1286 1046
1287 DBG(dev, "%s\n", __func__); 1047 DBG(dev, "%s\n", __func__);
1288 1048
1289 spin_lock_irqsave(&dev->lock, flags); 1049 spin_lock_irqsave(&dev->lock, flags);
1290
1291 printer_reset_interface(dev); 1050 printer_reset_interface(dev);
1292
1293 spin_unlock_irqrestore(&dev->lock, flags); 1051 spin_unlock_irqrestore(&dev->lock, flags);
1294} 1052}
1295 1053
1296static void 1054static void printer_cfg_unbind(struct usb_configuration *c)
1297printer_unbind(struct usb_gadget *gadget)
1298{ 1055{
1299 struct printer_dev *dev = get_gadget_data(gadget); 1056 struct printer_dev *dev;
1300 struct usb_request *req; 1057 struct usb_request *req;
1301 1058
1059 dev = &usb_printer_gadget;
1302 1060
1303 DBG(dev, "%s\n", __func__); 1061 DBG(dev, "%s\n", __func__);
1304 1062
@@ -1336,18 +1094,18 @@ printer_unbind(struct usb_gadget *gadget)
1336 list_del(&req->list); 1094 list_del(&req->list);
1337 printer_req_free(dev->out_ep, req); 1095 printer_req_free(dev->out_ep, req);
1338 } 1096 }
1339
1340 if (dev->req) {
1341 printer_req_free(gadget->ep0, dev->req);
1342 dev->req = NULL;
1343 }
1344
1345 set_gadget_data(gadget, NULL);
1346} 1097}
1347 1098
1348static int __init 1099static struct usb_configuration printer_cfg_driver = {
1349printer_bind(struct usb_gadget *gadget) 1100 .label = "printer",
1101 .unbind = printer_cfg_unbind,
1102 .bConfigurationValue = 1,
1103 .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
1104};
1105
1106static int __init printer_bind_config(struct usb_configuration *c)
1350{ 1107{
1108 struct usb_gadget *gadget = c->cdev->gadget;
1351 struct printer_dev *dev; 1109 struct printer_dev *dev;
1352 struct usb_ep *in_ep, *out_ep; 1110 struct usb_ep *in_ep, *out_ep;
1353 int status = -ENOMEM; 1111 int status = -ENOMEM;
@@ -1358,6 +1116,14 @@ printer_bind(struct usb_gadget *gadget)
1358 1116
1359 dev = &usb_printer_gadget; 1117 dev = &usb_printer_gadget;
1360 1118
1119 dev->function.name = shortname;
1120 dev->function.descriptors = fs_printer_function;
1121 dev->function.hs_descriptors = hs_printer_function;
1122 dev->function.bind = printer_func_bind;
1123 dev->function.setup = printer_func_setup;
1124 dev->function.unbind = printer_func_unbind;
1125 dev->function.set_alt = printer_func_set_alt;
1126 dev->function.disable = printer_func_disable;
1361 1127
1362 /* Setup the sysfs files for the printer gadget. */ 1128 /* Setup the sysfs files for the printer gadget. */
1363 dev->pdev = device_create(usb_gadget_class, NULL, g_printer_devno, 1129 dev->pdev = device_create(usb_gadget_class, NULL, g_printer_devno,
@@ -1393,29 +1159,6 @@ printer_bind(struct usb_gadget *gadget)
1393 init_utsname()->sysname, init_utsname()->release, 1159 init_utsname()->sysname, init_utsname()->release,
1394 gadget->name); 1160 gadget->name);
1395 1161
1396 device_desc.idVendor =
1397 cpu_to_le16(PRINTER_VENDOR_NUM);
1398 device_desc.idProduct =
1399 cpu_to_le16(PRINTER_PRODUCT_NUM);
1400
1401 /* support optional vendor/distro customization */
1402 if (idVendor) {
1403 if (!idProduct) {
1404 dev_err(&gadget->dev, "idVendor needs idProduct!\n");
1405 return -ENODEV;
1406 }
1407 device_desc.idVendor = cpu_to_le16(idVendor);
1408 device_desc.idProduct = cpu_to_le16(idProduct);
1409 if (bcdDevice)
1410 device_desc.bcdDevice = cpu_to_le16(bcdDevice);
1411 }
1412
1413 if (iManufacturer)
1414 strlcpy(manufacturer, iManufacturer, sizeof manufacturer);
1415
1416 if (iProduct)
1417 strlcpy(product_desc, iProduct, sizeof product_desc);
1418
1419 if (iSerialNum) 1162 if (iSerialNum)
1420 strlcpy(serial_num, iSerialNum, sizeof serial_num); 1163 strlcpy(serial_num, iSerialNum, sizeof serial_num);
1421 1164
@@ -1442,17 +1185,16 @@ autoconf_fail:
1442 goto autoconf_fail; 1185 goto autoconf_fail;
1443 out_ep->driver_data = out_ep; /* claim */ 1186 out_ep->driver_data = out_ep; /* claim */
1444 1187
1445#ifdef CONFIG_USB_GADGET_DUALSPEED
1446 /* assumes that all endpoints are dual-speed */ 1188 /* assumes that all endpoints are dual-speed */
1447 hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress; 1189 hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress;
1448 hs_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress; 1190 hs_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress;
1449#endif /* DUALSPEED */
1450 1191
1451 usb_gadget_set_selfpowered(gadget); 1192 usb_gadget_set_selfpowered(gadget);
1452 1193
1453 if (gadget->is_otg) { 1194 if (gadget->is_otg) {
1454 otg_desc.bmAttributes |= USB_OTG_HNP, 1195 otg_descriptor.bmAttributes |= USB_OTG_HNP;
1455 config_desc.bmAttributes |= USB_CONFIG_ATT_WAKEUP; 1196 printer_cfg_driver.descriptors = otg_desc;
1197 printer_cfg_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
1456 } 1198 }
1457 1199
1458 spin_lock_init(&dev->lock); 1200 spin_lock_init(&dev->lock);
@@ -1466,7 +1208,6 @@ autoconf_fail:
1466 init_waitqueue_head(&dev->tx_wait); 1208 init_waitqueue_head(&dev->tx_wait);
1467 init_waitqueue_head(&dev->tx_flush_wait); 1209 init_waitqueue_head(&dev->tx_flush_wait);
1468 1210
1469 dev->config = 0;
1470 dev->interface = -1; 1211 dev->interface = -1;
1471 dev->printer_cdev_open = 0; 1212 dev->printer_cdev_open = 0;
1472 dev->printer_status = PRINTER_NOT_ERROR; 1213 dev->printer_status = PRINTER_NOT_ERROR;
@@ -1477,14 +1218,6 @@ autoconf_fail:
1477 dev->in_ep = in_ep; 1218 dev->in_ep = in_ep;
1478 dev->out_ep = out_ep; 1219 dev->out_ep = out_ep;
1479 1220
1480 /* preallocate control message data and buffer */
1481 dev->req = printer_req_alloc(gadget->ep0, USB_DESC_BUFSIZE,
1482 GFP_KERNEL);
1483 if (!dev->req) {
1484 status = -ENOMEM;
1485 goto fail;
1486 }
1487
1488 for (i = 0; i < QLEN; i++) { 1221 for (i = 0; i < QLEN; i++) {
1489 req = printer_req_alloc(dev->in_ep, USB_BUFSIZE, GFP_KERNEL); 1222 req = printer_req_alloc(dev->in_ep, USB_BUFSIZE, GFP_KERNEL);
1490 if (!req) { 1223 if (!req) {
@@ -1513,45 +1246,37 @@ autoconf_fail:
1513 list_add(&req->list, &dev->rx_reqs); 1246 list_add(&req->list, &dev->rx_reqs);
1514 } 1247 }
1515 1248
1516 dev->req->complete = printer_setup_complete;
1517
1518 /* finish hookup to lower layer ... */ 1249 /* finish hookup to lower layer ... */
1519 dev->gadget = gadget; 1250 dev->gadget = gadget;
1520 set_gadget_data(gadget, dev);
1521 gadget->ep0->driver_data = dev;
1522 1251
1523 INFO(dev, "%s, version: " DRIVER_VERSION "\n", driver_desc); 1252 INFO(dev, "%s, version: " DRIVER_VERSION "\n", driver_desc);
1524 INFO(dev, "using %s, OUT %s IN %s\n", gadget->name, out_ep->name, 1253 INFO(dev, "using %s, OUT %s IN %s\n", gadget->name, out_ep->name,
1525 in_ep->name); 1254 in_ep->name);
1526
1527 return 0; 1255 return 0;
1528 1256
1529fail: 1257fail:
1530 printer_unbind(gadget); 1258 printer_cfg_unbind(c);
1531 return status; 1259 return status;
1532} 1260}
1533 1261
1534/*-------------------------------------------------------------------------*/ 1262static int printer_unbind(struct usb_composite_dev *cdev)
1263{
1264 return 0;
1265}
1535 1266
1536static struct usb_gadget_driver printer_driver = { 1267static int __init printer_bind(struct usb_composite_dev *cdev)
1537 .max_speed = DEVSPEED, 1268{
1269 return usb_add_config(cdev, &printer_cfg_driver, printer_bind_config);
1270}
1538 1271
1539 .function = (char *) driver_desc, 1272static struct usb_composite_driver printer_driver = {
1273 .name = shortname,
1274 .dev = &device_desc,
1275 .strings = dev_strings,
1276 .max_speed = USB_SPEED_HIGH,
1540 .unbind = printer_unbind, 1277 .unbind = printer_unbind,
1541
1542 .setup = printer_setup,
1543 .disconnect = printer_disconnect,
1544
1545 .driver = {
1546 .name = (char *) shortname,
1547 .owner = THIS_MODULE,
1548 },
1549}; 1278};
1550 1279
1551MODULE_DESCRIPTION(DRIVER_DESC);
1552MODULE_AUTHOR("Craig Nadler");
1553MODULE_LICENSE("GPL");
1554
1555static int __init 1280static int __init
1556init(void) 1281init(void)
1557{ 1282{
@@ -1560,23 +1285,23 @@ init(void)
1560 usb_gadget_class = class_create(THIS_MODULE, "usb_printer_gadget"); 1285 usb_gadget_class = class_create(THIS_MODULE, "usb_printer_gadget");
1561 if (IS_ERR(usb_gadget_class)) { 1286 if (IS_ERR(usb_gadget_class)) {
1562 status = PTR_ERR(usb_gadget_class); 1287 status = PTR_ERR(usb_gadget_class);
1563 ERROR(dev, "unable to create usb_gadget class %d\n", status); 1288 pr_err("unable to create usb_gadget class %d\n", status);
1564 return status; 1289 return status;
1565 } 1290 }
1566 1291
1567 status = alloc_chrdev_region(&g_printer_devno, 0, 1, 1292 status = alloc_chrdev_region(&g_printer_devno, 0, 1,
1568 "USB printer gadget"); 1293 "USB printer gadget");
1569 if (status) { 1294 if (status) {
1570 ERROR(dev, "alloc_chrdev_region %d\n", status); 1295 pr_err("alloc_chrdev_region %d\n", status);
1571 class_destroy(usb_gadget_class); 1296 class_destroy(usb_gadget_class);
1572 return status; 1297 return status;
1573 } 1298 }
1574 1299
1575 status = usb_gadget_probe_driver(&printer_driver, printer_bind); 1300 status = usb_composite_probe(&printer_driver, printer_bind);
1576 if (status) { 1301 if (status) {
1577 class_destroy(usb_gadget_class); 1302 class_destroy(usb_gadget_class);
1578 unregister_chrdev_region(g_printer_devno, 1); 1303 unregister_chrdev_region(g_printer_devno, 1);
1579 DBG(dev, "usb_gadget_probe_driver %x\n", status); 1304 pr_err("usb_gadget_probe_driver %x\n", status);
1580 } 1305 }
1581 1306
1582 return status; 1307 return status;
@@ -1586,15 +1311,14 @@ module_init(init);
1586static void __exit 1311static void __exit
1587cleanup(void) 1312cleanup(void)
1588{ 1313{
1589 int status;
1590
1591 mutex_lock(&usb_printer_gadget.lock_printer_io); 1314 mutex_lock(&usb_printer_gadget.lock_printer_io);
1592 status = usb_gadget_unregister_driver(&printer_driver); 1315 usb_composite_unregister(&printer_driver);
1593 if (status)
1594 ERROR(dev, "usb_gadget_unregister_driver %x\n", status);
1595
1596 unregister_chrdev_region(g_printer_devno, 1); 1316 unregister_chrdev_region(g_printer_devno, 1);
1597 class_destroy(usb_gadget_class); 1317 class_destroy(usb_gadget_class);
1598 mutex_unlock(&usb_printer_gadget.lock_printer_io); 1318 mutex_unlock(&usb_printer_gadget.lock_printer_io);
1599} 1319}
1600module_exit(cleanup); 1320module_exit(cleanup);
1321
1322MODULE_DESCRIPTION(DRIVER_DESC);
1323MODULE_AUTHOR("Craig Nadler");
1324MODULE_LICENSE("GPL");
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index 41ed69c96d8c..d7c8cb3bf759 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -218,7 +218,7 @@ static int pxa25x_ep_enable (struct usb_ep *_ep,
218 struct pxa25x_udc *dev; 218 struct pxa25x_udc *dev;
219 219
220 ep = container_of (_ep, struct pxa25x_ep, ep); 220 ep = container_of (_ep, struct pxa25x_ep, ep);
221 if (!_ep || !desc || ep->desc || _ep->name == ep0name 221 if (!_ep || !desc || ep->ep.desc || _ep->name == ep0name
222 || desc->bDescriptorType != USB_DT_ENDPOINT 222 || desc->bDescriptorType != USB_DT_ENDPOINT
223 || ep->bEndpointAddress != desc->bEndpointAddress 223 || ep->bEndpointAddress != desc->bEndpointAddress
224 || ep->fifo_size < usb_endpoint_maxp (desc)) { 224 || ep->fifo_size < usb_endpoint_maxp (desc)) {
@@ -249,7 +249,7 @@ static int pxa25x_ep_enable (struct usb_ep *_ep,
249 return -ESHUTDOWN; 249 return -ESHUTDOWN;
250 } 250 }
251 251
252 ep->desc = desc; 252 ep->ep.desc = desc;
253 ep->stopped = 0; 253 ep->stopped = 0;
254 ep->pio_irqs = 0; 254 ep->pio_irqs = 0;
255 ep->ep.maxpacket = usb_endpoint_maxp (desc); 255 ep->ep.maxpacket = usb_endpoint_maxp (desc);
@@ -269,7 +269,7 @@ static int pxa25x_ep_disable (struct usb_ep *_ep)
269 unsigned long flags; 269 unsigned long flags;
270 270
271 ep = container_of (_ep, struct pxa25x_ep, ep); 271 ep = container_of (_ep, struct pxa25x_ep, ep);
272 if (!_ep || !ep->desc) { 272 if (!_ep || !ep->ep.desc) {
273 DMSG("%s, %s not enabled\n", __func__, 273 DMSG("%s, %s not enabled\n", __func__,
274 _ep ? ep->ep.name : NULL); 274 _ep ? ep->ep.name : NULL);
275 return -EINVAL; 275 return -EINVAL;
@@ -281,7 +281,6 @@ static int pxa25x_ep_disable (struct usb_ep *_ep)
281 /* flush fifo (mostly for IN buffers) */ 281 /* flush fifo (mostly for IN buffers) */
282 pxa25x_ep_fifo_flush (_ep); 282 pxa25x_ep_fifo_flush (_ep);
283 283
284 ep->desc = NULL;
285 ep->ep.desc = NULL; 284 ep->ep.desc = NULL;
286 ep->stopped = 1; 285 ep->stopped = 1;
287 286
@@ -390,7 +389,7 @@ write_fifo (struct pxa25x_ep *ep, struct pxa25x_request *req)
390{ 389{
391 unsigned max; 390 unsigned max;
392 391
393 max = usb_endpoint_maxp(ep->desc); 392 max = usb_endpoint_maxp(ep->ep.desc);
394 do { 393 do {
395 unsigned count; 394 unsigned count;
396 int is_last, is_short; 395 int is_last, is_short;
@@ -644,7 +643,7 @@ pxa25x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
644 } 643 }
645 644
646 ep = container_of(_ep, struct pxa25x_ep, ep); 645 ep = container_of(_ep, struct pxa25x_ep, ep);
647 if (unlikely (!_ep || (!ep->desc && ep->ep.name != ep0name))) { 646 if (unlikely(!_ep || (!ep->ep.desc && ep->ep.name != ep0name))) {
648 DMSG("%s, bad ep\n", __func__); 647 DMSG("%s, bad ep\n", __func__);
649 return -EINVAL; 648 return -EINVAL;
650 } 649 }
@@ -660,7 +659,7 @@ pxa25x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
660 * we can report per-packet status. that also helps with dma. 659 * we can report per-packet status. that also helps with dma.
661 */ 660 */
662 if (unlikely (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC 661 if (unlikely (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC
663 && req->req.length > usb_endpoint_maxp (ep->desc))) 662 && req->req.length > usb_endpoint_maxp(ep->ep.desc)))
664 return -EMSGSIZE; 663 return -EMSGSIZE;
665 664
666 DBG(DBG_NOISY, "%s queue req %p, len %d buf %p\n", 665 DBG(DBG_NOISY, "%s queue req %p, len %d buf %p\n",
@@ -673,7 +672,7 @@ pxa25x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
673 672
674 /* kickstart this i/o queue? */ 673 /* kickstart this i/o queue? */
675 if (list_empty(&ep->queue) && !ep->stopped) { 674 if (list_empty(&ep->queue) && !ep->stopped) {
676 if (ep->desc == NULL/* ep0 */) { 675 if (ep->ep.desc == NULL/* ep0 */) {
677 unsigned length = _req->length; 676 unsigned length = _req->length;
678 677
679 switch (dev->ep0state) { 678 switch (dev->ep0state) {
@@ -722,7 +721,7 @@ pxa25x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
722 req = NULL; 721 req = NULL;
723 } 722 }
724 723
725 if (likely (req && ep->desc)) 724 if (likely(req && ep->ep.desc))
726 pio_irq_enable(ep->bEndpointAddress); 725 pio_irq_enable(ep->bEndpointAddress);
727 } 726 }
728 727
@@ -749,7 +748,7 @@ static void nuke(struct pxa25x_ep *ep, int status)
749 queue); 748 queue);
750 done(ep, req, status); 749 done(ep, req, status);
751 } 750 }
752 if (ep->desc) 751 if (ep->ep.desc)
753 pio_irq_disable (ep->bEndpointAddress); 752 pio_irq_disable (ep->bEndpointAddress);
754} 753}
755 754
@@ -792,7 +791,7 @@ static int pxa25x_ep_set_halt(struct usb_ep *_ep, int value)
792 791
793 ep = container_of(_ep, struct pxa25x_ep, ep); 792 ep = container_of(_ep, struct pxa25x_ep, ep);
794 if (unlikely (!_ep 793 if (unlikely (!_ep
795 || (!ep->desc && ep->ep.name != ep0name)) 794 || (!ep->ep.desc && ep->ep.name != ep0name))
796 || ep->bmAttributes == USB_ENDPOINT_XFER_ISOC) { 795 || ep->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
797 DMSG("%s, bad ep\n", __func__); 796 DMSG("%s, bad ep\n", __func__);
798 return -EINVAL; 797 return -EINVAL;
@@ -820,7 +819,7 @@ static int pxa25x_ep_set_halt(struct usb_ep *_ep, int value)
820 *ep->reg_udccs = UDCCS_BI_FST|UDCCS_BI_FTF; 819 *ep->reg_udccs = UDCCS_BI_FST|UDCCS_BI_FTF;
821 820
822 /* ep0 needs special care */ 821 /* ep0 needs special care */
823 if (!ep->desc) { 822 if (!ep->ep.desc) {
824 start_watchdog(ep->dev); 823 start_watchdog(ep->dev);
825 ep->dev->req_pending = 0; 824 ep->dev->req_pending = 0;
826 ep->dev->ep0state = EP0_STALL; 825 ep->dev->ep0state = EP0_STALL;
@@ -1087,7 +1086,7 @@ udc_seq_show(struct seq_file *m, void *_d)
1087 if (i != 0) { 1086 if (i != 0) {
1088 const struct usb_endpoint_descriptor *desc; 1087 const struct usb_endpoint_descriptor *desc;
1089 1088
1090 desc = ep->desc; 1089 desc = ep->ep.desc;
1091 if (!desc) 1090 if (!desc)
1092 continue; 1091 continue;
1093 tmp = *dev->ep [i].reg_udccs; 1092 tmp = *dev->ep [i].reg_udccs;
@@ -1191,7 +1190,6 @@ static void udc_reinit(struct pxa25x_udc *dev)
1191 if (i != 0) 1190 if (i != 0)
1192 list_add_tail (&ep->ep.ep_list, &dev->gadget.ep_list); 1191 list_add_tail (&ep->ep.ep_list, &dev->gadget.ep_list);
1193 1192
1194 ep->desc = NULL;
1195 ep->ep.desc = NULL; 1193 ep->ep.desc = NULL;
1196 ep->stopped = 0; 1194 ep->stopped = 0;
1197 INIT_LIST_HEAD (&ep->queue); 1195 INIT_LIST_HEAD (&ep->queue);
diff --git a/drivers/usb/gadget/pxa25x_udc.h b/drivers/usb/gadget/pxa25x_udc.h
index 893e917f048e..861f4df6ea22 100644
--- a/drivers/usb/gadget/pxa25x_udc.h
+++ b/drivers/usb/gadget/pxa25x_udc.h
@@ -41,7 +41,6 @@ struct pxa25x_ep {
41 struct usb_ep ep; 41 struct usb_ep ep;
42 struct pxa25x_udc *dev; 42 struct pxa25x_udc *dev;
43 43
44 const struct usb_endpoint_descriptor *desc;
45 struct list_head queue; 44 struct list_head queue;
46 unsigned long pio_irqs; 45 unsigned long pio_irqs;
47 46
diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
index c4401e7dd3a6..f3ac2a20c27c 100644
--- a/drivers/usb/gadget/r8a66597-udc.c
+++ b/drivers/usb/gadget/r8a66597-udc.c
@@ -459,7 +459,7 @@ static int alloc_pipe_config(struct r8a66597_ep *ep,
459 unsigned char *counter; 459 unsigned char *counter;
460 int ret; 460 int ret;
461 461
462 ep->desc = desc; 462 ep->ep.desc = desc;
463 463
464 if (ep->pipenum) /* already allocated pipe */ 464 if (ep->pipenum) /* already allocated pipe */
465 return 0; 465 return 0;
@@ -648,7 +648,7 @@ static int sudmac_alloc_channel(struct r8a66597 *r8a66597,
648 /* set SUDMAC parameters */ 648 /* set SUDMAC parameters */
649 dma = &r8a66597->dma; 649 dma = &r8a66597->dma;
650 dma->used = 1; 650 dma->used = 1;
651 if (ep->desc->bEndpointAddress & USB_DIR_IN) { 651 if (ep->ep.desc->bEndpointAddress & USB_DIR_IN) {
652 dma->dir = 1; 652 dma->dir = 1;
653 } else { 653 } else {
654 dma->dir = 0; 654 dma->dir = 0;
@@ -770,7 +770,7 @@ static void start_packet_read(struct r8a66597_ep *ep,
770 770
771static void start_packet(struct r8a66597_ep *ep, struct r8a66597_request *req) 771static void start_packet(struct r8a66597_ep *ep, struct r8a66597_request *req)
772{ 772{
773 if (ep->desc->bEndpointAddress & USB_DIR_IN) 773 if (ep->ep.desc->bEndpointAddress & USB_DIR_IN)
774 start_packet_write(ep, req); 774 start_packet_write(ep, req);
775 else 775 else
776 start_packet_read(ep, req); 776 start_packet_read(ep, req);
@@ -930,7 +930,7 @@ __acquires(r8a66597->lock)
930 930
931 if (restart) { 931 if (restart) {
932 req = get_request_from_ep(ep); 932 req = get_request_from_ep(ep);
933 if (ep->desc) 933 if (ep->ep.desc)
934 start_packet(ep, req); 934 start_packet(ep, req);
935 } 935 }
936} 936}
@@ -1116,7 +1116,7 @@ static void irq_pipe_ready(struct r8a66597 *r8a66597, u16 status, u16 enb)
1116 r8a66597_write(r8a66597, ~check, BRDYSTS); 1116 r8a66597_write(r8a66597, ~check, BRDYSTS);
1117 ep = r8a66597->pipenum2ep[pipenum]; 1117 ep = r8a66597->pipenum2ep[pipenum];
1118 req = get_request_from_ep(ep); 1118 req = get_request_from_ep(ep);
1119 if (ep->desc->bEndpointAddress & USB_DIR_IN) 1119 if (ep->ep.desc->bEndpointAddress & USB_DIR_IN)
1120 irq_packet_write(ep, req); 1120 irq_packet_write(ep, req);
1121 else 1121 else
1122 irq_packet_read(ep, req); 1122 irq_packet_read(ep, req);
@@ -1170,7 +1170,7 @@ __acquires(r8a66597->lock)
1170 1170
1171 switch (ctrl->bRequestType & USB_RECIP_MASK) { 1171 switch (ctrl->bRequestType & USB_RECIP_MASK) {
1172 case USB_RECIP_DEVICE: 1172 case USB_RECIP_DEVICE:
1173 status = 1 << USB_DEVICE_SELF_POWERED; 1173 status = r8a66597->device_status;
1174 break; 1174 break;
1175 case USB_RECIP_INTERFACE: 1175 case USB_RECIP_INTERFACE:
1176 status = 0; 1176 status = 0;
@@ -1627,7 +1627,7 @@ static int r8a66597_queue(struct usb_ep *_ep, struct usb_request *_req,
1627 req->req.actual = 0; 1627 req->req.actual = 0;
1628 req->req.status = -EINPROGRESS; 1628 req->req.status = -EINPROGRESS;
1629 1629
1630 if (ep->desc == NULL) /* control */ 1630 if (ep->ep.desc == NULL) /* control */
1631 start_ep0(ep, req); 1631 start_ep0(ep, req);
1632 else { 1632 else {
1633 if (request && !ep->busy) 1633 if (request && !ep->busy)
@@ -1692,7 +1692,7 @@ static int r8a66597_set_wedge(struct usb_ep *_ep)
1692 1692
1693 ep = container_of(_ep, struct r8a66597_ep, ep); 1693 ep = container_of(_ep, struct r8a66597_ep, ep);
1694 1694
1695 if (!ep || !ep->desc) 1695 if (!ep || !ep->ep.desc)
1696 return -EINVAL; 1696 return -EINVAL;
1697 1697
1698 spin_lock_irqsave(&ep->r8a66597->lock, flags); 1698 spin_lock_irqsave(&ep->r8a66597->lock, flags);
@@ -1800,11 +1800,24 @@ static int r8a66597_pullup(struct usb_gadget *gadget, int is_on)
1800 return 0; 1800 return 0;
1801} 1801}
1802 1802
1803static int r8a66597_set_selfpowered(struct usb_gadget *gadget, int is_self)
1804{
1805 struct r8a66597 *r8a66597 = gadget_to_r8a66597(gadget);
1806
1807 if (is_self)
1808 r8a66597->device_status |= 1 << USB_DEVICE_SELF_POWERED;
1809 else
1810 r8a66597->device_status &= ~(1 << USB_DEVICE_SELF_POWERED);
1811
1812 return 0;
1813}
1814
1803static struct usb_gadget_ops r8a66597_gadget_ops = { 1815static struct usb_gadget_ops r8a66597_gadget_ops = {
1804 .get_frame = r8a66597_get_frame, 1816 .get_frame = r8a66597_get_frame,
1805 .udc_start = r8a66597_start, 1817 .udc_start = r8a66597_start,
1806 .udc_stop = r8a66597_stop, 1818 .udc_stop = r8a66597_stop,
1807 .pullup = r8a66597_pullup, 1819 .pullup = r8a66597_pullup,
1820 .set_selfpowered = r8a66597_set_selfpowered,
1808}; 1821};
1809 1822
1810static int __exit r8a66597_remove(struct platform_device *pdev) 1823static int __exit r8a66597_remove(struct platform_device *pdev)
diff --git a/drivers/usb/gadget/r8a66597-udc.h b/drivers/usb/gadget/r8a66597-udc.h
index 8e3de61cd4b8..99908c76ccd1 100644
--- a/drivers/usb/gadget/r8a66597-udc.h
+++ b/drivers/usb/gadget/r8a66597-udc.h
@@ -72,7 +72,7 @@ struct r8a66597_ep {
72 unsigned use_dma:1; 72 unsigned use_dma:1;
73 u16 pipenum; 73 u16 pipenum;
74 u16 type; 74 u16 type;
75 const struct usb_endpoint_descriptor *desc; 75
76 /* register address */ 76 /* register address */
77 unsigned char fifoaddr; 77 unsigned char fifoaddr;
78 unsigned char fifosel; 78 unsigned char fifosel;
@@ -111,6 +111,7 @@ struct r8a66597 {
111 u16 old_vbus; 111 u16 old_vbus;
112 u16 scount; 112 u16 scount;
113 u16 old_dvsq; 113 u16 old_dvsq;
114 u16 device_status; /* for GET_STATUS */
114 115
115 /* pipe config */ 116 /* pipe config */
116 unsigned char bulk; 117 unsigned char bulk;
diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index 105b206cd844..f4abb0ed9872 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -1,4 +1,5 @@
1/* linux/drivers/usb/gadget/s3c-hsotg.c 1/**
2 * linux/drivers/usb/gadget/s3c-hsotg.c
2 * 3 *
3 * Copyright (c) 2011 Samsung Electronics Co., Ltd. 4 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4 * http://www.samsung.com 5 * http://www.samsung.com
@@ -13,7 +14,7 @@
13 * This program is free software; you can redistribute it and/or modify 14 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as 15 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation. 16 * published by the Free Software Foundation.
16*/ 17 */
17 18
18#include <linux/kernel.h> 19#include <linux/kernel.h>
19#include <linux/module.h> 20#include <linux/module.h>
@@ -27,21 +28,25 @@
27#include <linux/io.h> 28#include <linux/io.h>
28#include <linux/slab.h> 29#include <linux/slab.h>
29#include <linux/clk.h> 30#include <linux/clk.h>
31#include <linux/regulator/consumer.h>
30 32
31#include <linux/usb/ch9.h> 33#include <linux/usb/ch9.h>
32#include <linux/usb/gadget.h> 34#include <linux/usb/gadget.h>
35#include <linux/platform_data/s3c-hsotg.h>
33 36
34#include <mach/map.h> 37#include <mach/map.h>
35 38
36#include <plat/regs-usb-hsotg-phy.h> 39#include "s3c-hsotg.h"
37#include <plat/regs-usb-hsotg.h>
38#include <mach/regs-sys.h>
39#include <plat/udc-hs.h>
40#include <plat/cpu.h>
41 40
42#define DMA_ADDR_INVALID (~((dma_addr_t)0)) 41#define DMA_ADDR_INVALID (~((dma_addr_t)0))
43 42
44/* EP0_MPS_LIMIT 43static const char * const s3c_hsotg_supply_names[] = {
44 "vusb_d", /* digital USB supply, 1.2V */
45 "vusb_a", /* analog USB supply, 1.1V */
46};
47
48/*
49 * EP0_MPS_LIMIT
45 * 50 *
46 * Unfortunately there seems to be a limit of the amount of data that can 51 * Unfortunately there seems to be a limit of the amount of data that can
47 * be transferred by IN transactions on EP0. This is either 127 bytes or 3 52 * be transferred by IN transactions on EP0. This is either 127 bytes or 3
@@ -125,8 +130,6 @@ struct s3c_hsotg_ep {
125 char name[10]; 130 char name[10];
126}; 131};
127 132
128#define S3C_HSOTG_EPS (8+1) /* limit to 9 for the moment */
129
130/** 133/**
131 * struct s3c_hsotg - driver state. 134 * struct s3c_hsotg - driver state.
132 * @dev: The parent device supplied to the probe function 135 * @dev: The parent device supplied to the probe function
@@ -135,7 +138,9 @@ struct s3c_hsotg_ep {
135 * @regs: The memory area mapped for accessing registers. 138 * @regs: The memory area mapped for accessing registers.
136 * @regs_res: The resource that was allocated when claiming register space. 139 * @regs_res: The resource that was allocated when claiming register space.
137 * @irq: The IRQ number we are using 140 * @irq: The IRQ number we are using
141 * @supplies: Definition of USB power supplies
138 * @dedicated_fifos: Set if the hardware has dedicated IN-EP fifos. 142 * @dedicated_fifos: Set if the hardware has dedicated IN-EP fifos.
143 * @num_of_eps: Number of available EPs (excluding EP0)
139 * @debug_root: root directrory for debugfs. 144 * @debug_root: root directrory for debugfs.
140 * @debug_file: main status file for debugfs. 145 * @debug_file: main status file for debugfs.
141 * @debug_fifo: FIFO status file for debugfs. 146 * @debug_fifo: FIFO status file for debugfs.
@@ -143,6 +148,8 @@ struct s3c_hsotg_ep {
143 * @ep0_buff: Buffer for EP0 reply data, if needed. 148 * @ep0_buff: Buffer for EP0 reply data, if needed.
144 * @ctrl_buff: Buffer for EP0 control requests. 149 * @ctrl_buff: Buffer for EP0 control requests.
145 * @ctrl_req: Request for EP0 control packets. 150 * @ctrl_req: Request for EP0 control packets.
151 * @setup: NAK management for EP0 SETUP
152 * @last_rst: Time of last reset
146 * @eps: The endpoints being supplied to the gadget framework 153 * @eps: The endpoints being supplied to the gadget framework
147 */ 154 */
148struct s3c_hsotg { 155struct s3c_hsotg {
@@ -155,7 +162,10 @@ struct s3c_hsotg {
155 int irq; 162 int irq;
156 struct clk *clk; 163 struct clk *clk;
157 164
165 struct regulator_bulk_data supplies[ARRAY_SIZE(s3c_hsotg_supply_names)];
166
158 unsigned int dedicated_fifos:1; 167 unsigned int dedicated_fifos:1;
168 unsigned char num_of_eps;
159 169
160 struct dentry *debug_root; 170 struct dentry *debug_root;
161 struct dentry *debug_file; 171 struct dentry *debug_file;
@@ -167,7 +177,9 @@ struct s3c_hsotg {
167 u8 ctrl_buff[8]; 177 u8 ctrl_buff[8];
168 178
169 struct usb_gadget gadget; 179 struct usb_gadget gadget;
170 struct s3c_hsotg_ep eps[]; 180 unsigned int setup;
181 unsigned long last_rst;
182 struct s3c_hsotg_ep *eps;
171}; 183};
172 184
173/** 185/**
@@ -244,14 +256,14 @@ static inline bool using_dma(struct s3c_hsotg *hsotg)
244 */ 256 */
245static void s3c_hsotg_en_gsint(struct s3c_hsotg *hsotg, u32 ints) 257static void s3c_hsotg_en_gsint(struct s3c_hsotg *hsotg, u32 ints)
246{ 258{
247 u32 gsintmsk = readl(hsotg->regs + S3C_GINTMSK); 259 u32 gsintmsk = readl(hsotg->regs + GINTMSK);
248 u32 new_gsintmsk; 260 u32 new_gsintmsk;
249 261
250 new_gsintmsk = gsintmsk | ints; 262 new_gsintmsk = gsintmsk | ints;
251 263
252 if (new_gsintmsk != gsintmsk) { 264 if (new_gsintmsk != gsintmsk) {
253 dev_dbg(hsotg->dev, "gsintmsk now 0x%08x\n", new_gsintmsk); 265 dev_dbg(hsotg->dev, "gsintmsk now 0x%08x\n", new_gsintmsk);
254 writel(new_gsintmsk, hsotg->regs + S3C_GINTMSK); 266 writel(new_gsintmsk, hsotg->regs + GINTMSK);
255 } 267 }
256} 268}
257 269
@@ -262,13 +274,13 @@ static void s3c_hsotg_en_gsint(struct s3c_hsotg *hsotg, u32 ints)
262 */ 274 */
263static void s3c_hsotg_disable_gsint(struct s3c_hsotg *hsotg, u32 ints) 275static void s3c_hsotg_disable_gsint(struct s3c_hsotg *hsotg, u32 ints)
264{ 276{
265 u32 gsintmsk = readl(hsotg->regs + S3C_GINTMSK); 277 u32 gsintmsk = readl(hsotg->regs + GINTMSK);
266 u32 new_gsintmsk; 278 u32 new_gsintmsk;
267 279
268 new_gsintmsk = gsintmsk & ~ints; 280 new_gsintmsk = gsintmsk & ~ints;
269 281
270 if (new_gsintmsk != gsintmsk) 282 if (new_gsintmsk != gsintmsk)
271 writel(new_gsintmsk, hsotg->regs + S3C_GINTMSK); 283 writel(new_gsintmsk, hsotg->regs + GINTMSK);
272} 284}
273 285
274/** 286/**
@@ -293,12 +305,12 @@ static void s3c_hsotg_ctrl_epint(struct s3c_hsotg *hsotg,
293 bit <<= 16; 305 bit <<= 16;
294 306
295 local_irq_save(flags); 307 local_irq_save(flags);
296 daint = readl(hsotg->regs + S3C_DAINTMSK); 308 daint = readl(hsotg->regs + DAINTMSK);
297 if (en) 309 if (en)
298 daint |= bit; 310 daint |= bit;
299 else 311 else
300 daint &= ~bit; 312 daint &= ~bit;
301 writel(daint, hsotg->regs + S3C_DAINTMSK); 313 writel(daint, hsotg->regs + DAINTMSK);
302 local_irq_restore(flags); 314 local_irq_restore(flags);
303} 315}
304 316
@@ -314,52 +326,51 @@ static void s3c_hsotg_init_fifo(struct s3c_hsotg *hsotg)
314 int timeout; 326 int timeout;
315 u32 val; 327 u32 val;
316 328
317 /* the ryu 2.6.24 release ahs
318 writel(0x1C0, hsotg->regs + S3C_GRXFSIZ);
319 writel(S3C_GNPTXFSIZ_NPTxFStAddr(0x200) |
320 S3C_GNPTXFSIZ_NPTxFDep(0x1C0),
321 hsotg->regs + S3C_GNPTXFSIZ);
322 */
323
324 /* set FIFO sizes to 2048/1024 */ 329 /* set FIFO sizes to 2048/1024 */
325 330
326 writel(2048, hsotg->regs + S3C_GRXFSIZ); 331 writel(2048, hsotg->regs + GRXFSIZ);
327 writel(S3C_GNPTXFSIZ_NPTxFStAddr(2048) | 332 writel(GNPTXFSIZ_NPTxFStAddr(2048) |
328 S3C_GNPTXFSIZ_NPTxFDep(1024), 333 GNPTXFSIZ_NPTxFDep(1024),
329 hsotg->regs + S3C_GNPTXFSIZ); 334 hsotg->regs + GNPTXFSIZ);
330 335
331 /* arange all the rest of the TX FIFOs, as some versions of this 336 /*
337 * arange all the rest of the TX FIFOs, as some versions of this
332 * block have overlapping default addresses. This also ensures 338 * block have overlapping default addresses. This also ensures
333 * that if the settings have been changed, then they are set to 339 * that if the settings have been changed, then they are set to
334 * known values. */ 340 * known values.
341 */
335 342
336 /* start at the end of the GNPTXFSIZ, rounded up */ 343 /* start at the end of the GNPTXFSIZ, rounded up */
337 addr = 2048 + 1024; 344 addr = 2048 + 1024;
338 size = 768; 345 size = 768;
339 346
340 /* currently we allocate TX FIFOs for all possible endpoints, 347 /*
341 * and assume that they are all the same size. */ 348 * currently we allocate TX FIFOs for all possible endpoints,
349 * and assume that they are all the same size.
350 */
342 351
343 for (ep = 1; ep <= 15; ep++) { 352 for (ep = 1; ep <= 15; ep++) {
344 val = addr; 353 val = addr;
345 val |= size << S3C_DPTXFSIZn_DPTxFSize_SHIFT; 354 val |= size << DPTXFSIZn_DPTxFSize_SHIFT;
346 addr += size; 355 addr += size;
347 356
348 writel(val, hsotg->regs + S3C_DPTXFSIZn(ep)); 357 writel(val, hsotg->regs + DPTXFSIZn(ep));
349 } 358 }
350 359
351 /* according to p428 of the design guide, we need to ensure that 360 /*
352 * all fifos are flushed before continuing */ 361 * according to p428 of the design guide, we need to ensure that
362 * all fifos are flushed before continuing
363 */
353 364
354 writel(S3C_GRSTCTL_TxFNum(0x10) | S3C_GRSTCTL_TxFFlsh | 365 writel(GRSTCTL_TxFNum(0x10) | GRSTCTL_TxFFlsh |
355 S3C_GRSTCTL_RxFFlsh, hsotg->regs + S3C_GRSTCTL); 366 GRSTCTL_RxFFlsh, hsotg->regs + GRSTCTL);
356 367
357 /* wait until the fifos are both flushed */ 368 /* wait until the fifos are both flushed */
358 timeout = 100; 369 timeout = 100;
359 while (1) { 370 while (1) {
360 val = readl(hsotg->regs + S3C_GRSTCTL); 371 val = readl(hsotg->regs + GRSTCTL);
361 372
362 if ((val & (S3C_GRSTCTL_TxFFlsh | S3C_GRSTCTL_RxFFlsh)) == 0) 373 if ((val & (GRSTCTL_TxFFlsh | GRSTCTL_RxFFlsh)) == 0)
363 break; 374 break;
364 375
365 if (--timeout == 0) { 376 if (--timeout == 0) {
@@ -415,7 +426,7 @@ static inline int is_ep_periodic(struct s3c_hsotg_ep *hs_ep)
415 * 426 *
416 * This is the reverse of s3c_hsotg_map_dma(), called for the completion 427 * This is the reverse of s3c_hsotg_map_dma(), called for the completion
417 * of a request to ensure the buffer is ready for access by the caller. 428 * of a request to ensure the buffer is ready for access by the caller.
418*/ 429 */
419static void s3c_hsotg_unmap_dma(struct s3c_hsotg *hsotg, 430static void s3c_hsotg_unmap_dma(struct s3c_hsotg *hsotg,
420 struct s3c_hsotg_ep *hs_ep, 431 struct s3c_hsotg_ep *hs_ep,
421 struct s3c_hsotg_req *hs_req) 432 struct s3c_hsotg_req *hs_req)
@@ -456,13 +467,13 @@ static void s3c_hsotg_unmap_dma(struct s3c_hsotg *hsotg,
456 * otherwise -ENOSPC is returned if the FIFO space was used up. 467 * otherwise -ENOSPC is returned if the FIFO space was used up.
457 * 468 *
458 * This routine is only needed for PIO 469 * This routine is only needed for PIO
459*/ 470 */
460static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg, 471static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
461 struct s3c_hsotg_ep *hs_ep, 472 struct s3c_hsotg_ep *hs_ep,
462 struct s3c_hsotg_req *hs_req) 473 struct s3c_hsotg_req *hs_req)
463{ 474{
464 bool periodic = is_ep_periodic(hs_ep); 475 bool periodic = is_ep_periodic(hs_ep);
465 u32 gnptxsts = readl(hsotg->regs + S3C_GNPTXSTS); 476 u32 gnptxsts = readl(hsotg->regs + GNPTXSTS);
466 int buf_pos = hs_req->req.actual; 477 int buf_pos = hs_req->req.actual;
467 int to_write = hs_ep->size_loaded; 478 int to_write = hs_ep->size_loaded;
468 void *data; 479 void *data;
@@ -476,20 +487,23 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
476 return 0; 487 return 0;
477 488
478 if (periodic && !hsotg->dedicated_fifos) { 489 if (periodic && !hsotg->dedicated_fifos) {
479 u32 epsize = readl(hsotg->regs + S3C_DIEPTSIZ(hs_ep->index)); 490 u32 epsize = readl(hsotg->regs + DIEPTSIZ(hs_ep->index));
480 int size_left; 491 int size_left;
481 int size_done; 492 int size_done;
482 493
483 /* work out how much data was loaded so we can calculate 494 /*
484 * how much data is left in the fifo. */ 495 * work out how much data was loaded so we can calculate
496 * how much data is left in the fifo.
497 */
485 498
486 size_left = S3C_DxEPTSIZ_XferSize_GET(epsize); 499 size_left = DxEPTSIZ_XferSize_GET(epsize);
487 500
488 /* if shared fifo, we cannot write anything until the 501 /*
502 * if shared fifo, we cannot write anything until the
489 * previous data has been completely sent. 503 * previous data has been completely sent.
490 */ 504 */
491 if (hs_ep->fifo_load != 0) { 505 if (hs_ep->fifo_load != 0) {
492 s3c_hsotg_en_gsint(hsotg, S3C_GINTSTS_PTxFEmp); 506 s3c_hsotg_en_gsint(hsotg, GINTSTS_PTxFEmp);
493 return -ENOSPC; 507 return -ENOSPC;
494 } 508 }
495 509
@@ -510,47 +524,50 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
510 __func__, can_write); 524 __func__, can_write);
511 525
512 if (can_write <= 0) { 526 if (can_write <= 0) {
513 s3c_hsotg_en_gsint(hsotg, S3C_GINTSTS_PTxFEmp); 527 s3c_hsotg_en_gsint(hsotg, GINTSTS_PTxFEmp);
514 return -ENOSPC; 528 return -ENOSPC;
515 } 529 }
516 } else if (hsotg->dedicated_fifos && hs_ep->index != 0) { 530 } else if (hsotg->dedicated_fifos && hs_ep->index != 0) {
517 can_write = readl(hsotg->regs + S3C_DTXFSTS(hs_ep->index)); 531 can_write = readl(hsotg->regs + DTXFSTS(hs_ep->index));
518 532
519 can_write &= 0xffff; 533 can_write &= 0xffff;
520 can_write *= 4; 534 can_write *= 4;
521 } else { 535 } else {
522 if (S3C_GNPTXSTS_NPTxQSpcAvail_GET(gnptxsts) == 0) { 536 if (GNPTXSTS_NPTxQSpcAvail_GET(gnptxsts) == 0) {
523 dev_dbg(hsotg->dev, 537 dev_dbg(hsotg->dev,
524 "%s: no queue slots available (0x%08x)\n", 538 "%s: no queue slots available (0x%08x)\n",
525 __func__, gnptxsts); 539 __func__, gnptxsts);
526 540
527 s3c_hsotg_en_gsint(hsotg, S3C_GINTSTS_NPTxFEmp); 541 s3c_hsotg_en_gsint(hsotg, GINTSTS_NPTxFEmp);
528 return -ENOSPC; 542 return -ENOSPC;
529 } 543 }
530 544
531 can_write = S3C_GNPTXSTS_NPTxFSpcAvail_GET(gnptxsts); 545 can_write = GNPTXSTS_NPTxFSpcAvail_GET(gnptxsts);
532 can_write *= 4; /* fifo size is in 32bit quantities. */ 546 can_write *= 4; /* fifo size is in 32bit quantities. */
533 } 547 }
534 548
535 dev_dbg(hsotg->dev, "%s: GNPTXSTS=%08x, can=%d, to=%d, mps %d\n", 549 dev_dbg(hsotg->dev, "%s: GNPTXSTS=%08x, can=%d, to=%d, mps %d\n",
536 __func__, gnptxsts, can_write, to_write, hs_ep->ep.maxpacket); 550 __func__, gnptxsts, can_write, to_write, hs_ep->ep.maxpacket);
537 551
538 /* limit to 512 bytes of data, it seems at least on the non-periodic 552 /*
553 * limit to 512 bytes of data, it seems at least on the non-periodic
539 * FIFO, requests of >512 cause the endpoint to get stuck with a 554 * FIFO, requests of >512 cause the endpoint to get stuck with a
540 * fragment of the end of the transfer in it. 555 * fragment of the end of the transfer in it.
541 */ 556 */
542 if (can_write > 512) 557 if (can_write > 512)
543 can_write = 512; 558 can_write = 512;
544 559
545 /* limit the write to one max-packet size worth of data, but allow 560 /*
561 * limit the write to one max-packet size worth of data, but allow
546 * the transfer to return that it did not run out of fifo space 562 * the transfer to return that it did not run out of fifo space
547 * doing it. */ 563 * doing it.
564 */
548 if (to_write > hs_ep->ep.maxpacket) { 565 if (to_write > hs_ep->ep.maxpacket) {
549 to_write = hs_ep->ep.maxpacket; 566 to_write = hs_ep->ep.maxpacket;
550 567
551 s3c_hsotg_en_gsint(hsotg, 568 s3c_hsotg_en_gsint(hsotg,
552 periodic ? S3C_GINTSTS_PTxFEmp : 569 periodic ? GINTSTS_PTxFEmp :
553 S3C_GINTSTS_NPTxFEmp); 570 GINTSTS_NPTxFEmp);
554 } 571 }
555 572
556 /* see if we can write data */ 573 /* see if we can write data */
@@ -559,8 +576,8 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
559 to_write = can_write; 576 to_write = can_write;
560 pkt_round = to_write % hs_ep->ep.maxpacket; 577 pkt_round = to_write % hs_ep->ep.maxpacket;
561 578
562 /* Not sure, but we probably shouldn't be writing partial 579 /*
563 * packets into the FIFO, so round the write down to an 580 * Round the write down to an
564 * exact number of packets. 581 * exact number of packets.
565 * 582 *
566 * Note, we do not currently check to see if we can ever 583 * Note, we do not currently check to see if we can ever
@@ -570,12 +587,14 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
570 if (pkt_round) 587 if (pkt_round)
571 to_write -= pkt_round; 588 to_write -= pkt_round;
572 589
573 /* enable correct FIFO interrupt to alert us when there 590 /*
574 * is more room left. */ 591 * enable correct FIFO interrupt to alert us when there
592 * is more room left.
593 */
575 594
576 s3c_hsotg_en_gsint(hsotg, 595 s3c_hsotg_en_gsint(hsotg,
577 periodic ? S3C_GINTSTS_PTxFEmp : 596 periodic ? GINTSTS_PTxFEmp :
578 S3C_GINTSTS_NPTxFEmp); 597 GINTSTS_NPTxFEmp);
579 } 598 }
580 599
581 dev_dbg(hsotg->dev, "write %d/%d, can_write %d, done %d\n", 600 dev_dbg(hsotg->dev, "write %d/%d, can_write %d, done %d\n",
@@ -593,7 +612,7 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
593 to_write = DIV_ROUND_UP(to_write, 4); 612 to_write = DIV_ROUND_UP(to_write, 4);
594 data = hs_req->req.buf + buf_pos; 613 data = hs_req->req.buf + buf_pos;
595 614
596 writesl(hsotg->regs + S3C_EPFIFO(hs_ep->index), data, to_write); 615 writesl(hsotg->regs + EPFIFO(hs_ep->index), data, to_write);
597 616
598 return (to_write >= can_write) ? -ENOSPC : 0; 617 return (to_write >= can_write) ? -ENOSPC : 0;
599} 618}
@@ -612,12 +631,12 @@ static unsigned get_ep_limit(struct s3c_hsotg_ep *hs_ep)
612 unsigned maxpkt; 631 unsigned maxpkt;
613 632
614 if (index != 0) { 633 if (index != 0) {
615 maxsize = S3C_DxEPTSIZ_XferSize_LIMIT + 1; 634 maxsize = DxEPTSIZ_XferSize_LIMIT + 1;
616 maxpkt = S3C_DxEPTSIZ_PktCnt_LIMIT + 1; 635 maxpkt = DxEPTSIZ_PktCnt_LIMIT + 1;
617 } else { 636 } else {
618 maxsize = 64+64; 637 maxsize = 64+64;
619 if (hs_ep->dir_in) 638 if (hs_ep->dir_in)
620 maxpkt = S3C_DIEPTSIZ0_PktCnt_LIMIT + 1; 639 maxpkt = DIEPTSIZ0_PktCnt_LIMIT + 1;
621 else 640 else
622 maxpkt = 2; 641 maxpkt = 2;
623 } 642 }
@@ -626,8 +645,10 @@ static unsigned get_ep_limit(struct s3c_hsotg_ep *hs_ep)
626 maxpkt--; 645 maxpkt--;
627 maxsize--; 646 maxsize--;
628 647
629 /* constrain by packet count if maxpkts*pktsize is greater 648 /*
630 * than the length register size. */ 649 * constrain by packet count if maxpkts*pktsize is greater
650 * than the length register size.
651 */
631 652
632 if ((maxpkt * hs_ep->ep.maxpacket) < maxsize) 653 if ((maxpkt * hs_ep->ep.maxpacket) < maxsize)
633 maxsize = maxpkt * hs_ep->ep.maxpacket; 654 maxsize = maxpkt * hs_ep->ep.maxpacket;
@@ -674,8 +695,8 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
674 } 695 }
675 } 696 }
676 697
677 epctrl_reg = dir_in ? S3C_DIEPCTL(index) : S3C_DOEPCTL(index); 698 epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
678 epsize_reg = dir_in ? S3C_DIEPTSIZ(index) : S3C_DOEPTSIZ(index); 699 epsize_reg = dir_in ? DIEPTSIZ(index) : DOEPTSIZ(index);
679 700
680 dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x, ep %d, dir %s\n", 701 dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x, ep %d, dir %s\n",
681 __func__, readl(hsotg->regs + epctrl_reg), index, 702 __func__, readl(hsotg->regs + epctrl_reg), index,
@@ -684,13 +705,14 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
684 /* If endpoint is stalled, we will restart request later */ 705 /* If endpoint is stalled, we will restart request later */
685 ctrl = readl(hsotg->regs + epctrl_reg); 706 ctrl = readl(hsotg->regs + epctrl_reg);
686 707
687 if (ctrl & S3C_DxEPCTL_Stall) { 708 if (ctrl & DxEPCTL_Stall) {
688 dev_warn(hsotg->dev, "%s: ep%d is stalled\n", __func__, index); 709 dev_warn(hsotg->dev, "%s: ep%d is stalled\n", __func__, index);
689 return; 710 return;
690 } 711 }
691 712
692 length = ureq->length - ureq->actual; 713 length = ureq->length - ureq->actual;
693 714 dev_dbg(hsotg->dev, "ureq->length:%d ureq->actual:%d\n",
715 ureq->length, ureq->actual);
694 if (0) 716 if (0)
695 dev_dbg(hsotg->dev, 717 dev_dbg(hsotg->dev,
696 "REQ buf %p len %d dma 0x%08x noi=%d zp=%d snok=%d\n", 718 "REQ buf %p len %d dma 0x%08x noi=%d zp=%d snok=%d\n",
@@ -717,20 +739,22 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
717 packets = 1; /* send one packet if length is zero. */ 739 packets = 1; /* send one packet if length is zero. */
718 740
719 if (dir_in && index != 0) 741 if (dir_in && index != 0)
720 epsize = S3C_DxEPTSIZ_MC(1); 742 epsize = DxEPTSIZ_MC(1);
721 else 743 else
722 epsize = 0; 744 epsize = 0;
723 745
724 if (index != 0 && ureq->zero) { 746 if (index != 0 && ureq->zero) {
725 /* test for the packets being exactly right for the 747 /*
726 * transfer */ 748 * test for the packets being exactly right for the
749 * transfer
750 */
727 751
728 if (length == (packets * hs_ep->ep.maxpacket)) 752 if (length == (packets * hs_ep->ep.maxpacket))
729 packets++; 753 packets++;
730 } 754 }
731 755
732 epsize |= S3C_DxEPTSIZ_PktCnt(packets); 756 epsize |= DxEPTSIZ_PktCnt(packets);
733 epsize |= S3C_DxEPTSIZ_XferSize(length); 757 epsize |= DxEPTSIZ_XferSize(length);
734 758
735 dev_dbg(hsotg->dev, "%s: %d@%d/%d, 0x%08x => 0x%08x\n", 759 dev_dbg(hsotg->dev, "%s: %d@%d/%d, 0x%08x => 0x%08x\n",
736 __func__, packets, length, ureq->length, epsize, epsize_reg); 760 __func__, packets, length, ureq->length, epsize, epsize_reg);
@@ -744,26 +768,38 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
744 if (using_dma(hsotg) && !continuing) { 768 if (using_dma(hsotg) && !continuing) {
745 unsigned int dma_reg; 769 unsigned int dma_reg;
746 770
747 /* write DMA address to control register, buffer already 771 /*
748 * synced by s3c_hsotg_ep_queue(). */ 772 * write DMA address to control register, buffer already
773 * synced by s3c_hsotg_ep_queue().
774 */
749 775
750 dma_reg = dir_in ? S3C_DIEPDMA(index) : S3C_DOEPDMA(index); 776 dma_reg = dir_in ? DIEPDMA(index) : DOEPDMA(index);
751 writel(ureq->dma, hsotg->regs + dma_reg); 777 writel(ureq->dma, hsotg->regs + dma_reg);
752 778
753 dev_dbg(hsotg->dev, "%s: 0x%08x => 0x%08x\n", 779 dev_dbg(hsotg->dev, "%s: 0x%08x => 0x%08x\n",
754 __func__, ureq->dma, dma_reg); 780 __func__, ureq->dma, dma_reg);
755 } 781 }
756 782
757 ctrl |= S3C_DxEPCTL_EPEna; /* ensure ep enabled */ 783 ctrl |= DxEPCTL_EPEna; /* ensure ep enabled */
758 ctrl |= S3C_DxEPCTL_USBActEp; 784 ctrl |= DxEPCTL_USBActEp;
759 ctrl |= S3C_DxEPCTL_CNAK; /* clear NAK set by core */ 785
786 dev_dbg(hsotg->dev, "setup req:%d\n", hsotg->setup);
787
788 /* For Setup request do not clear NAK */
789 if (hsotg->setup && index == 0)
790 hsotg->setup = 0;
791 else
792 ctrl |= DxEPCTL_CNAK; /* clear NAK set by core */
793
760 794
761 dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl); 795 dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
762 writel(ctrl, hsotg->regs + epctrl_reg); 796 writel(ctrl, hsotg->regs + epctrl_reg);
763 797
764 /* set these, it seems that DMA support increments past the end 798 /*
799 * set these, it seems that DMA support increments past the end
765 * of the packet buffer so we need to calculate the length from 800 * of the packet buffer so we need to calculate the length from
766 * this information. */ 801 * this information.
802 */
767 hs_ep->size_loaded = length; 803 hs_ep->size_loaded = length;
768 hs_ep->last_load = ureq->actual; 804 hs_ep->last_load = ureq->actual;
769 805
@@ -774,17 +810,21 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
774 s3c_hsotg_write_fifo(hsotg, hs_ep, hs_req); 810 s3c_hsotg_write_fifo(hsotg, hs_ep, hs_req);
775 } 811 }
776 812
777 /* clear the INTknTXFEmpMsk when we start request, more as a aide 813 /*
778 * to debugging to see what is going on. */ 814 * clear the INTknTXFEmpMsk when we start request, more as a aide
815 * to debugging to see what is going on.
816 */
779 if (dir_in) 817 if (dir_in)
780 writel(S3C_DIEPMSK_INTknTXFEmpMsk, 818 writel(DIEPMSK_INTknTXFEmpMsk,
781 hsotg->regs + S3C_DIEPINT(index)); 819 hsotg->regs + DIEPINT(index));
782 820
783 /* Note, trying to clear the NAK here causes problems with transmit 821 /*
784 * on the S3C6400 ending up with the TXFIFO becoming full. */ 822 * Note, trying to clear the NAK here causes problems with transmit
823 * on the S3C6400 ending up with the TXFIFO becoming full.
824 */
785 825
786 /* check ep is enabled */ 826 /* check ep is enabled */
787 if (!(readl(hsotg->regs + epctrl_reg) & S3C_DxEPCTL_EPEna)) 827 if (!(readl(hsotg->regs + epctrl_reg) & DxEPCTL_EPEna))
788 dev_warn(hsotg->dev, 828 dev_warn(hsotg->dev,
789 "ep%d: failed to become enabled (DxEPCTL=0x%08x)?\n", 829 "ep%d: failed to become enabled (DxEPCTL=0x%08x)?\n",
790 index, readl(hsotg->regs + epctrl_reg)); 830 index, readl(hsotg->regs + epctrl_reg));
@@ -804,7 +844,7 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
804 * then ensure the buffer has been synced to memory. If our buffer has no 844 * then ensure the buffer has been synced to memory. If our buffer has no
805 * DMA memory, then we map the memory and mark our request to allow us to 845 * DMA memory, then we map the memory and mark our request to allow us to
806 * cleanup on completion. 846 * cleanup on completion.
807*/ 847 */
808static int s3c_hsotg_map_dma(struct s3c_hsotg *hsotg, 848static int s3c_hsotg_map_dma(struct s3c_hsotg *hsotg,
809 struct s3c_hsotg_ep *hs_ep, 849 struct s3c_hsotg_ep *hs_ep,
810 struct usb_request *req) 850 struct usb_request *req)
@@ -922,7 +962,7 @@ static void s3c_hsotg_complete_oursetup(struct usb_ep *ep,
922 * 962 *
923 * Convert the given wIndex into a pointer to an driver endpoint 963 * Convert the given wIndex into a pointer to an driver endpoint
924 * structure, or return NULL if it is not a valid endpoint. 964 * structure, or return NULL if it is not a valid endpoint.
925*/ 965 */
926static struct s3c_hsotg_ep *ep_from_windex(struct s3c_hsotg *hsotg, 966static struct s3c_hsotg_ep *ep_from_windex(struct s3c_hsotg *hsotg,
927 u32 windex) 967 u32 windex)
928{ 968{
@@ -933,7 +973,7 @@ static struct s3c_hsotg_ep *ep_from_windex(struct s3c_hsotg *hsotg,
933 if (windex >= 0x100) 973 if (windex >= 0x100)
934 return NULL; 974 return NULL;
935 975
936 if (idx > S3C_HSOTG_EPS) 976 if (idx > hsotg->num_of_eps)
937 return NULL; 977 return NULL;
938 978
939 if (idx && ep->dir_in != dir) 979 if (idx && ep->dir_in != dir)
@@ -1151,24 +1191,28 @@ static void s3c_hsotg_process_control(struct s3c_hsotg *hsotg,
1151 ctrl->bRequest, ctrl->bRequestType, 1191 ctrl->bRequest, ctrl->bRequestType,
1152 ctrl->wValue, ctrl->wLength); 1192 ctrl->wValue, ctrl->wLength);
1153 1193
1154 /* record the direction of the request, for later use when enquing 1194 /*
1155 * packets onto EP0. */ 1195 * record the direction of the request, for later use when enquing
1196 * packets onto EP0.
1197 */
1156 1198
1157 ep0->dir_in = (ctrl->bRequestType & USB_DIR_IN) ? 1 : 0; 1199 ep0->dir_in = (ctrl->bRequestType & USB_DIR_IN) ? 1 : 0;
1158 dev_dbg(hsotg->dev, "ctrl: dir_in=%d\n", ep0->dir_in); 1200 dev_dbg(hsotg->dev, "ctrl: dir_in=%d\n", ep0->dir_in);
1159 1201
1160 /* if we've no data with this request, then the last part of the 1202 /*
1161 * transaction is going to implicitly be IN. */ 1203 * if we've no data with this request, then the last part of the
1204 * transaction is going to implicitly be IN.
1205 */
1162 if (ctrl->wLength == 0) 1206 if (ctrl->wLength == 0)
1163 ep0->dir_in = 1; 1207 ep0->dir_in = 1;
1164 1208
1165 if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) { 1209 if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
1166 switch (ctrl->bRequest) { 1210 switch (ctrl->bRequest) {
1167 case USB_REQ_SET_ADDRESS: 1211 case USB_REQ_SET_ADDRESS:
1168 dcfg = readl(hsotg->regs + S3C_DCFG); 1212 dcfg = readl(hsotg->regs + DCFG);
1169 dcfg &= ~S3C_DCFG_DevAddr_MASK; 1213 dcfg &= ~DCFG_DevAddr_MASK;
1170 dcfg |= ctrl->wValue << S3C_DCFG_DevAddr_SHIFT; 1214 dcfg |= ctrl->wValue << DCFG_DevAddr_SHIFT;
1171 writel(dcfg, hsotg->regs + S3C_DCFG); 1215 writel(dcfg, hsotg->regs + DCFG);
1172 1216
1173 dev_info(hsotg->dev, "new address %d\n", ctrl->wValue); 1217 dev_info(hsotg->dev, "new address %d\n", ctrl->wValue);
1174 1218
@@ -1194,7 +1238,8 @@ static void s3c_hsotg_process_control(struct s3c_hsotg *hsotg,
1194 dev_dbg(hsotg->dev, "driver->setup() ret %d\n", ret); 1238 dev_dbg(hsotg->dev, "driver->setup() ret %d\n", ret);
1195 } 1239 }
1196 1240
1197 /* the request is either unhandlable, or is not formatted correctly 1241 /*
1242 * the request is either unhandlable, or is not formatted correctly
1198 * so respond with a STALL for the status stage to indicate failure. 1243 * so respond with a STALL for the status stage to indicate failure.
1199 */ 1244 */
1200 1245
@@ -1203,22 +1248,26 @@ static void s3c_hsotg_process_control(struct s3c_hsotg *hsotg,
1203 u32 ctrl; 1248 u32 ctrl;
1204 1249
1205 dev_dbg(hsotg->dev, "ep0 stall (dir=%d)\n", ep0->dir_in); 1250 dev_dbg(hsotg->dev, "ep0 stall (dir=%d)\n", ep0->dir_in);
1206 reg = (ep0->dir_in) ? S3C_DIEPCTL0 : S3C_DOEPCTL0; 1251 reg = (ep0->dir_in) ? DIEPCTL0 : DOEPCTL0;
1207 1252
1208 /* S3C_DxEPCTL_Stall will be cleared by EP once it has 1253 /*
1209 * taken effect, so no need to clear later. */ 1254 * DxEPCTL_Stall will be cleared by EP once it has
1255 * taken effect, so no need to clear later.
1256 */
1210 1257
1211 ctrl = readl(hsotg->regs + reg); 1258 ctrl = readl(hsotg->regs + reg);
1212 ctrl |= S3C_DxEPCTL_Stall; 1259 ctrl |= DxEPCTL_Stall;
1213 ctrl |= S3C_DxEPCTL_CNAK; 1260 ctrl |= DxEPCTL_CNAK;
1214 writel(ctrl, hsotg->regs + reg); 1261 writel(ctrl, hsotg->regs + reg);
1215 1262
1216 dev_dbg(hsotg->dev, 1263 dev_dbg(hsotg->dev,
1217 "written DxEPCTL=0x%08x to %08x (DxEPCTL=0x%08x)\n", 1264 "written DxEPCTL=0x%08x to %08x (DxEPCTL=0x%08x)\n",
1218 ctrl, reg, readl(hsotg->regs + reg)); 1265 ctrl, reg, readl(hsotg->regs + reg));
1219 1266
1220 /* don't believe we need to anything more to get the EP 1267 /*
1221 * to reply with a STALL packet */ 1268 * don't believe we need to anything more to get the EP
1269 * to reply with a STALL packet
1270 */
1222 } 1271 }
1223} 1272}
1224 1273
@@ -1279,8 +1328,10 @@ static void s3c_hsotg_enqueue_setup(struct s3c_hsotg *hsotg)
1279 ret = s3c_hsotg_ep_queue(&hsotg->eps[0].ep, req, GFP_ATOMIC); 1328 ret = s3c_hsotg_ep_queue(&hsotg->eps[0].ep, req, GFP_ATOMIC);
1280 if (ret < 0) { 1329 if (ret < 0) {
1281 dev_err(hsotg->dev, "%s: failed queue (%d)\n", __func__, ret); 1330 dev_err(hsotg->dev, "%s: failed queue (%d)\n", __func__, ret);
1282 /* Don't think there's much we can do other than watch the 1331 /*
1283 * driver fail. */ 1332 * Don't think there's much we can do other than watch the
1333 * driver fail.
1334 */
1284 } 1335 }
1285} 1336}
1286 1337
@@ -1296,7 +1347,7 @@ static void s3c_hsotg_enqueue_setup(struct s3c_hsotg *hsotg)
1296 * on the endpoint. 1347 * on the endpoint.
1297 * 1348 *
1298 * Note, expects the ep to already be locked as appropriate. 1349 * Note, expects the ep to already be locked as appropriate.
1299*/ 1350 */
1300static void s3c_hsotg_complete_request(struct s3c_hsotg *hsotg, 1351static void s3c_hsotg_complete_request(struct s3c_hsotg *hsotg,
1301 struct s3c_hsotg_ep *hs_ep, 1352 struct s3c_hsotg_ep *hs_ep,
1302 struct s3c_hsotg_req *hs_req, 1353 struct s3c_hsotg_req *hs_req,
@@ -1312,8 +1363,10 @@ static void s3c_hsotg_complete_request(struct s3c_hsotg *hsotg,
1312 dev_dbg(hsotg->dev, "complete: ep %p %s, req %p, %d => %p\n", 1363 dev_dbg(hsotg->dev, "complete: ep %p %s, req %p, %d => %p\n",
1313 hs_ep, hs_ep->ep.name, hs_req, result, hs_req->req.complete); 1364 hs_ep, hs_ep->ep.name, hs_req, result, hs_req->req.complete);
1314 1365
1315 /* only replace the status if we've not already set an error 1366 /*
1316 * from a previous transaction */ 1367 * only replace the status if we've not already set an error
1368 * from a previous transaction
1369 */
1317 1370
1318 if (hs_req->req.status == -EINPROGRESS) 1371 if (hs_req->req.status == -EINPROGRESS)
1319 hs_req->req.status = result; 1372 hs_req->req.status = result;
@@ -1324,8 +1377,10 @@ static void s3c_hsotg_complete_request(struct s3c_hsotg *hsotg,
1324 if (using_dma(hsotg)) 1377 if (using_dma(hsotg))
1325 s3c_hsotg_unmap_dma(hsotg, hs_ep, hs_req); 1378 s3c_hsotg_unmap_dma(hsotg, hs_ep, hs_req);
1326 1379
1327 /* call the complete request with the locks off, just in case the 1380 /*
1328 * request tries to queue more work for this endpoint. */ 1381 * call the complete request with the locks off, just in case the
1382 * request tries to queue more work for this endpoint.
1383 */
1329 1384
1330 if (hs_req->req.complete) { 1385 if (hs_req->req.complete) {
1331 spin_unlock(&hs_ep->lock); 1386 spin_unlock(&hs_ep->lock);
@@ -1333,9 +1388,11 @@ static void s3c_hsotg_complete_request(struct s3c_hsotg *hsotg,
1333 spin_lock(&hs_ep->lock); 1388 spin_lock(&hs_ep->lock);
1334 } 1389 }
1335 1390
1336 /* Look to see if there is anything else to do. Note, the completion 1391 /*
1392 * Look to see if there is anything else to do. Note, the completion
1337 * of the previous request may have caused a new request to be started 1393 * of the previous request may have caused a new request to be started
1338 * so be careful when doing this. */ 1394 * so be careful when doing this.
1395 */
1339 1396
1340 if (!hs_ep->req && result >= 0) { 1397 if (!hs_ep->req && result >= 0) {
1341 restart = !list_empty(&hs_ep->queue); 1398 restart = !list_empty(&hs_ep->queue);
@@ -1355,7 +1412,7 @@ static void s3c_hsotg_complete_request(struct s3c_hsotg *hsotg,
1355 * 1412 *
1356 * See s3c_hsotg_complete_request(), but called with the endpoint's 1413 * See s3c_hsotg_complete_request(), but called with the endpoint's
1357 * lock held. 1414 * lock held.
1358*/ 1415 */
1359static void s3c_hsotg_complete_request_lock(struct s3c_hsotg *hsotg, 1416static void s3c_hsotg_complete_request_lock(struct s3c_hsotg *hsotg,
1360 struct s3c_hsotg_ep *hs_ep, 1417 struct s3c_hsotg_ep *hs_ep,
1361 struct s3c_hsotg_req *hs_req, 1418 struct s3c_hsotg_req *hs_req,
@@ -1382,13 +1439,13 @@ static void s3c_hsotg_rx_data(struct s3c_hsotg *hsotg, int ep_idx, int size)
1382{ 1439{
1383 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[ep_idx]; 1440 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[ep_idx];
1384 struct s3c_hsotg_req *hs_req = hs_ep->req; 1441 struct s3c_hsotg_req *hs_req = hs_ep->req;
1385 void __iomem *fifo = hsotg->regs + S3C_EPFIFO(ep_idx); 1442 void __iomem *fifo = hsotg->regs + EPFIFO(ep_idx);
1386 int to_read; 1443 int to_read;
1387 int max_req; 1444 int max_req;
1388 int read_ptr; 1445 int read_ptr;
1389 1446
1390 if (!hs_req) { 1447 if (!hs_req) {
1391 u32 epctl = readl(hsotg->regs + S3C_DOEPCTL(ep_idx)); 1448 u32 epctl = readl(hsotg->regs + DOEPCTL(ep_idx));
1392 int ptr; 1449 int ptr;
1393 1450
1394 dev_warn(hsotg->dev, 1451 dev_warn(hsotg->dev,
@@ -1412,7 +1469,8 @@ static void s3c_hsotg_rx_data(struct s3c_hsotg *hsotg, int ep_idx, int size)
1412 __func__, to_read, max_req, read_ptr, hs_req->req.length); 1469 __func__, to_read, max_req, read_ptr, hs_req->req.length);
1413 1470
1414 if (to_read > max_req) { 1471 if (to_read > max_req) {
1415 /* more data appeared than we where willing 1472 /*
1473 * more data appeared than we where willing
1416 * to deal with in this request. 1474 * to deal with in this request.
1417 */ 1475 */
1418 1476
@@ -1424,8 +1482,10 @@ static void s3c_hsotg_rx_data(struct s3c_hsotg *hsotg, int ep_idx, int size)
1424 hs_req->req.actual += to_read; 1482 hs_req->req.actual += to_read;
1425 to_read = DIV_ROUND_UP(to_read, 4); 1483 to_read = DIV_ROUND_UP(to_read, 4);
1426 1484
1427 /* note, we might over-write the buffer end by 3 bytes depending on 1485 /*
1428 * alignment of the data. */ 1486 * note, we might over-write the buffer end by 3 bytes depending on
1487 * alignment of the data.
1488 */
1429 readsl(fifo, hs_req->req.buf + read_ptr, to_read); 1489 readsl(fifo, hs_req->req.buf + read_ptr, to_read);
1430 1490
1431 spin_unlock(&hs_ep->lock); 1491 spin_unlock(&hs_ep->lock);
@@ -1465,14 +1525,14 @@ static void s3c_hsotg_send_zlp(struct s3c_hsotg *hsotg,
1465 dev_dbg(hsotg->dev, "sending zero-length packet\n"); 1525 dev_dbg(hsotg->dev, "sending zero-length packet\n");
1466 1526
1467 /* issue a zero-sized packet to terminate this */ 1527 /* issue a zero-sized packet to terminate this */
1468 writel(S3C_DxEPTSIZ_MC(1) | S3C_DxEPTSIZ_PktCnt(1) | 1528 writel(DxEPTSIZ_MC(1) | DxEPTSIZ_PktCnt(1) |
1469 S3C_DxEPTSIZ_XferSize(0), hsotg->regs + S3C_DIEPTSIZ(0)); 1529 DxEPTSIZ_XferSize(0), hsotg->regs + DIEPTSIZ(0));
1470 1530
1471 ctrl = readl(hsotg->regs + S3C_DIEPCTL0); 1531 ctrl = readl(hsotg->regs + DIEPCTL0);
1472 ctrl |= S3C_DxEPCTL_CNAK; /* clear NAK set by core */ 1532 ctrl |= DxEPCTL_CNAK; /* clear NAK set by core */
1473 ctrl |= S3C_DxEPCTL_EPEna; /* ensure ep enabled */ 1533 ctrl |= DxEPCTL_EPEna; /* ensure ep enabled */
1474 ctrl |= S3C_DxEPCTL_USBActEp; 1534 ctrl |= DxEPCTL_USBActEp;
1475 writel(ctrl, hsotg->regs + S3C_DIEPCTL0); 1535 writel(ctrl, hsotg->regs + DIEPCTL0);
1476} 1536}
1477 1537
1478/** 1538/**
@@ -1484,15 +1544,15 @@ static void s3c_hsotg_send_zlp(struct s3c_hsotg *hsotg,
1484 * The RXFIFO has delivered an OutDone event, which means that the data 1544 * The RXFIFO has delivered an OutDone event, which means that the data
1485 * transfer for an OUT endpoint has been completed, either by a short 1545 * transfer for an OUT endpoint has been completed, either by a short
1486 * packet or by the finish of a transfer. 1546 * packet or by the finish of a transfer.
1487*/ 1547 */
1488static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg, 1548static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
1489 int epnum, bool was_setup) 1549 int epnum, bool was_setup)
1490{ 1550{
1491 u32 epsize = readl(hsotg->regs + S3C_DOEPTSIZ(epnum)); 1551 u32 epsize = readl(hsotg->regs + DOEPTSIZ(epnum));
1492 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[epnum]; 1552 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[epnum];
1493 struct s3c_hsotg_req *hs_req = hs_ep->req; 1553 struct s3c_hsotg_req *hs_req = hs_ep->req;
1494 struct usb_request *req = &hs_req->req; 1554 struct usb_request *req = &hs_req->req;
1495 unsigned size_left = S3C_DxEPTSIZ_XferSize_GET(epsize); 1555 unsigned size_left = DxEPTSIZ_XferSize_GET(epsize);
1496 int result = 0; 1556 int result = 0;
1497 1557
1498 if (!hs_req) { 1558 if (!hs_req) {
@@ -1503,7 +1563,8 @@ static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
1503 if (using_dma(hsotg)) { 1563 if (using_dma(hsotg)) {
1504 unsigned size_done; 1564 unsigned size_done;
1505 1565
1506 /* Calculate the size of the transfer by checking how much 1566 /*
1567 * Calculate the size of the transfer by checking how much
1507 * is left in the endpoint size register and then working it 1568 * is left in the endpoint size register and then working it
1508 * out from the amount we loaded for the transfer. 1569 * out from the amount we loaded for the transfer.
1509 * 1570 *
@@ -1521,17 +1582,29 @@ static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
1521 if (req->actual < req->length && size_left == 0) { 1582 if (req->actual < req->length && size_left == 0) {
1522 s3c_hsotg_start_req(hsotg, hs_ep, hs_req, true); 1583 s3c_hsotg_start_req(hsotg, hs_ep, hs_req, true);
1523 return; 1584 return;
1585 } else if (epnum == 0) {
1586 /*
1587 * After was_setup = 1 =>
1588 * set CNAK for non Setup requests
1589 */
1590 hsotg->setup = was_setup ? 0 : 1;
1524 } 1591 }
1525 1592
1526 if (req->actual < req->length && req->short_not_ok) { 1593 if (req->actual < req->length && req->short_not_ok) {
1527 dev_dbg(hsotg->dev, "%s: got %d/%d (short not ok) => error\n", 1594 dev_dbg(hsotg->dev, "%s: got %d/%d (short not ok) => error\n",
1528 __func__, req->actual, req->length); 1595 __func__, req->actual, req->length);
1529 1596
1530 /* todo - what should we return here? there's no one else 1597 /*
1531 * even bothering to check the status. */ 1598 * todo - what should we return here? there's no one else
1599 * even bothering to check the status.
1600 */
1532 } 1601 }
1533 1602
1534 if (epnum == 0) { 1603 if (epnum == 0) {
1604 /*
1605 * Condition req->complete != s3c_hsotg_complete_setup says:
1606 * send ZLP when we have an asynchronous request from gadget
1607 */
1535 if (!was_setup && req->complete != s3c_hsotg_complete_setup) 1608 if (!was_setup && req->complete != s3c_hsotg_complete_setup)
1536 s3c_hsotg_send_zlp(hsotg, hs_req); 1609 s3c_hsotg_send_zlp(hsotg, hs_req);
1537 } 1610 }
@@ -1544,14 +1617,14 @@ static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
1544 * @hsotg: The device instance 1617 * @hsotg: The device instance
1545 * 1618 *
1546 * Return the current frame number 1619 * Return the current frame number
1547*/ 1620 */
1548static u32 s3c_hsotg_read_frameno(struct s3c_hsotg *hsotg) 1621static u32 s3c_hsotg_read_frameno(struct s3c_hsotg *hsotg)
1549{ 1622{
1550 u32 dsts; 1623 u32 dsts;
1551 1624
1552 dsts = readl(hsotg->regs + S3C_DSTS); 1625 dsts = readl(hsotg->regs + DSTS);
1553 dsts &= S3C_DSTS_SOFFN_MASK; 1626 dsts &= DSTS_SOFFN_MASK;
1554 dsts >>= S3C_DSTS_SOFFN_SHIFT; 1627 dsts >>= DSTS_SOFFN_SHIFT;
1555 1628
1556 return dsts; 1629 return dsts;
1557} 1630}
@@ -1574,29 +1647,29 @@ static u32 s3c_hsotg_read_frameno(struct s3c_hsotg *hsotg)
1574 */ 1647 */
1575static void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg) 1648static void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg)
1576{ 1649{
1577 u32 grxstsr = readl(hsotg->regs + S3C_GRXSTSP); 1650 u32 grxstsr = readl(hsotg->regs + GRXSTSP);
1578 u32 epnum, status, size; 1651 u32 epnum, status, size;
1579 1652
1580 WARN_ON(using_dma(hsotg)); 1653 WARN_ON(using_dma(hsotg));
1581 1654
1582 epnum = grxstsr & S3C_GRXSTS_EPNum_MASK; 1655 epnum = grxstsr & GRXSTS_EPNum_MASK;
1583 status = grxstsr & S3C_GRXSTS_PktSts_MASK; 1656 status = grxstsr & GRXSTS_PktSts_MASK;
1584 1657
1585 size = grxstsr & S3C_GRXSTS_ByteCnt_MASK; 1658 size = grxstsr & GRXSTS_ByteCnt_MASK;
1586 size >>= S3C_GRXSTS_ByteCnt_SHIFT; 1659 size >>= GRXSTS_ByteCnt_SHIFT;
1587 1660
1588 if (1) 1661 if (1)
1589 dev_dbg(hsotg->dev, "%s: GRXSTSP=0x%08x (%d@%d)\n", 1662 dev_dbg(hsotg->dev, "%s: GRXSTSP=0x%08x (%d@%d)\n",
1590 __func__, grxstsr, size, epnum); 1663 __func__, grxstsr, size, epnum);
1591 1664
1592#define __status(x) ((x) >> S3C_GRXSTS_PktSts_SHIFT) 1665#define __status(x) ((x) >> GRXSTS_PktSts_SHIFT)
1593 1666
1594 switch (status >> S3C_GRXSTS_PktSts_SHIFT) { 1667 switch (status >> GRXSTS_PktSts_SHIFT) {
1595 case __status(S3C_GRXSTS_PktSts_GlobalOutNAK): 1668 case __status(GRXSTS_PktSts_GlobalOutNAK):
1596 dev_dbg(hsotg->dev, "GlobalOutNAK\n"); 1669 dev_dbg(hsotg->dev, "GlobalOutNAK\n");
1597 break; 1670 break;
1598 1671
1599 case __status(S3C_GRXSTS_PktSts_OutDone): 1672 case __status(GRXSTS_PktSts_OutDone):
1600 dev_dbg(hsotg->dev, "OutDone (Frame=0x%08x)\n", 1673 dev_dbg(hsotg->dev, "OutDone (Frame=0x%08x)\n",
1601 s3c_hsotg_read_frameno(hsotg)); 1674 s3c_hsotg_read_frameno(hsotg));
1602 1675
@@ -1604,24 +1677,24 @@ static void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg)
1604 s3c_hsotg_handle_outdone(hsotg, epnum, false); 1677 s3c_hsotg_handle_outdone(hsotg, epnum, false);
1605 break; 1678 break;
1606 1679
1607 case __status(S3C_GRXSTS_PktSts_SetupDone): 1680 case __status(GRXSTS_PktSts_SetupDone):
1608 dev_dbg(hsotg->dev, 1681 dev_dbg(hsotg->dev,
1609 "SetupDone (Frame=0x%08x, DOPEPCTL=0x%08x)\n", 1682 "SetupDone (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
1610 s3c_hsotg_read_frameno(hsotg), 1683 s3c_hsotg_read_frameno(hsotg),
1611 readl(hsotg->regs + S3C_DOEPCTL(0))); 1684 readl(hsotg->regs + DOEPCTL(0)));
1612 1685
1613 s3c_hsotg_handle_outdone(hsotg, epnum, true); 1686 s3c_hsotg_handle_outdone(hsotg, epnum, true);
1614 break; 1687 break;
1615 1688
1616 case __status(S3C_GRXSTS_PktSts_OutRX): 1689 case __status(GRXSTS_PktSts_OutRX):
1617 s3c_hsotg_rx_data(hsotg, epnum, size); 1690 s3c_hsotg_rx_data(hsotg, epnum, size);
1618 break; 1691 break;
1619 1692
1620 case __status(S3C_GRXSTS_PktSts_SetupRX): 1693 case __status(GRXSTS_PktSts_SetupRX):
1621 dev_dbg(hsotg->dev, 1694 dev_dbg(hsotg->dev,
1622 "SetupRX (Frame=0x%08x, DOPEPCTL=0x%08x)\n", 1695 "SetupRX (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
1623 s3c_hsotg_read_frameno(hsotg), 1696 s3c_hsotg_read_frameno(hsotg),
1624 readl(hsotg->regs + S3C_DOEPCTL(0))); 1697 readl(hsotg->regs + DOEPCTL(0)));
1625 1698
1626 s3c_hsotg_rx_data(hsotg, epnum, size); 1699 s3c_hsotg_rx_data(hsotg, epnum, size);
1627 break; 1700 break;
@@ -1638,18 +1711,18 @@ static void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg)
1638/** 1711/**
1639 * s3c_hsotg_ep0_mps - turn max packet size into register setting 1712 * s3c_hsotg_ep0_mps - turn max packet size into register setting
1640 * @mps: The maximum packet size in bytes. 1713 * @mps: The maximum packet size in bytes.
1641*/ 1714 */
1642static u32 s3c_hsotg_ep0_mps(unsigned int mps) 1715static u32 s3c_hsotg_ep0_mps(unsigned int mps)
1643{ 1716{
1644 switch (mps) { 1717 switch (mps) {
1645 case 64: 1718 case 64:
1646 return S3C_D0EPCTL_MPS_64; 1719 return D0EPCTL_MPS_64;
1647 case 32: 1720 case 32:
1648 return S3C_D0EPCTL_MPS_32; 1721 return D0EPCTL_MPS_32;
1649 case 16: 1722 case 16:
1650 return S3C_D0EPCTL_MPS_16; 1723 return D0EPCTL_MPS_16;
1651 case 8: 1724 case 8:
1652 return S3C_D0EPCTL_MPS_8; 1725 return D0EPCTL_MPS_8;
1653 } 1726 }
1654 1727
1655 /* bad max packet size, warn and return invalid result */ 1728 /* bad max packet size, warn and return invalid result */
@@ -1680,7 +1753,7 @@ static void s3c_hsotg_set_ep_maxpacket(struct s3c_hsotg *hsotg,
1680 if (mpsval > 3) 1753 if (mpsval > 3)
1681 goto bad_mps; 1754 goto bad_mps;
1682 } else { 1755 } else {
1683 if (mps >= S3C_DxEPCTL_MPS_LIMIT+1) 1756 if (mps >= DxEPCTL_MPS_LIMIT+1)
1684 goto bad_mps; 1757 goto bad_mps;
1685 1758
1686 mpsval = mps; 1759 mpsval = mps;
@@ -1688,19 +1761,21 @@ static void s3c_hsotg_set_ep_maxpacket(struct s3c_hsotg *hsotg,
1688 1761
1689 hs_ep->ep.maxpacket = mps; 1762 hs_ep->ep.maxpacket = mps;
1690 1763
1691 /* update both the in and out endpoint controldir_ registers, even 1764 /*
1692 * if one of the directions may not be in use. */ 1765 * update both the in and out endpoint controldir_ registers, even
1766 * if one of the directions may not be in use.
1767 */
1693 1768
1694 reg = readl(regs + S3C_DIEPCTL(ep)); 1769 reg = readl(regs + DIEPCTL(ep));
1695 reg &= ~S3C_DxEPCTL_MPS_MASK; 1770 reg &= ~DxEPCTL_MPS_MASK;
1696 reg |= mpsval; 1771 reg |= mpsval;
1697 writel(reg, regs + S3C_DIEPCTL(ep)); 1772 writel(reg, regs + DIEPCTL(ep));
1698 1773
1699 if (ep) { 1774 if (ep) {
1700 reg = readl(regs + S3C_DOEPCTL(ep)); 1775 reg = readl(regs + DOEPCTL(ep));
1701 reg &= ~S3C_DxEPCTL_MPS_MASK; 1776 reg &= ~DxEPCTL_MPS_MASK;
1702 reg |= mpsval; 1777 reg |= mpsval;
1703 writel(reg, regs + S3C_DOEPCTL(ep)); 1778 writel(reg, regs + DOEPCTL(ep));
1704 } 1779 }
1705 1780
1706 return; 1781 return;
@@ -1719,16 +1794,16 @@ static void s3c_hsotg_txfifo_flush(struct s3c_hsotg *hsotg, unsigned int idx)
1719 int timeout; 1794 int timeout;
1720 int val; 1795 int val;
1721 1796
1722 writel(S3C_GRSTCTL_TxFNum(idx) | S3C_GRSTCTL_TxFFlsh, 1797 writel(GRSTCTL_TxFNum(idx) | GRSTCTL_TxFFlsh,
1723 hsotg->regs + S3C_GRSTCTL); 1798 hsotg->regs + GRSTCTL);
1724 1799
1725 /* wait until the fifo is flushed */ 1800 /* wait until the fifo is flushed */
1726 timeout = 100; 1801 timeout = 100;
1727 1802
1728 while (1) { 1803 while (1) {
1729 val = readl(hsotg->regs + S3C_GRSTCTL); 1804 val = readl(hsotg->regs + GRSTCTL);
1730 1805
1731 if ((val & (S3C_GRSTCTL_TxFFlsh)) == 0) 1806 if ((val & (GRSTCTL_TxFFlsh)) == 0)
1732 break; 1807 break;
1733 1808
1734 if (--timeout == 0) { 1809 if (--timeout == 0) {
@@ -1778,7 +1853,7 @@ static void s3c_hsotg_complete_in(struct s3c_hsotg *hsotg,
1778 struct s3c_hsotg_ep *hs_ep) 1853 struct s3c_hsotg_ep *hs_ep)
1779{ 1854{
1780 struct s3c_hsotg_req *hs_req = hs_ep->req; 1855 struct s3c_hsotg_req *hs_req = hs_ep->req;
1781 u32 epsize = readl(hsotg->regs + S3C_DIEPTSIZ(hs_ep->index)); 1856 u32 epsize = readl(hsotg->regs + DIEPTSIZ(hs_ep->index));
1782 int size_left, size_done; 1857 int size_left, size_done;
1783 1858
1784 if (!hs_req) { 1859 if (!hs_req) {
@@ -1786,7 +1861,15 @@ static void s3c_hsotg_complete_in(struct s3c_hsotg *hsotg,
1786 return; 1861 return;
1787 } 1862 }
1788 1863
1789 /* Calculate the size of the transfer by checking how much is left 1864 /* Finish ZLP handling for IN EP0 transactions */
1865 if (hsotg->eps[0].sent_zlp) {
1866 dev_dbg(hsotg->dev, "zlp packet received\n");
1867 s3c_hsotg_complete_request_lock(hsotg, hs_ep, hs_req, 0);
1868 return;
1869 }
1870
1871 /*
1872 * Calculate the size of the transfer by checking how much is left
1790 * in the endpoint size register and then working it out from 1873 * in the endpoint size register and then working it out from
1791 * the amount we loaded for the transfer. 1874 * the amount we loaded for the transfer.
1792 * 1875 *
@@ -1795,7 +1878,7 @@ static void s3c_hsotg_complete_in(struct s3c_hsotg *hsotg,
1795 * aligned). 1878 * aligned).
1796 */ 1879 */
1797 1880
1798 size_left = S3C_DxEPTSIZ_XferSize_GET(epsize); 1881 size_left = DxEPTSIZ_XferSize_GET(epsize);
1799 1882
1800 size_done = hs_ep->size_loaded - size_left; 1883 size_done = hs_ep->size_loaded - size_left;
1801 size_done += hs_ep->last_load; 1884 size_done += hs_ep->last_load;
@@ -1805,9 +1888,28 @@ static void s3c_hsotg_complete_in(struct s3c_hsotg *hsotg,
1805 __func__, hs_req->req.actual, size_done); 1888 __func__, hs_req->req.actual, size_done);
1806 1889
1807 hs_req->req.actual = size_done; 1890 hs_req->req.actual = size_done;
1891 dev_dbg(hsotg->dev, "req->length:%d req->actual:%d req->zero:%d\n",
1892 hs_req->req.length, hs_req->req.actual, hs_req->req.zero);
1893
1894 /*
1895 * Check if dealing with Maximum Packet Size(MPS) IN transfer at EP0
1896 * When sent data is a multiple MPS size (e.g. 64B ,128B ,192B
1897 * ,256B ... ), after last MPS sized packet send IN ZLP packet to
1898 * inform the host that no more data is available.
1899 * The state of req.zero member is checked to be sure that the value to
1900 * send is smaller than wValue expected from host.
1901 * Check req.length to NOT send another ZLP when the current one is
1902 * under completion (the one for which this completion has been called).
1903 */
1904 if (hs_req->req.length && hs_ep->index == 0 && hs_req->req.zero &&
1905 hs_req->req.length == hs_req->req.actual &&
1906 !(hs_req->req.length % hs_ep->ep.maxpacket)) {
1808 1907
1809 /* if we did all of the transfer, and there is more data left 1908 dev_dbg(hsotg->dev, "ep0 zlp IN packet sent\n");
1810 * around, then try restarting the rest of the request */ 1909 s3c_hsotg_send_zlp(hsotg, hs_req);
1910
1911 return;
1912 }
1811 1913
1812 if (!size_left && hs_req->req.actual < hs_req->req.length) { 1914 if (!size_left && hs_req->req.actual < hs_req->req.length) {
1813 dev_dbg(hsotg->dev, "%s trying more for req...\n", __func__); 1915 dev_dbg(hsotg->dev, "%s trying more for req...\n", __func__);
@@ -1823,14 +1925,14 @@ static void s3c_hsotg_complete_in(struct s3c_hsotg *hsotg,
1823 * @dir_in: Set if this is an IN endpoint 1925 * @dir_in: Set if this is an IN endpoint
1824 * 1926 *
1825 * Process and clear any interrupt pending for an individual endpoint 1927 * Process and clear any interrupt pending for an individual endpoint
1826*/ 1928 */
1827static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx, 1929static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx,
1828 int dir_in) 1930 int dir_in)
1829{ 1931{
1830 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[idx]; 1932 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[idx];
1831 u32 epint_reg = dir_in ? S3C_DIEPINT(idx) : S3C_DOEPINT(idx); 1933 u32 epint_reg = dir_in ? DIEPINT(idx) : DOEPINT(idx);
1832 u32 epctl_reg = dir_in ? S3C_DIEPCTL(idx) : S3C_DOEPCTL(idx); 1934 u32 epctl_reg = dir_in ? DIEPCTL(idx) : DOEPCTL(idx);
1833 u32 epsiz_reg = dir_in ? S3C_DIEPTSIZ(idx) : S3C_DOEPTSIZ(idx); 1935 u32 epsiz_reg = dir_in ? DIEPTSIZ(idx) : DOEPTSIZ(idx);
1834 u32 ints; 1936 u32 ints;
1835 1937
1836 ints = readl(hsotg->regs + epint_reg); 1938 ints = readl(hsotg->regs + epint_reg);
@@ -1841,28 +1943,32 @@ static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx,
1841 dev_dbg(hsotg->dev, "%s: ep%d(%s) DxEPINT=0x%08x\n", 1943 dev_dbg(hsotg->dev, "%s: ep%d(%s) DxEPINT=0x%08x\n",
1842 __func__, idx, dir_in ? "in" : "out", ints); 1944 __func__, idx, dir_in ? "in" : "out", ints);
1843 1945
1844 if (ints & S3C_DxEPINT_XferCompl) { 1946 if (ints & DxEPINT_XferCompl) {
1845 dev_dbg(hsotg->dev, 1947 dev_dbg(hsotg->dev,
1846 "%s: XferCompl: DxEPCTL=0x%08x, DxEPTSIZ=%08x\n", 1948 "%s: XferCompl: DxEPCTL=0x%08x, DxEPTSIZ=%08x\n",
1847 __func__, readl(hsotg->regs + epctl_reg), 1949 __func__, readl(hsotg->regs + epctl_reg),
1848 readl(hsotg->regs + epsiz_reg)); 1950 readl(hsotg->regs + epsiz_reg));
1849 1951
1850 /* we get OutDone from the FIFO, so we only need to look 1952 /*
1851 * at completing IN requests here */ 1953 * we get OutDone from the FIFO, so we only need to look
1954 * at completing IN requests here
1955 */
1852 if (dir_in) { 1956 if (dir_in) {
1853 s3c_hsotg_complete_in(hsotg, hs_ep); 1957 s3c_hsotg_complete_in(hsotg, hs_ep);
1854 1958
1855 if (idx == 0 && !hs_ep->req) 1959 if (idx == 0 && !hs_ep->req)
1856 s3c_hsotg_enqueue_setup(hsotg); 1960 s3c_hsotg_enqueue_setup(hsotg);
1857 } else if (using_dma(hsotg)) { 1961 } else if (using_dma(hsotg)) {
1858 /* We're using DMA, we need to fire an OutDone here 1962 /*
1859 * as we ignore the RXFIFO. */ 1963 * We're using DMA, we need to fire an OutDone here
1964 * as we ignore the RXFIFO.
1965 */
1860 1966
1861 s3c_hsotg_handle_outdone(hsotg, idx, false); 1967 s3c_hsotg_handle_outdone(hsotg, idx, false);
1862 } 1968 }
1863 } 1969 }
1864 1970
1865 if (ints & S3C_DxEPINT_EPDisbld) { 1971 if (ints & DxEPINT_EPDisbld) {
1866 dev_dbg(hsotg->dev, "%s: EPDisbld\n", __func__); 1972 dev_dbg(hsotg->dev, "%s: EPDisbld\n", __func__);
1867 1973
1868 if (dir_in) { 1974 if (dir_in) {
@@ -1870,27 +1976,29 @@ static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx,
1870 1976
1871 s3c_hsotg_txfifo_flush(hsotg, idx); 1977 s3c_hsotg_txfifo_flush(hsotg, idx);
1872 1978
1873 if ((epctl & S3C_DxEPCTL_Stall) && 1979 if ((epctl & DxEPCTL_Stall) &&
1874 (epctl & S3C_DxEPCTL_EPType_Bulk)) { 1980 (epctl & DxEPCTL_EPType_Bulk)) {
1875 int dctl = readl(hsotg->regs + S3C_DCTL); 1981 int dctl = readl(hsotg->regs + DCTL);
1876 1982
1877 dctl |= S3C_DCTL_CGNPInNAK; 1983 dctl |= DCTL_CGNPInNAK;
1878 writel(dctl, hsotg->regs + S3C_DCTL); 1984 writel(dctl, hsotg->regs + DCTL);
1879 } 1985 }
1880 } 1986 }
1881 } 1987 }
1882 1988
1883 if (ints & S3C_DxEPINT_AHBErr) 1989 if (ints & DxEPINT_AHBErr)
1884 dev_dbg(hsotg->dev, "%s: AHBErr\n", __func__); 1990 dev_dbg(hsotg->dev, "%s: AHBErr\n", __func__);
1885 1991
1886 if (ints & S3C_DxEPINT_Setup) { /* Setup or Timeout */ 1992 if (ints & DxEPINT_Setup) { /* Setup or Timeout */
1887 dev_dbg(hsotg->dev, "%s: Setup/Timeout\n", __func__); 1993 dev_dbg(hsotg->dev, "%s: Setup/Timeout\n", __func__);
1888 1994
1889 if (using_dma(hsotg) && idx == 0) { 1995 if (using_dma(hsotg) && idx == 0) {
1890 /* this is the notification we've received a 1996 /*
1997 * this is the notification we've received a
1891 * setup packet. In non-DMA mode we'd get this 1998 * setup packet. In non-DMA mode we'd get this
1892 * from the RXFIFO, instead we need to process 1999 * from the RXFIFO, instead we need to process
1893 * the setup here. */ 2000 * the setup here.
2001 */
1894 2002
1895 if (dir_in) 2003 if (dir_in)
1896 WARN_ON_ONCE(1); 2004 WARN_ON_ONCE(1);
@@ -1899,26 +2007,25 @@ static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx,
1899 } 2007 }
1900 } 2008 }
1901 2009
1902 if (ints & S3C_DxEPINT_Back2BackSetup) 2010 if (ints & DxEPINT_Back2BackSetup)
1903 dev_dbg(hsotg->dev, "%s: B2BSetup/INEPNakEff\n", __func__); 2011 dev_dbg(hsotg->dev, "%s: B2BSetup/INEPNakEff\n", __func__);
1904 2012
1905 if (dir_in) { 2013 if (dir_in) {
1906 /* not sure if this is important, but we'll clear it anyway 2014 /* not sure if this is important, but we'll clear it anyway */
1907 */ 2015 if (ints & DIEPMSK_INTknTXFEmpMsk) {
1908 if (ints & S3C_DIEPMSK_INTknTXFEmpMsk) {
1909 dev_dbg(hsotg->dev, "%s: ep%d: INTknTXFEmpMsk\n", 2016 dev_dbg(hsotg->dev, "%s: ep%d: INTknTXFEmpMsk\n",
1910 __func__, idx); 2017 __func__, idx);
1911 } 2018 }
1912 2019
1913 /* this probably means something bad is happening */ 2020 /* this probably means something bad is happening */
1914 if (ints & S3C_DIEPMSK_INTknEPMisMsk) { 2021 if (ints & DIEPMSK_INTknEPMisMsk) {
1915 dev_warn(hsotg->dev, "%s: ep%d: INTknEP\n", 2022 dev_warn(hsotg->dev, "%s: ep%d: INTknEP\n",
1916 __func__, idx); 2023 __func__, idx);
1917 } 2024 }
1918 2025
1919 /* FIFO has space or is empty (see GAHBCFG) */ 2026 /* FIFO has space or is empty (see GAHBCFG) */
1920 if (hsotg->dedicated_fifos && 2027 if (hsotg->dedicated_fifos &&
1921 ints & S3C_DIEPMSK_TxFIFOEmpty) { 2028 ints & DIEPMSK_TxFIFOEmpty) {
1922 dev_dbg(hsotg->dev, "%s: ep%d: TxFIFOEmpty\n", 2029 dev_dbg(hsotg->dev, "%s: ep%d: TxFIFOEmpty\n",
1923 __func__, idx); 2030 __func__, idx);
1924 if (!using_dma(hsotg)) 2031 if (!using_dma(hsotg))
@@ -1933,40 +2040,45 @@ static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx,
1933 * 2040 *
1934 * Handle updating the device settings after the enumeration phase has 2041 * Handle updating the device settings after the enumeration phase has
1935 * been completed. 2042 * been completed.
1936*/ 2043 */
1937static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg) 2044static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg)
1938{ 2045{
1939 u32 dsts = readl(hsotg->regs + S3C_DSTS); 2046 u32 dsts = readl(hsotg->regs + DSTS);
1940 int ep0_mps = 0, ep_mps; 2047 int ep0_mps = 0, ep_mps;
1941 2048
1942 /* This should signal the finish of the enumeration phase 2049 /*
2050 * This should signal the finish of the enumeration phase
1943 * of the USB handshaking, so we should now know what rate 2051 * of the USB handshaking, so we should now know what rate
1944 * we connected at. */ 2052 * we connected at.
2053 */
1945 2054
1946 dev_dbg(hsotg->dev, "EnumDone (DSTS=0x%08x)\n", dsts); 2055 dev_dbg(hsotg->dev, "EnumDone (DSTS=0x%08x)\n", dsts);
1947 2056
1948 /* note, since we're limited by the size of transfer on EP0, and 2057 /*
2058 * note, since we're limited by the size of transfer on EP0, and
1949 * it seems IN transfers must be a even number of packets we do 2059 * it seems IN transfers must be a even number of packets we do
1950 * not advertise a 64byte MPS on EP0. */ 2060 * not advertise a 64byte MPS on EP0.
2061 */
1951 2062
1952 /* catch both EnumSpd_FS and EnumSpd_FS48 */ 2063 /* catch both EnumSpd_FS and EnumSpd_FS48 */
1953 switch (dsts & S3C_DSTS_EnumSpd_MASK) { 2064 switch (dsts & DSTS_EnumSpd_MASK) {
1954 case S3C_DSTS_EnumSpd_FS: 2065 case DSTS_EnumSpd_FS:
1955 case S3C_DSTS_EnumSpd_FS48: 2066 case DSTS_EnumSpd_FS48:
1956 hsotg->gadget.speed = USB_SPEED_FULL; 2067 hsotg->gadget.speed = USB_SPEED_FULL;
1957 ep0_mps = EP0_MPS_LIMIT; 2068 ep0_mps = EP0_MPS_LIMIT;
1958 ep_mps = 64; 2069 ep_mps = 64;
1959 break; 2070 break;
1960 2071
1961 case S3C_DSTS_EnumSpd_HS: 2072 case DSTS_EnumSpd_HS:
1962 hsotg->gadget.speed = USB_SPEED_HIGH; 2073 hsotg->gadget.speed = USB_SPEED_HIGH;
1963 ep0_mps = EP0_MPS_LIMIT; 2074 ep0_mps = EP0_MPS_LIMIT;
1964 ep_mps = 512; 2075 ep_mps = 512;
1965 break; 2076 break;
1966 2077
1967 case S3C_DSTS_EnumSpd_LS: 2078 case DSTS_EnumSpd_LS:
1968 hsotg->gadget.speed = USB_SPEED_LOW; 2079 hsotg->gadget.speed = USB_SPEED_LOW;
1969 /* note, we don't actually support LS in this driver at the 2080 /*
2081 * note, we don't actually support LS in this driver at the
1970 * moment, and the documentation seems to imply that it isn't 2082 * moment, and the documentation seems to imply that it isn't
1971 * supported by the PHYs on some of the devices. 2083 * supported by the PHYs on some of the devices.
1972 */ 2084 */
@@ -1975,13 +2087,15 @@ static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg)
1975 dev_info(hsotg->dev, "new device is %s\n", 2087 dev_info(hsotg->dev, "new device is %s\n",
1976 usb_speed_string(hsotg->gadget.speed)); 2088 usb_speed_string(hsotg->gadget.speed));
1977 2089
1978 /* we should now know the maximum packet size for an 2090 /*
1979 * endpoint, so set the endpoints to a default value. */ 2091 * we should now know the maximum packet size for an
2092 * endpoint, so set the endpoints to a default value.
2093 */
1980 2094
1981 if (ep0_mps) { 2095 if (ep0_mps) {
1982 int i; 2096 int i;
1983 s3c_hsotg_set_ep_maxpacket(hsotg, 0, ep0_mps); 2097 s3c_hsotg_set_ep_maxpacket(hsotg, 0, ep0_mps);
1984 for (i = 1; i < S3C_HSOTG_EPS; i++) 2098 for (i = 1; i < hsotg->num_of_eps; i++)
1985 s3c_hsotg_set_ep_maxpacket(hsotg, i, ep_mps); 2099 s3c_hsotg_set_ep_maxpacket(hsotg, i, ep_mps);
1986 } 2100 }
1987 2101
@@ -1990,8 +2104,8 @@ static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg)
1990 s3c_hsotg_enqueue_setup(hsotg); 2104 s3c_hsotg_enqueue_setup(hsotg);
1991 2105
1992 dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n", 2106 dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
1993 readl(hsotg->regs + S3C_DIEPCTL0), 2107 readl(hsotg->regs + DIEPCTL0),
1994 readl(hsotg->regs + S3C_DOEPCTL0)); 2108 readl(hsotg->regs + DOEPCTL0));
1995} 2109}
1996 2110
1997/** 2111/**
@@ -2014,8 +2128,10 @@ static void kill_all_requests(struct s3c_hsotg *hsotg,
2014 spin_lock_irqsave(&ep->lock, flags); 2128 spin_lock_irqsave(&ep->lock, flags);
2015 2129
2016 list_for_each_entry_safe(req, treq, &ep->queue, queue) { 2130 list_for_each_entry_safe(req, treq, &ep->queue, queue) {
2017 /* currently, we can't do much about an already 2131 /*
2018 * running request on an in endpoint */ 2132 * currently, we can't do much about an already
2133 * running request on an in endpoint
2134 */
2019 2135
2020 if (ep->req == req && ep->dir_in && !force) 2136 if (ep->req == req && ep->dir_in && !force)
2021 continue; 2137 continue;
@@ -2033,18 +2149,18 @@ static void kill_all_requests(struct s3c_hsotg *hsotg,
2033 (_hs)->driver->_entry(&(_hs)->gadget); 2149 (_hs)->driver->_entry(&(_hs)->gadget);
2034 2150
2035/** 2151/**
2036 * s3c_hsotg_disconnect_irq - disconnect irq service 2152 * s3c_hsotg_disconnect - disconnect service
2037 * @hsotg: The device state. 2153 * @hsotg: The device state.
2038 * 2154 *
2039 * A disconnect IRQ has been received, meaning that the host has 2155 * The device has been disconnected. Remove all current
2040 * lost contact with the bus. Remove all current transactions 2156 * transactions and signal the gadget driver that this
2041 * and signal the gadget driver that this has happened. 2157 * has happened.
2042*/ 2158 */
2043static void s3c_hsotg_disconnect_irq(struct s3c_hsotg *hsotg) 2159static void s3c_hsotg_disconnect(struct s3c_hsotg *hsotg)
2044{ 2160{
2045 unsigned ep; 2161 unsigned ep;
2046 2162
2047 for (ep = 0; ep < S3C_HSOTG_EPS; ep++) 2163 for (ep = 0; ep < hsotg->num_of_eps; ep++)
2048 kill_all_requests(hsotg, &hsotg->eps[ep], -ESHUTDOWN, true); 2164 kill_all_requests(hsotg, &hsotg->eps[ep], -ESHUTDOWN, true);
2049 2165
2050 call_gadget(hsotg, disconnect); 2166 call_gadget(hsotg, disconnect);
@@ -2062,7 +2178,7 @@ static void s3c_hsotg_irq_fifoempty(struct s3c_hsotg *hsotg, bool periodic)
2062 2178
2063 /* look through for any more data to transmit */ 2179 /* look through for any more data to transmit */
2064 2180
2065 for (epno = 0; epno < S3C_HSOTG_EPS; epno++) { 2181 for (epno = 0; epno < hsotg->num_of_eps; epno++) {
2066 ep = &hsotg->eps[epno]; 2182 ep = &hsotg->eps[epno];
2067 2183
2068 if (!ep->dir_in) 2184 if (!ep->dir_in)
@@ -2078,12 +2194,187 @@ static void s3c_hsotg_irq_fifoempty(struct s3c_hsotg *hsotg, bool periodic)
2078 } 2194 }
2079} 2195}
2080 2196
2081static struct s3c_hsotg *our_hsotg;
2082
2083/* IRQ flags which will trigger a retry around the IRQ loop */ 2197/* IRQ flags which will trigger a retry around the IRQ loop */
2084#define IRQ_RETRY_MASK (S3C_GINTSTS_NPTxFEmp | \ 2198#define IRQ_RETRY_MASK (GINTSTS_NPTxFEmp | \
2085 S3C_GINTSTS_PTxFEmp | \ 2199 GINTSTS_PTxFEmp | \
2086 S3C_GINTSTS_RxFLvl) 2200 GINTSTS_RxFLvl)
2201
2202/**
2203 * s3c_hsotg_corereset - issue softreset to the core
2204 * @hsotg: The device state
2205 *
2206 * Issue a soft reset to the core, and await the core finishing it.
2207 */
2208static int s3c_hsotg_corereset(struct s3c_hsotg *hsotg)
2209{
2210 int timeout;
2211 u32 grstctl;
2212
2213 dev_dbg(hsotg->dev, "resetting core\n");
2214
2215 /* issue soft reset */
2216 writel(GRSTCTL_CSftRst, hsotg->regs + GRSTCTL);
2217
2218 timeout = 1000;
2219 do {
2220 grstctl = readl(hsotg->regs + GRSTCTL);
2221 } while ((grstctl & GRSTCTL_CSftRst) && timeout-- > 0);
2222
2223 if (grstctl & GRSTCTL_CSftRst) {
2224 dev_err(hsotg->dev, "Failed to get CSftRst asserted\n");
2225 return -EINVAL;
2226 }
2227
2228 timeout = 1000;
2229
2230 while (1) {
2231 u32 grstctl = readl(hsotg->regs + GRSTCTL);
2232
2233 if (timeout-- < 0) {
2234 dev_info(hsotg->dev,
2235 "%s: reset failed, GRSTCTL=%08x\n",
2236 __func__, grstctl);
2237 return -ETIMEDOUT;
2238 }
2239
2240 if (!(grstctl & GRSTCTL_AHBIdle))
2241 continue;
2242
2243 break; /* reset done */
2244 }
2245
2246 dev_dbg(hsotg->dev, "reset successful\n");
2247 return 0;
2248}
2249
2250/**
2251 * s3c_hsotg_core_init - issue softreset to the core
2252 * @hsotg: The device state
2253 *
2254 * Issue a soft reset to the core, and await the core finishing it.
2255 */
2256static void s3c_hsotg_core_init(struct s3c_hsotg *hsotg)
2257{
2258 s3c_hsotg_corereset(hsotg);
2259
2260 /*
2261 * we must now enable ep0 ready for host detection and then
2262 * set configuration.
2263 */
2264
2265 /* set the PLL on, remove the HNP/SRP and set the PHY */
2266 writel(GUSBCFG_PHYIf16 | GUSBCFG_TOutCal(7) |
2267 (0x5 << 10), hsotg->regs + GUSBCFG);
2268
2269 s3c_hsotg_init_fifo(hsotg);
2270
2271 __orr32(hsotg->regs + DCTL, DCTL_SftDiscon);
2272
2273 writel(1 << 18 | DCFG_DevSpd_HS, hsotg->regs + DCFG);
2274
2275 /* Clear any pending OTG interrupts */
2276 writel(0xffffffff, hsotg->regs + GOTGINT);
2277
2278 /* Clear any pending interrupts */
2279 writel(0xffffffff, hsotg->regs + GINTSTS);
2280
2281 writel(GINTSTS_ErlySusp | GINTSTS_SessReqInt |
2282 GINTSTS_GOUTNakEff | GINTSTS_GINNakEff |
2283 GINTSTS_ConIDStsChng | GINTSTS_USBRst |
2284 GINTSTS_EnumDone | GINTSTS_OTGInt |
2285 GINTSTS_USBSusp | GINTSTS_WkUpInt,
2286 hsotg->regs + GINTMSK);
2287
2288 if (using_dma(hsotg))
2289 writel(GAHBCFG_GlblIntrEn | GAHBCFG_DMAEn |
2290 GAHBCFG_HBstLen_Incr4,
2291 hsotg->regs + GAHBCFG);
2292 else
2293 writel(GAHBCFG_GlblIntrEn, hsotg->regs + GAHBCFG);
2294
2295 /*
2296 * Enabling INTknTXFEmpMsk here seems to be a big mistake, we end
2297 * up being flooded with interrupts if the host is polling the
2298 * endpoint to try and read data.
2299 */
2300
2301 writel(((hsotg->dedicated_fifos) ? DIEPMSK_TxFIFOEmpty : 0) |
2302 DIEPMSK_EPDisbldMsk | DIEPMSK_XferComplMsk |
2303 DIEPMSK_TimeOUTMsk | DIEPMSK_AHBErrMsk |
2304 DIEPMSK_INTknEPMisMsk,
2305 hsotg->regs + DIEPMSK);
2306
2307 /*
2308 * don't need XferCompl, we get that from RXFIFO in slave mode. In
2309 * DMA mode we may need this.
2310 */
2311 writel((using_dma(hsotg) ? (DIEPMSK_XferComplMsk |
2312 DIEPMSK_TimeOUTMsk) : 0) |
2313 DOEPMSK_EPDisbldMsk | DOEPMSK_AHBErrMsk |
2314 DOEPMSK_SetupMsk,
2315 hsotg->regs + DOEPMSK);
2316
2317 writel(0, hsotg->regs + DAINTMSK);
2318
2319 dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
2320 readl(hsotg->regs + DIEPCTL0),
2321 readl(hsotg->regs + DOEPCTL0));
2322
2323 /* enable in and out endpoint interrupts */
2324 s3c_hsotg_en_gsint(hsotg, GINTSTS_OEPInt | GINTSTS_IEPInt);
2325
2326 /*
2327 * Enable the RXFIFO when in slave mode, as this is how we collect
2328 * the data. In DMA mode, we get events from the FIFO but also
2329 * things we cannot process, so do not use it.
2330 */
2331 if (!using_dma(hsotg))
2332 s3c_hsotg_en_gsint(hsotg, GINTSTS_RxFLvl);
2333
2334 /* Enable interrupts for EP0 in and out */
2335 s3c_hsotg_ctrl_epint(hsotg, 0, 0, 1);
2336 s3c_hsotg_ctrl_epint(hsotg, 0, 1, 1);
2337
2338 __orr32(hsotg->regs + DCTL, DCTL_PWROnPrgDone);
2339 udelay(10); /* see openiboot */
2340 __bic32(hsotg->regs + DCTL, DCTL_PWROnPrgDone);
2341
2342 dev_dbg(hsotg->dev, "DCTL=0x%08x\n", readl(hsotg->regs + DCTL));
2343
2344 /*
2345 * DxEPCTL_USBActEp says RO in manual, but seems to be set by
2346 * writing to the EPCTL register..
2347 */
2348
2349 /* set to read 1 8byte packet */
2350 writel(DxEPTSIZ_MC(1) | DxEPTSIZ_PktCnt(1) |
2351 DxEPTSIZ_XferSize(8), hsotg->regs + DOEPTSIZ0);
2352
2353 writel(s3c_hsotg_ep0_mps(hsotg->eps[0].ep.maxpacket) |
2354 DxEPCTL_CNAK | DxEPCTL_EPEna |
2355 DxEPCTL_USBActEp,
2356 hsotg->regs + DOEPCTL0);
2357
2358 /* enable, but don't activate EP0in */
2359 writel(s3c_hsotg_ep0_mps(hsotg->eps[0].ep.maxpacket) |
2360 DxEPCTL_USBActEp, hsotg->regs + DIEPCTL0);
2361
2362 s3c_hsotg_enqueue_setup(hsotg);
2363
2364 dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
2365 readl(hsotg->regs + DIEPCTL0),
2366 readl(hsotg->regs + DOEPCTL0));
2367
2368 /* clear global NAKs */
2369 writel(DCTL_CGOUTNak | DCTL_CGNPInNAK,
2370 hsotg->regs + DCTL);
2371
2372 /* must be at-least 3ms to allow bus to see disconnect */
2373 mdelay(3);
2374
2375 /* remove the soft-disconnect and let's go */
2376 __bic32(hsotg->regs + DCTL, DCTL_SftDiscon);
2377}
2087 2378
2088/** 2379/**
2089 * s3c_hsotg_irq - handle device interrupt 2380 * s3c_hsotg_irq - handle device interrupt
@@ -2098,52 +2389,45 @@ static irqreturn_t s3c_hsotg_irq(int irq, void *pw)
2098 u32 gintmsk; 2389 u32 gintmsk;
2099 2390
2100irq_retry: 2391irq_retry:
2101 gintsts = readl(hsotg->regs + S3C_GINTSTS); 2392 gintsts = readl(hsotg->regs + GINTSTS);
2102 gintmsk = readl(hsotg->regs + S3C_GINTMSK); 2393 gintmsk = readl(hsotg->regs + GINTMSK);
2103 2394
2104 dev_dbg(hsotg->dev, "%s: %08x %08x (%08x) retry %d\n", 2395 dev_dbg(hsotg->dev, "%s: %08x %08x (%08x) retry %d\n",
2105 __func__, gintsts, gintsts & gintmsk, gintmsk, retry_count); 2396 __func__, gintsts, gintsts & gintmsk, gintmsk, retry_count);
2106 2397
2107 gintsts &= gintmsk; 2398 gintsts &= gintmsk;
2108 2399
2109 if (gintsts & S3C_GINTSTS_OTGInt) { 2400 if (gintsts & GINTSTS_OTGInt) {
2110 u32 otgint = readl(hsotg->regs + S3C_GOTGINT); 2401 u32 otgint = readl(hsotg->regs + GOTGINT);
2111 2402
2112 dev_info(hsotg->dev, "OTGInt: %08x\n", otgint); 2403 dev_info(hsotg->dev, "OTGInt: %08x\n", otgint);
2113 2404
2114 writel(otgint, hsotg->regs + S3C_GOTGINT); 2405 writel(otgint, hsotg->regs + GOTGINT);
2115 }
2116
2117 if (gintsts & S3C_GINTSTS_DisconnInt) {
2118 dev_dbg(hsotg->dev, "%s: DisconnInt\n", __func__);
2119 writel(S3C_GINTSTS_DisconnInt, hsotg->regs + S3C_GINTSTS);
2120
2121 s3c_hsotg_disconnect_irq(hsotg);
2122 } 2406 }
2123 2407
2124 if (gintsts & S3C_GINTSTS_SessReqInt) { 2408 if (gintsts & GINTSTS_SessReqInt) {
2125 dev_dbg(hsotg->dev, "%s: SessReqInt\n", __func__); 2409 dev_dbg(hsotg->dev, "%s: SessReqInt\n", __func__);
2126 writel(S3C_GINTSTS_SessReqInt, hsotg->regs + S3C_GINTSTS); 2410 writel(GINTSTS_SessReqInt, hsotg->regs + GINTSTS);
2127 } 2411 }
2128 2412
2129 if (gintsts & S3C_GINTSTS_EnumDone) { 2413 if (gintsts & GINTSTS_EnumDone) {
2130 writel(S3C_GINTSTS_EnumDone, hsotg->regs + S3C_GINTSTS); 2414 writel(GINTSTS_EnumDone, hsotg->regs + GINTSTS);
2131 2415
2132 s3c_hsotg_irq_enumdone(hsotg); 2416 s3c_hsotg_irq_enumdone(hsotg);
2133 } 2417 }
2134 2418
2135 if (gintsts & S3C_GINTSTS_ConIDStsChng) { 2419 if (gintsts & GINTSTS_ConIDStsChng) {
2136 dev_dbg(hsotg->dev, "ConIDStsChg (DSTS=0x%08x, GOTCTL=%08x)\n", 2420 dev_dbg(hsotg->dev, "ConIDStsChg (DSTS=0x%08x, GOTCTL=%08x)\n",
2137 readl(hsotg->regs + S3C_DSTS), 2421 readl(hsotg->regs + DSTS),
2138 readl(hsotg->regs + S3C_GOTGCTL)); 2422 readl(hsotg->regs + GOTGCTL));
2139 2423
2140 writel(S3C_GINTSTS_ConIDStsChng, hsotg->regs + S3C_GINTSTS); 2424 writel(GINTSTS_ConIDStsChng, hsotg->regs + GINTSTS);
2141 } 2425 }
2142 2426
2143 if (gintsts & (S3C_GINTSTS_OEPInt | S3C_GINTSTS_IEPInt)) { 2427 if (gintsts & (GINTSTS_OEPInt | GINTSTS_IEPInt)) {
2144 u32 daint = readl(hsotg->regs + S3C_DAINT); 2428 u32 daint = readl(hsotg->regs + DAINT);
2145 u32 daint_out = daint >> S3C_DAINT_OutEP_SHIFT; 2429 u32 daint_out = daint >> DAINT_OutEP_SHIFT;
2146 u32 daint_in = daint & ~(daint_out << S3C_DAINT_OutEP_SHIFT); 2430 u32 daint_in = daint & ~(daint_out << DAINT_OutEP_SHIFT);
2147 int ep; 2431 int ep;
2148 2432
2149 dev_dbg(hsotg->dev, "%s: daint=%08x\n", __func__, daint); 2433 dev_dbg(hsotg->dev, "%s: daint=%08x\n", __func__, daint);
@@ -2159,102 +2443,116 @@ irq_retry:
2159 } 2443 }
2160 } 2444 }
2161 2445
2162 if (gintsts & S3C_GINTSTS_USBRst) { 2446 if (gintsts & GINTSTS_USBRst) {
2447
2448 u32 usb_status = readl(hsotg->regs + GOTGCTL);
2449
2163 dev_info(hsotg->dev, "%s: USBRst\n", __func__); 2450 dev_info(hsotg->dev, "%s: USBRst\n", __func__);
2164 dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n", 2451 dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n",
2165 readl(hsotg->regs + S3C_GNPTXSTS)); 2452 readl(hsotg->regs + GNPTXSTS));
2166 2453
2167 writel(S3C_GINTSTS_USBRst, hsotg->regs + S3C_GINTSTS); 2454 writel(GINTSTS_USBRst, hsotg->regs + GINTSTS);
2168 2455
2169 kill_all_requests(hsotg, &hsotg->eps[0], -ECONNRESET, true); 2456 if (usb_status & GOTGCTL_BSESVLD) {
2457 if (time_after(jiffies, hsotg->last_rst +
2458 msecs_to_jiffies(200))) {
2170 2459
2171 /* it seems after a reset we can end up with a situation 2460 kill_all_requests(hsotg, &hsotg->eps[0],
2172 * where the TXFIFO still has data in it... the docs 2461 -ECONNRESET, true);
2173 * suggest resetting all the fifos, so use the init_fifo
2174 * code to relayout and flush the fifos.
2175 */
2176 2462
2177 s3c_hsotg_init_fifo(hsotg); 2463 s3c_hsotg_core_init(hsotg);
2178 2464 hsotg->last_rst = jiffies;
2179 s3c_hsotg_enqueue_setup(hsotg); 2465 }
2466 }
2180 } 2467 }
2181 2468
2182 /* check both FIFOs */ 2469 /* check both FIFOs */
2183 2470
2184 if (gintsts & S3C_GINTSTS_NPTxFEmp) { 2471 if (gintsts & GINTSTS_NPTxFEmp) {
2185 dev_dbg(hsotg->dev, "NPTxFEmp\n"); 2472 dev_dbg(hsotg->dev, "NPTxFEmp\n");
2186 2473
2187 /* Disable the interrupt to stop it happening again 2474 /*
2475 * Disable the interrupt to stop it happening again
2188 * unless one of these endpoint routines decides that 2476 * unless one of these endpoint routines decides that
2189 * it needs re-enabling */ 2477 * it needs re-enabling
2478 */
2190 2479
2191 s3c_hsotg_disable_gsint(hsotg, S3C_GINTSTS_NPTxFEmp); 2480 s3c_hsotg_disable_gsint(hsotg, GINTSTS_NPTxFEmp);
2192 s3c_hsotg_irq_fifoempty(hsotg, false); 2481 s3c_hsotg_irq_fifoempty(hsotg, false);
2193 } 2482 }
2194 2483
2195 if (gintsts & S3C_GINTSTS_PTxFEmp) { 2484 if (gintsts & GINTSTS_PTxFEmp) {
2196 dev_dbg(hsotg->dev, "PTxFEmp\n"); 2485 dev_dbg(hsotg->dev, "PTxFEmp\n");
2197 2486
2198 /* See note in S3C_GINTSTS_NPTxFEmp */ 2487 /* See note in GINTSTS_NPTxFEmp */
2199 2488
2200 s3c_hsotg_disable_gsint(hsotg, S3C_GINTSTS_PTxFEmp); 2489 s3c_hsotg_disable_gsint(hsotg, GINTSTS_PTxFEmp);
2201 s3c_hsotg_irq_fifoempty(hsotg, true); 2490 s3c_hsotg_irq_fifoempty(hsotg, true);
2202 } 2491 }
2203 2492
2204 if (gintsts & S3C_GINTSTS_RxFLvl) { 2493 if (gintsts & GINTSTS_RxFLvl) {
2205 /* note, since GINTSTS_RxFLvl doubles as FIFO-not-empty, 2494 /*
2495 * note, since GINTSTS_RxFLvl doubles as FIFO-not-empty,
2206 * we need to retry s3c_hsotg_handle_rx if this is still 2496 * we need to retry s3c_hsotg_handle_rx if this is still
2207 * set. */ 2497 * set.
2498 */
2208 2499
2209 s3c_hsotg_handle_rx(hsotg); 2500 s3c_hsotg_handle_rx(hsotg);
2210 } 2501 }
2211 2502
2212 if (gintsts & S3C_GINTSTS_ModeMis) { 2503 if (gintsts & GINTSTS_ModeMis) {
2213 dev_warn(hsotg->dev, "warning, mode mismatch triggered\n"); 2504 dev_warn(hsotg->dev, "warning, mode mismatch triggered\n");
2214 writel(S3C_GINTSTS_ModeMis, hsotg->regs + S3C_GINTSTS); 2505 writel(GINTSTS_ModeMis, hsotg->regs + GINTSTS);
2215 } 2506 }
2216 2507
2217 if (gintsts & S3C_GINTSTS_USBSusp) { 2508 if (gintsts & GINTSTS_USBSusp) {
2218 dev_info(hsotg->dev, "S3C_GINTSTS_USBSusp\n"); 2509 dev_info(hsotg->dev, "GINTSTS_USBSusp\n");
2219 writel(S3C_GINTSTS_USBSusp, hsotg->regs + S3C_GINTSTS); 2510 writel(GINTSTS_USBSusp, hsotg->regs + GINTSTS);
2220 2511
2221 call_gadget(hsotg, suspend); 2512 call_gadget(hsotg, suspend);
2513 s3c_hsotg_disconnect(hsotg);
2222 } 2514 }
2223 2515
2224 if (gintsts & S3C_GINTSTS_WkUpInt) { 2516 if (gintsts & GINTSTS_WkUpInt) {
2225 dev_info(hsotg->dev, "S3C_GINTSTS_WkUpIn\n"); 2517 dev_info(hsotg->dev, "GINTSTS_WkUpIn\n");
2226 writel(S3C_GINTSTS_WkUpInt, hsotg->regs + S3C_GINTSTS); 2518 writel(GINTSTS_WkUpInt, hsotg->regs + GINTSTS);
2227 2519
2228 call_gadget(hsotg, resume); 2520 call_gadget(hsotg, resume);
2229 } 2521 }
2230 2522
2231 if (gintsts & S3C_GINTSTS_ErlySusp) { 2523 if (gintsts & GINTSTS_ErlySusp) {
2232 dev_dbg(hsotg->dev, "S3C_GINTSTS_ErlySusp\n"); 2524 dev_dbg(hsotg->dev, "GINTSTS_ErlySusp\n");
2233 writel(S3C_GINTSTS_ErlySusp, hsotg->regs + S3C_GINTSTS); 2525 writel(GINTSTS_ErlySusp, hsotg->regs + GINTSTS);
2526
2527 s3c_hsotg_disconnect(hsotg);
2234 } 2528 }
2235 2529
2236 /* these next two seem to crop-up occasionally causing the core 2530 /*
2531 * these next two seem to crop-up occasionally causing the core
2237 * to shutdown the USB transfer, so try clearing them and logging 2532 * to shutdown the USB transfer, so try clearing them and logging
2238 * the occurrence. */ 2533 * the occurrence.
2534 */
2239 2535
2240 if (gintsts & S3C_GINTSTS_GOUTNakEff) { 2536 if (gintsts & GINTSTS_GOUTNakEff) {
2241 dev_info(hsotg->dev, "GOUTNakEff triggered\n"); 2537 dev_info(hsotg->dev, "GOUTNakEff triggered\n");
2242 2538
2243 writel(S3C_DCTL_CGOUTNak, hsotg->regs + S3C_DCTL); 2539 writel(DCTL_CGOUTNak, hsotg->regs + DCTL);
2244 2540
2245 s3c_hsotg_dump(hsotg); 2541 s3c_hsotg_dump(hsotg);
2246 } 2542 }
2247 2543
2248 if (gintsts & S3C_GINTSTS_GINNakEff) { 2544 if (gintsts & GINTSTS_GINNakEff) {
2249 dev_info(hsotg->dev, "GINNakEff triggered\n"); 2545 dev_info(hsotg->dev, "GINNakEff triggered\n");
2250 2546
2251 writel(S3C_DCTL_CGNPInNAK, hsotg->regs + S3C_DCTL); 2547 writel(DCTL_CGNPInNAK, hsotg->regs + DCTL);
2252 2548
2253 s3c_hsotg_dump(hsotg); 2549 s3c_hsotg_dump(hsotg);
2254 } 2550 }
2255 2551
2256 /* if we've had fifo events, we should try and go around the 2552 /*
2257 * loop again to see if there's any point in returning yet. */ 2553 * if we've had fifo events, we should try and go around the
2554 * loop again to see if there's any point in returning yet.
2555 */
2258 2556
2259 if (gintsts & IRQ_RETRY_MASK && --retry_count > 0) 2557 if (gintsts & IRQ_RETRY_MASK && --retry_count > 0)
2260 goto irq_retry; 2558 goto irq_retry;
@@ -2268,7 +2566,7 @@ irq_retry:
2268 * @desc: The USB endpoint descriptor to configure with. 2566 * @desc: The USB endpoint descriptor to configure with.
2269 * 2567 *
2270 * This is called from the USB gadget code's usb_ep_enable(). 2568 * This is called from the USB gadget code's usb_ep_enable().
2271*/ 2569 */
2272static int s3c_hsotg_ep_enable(struct usb_ep *ep, 2570static int s3c_hsotg_ep_enable(struct usb_ep *ep,
2273 const struct usb_endpoint_descriptor *desc) 2571 const struct usb_endpoint_descriptor *desc)
2274{ 2572{
@@ -2300,7 +2598,7 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
2300 2598
2301 /* note, we handle this here instead of s3c_hsotg_set_ep_maxpacket */ 2599 /* note, we handle this here instead of s3c_hsotg_set_ep_maxpacket */
2302 2600
2303 epctrl_reg = dir_in ? S3C_DIEPCTL(index) : S3C_DOEPCTL(index); 2601 epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
2304 epctrl = readl(hsotg->regs + epctrl_reg); 2602 epctrl = readl(hsotg->regs + epctrl_reg);
2305 2603
2306 dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x from 0x%08x\n", 2604 dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x from 0x%08x\n",
@@ -2308,20 +2606,23 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
2308 2606
2309 spin_lock_irqsave(&hs_ep->lock, flags); 2607 spin_lock_irqsave(&hs_ep->lock, flags);
2310 2608
2311 epctrl &= ~(S3C_DxEPCTL_EPType_MASK | S3C_DxEPCTL_MPS_MASK); 2609 epctrl &= ~(DxEPCTL_EPType_MASK | DxEPCTL_MPS_MASK);
2312 epctrl |= S3C_DxEPCTL_MPS(mps); 2610 epctrl |= DxEPCTL_MPS(mps);
2313 2611
2314 /* mark the endpoint as active, otherwise the core may ignore 2612 /*
2315 * transactions entirely for this endpoint */ 2613 * mark the endpoint as active, otherwise the core may ignore
2316 epctrl |= S3C_DxEPCTL_USBActEp; 2614 * transactions entirely for this endpoint
2615 */
2616 epctrl |= DxEPCTL_USBActEp;
2317 2617
2318 /* set the NAK status on the endpoint, otherwise we might try and 2618 /*
2619 * set the NAK status on the endpoint, otherwise we might try and
2319 * do something with data that we've yet got a request to process 2620 * do something with data that we've yet got a request to process
2320 * since the RXFIFO will take data for an endpoint even if the 2621 * since the RXFIFO will take data for an endpoint even if the
2321 * size register hasn't been set. 2622 * size register hasn't been set.
2322 */ 2623 */
2323 2624
2324 epctrl |= S3C_DxEPCTL_SNAK; 2625 epctrl |= DxEPCTL_SNAK;
2325 2626
2326 /* update the endpoint state */ 2627 /* update the endpoint state */
2327 hs_ep->ep.maxpacket = mps; 2628 hs_ep->ep.maxpacket = mps;
@@ -2336,37 +2637,40 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
2336 goto out; 2637 goto out;
2337 2638
2338 case USB_ENDPOINT_XFER_BULK: 2639 case USB_ENDPOINT_XFER_BULK:
2339 epctrl |= S3C_DxEPCTL_EPType_Bulk; 2640 epctrl |= DxEPCTL_EPType_Bulk;
2340 break; 2641 break;
2341 2642
2342 case USB_ENDPOINT_XFER_INT: 2643 case USB_ENDPOINT_XFER_INT:
2343 if (dir_in) { 2644 if (dir_in) {
2344 /* Allocate our TxFNum by simply using the index 2645 /*
2646 * Allocate our TxFNum by simply using the index
2345 * of the endpoint for the moment. We could do 2647 * of the endpoint for the moment. We could do
2346 * something better if the host indicates how 2648 * something better if the host indicates how
2347 * many FIFOs we are expecting to use. */ 2649 * many FIFOs we are expecting to use.
2650 */
2348 2651
2349 hs_ep->periodic = 1; 2652 hs_ep->periodic = 1;
2350 epctrl |= S3C_DxEPCTL_TxFNum(index); 2653 epctrl |= DxEPCTL_TxFNum(index);
2351 } 2654 }
2352 2655
2353 epctrl |= S3C_DxEPCTL_EPType_Intterupt; 2656 epctrl |= DxEPCTL_EPType_Intterupt;
2354 break; 2657 break;
2355 2658
2356 case USB_ENDPOINT_XFER_CONTROL: 2659 case USB_ENDPOINT_XFER_CONTROL:
2357 epctrl |= S3C_DxEPCTL_EPType_Control; 2660 epctrl |= DxEPCTL_EPType_Control;
2358 break; 2661 break;
2359 } 2662 }
2360 2663
2361 /* if the hardware has dedicated fifos, we must give each IN EP 2664 /*
2665 * if the hardware has dedicated fifos, we must give each IN EP
2362 * a unique tx-fifo even if it is non-periodic. 2666 * a unique tx-fifo even if it is non-periodic.
2363 */ 2667 */
2364 if (dir_in && hsotg->dedicated_fifos) 2668 if (dir_in && hsotg->dedicated_fifos)
2365 epctrl |= S3C_DxEPCTL_TxFNum(index); 2669 epctrl |= DxEPCTL_TxFNum(index);
2366 2670
2367 /* for non control endpoints, set PID to D0 */ 2671 /* for non control endpoints, set PID to D0 */
2368 if (index) 2672 if (index)
2369 epctrl |= S3C_DxEPCTL_SetD0PID; 2673 epctrl |= DxEPCTL_SetD0PID;
2370 2674
2371 dev_dbg(hsotg->dev, "%s: write DxEPCTL=0x%08x\n", 2675 dev_dbg(hsotg->dev, "%s: write DxEPCTL=0x%08x\n",
2372 __func__, epctrl); 2676 __func__, epctrl);
@@ -2383,6 +2687,10 @@ out:
2383 return ret; 2687 return ret;
2384} 2688}
2385 2689
2690/**
2691 * s3c_hsotg_ep_disable - disable given endpoint
2692 * @ep: The endpoint to disable.
2693 */
2386static int s3c_hsotg_ep_disable(struct usb_ep *ep) 2694static int s3c_hsotg_ep_disable(struct usb_ep *ep)
2387{ 2695{
2388 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 2696 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
@@ -2400,7 +2708,7 @@ static int s3c_hsotg_ep_disable(struct usb_ep *ep)
2400 return -EINVAL; 2708 return -EINVAL;
2401 } 2709 }
2402 2710
2403 epctrl_reg = dir_in ? S3C_DIEPCTL(index) : S3C_DOEPCTL(index); 2711 epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
2404 2712
2405 /* terminate all requests with shutdown */ 2713 /* terminate all requests with shutdown */
2406 kill_all_requests(hsotg, hs_ep, -ESHUTDOWN, false); 2714 kill_all_requests(hsotg, hs_ep, -ESHUTDOWN, false);
@@ -2408,9 +2716,9 @@ static int s3c_hsotg_ep_disable(struct usb_ep *ep)
2408 spin_lock_irqsave(&hs_ep->lock, flags); 2716 spin_lock_irqsave(&hs_ep->lock, flags);
2409 2717
2410 ctrl = readl(hsotg->regs + epctrl_reg); 2718 ctrl = readl(hsotg->regs + epctrl_reg);
2411 ctrl &= ~S3C_DxEPCTL_EPEna; 2719 ctrl &= ~DxEPCTL_EPEna;
2412 ctrl &= ~S3C_DxEPCTL_USBActEp; 2720 ctrl &= ~DxEPCTL_USBActEp;
2413 ctrl |= S3C_DxEPCTL_SNAK; 2721 ctrl |= DxEPCTL_SNAK;
2414 2722
2415 dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl); 2723 dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
2416 writel(ctrl, hsotg->regs + epctrl_reg); 2724 writel(ctrl, hsotg->regs + epctrl_reg);
@@ -2426,7 +2734,7 @@ static int s3c_hsotg_ep_disable(struct usb_ep *ep)
2426 * on_list - check request is on the given endpoint 2734 * on_list - check request is on the given endpoint
2427 * @ep: The endpoint to check. 2735 * @ep: The endpoint to check.
2428 * @test: The request to test if it is on the endpoint. 2736 * @test: The request to test if it is on the endpoint.
2429*/ 2737 */
2430static bool on_list(struct s3c_hsotg_ep *ep, struct s3c_hsotg_req *test) 2738static bool on_list(struct s3c_hsotg_ep *ep, struct s3c_hsotg_req *test)
2431{ 2739{
2432 struct s3c_hsotg_req *req, *treq; 2740 struct s3c_hsotg_req *req, *treq;
@@ -2439,6 +2747,11 @@ static bool on_list(struct s3c_hsotg_ep *ep, struct s3c_hsotg_req *test)
2439 return false; 2747 return false;
2440} 2748}
2441 2749
2750/**
2751 * s3c_hsotg_ep_dequeue - dequeue given endpoint
2752 * @ep: The endpoint to dequeue.
2753 * @req: The request to be removed from a queue.
2754 */
2442static int s3c_hsotg_ep_dequeue(struct usb_ep *ep, struct usb_request *req) 2755static int s3c_hsotg_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
2443{ 2756{
2444 struct s3c_hsotg_req *hs_req = our_req(req); 2757 struct s3c_hsotg_req *hs_req = our_req(req);
@@ -2461,6 +2774,11 @@ static int s3c_hsotg_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
2461 return 0; 2774 return 0;
2462} 2775}
2463 2776
2777/**
2778 * s3c_hsotg_ep_sethalt - set halt on a given endpoint
2779 * @ep: The endpoint to set halt.
2780 * @value: Set or unset the halt.
2781 */
2464static int s3c_hsotg_ep_sethalt(struct usb_ep *ep, int value) 2782static int s3c_hsotg_ep_sethalt(struct usb_ep *ep, int value)
2465{ 2783{
2466 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 2784 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
@@ -2477,34 +2795,34 @@ static int s3c_hsotg_ep_sethalt(struct usb_ep *ep, int value)
2477 2795
2478 /* write both IN and OUT control registers */ 2796 /* write both IN and OUT control registers */
2479 2797
2480 epreg = S3C_DIEPCTL(index); 2798 epreg = DIEPCTL(index);
2481 epctl = readl(hs->regs + epreg); 2799 epctl = readl(hs->regs + epreg);
2482 2800
2483 if (value) { 2801 if (value) {
2484 epctl |= S3C_DxEPCTL_Stall + S3C_DxEPCTL_SNAK; 2802 epctl |= DxEPCTL_Stall + DxEPCTL_SNAK;
2485 if (epctl & S3C_DxEPCTL_EPEna) 2803 if (epctl & DxEPCTL_EPEna)
2486 epctl |= S3C_DxEPCTL_EPDis; 2804 epctl |= DxEPCTL_EPDis;
2487 } else { 2805 } else {
2488 epctl &= ~S3C_DxEPCTL_Stall; 2806 epctl &= ~DxEPCTL_Stall;
2489 xfertype = epctl & S3C_DxEPCTL_EPType_MASK; 2807 xfertype = epctl & DxEPCTL_EPType_MASK;
2490 if (xfertype == S3C_DxEPCTL_EPType_Bulk || 2808 if (xfertype == DxEPCTL_EPType_Bulk ||
2491 xfertype == S3C_DxEPCTL_EPType_Intterupt) 2809 xfertype == DxEPCTL_EPType_Intterupt)
2492 epctl |= S3C_DxEPCTL_SetD0PID; 2810 epctl |= DxEPCTL_SetD0PID;
2493 } 2811 }
2494 2812
2495 writel(epctl, hs->regs + epreg); 2813 writel(epctl, hs->regs + epreg);
2496 2814
2497 epreg = S3C_DOEPCTL(index); 2815 epreg = DOEPCTL(index);
2498 epctl = readl(hs->regs + epreg); 2816 epctl = readl(hs->regs + epreg);
2499 2817
2500 if (value) 2818 if (value)
2501 epctl |= S3C_DxEPCTL_Stall; 2819 epctl |= DxEPCTL_Stall;
2502 else { 2820 else {
2503 epctl &= ~S3C_DxEPCTL_Stall; 2821 epctl &= ~DxEPCTL_Stall;
2504 xfertype = epctl & S3C_DxEPCTL_EPType_MASK; 2822 xfertype = epctl & DxEPCTL_EPType_MASK;
2505 if (xfertype == S3C_DxEPCTL_EPType_Bulk || 2823 if (xfertype == DxEPCTL_EPType_Bulk ||
2506 xfertype == S3C_DxEPCTL_EPType_Intterupt) 2824 xfertype == DxEPCTL_EPType_Intterupt)
2507 epctl |= S3C_DxEPCTL_SetD0PID; 2825 epctl |= DxEPCTL_SetD0PID;
2508 } 2826 }
2509 2827
2510 writel(epctl, hs->regs + epreg); 2828 writel(epctl, hs->regs + epreg);
@@ -2526,57 +2844,91 @@ static struct usb_ep_ops s3c_hsotg_ep_ops = {
2526}; 2844};
2527 2845
2528/** 2846/**
2529 * s3c_hsotg_corereset - issue softreset to the core 2847 * s3c_hsotg_phy_enable - enable platform phy dev
2530 * @hsotg: The device state 2848 * @hsotg: The driver state
2531 * 2849 *
2532 * Issue a soft reset to the core, and await the core finishing it. 2850 * A wrapper for platform code responsible for controlling
2533*/ 2851 * low-level USB code
2534static int s3c_hsotg_corereset(struct s3c_hsotg *hsotg) 2852 */
2853static void s3c_hsotg_phy_enable(struct s3c_hsotg *hsotg)
2535{ 2854{
2536 int timeout; 2855 struct platform_device *pdev = to_platform_device(hsotg->dev);
2537 u32 grstctl;
2538 2856
2539 dev_dbg(hsotg->dev, "resetting core\n"); 2857 dev_dbg(hsotg->dev, "pdev 0x%p\n", pdev);
2858 if (hsotg->plat->phy_init)
2859 hsotg->plat->phy_init(pdev, hsotg->plat->phy_type);
2860}
2540 2861
2541 /* issue soft reset */ 2862/**
2542 writel(S3C_GRSTCTL_CSftRst, hsotg->regs + S3C_GRSTCTL); 2863 * s3c_hsotg_phy_disable - disable platform phy dev
2864 * @hsotg: The driver state
2865 *
2866 * A wrapper for platform code responsible for controlling
2867 * low-level USB code
2868 */
2869static void s3c_hsotg_phy_disable(struct s3c_hsotg *hsotg)
2870{
2871 struct platform_device *pdev = to_platform_device(hsotg->dev);
2543 2872
2544 timeout = 1000; 2873 if (hsotg->plat->phy_exit)
2545 do { 2874 hsotg->plat->phy_exit(pdev, hsotg->plat->phy_type);
2546 grstctl = readl(hsotg->regs + S3C_GRSTCTL); 2875}
2547 } while ((grstctl & S3C_GRSTCTL_CSftRst) && timeout-- > 0);
2548 2876
2549 if (grstctl & S3C_GRSTCTL_CSftRst) { 2877/**
2550 dev_err(hsotg->dev, "Failed to get CSftRst asserted\n"); 2878 * s3c_hsotg_init - initalize the usb core
2551 return -EINVAL; 2879 * @hsotg: The driver state
2552 } 2880 */
2881static void s3c_hsotg_init(struct s3c_hsotg *hsotg)
2882{
2883 /* unmask subset of endpoint interrupts */
2553 2884
2554 timeout = 1000; 2885 writel(DIEPMSK_TimeOUTMsk | DIEPMSK_AHBErrMsk |
2886 DIEPMSK_EPDisbldMsk | DIEPMSK_XferComplMsk,
2887 hsotg->regs + DIEPMSK);
2555 2888
2556 while (1) { 2889 writel(DOEPMSK_SetupMsk | DOEPMSK_AHBErrMsk |
2557 u32 grstctl = readl(hsotg->regs + S3C_GRSTCTL); 2890 DOEPMSK_EPDisbldMsk | DOEPMSK_XferComplMsk,
2891 hsotg->regs + DOEPMSK);
2558 2892
2559 if (timeout-- < 0) { 2893 writel(0, hsotg->regs + DAINTMSK);
2560 dev_info(hsotg->dev,
2561 "%s: reset failed, GRSTCTL=%08x\n",
2562 __func__, grstctl);
2563 return -ETIMEDOUT;
2564 }
2565 2894
2566 if (!(grstctl & S3C_GRSTCTL_AHBIdle)) 2895 /* Be in disconnected state until gadget is registered */
2567 continue; 2896 __orr32(hsotg->regs + DCTL, DCTL_SftDiscon);
2568 2897
2569 break; /* reset done */ 2898 if (0) {
2899 /* post global nak until we're ready */
2900 writel(DCTL_SGNPInNAK | DCTL_SGOUTNak,
2901 hsotg->regs + DCTL);
2570 } 2902 }
2571 2903
2572 dev_dbg(hsotg->dev, "reset successful\n"); 2904 /* setup fifos */
2573 return 0; 2905
2906 dev_dbg(hsotg->dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n",
2907 readl(hsotg->regs + GRXFSIZ),
2908 readl(hsotg->regs + GNPTXFSIZ));
2909
2910 s3c_hsotg_init_fifo(hsotg);
2911
2912 /* set the PLL on, remove the HNP/SRP and set the PHY */
2913 writel(GUSBCFG_PHYIf16 | GUSBCFG_TOutCal(7) | (0x5 << 10),
2914 hsotg->regs + GUSBCFG);
2915
2916 writel(using_dma(hsotg) ? GAHBCFG_DMAEn : 0x0,
2917 hsotg->regs + GAHBCFG);
2574} 2918}
2575 2919
2576static int s3c_hsotg_start(struct usb_gadget_driver *driver, 2920/**
2577 int (*bind)(struct usb_gadget *)) 2921 * s3c_hsotg_udc_start - prepare the udc for work
2922 * @gadget: The usb gadget state
2923 * @driver: The usb gadget driver
2924 *
2925 * Perform initialization to prepare udc device and driver
2926 * to work.
2927 */
2928static int s3c_hsotg_udc_start(struct usb_gadget *gadget,
2929 struct usb_gadget_driver *driver)
2578{ 2930{
2579 struct s3c_hsotg *hsotg = our_hsotg; 2931 struct s3c_hsotg *hsotg = to_hsotg(gadget);
2580 int ret; 2932 int ret;
2581 2933
2582 if (!hsotg) { 2934 if (!hsotg) {
@@ -2592,7 +2944,7 @@ static int s3c_hsotg_start(struct usb_gadget_driver *driver,
2592 if (driver->max_speed < USB_SPEED_FULL) 2944 if (driver->max_speed < USB_SPEED_FULL)
2593 dev_err(hsotg->dev, "%s: bad speed\n", __func__); 2945 dev_err(hsotg->dev, "%s: bad speed\n", __func__);
2594 2946
2595 if (!bind || !driver->setup) { 2947 if (!driver->setup) {
2596 dev_err(hsotg->dev, "%s: missing entry points\n", __func__); 2948 dev_err(hsotg->dev, "%s: missing entry points\n", __func__);
2597 return -EINVAL; 2949 return -EINVAL;
2598 } 2950 }
@@ -2605,135 +2957,17 @@ static int s3c_hsotg_start(struct usb_gadget_driver *driver,
2605 hsotg->gadget.dev.dma_mask = hsotg->dev->dma_mask; 2957 hsotg->gadget.dev.dma_mask = hsotg->dev->dma_mask;
2606 hsotg->gadget.speed = USB_SPEED_UNKNOWN; 2958 hsotg->gadget.speed = USB_SPEED_UNKNOWN;
2607 2959
2608 ret = device_add(&hsotg->gadget.dev); 2960 ret = regulator_bulk_enable(ARRAY_SIZE(hsotg->supplies),
2961 hsotg->supplies);
2609 if (ret) { 2962 if (ret) {
2610 dev_err(hsotg->dev, "failed to register gadget device\n"); 2963 dev_err(hsotg->dev, "failed to enable supplies: %d\n", ret);
2611 goto err; 2964 goto err;
2612 } 2965 }
2613 2966
2614 ret = bind(&hsotg->gadget); 2967 s3c_hsotg_phy_enable(hsotg);
2615 if (ret) {
2616 dev_err(hsotg->dev, "failed bind %s\n", driver->driver.name);
2617
2618 hsotg->gadget.dev.driver = NULL;
2619 hsotg->driver = NULL;
2620 goto err;
2621 }
2622
2623 /* we must now enable ep0 ready for host detection and then
2624 * set configuration. */
2625
2626 s3c_hsotg_corereset(hsotg);
2627
2628 /* set the PLL on, remove the HNP/SRP and set the PHY */
2629 writel(S3C_GUSBCFG_PHYIf16 | S3C_GUSBCFG_TOutCal(7) |
2630 (0x5 << 10), hsotg->regs + S3C_GUSBCFG);
2631
2632 /* looks like soft-reset changes state of FIFOs */
2633 s3c_hsotg_init_fifo(hsotg);
2634
2635 __orr32(hsotg->regs + S3C_DCTL, S3C_DCTL_SftDiscon);
2636
2637 writel(1 << 18 | S3C_DCFG_DevSpd_HS, hsotg->regs + S3C_DCFG);
2638
2639 /* Clear any pending OTG interrupts */
2640 writel(0xffffffff, hsotg->regs + S3C_GOTGINT);
2641
2642 /* Clear any pending interrupts */
2643 writel(0xffffffff, hsotg->regs + S3C_GINTSTS);
2644
2645 writel(S3C_GINTSTS_DisconnInt | S3C_GINTSTS_SessReqInt |
2646 S3C_GINTSTS_ConIDStsChng | S3C_GINTSTS_USBRst |
2647 S3C_GINTSTS_EnumDone | S3C_GINTSTS_OTGInt |
2648 S3C_GINTSTS_USBSusp | S3C_GINTSTS_WkUpInt |
2649 S3C_GINTSTS_GOUTNakEff | S3C_GINTSTS_GINNakEff |
2650 S3C_GINTSTS_ErlySusp,
2651 hsotg->regs + S3C_GINTMSK);
2652
2653 if (using_dma(hsotg))
2654 writel(S3C_GAHBCFG_GlblIntrEn | S3C_GAHBCFG_DMAEn |
2655 S3C_GAHBCFG_HBstLen_Incr4,
2656 hsotg->regs + S3C_GAHBCFG);
2657 else
2658 writel(S3C_GAHBCFG_GlblIntrEn, hsotg->regs + S3C_GAHBCFG);
2659
2660 /* Enabling INTknTXFEmpMsk here seems to be a big mistake, we end
2661 * up being flooded with interrupts if the host is polling the
2662 * endpoint to try and read data. */
2663
2664 writel(S3C_DIEPMSK_TimeOUTMsk | S3C_DIEPMSK_AHBErrMsk |
2665 S3C_DIEPMSK_INTknEPMisMsk |
2666 S3C_DIEPMSK_EPDisbldMsk | S3C_DIEPMSK_XferComplMsk |
2667 ((hsotg->dedicated_fifos) ? S3C_DIEPMSK_TxFIFOEmpty : 0),
2668 hsotg->regs + S3C_DIEPMSK);
2669
2670 /* don't need XferCompl, we get that from RXFIFO in slave mode. In
2671 * DMA mode we may need this. */
2672 writel(S3C_DOEPMSK_SetupMsk | S3C_DOEPMSK_AHBErrMsk |
2673 S3C_DOEPMSK_EPDisbldMsk |
2674 (using_dma(hsotg) ? (S3C_DIEPMSK_XferComplMsk |
2675 S3C_DIEPMSK_TimeOUTMsk) : 0),
2676 hsotg->regs + S3C_DOEPMSK);
2677
2678 writel(0, hsotg->regs + S3C_DAINTMSK);
2679
2680 dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
2681 readl(hsotg->regs + S3C_DIEPCTL0),
2682 readl(hsotg->regs + S3C_DOEPCTL0));
2683
2684 /* enable in and out endpoint interrupts */
2685 s3c_hsotg_en_gsint(hsotg, S3C_GINTSTS_OEPInt | S3C_GINTSTS_IEPInt);
2686
2687 /* Enable the RXFIFO when in slave mode, as this is how we collect
2688 * the data. In DMA mode, we get events from the FIFO but also
2689 * things we cannot process, so do not use it. */
2690 if (!using_dma(hsotg))
2691 s3c_hsotg_en_gsint(hsotg, S3C_GINTSTS_RxFLvl);
2692
2693 /* Enable interrupts for EP0 in and out */
2694 s3c_hsotg_ctrl_epint(hsotg, 0, 0, 1);
2695 s3c_hsotg_ctrl_epint(hsotg, 0, 1, 1);
2696
2697 __orr32(hsotg->regs + S3C_DCTL, S3C_DCTL_PWROnPrgDone);
2698 udelay(10); /* see openiboot */
2699 __bic32(hsotg->regs + S3C_DCTL, S3C_DCTL_PWROnPrgDone);
2700
2701 dev_dbg(hsotg->dev, "DCTL=0x%08x\n", readl(hsotg->regs + S3C_DCTL));
2702
2703 /* S3C_DxEPCTL_USBActEp says RO in manual, but seems to be set by
2704 writing to the EPCTL register.. */
2705
2706 /* set to read 1 8byte packet */
2707 writel(S3C_DxEPTSIZ_MC(1) | S3C_DxEPTSIZ_PktCnt(1) |
2708 S3C_DxEPTSIZ_XferSize(8), hsotg->regs + DOEPTSIZ0);
2709
2710 writel(s3c_hsotg_ep0_mps(hsotg->eps[0].ep.maxpacket) |
2711 S3C_DxEPCTL_CNAK | S3C_DxEPCTL_EPEna |
2712 S3C_DxEPCTL_USBActEp,
2713 hsotg->regs + S3C_DOEPCTL0);
2714
2715 /* enable, but don't activate EP0in */
2716 writel(s3c_hsotg_ep0_mps(hsotg->eps[0].ep.maxpacket) |
2717 S3C_DxEPCTL_USBActEp, hsotg->regs + S3C_DIEPCTL0);
2718
2719 s3c_hsotg_enqueue_setup(hsotg);
2720
2721 dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
2722 readl(hsotg->regs + S3C_DIEPCTL0),
2723 readl(hsotg->regs + S3C_DOEPCTL0));
2724
2725 /* clear global NAKs */
2726 writel(S3C_DCTL_CGOUTNak | S3C_DCTL_CGNPInNAK,
2727 hsotg->regs + S3C_DCTL);
2728
2729 /* must be at-least 3ms to allow bus to see disconnect */
2730 msleep(3);
2731
2732 /* remove the soft-disconnect and let's go */
2733 __bic32(hsotg->regs + S3C_DCTL, S3C_DCTL_SftDiscon);
2734
2735 /* report to the user, and return */
2736 2968
2969 s3c_hsotg_core_init(hsotg);
2970 hsotg->last_rst = jiffies;
2737 dev_info(hsotg->dev, "bound driver %s\n", driver->driver.name); 2971 dev_info(hsotg->dev, "bound driver %s\n", driver->driver.name);
2738 return 0; 2972 return 0;
2739 2973
@@ -2743,9 +2977,17 @@ err:
2743 return ret; 2977 return ret;
2744} 2978}
2745 2979
2746static int s3c_hsotg_stop(struct usb_gadget_driver *driver) 2980/**
2981 * s3c_hsotg_udc_stop - stop the udc
2982 * @gadget: The usb gadget state
2983 * @driver: The usb gadget driver
2984 *
2985 * Stop udc hw block and stay tunned for future transmissions
2986 */
2987static int s3c_hsotg_udc_stop(struct usb_gadget *gadget,
2988 struct usb_gadget_driver *driver)
2747{ 2989{
2748 struct s3c_hsotg *hsotg = our_hsotg; 2990 struct s3c_hsotg *hsotg = to_hsotg(gadget);
2749 int ep; 2991 int ep;
2750 2992
2751 if (!hsotg) 2993 if (!hsotg)
@@ -2755,16 +2997,15 @@ static int s3c_hsotg_stop(struct usb_gadget_driver *driver)
2755 return -EINVAL; 2997 return -EINVAL;
2756 2998
2757 /* all endpoints should be shutdown */ 2999 /* all endpoints should be shutdown */
2758 for (ep = 0; ep < S3C_HSOTG_EPS; ep++) 3000 for (ep = 0; ep < hsotg->num_of_eps; ep++)
2759 s3c_hsotg_ep_disable(&hsotg->eps[ep].ep); 3001 s3c_hsotg_ep_disable(&hsotg->eps[ep].ep);
2760 3002
2761 call_gadget(hsotg, disconnect); 3003 s3c_hsotg_phy_disable(hsotg);
3004 regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), hsotg->supplies);
2762 3005
2763 driver->unbind(&hsotg->gadget);
2764 hsotg->driver = NULL; 3006 hsotg->driver = NULL;
2765 hsotg->gadget.speed = USB_SPEED_UNKNOWN; 3007 hsotg->gadget.speed = USB_SPEED_UNKNOWN;
2766 3008 hsotg->gadget.dev.driver = NULL;
2767 device_del(&hsotg->gadget.dev);
2768 3009
2769 dev_info(hsotg->dev, "unregistered gadget driver '%s'\n", 3010 dev_info(hsotg->dev, "unregistered gadget driver '%s'\n",
2770 driver->driver.name); 3011 driver->driver.name);
@@ -2772,6 +3013,12 @@ static int s3c_hsotg_stop(struct usb_gadget_driver *driver)
2772 return 0; 3013 return 0;
2773} 3014}
2774 3015
3016/**
3017 * s3c_hsotg_gadget_getframe - read the frame number
3018 * @gadget: The usb gadget state
3019 *
3020 * Read the {micro} frame number
3021 */
2775static int s3c_hsotg_gadget_getframe(struct usb_gadget *gadget) 3022static int s3c_hsotg_gadget_getframe(struct usb_gadget *gadget)
2776{ 3023{
2777 return s3c_hsotg_read_frameno(to_hsotg(gadget)); 3024 return s3c_hsotg_read_frameno(to_hsotg(gadget));
@@ -2779,8 +3026,8 @@ static int s3c_hsotg_gadget_getframe(struct usb_gadget *gadget)
2779 3026
2780static struct usb_gadget_ops s3c_hsotg_gadget_ops = { 3027static struct usb_gadget_ops s3c_hsotg_gadget_ops = {
2781 .get_frame = s3c_hsotg_gadget_getframe, 3028 .get_frame = s3c_hsotg_gadget_getframe,
2782 .start = s3c_hsotg_start, 3029 .udc_start = s3c_hsotg_udc_start,
2783 .stop = s3c_hsotg_stop, 3030 .udc_stop = s3c_hsotg_udc_stop,
2784}; 3031};
2785 3032
2786/** 3033/**
@@ -2827,111 +3074,42 @@ static void __devinit s3c_hsotg_initep(struct s3c_hsotg *hsotg,
2827 hs_ep->ep.maxpacket = epnum ? 512 : EP0_MPS_LIMIT; 3074 hs_ep->ep.maxpacket = epnum ? 512 : EP0_MPS_LIMIT;
2828 hs_ep->ep.ops = &s3c_hsotg_ep_ops; 3075 hs_ep->ep.ops = &s3c_hsotg_ep_ops;
2829 3076
2830 /* Read the FIFO size for the Periodic TX FIFO, even if we're 3077 /*
3078 * Read the FIFO size for the Periodic TX FIFO, even if we're
2831 * an OUT endpoint, we may as well do this if in future the 3079 * an OUT endpoint, we may as well do this if in future the
2832 * code is changed to make each endpoint's direction changeable. 3080 * code is changed to make each endpoint's direction changeable.
2833 */ 3081 */
2834 3082
2835 ptxfifo = readl(hsotg->regs + S3C_DPTXFSIZn(epnum)); 3083 ptxfifo = readl(hsotg->regs + DPTXFSIZn(epnum));
2836 hs_ep->fifo_size = S3C_DPTXFSIZn_DPTxFSize_GET(ptxfifo) * 4; 3084 hs_ep->fifo_size = DPTXFSIZn_DPTxFSize_GET(ptxfifo) * 4;
2837 3085
2838 /* if we're using dma, we need to set the next-endpoint pointer 3086 /*
3087 * if we're using dma, we need to set the next-endpoint pointer
2839 * to be something valid. 3088 * to be something valid.
2840 */ 3089 */
2841 3090
2842 if (using_dma(hsotg)) { 3091 if (using_dma(hsotg)) {
2843 u32 next = S3C_DxEPCTL_NextEp((epnum + 1) % 15); 3092 u32 next = DxEPCTL_NextEp((epnum + 1) % 15);
2844 writel(next, hsotg->regs + S3C_DIEPCTL(epnum)); 3093 writel(next, hsotg->regs + DIEPCTL(epnum));
2845 writel(next, hsotg->regs + S3C_DOEPCTL(epnum)); 3094 writel(next, hsotg->regs + DOEPCTL(epnum));
2846 } 3095 }
2847} 3096}
2848 3097
2849/** 3098/**
2850 * s3c_hsotg_otgreset - reset the OtG phy block 3099 * s3c_hsotg_hw_cfg - read HW configuration registers
2851 * @hsotg: The host state. 3100 * @param: The device state
2852 * 3101 *
2853 * Power up the phy, set the basic configuration and start the PHY. 3102 * Read the USB core HW configuration registers
2854 */ 3103 */
2855static void s3c_hsotg_otgreset(struct s3c_hsotg *hsotg) 3104static void s3c_hsotg_hw_cfg(struct s3c_hsotg *hsotg)
2856{
2857 struct clk *xusbxti;
2858 u32 pwr, osc;
2859
2860 pwr = readl(S3C_PHYPWR);
2861 pwr &= ~0x19;
2862 writel(pwr, S3C_PHYPWR);
2863 mdelay(1);
2864
2865 osc = hsotg->plat->is_osc ? S3C_PHYCLK_EXT_OSC : 0;
2866
2867 xusbxti = clk_get(hsotg->dev, "xusbxti");
2868 if (xusbxti && !IS_ERR(xusbxti)) {
2869 switch (clk_get_rate(xusbxti)) {
2870 case 12*MHZ:
2871 osc |= S3C_PHYCLK_CLKSEL_12M;
2872 break;
2873 case 24*MHZ:
2874 osc |= S3C_PHYCLK_CLKSEL_24M;
2875 break;
2876 default:
2877 case 48*MHZ:
2878 /* default reference clock */
2879 break;
2880 }
2881 clk_put(xusbxti);
2882 }
2883
2884 writel(osc | 0x10, S3C_PHYCLK);
2885
2886 /* issue a full set of resets to the otg and core */
2887
2888 writel(S3C_RSTCON_PHY, S3C_RSTCON);
2889 udelay(20); /* at-least 10uS */
2890 writel(0, S3C_RSTCON);
2891}
2892
2893
2894static void s3c_hsotg_init(struct s3c_hsotg *hsotg)
2895{ 3105{
2896 u32 cfg4; 3106 u32 cfg2, cfg4;
2897 3107 /* check hardware configuration */
2898 /* unmask subset of endpoint interrupts */
2899
2900 writel(S3C_DIEPMSK_TimeOUTMsk | S3C_DIEPMSK_AHBErrMsk |
2901 S3C_DIEPMSK_EPDisbldMsk | S3C_DIEPMSK_XferComplMsk,
2902 hsotg->regs + S3C_DIEPMSK);
2903
2904 writel(S3C_DOEPMSK_SetupMsk | S3C_DOEPMSK_AHBErrMsk |
2905 S3C_DOEPMSK_EPDisbldMsk | S3C_DOEPMSK_XferComplMsk,
2906 hsotg->regs + S3C_DOEPMSK);
2907
2908 writel(0, hsotg->regs + S3C_DAINTMSK);
2909
2910 /* Be in disconnected state until gadget is registered */
2911 __orr32(hsotg->regs + S3C_DCTL, S3C_DCTL_SftDiscon);
2912
2913 if (0) {
2914 /* post global nak until we're ready */
2915 writel(S3C_DCTL_SGNPInNAK | S3C_DCTL_SGOUTNak,
2916 hsotg->regs + S3C_DCTL);
2917 }
2918
2919 /* setup fifos */
2920
2921 dev_dbg(hsotg->dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n",
2922 readl(hsotg->regs + S3C_GRXFSIZ),
2923 readl(hsotg->regs + S3C_GNPTXFSIZ));
2924
2925 s3c_hsotg_init_fifo(hsotg);
2926
2927 /* set the PLL on, remove the HNP/SRP and set the PHY */
2928 writel(S3C_GUSBCFG_PHYIf16 | S3C_GUSBCFG_TOutCal(7) | (0x5 << 10),
2929 hsotg->regs + S3C_GUSBCFG);
2930 3108
2931 writel(using_dma(hsotg) ? S3C_GAHBCFG_DMAEn : 0x0, 3109 cfg2 = readl(hsotg->regs + 0x48);
2932 hsotg->regs + S3C_GAHBCFG); 3110 hsotg->num_of_eps = (cfg2 >> 10) & 0xF;
2933 3111
2934 /* check hardware configuration */ 3112 dev_info(hsotg->dev, "EPs:%d\n", hsotg->num_of_eps);
2935 3113
2936 cfg4 = readl(hsotg->regs + 0x50); 3114 cfg4 = readl(hsotg->regs + 0x50);
2937 hsotg->dedicated_fifos = (cfg4 >> 25) & 1; 3115 hsotg->dedicated_fifos = (cfg4 >> 25) & 1;
@@ -2940,6 +3118,10 @@ static void s3c_hsotg_init(struct s3c_hsotg *hsotg)
2940 hsotg->dedicated_fifos ? "dedicated" : "shared"); 3118 hsotg->dedicated_fifos ? "dedicated" : "shared");
2941} 3119}
2942 3120
3121/**
3122 * s3c_hsotg_dump - dump state of the udc
3123 * @param: The device state
3124 */
2943static void s3c_hsotg_dump(struct s3c_hsotg *hsotg) 3125static void s3c_hsotg_dump(struct s3c_hsotg *hsotg)
2944{ 3126{
2945#ifdef DEBUG 3127#ifdef DEBUG
@@ -2949,46 +3131,45 @@ static void s3c_hsotg_dump(struct s3c_hsotg *hsotg)
2949 int idx; 3131 int idx;
2950 3132
2951 dev_info(dev, "DCFG=0x%08x, DCTL=0x%08x, DIEPMSK=%08x\n", 3133 dev_info(dev, "DCFG=0x%08x, DCTL=0x%08x, DIEPMSK=%08x\n",
2952 readl(regs + S3C_DCFG), readl(regs + S3C_DCTL), 3134 readl(regs + DCFG), readl(regs + DCTL),
2953 readl(regs + S3C_DIEPMSK)); 3135 readl(regs + DIEPMSK));
2954 3136
2955 dev_info(dev, "GAHBCFG=0x%08x, 0x44=0x%08x\n", 3137 dev_info(dev, "GAHBCFG=0x%08x, 0x44=0x%08x\n",
2956 readl(regs + S3C_GAHBCFG), readl(regs + 0x44)); 3138 readl(regs + GAHBCFG), readl(regs + 0x44));
2957 3139
2958 dev_info(dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n", 3140 dev_info(dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n",
2959 readl(regs + S3C_GRXFSIZ), readl(regs + S3C_GNPTXFSIZ)); 3141 readl(regs + GRXFSIZ), readl(regs + GNPTXFSIZ));
2960 3142
2961 /* show periodic fifo settings */ 3143 /* show periodic fifo settings */
2962 3144
2963 for (idx = 1; idx <= 15; idx++) { 3145 for (idx = 1; idx <= 15; idx++) {
2964 val = readl(regs + S3C_DPTXFSIZn(idx)); 3146 val = readl(regs + DPTXFSIZn(idx));
2965 dev_info(dev, "DPTx[%d] FSize=%d, StAddr=0x%08x\n", idx, 3147 dev_info(dev, "DPTx[%d] FSize=%d, StAddr=0x%08x\n", idx,
2966 val >> S3C_DPTXFSIZn_DPTxFSize_SHIFT, 3148 val >> DPTXFSIZn_DPTxFSize_SHIFT,
2967 val & S3C_DPTXFSIZn_DPTxFStAddr_MASK); 3149 val & DPTXFSIZn_DPTxFStAddr_MASK);
2968 } 3150 }
2969 3151
2970 for (idx = 0; idx < 15; idx++) { 3152 for (idx = 0; idx < 15; idx++) {
2971 dev_info(dev, 3153 dev_info(dev,
2972 "ep%d-in: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", idx, 3154 "ep%d-in: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", idx,
2973 readl(regs + S3C_DIEPCTL(idx)), 3155 readl(regs + DIEPCTL(idx)),
2974 readl(regs + S3C_DIEPTSIZ(idx)), 3156 readl(regs + DIEPTSIZ(idx)),
2975 readl(regs + S3C_DIEPDMA(idx))); 3157 readl(regs + DIEPDMA(idx)));
2976 3158
2977 val = readl(regs + S3C_DOEPCTL(idx)); 3159 val = readl(regs + DOEPCTL(idx));
2978 dev_info(dev, 3160 dev_info(dev,
2979 "ep%d-out: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", 3161 "ep%d-out: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n",
2980 idx, readl(regs + S3C_DOEPCTL(idx)), 3162 idx, readl(regs + DOEPCTL(idx)),
2981 readl(regs + S3C_DOEPTSIZ(idx)), 3163 readl(regs + DOEPTSIZ(idx)),
2982 readl(regs + S3C_DOEPDMA(idx))); 3164 readl(regs + DOEPDMA(idx)));
2983 3165
2984 } 3166 }
2985 3167
2986 dev_info(dev, "DVBUSDIS=0x%08x, DVBUSPULSE=%08x\n", 3168 dev_info(dev, "DVBUSDIS=0x%08x, DVBUSPULSE=%08x\n",
2987 readl(regs + S3C_DVBUSDIS), readl(regs + S3C_DVBUSPULSE)); 3169 readl(regs + DVBUSDIS), readl(regs + DVBUSPULSE));
2988#endif 3170#endif
2989} 3171}
2990 3172
2991
2992/** 3173/**
2993 * state_show - debugfs: show overall driver and device state. 3174 * state_show - debugfs: show overall driver and device state.
2994 * @seq: The seq file to write to. 3175 * @seq: The seq file to write to.
@@ -3005,38 +3186,38 @@ static int state_show(struct seq_file *seq, void *v)
3005 int idx; 3186 int idx;
3006 3187
3007 seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n", 3188 seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n",
3008 readl(regs + S3C_DCFG), 3189 readl(regs + DCFG),
3009 readl(regs + S3C_DCTL), 3190 readl(regs + DCTL),
3010 readl(regs + S3C_DSTS)); 3191 readl(regs + DSTS));
3011 3192
3012 seq_printf(seq, "DIEPMSK=0x%08x, DOEPMASK=0x%08x\n", 3193 seq_printf(seq, "DIEPMSK=0x%08x, DOEPMASK=0x%08x\n",
3013 readl(regs + S3C_DIEPMSK), readl(regs + S3C_DOEPMSK)); 3194 readl(regs + DIEPMSK), readl(regs + DOEPMSK));
3014 3195
3015 seq_printf(seq, "GINTMSK=0x%08x, GINTSTS=0x%08x\n", 3196 seq_printf(seq, "GINTMSK=0x%08x, GINTSTS=0x%08x\n",
3016 readl(regs + S3C_GINTMSK), 3197 readl(regs + GINTMSK),
3017 readl(regs + S3C_GINTSTS)); 3198 readl(regs + GINTSTS));
3018 3199
3019 seq_printf(seq, "DAINTMSK=0x%08x, DAINT=0x%08x\n", 3200 seq_printf(seq, "DAINTMSK=0x%08x, DAINT=0x%08x\n",
3020 readl(regs + S3C_DAINTMSK), 3201 readl(regs + DAINTMSK),
3021 readl(regs + S3C_DAINT)); 3202 readl(regs + DAINT));
3022 3203
3023 seq_printf(seq, "GNPTXSTS=0x%08x, GRXSTSR=%08x\n", 3204 seq_printf(seq, "GNPTXSTS=0x%08x, GRXSTSR=%08x\n",
3024 readl(regs + S3C_GNPTXSTS), 3205 readl(regs + GNPTXSTS),
3025 readl(regs + S3C_GRXSTSR)); 3206 readl(regs + GRXSTSR));
3026 3207
3027 seq_printf(seq, "\nEndpoint status:\n"); 3208 seq_printf(seq, "\nEndpoint status:\n");
3028 3209
3029 for (idx = 0; idx < 15; idx++) { 3210 for (idx = 0; idx < 15; idx++) {
3030 u32 in, out; 3211 u32 in, out;
3031 3212
3032 in = readl(regs + S3C_DIEPCTL(idx)); 3213 in = readl(regs + DIEPCTL(idx));
3033 out = readl(regs + S3C_DOEPCTL(idx)); 3214 out = readl(regs + DOEPCTL(idx));
3034 3215
3035 seq_printf(seq, "ep%d: DIEPCTL=0x%08x, DOEPCTL=0x%08x", 3216 seq_printf(seq, "ep%d: DIEPCTL=0x%08x, DOEPCTL=0x%08x",
3036 idx, in, out); 3217 idx, in, out);
3037 3218
3038 in = readl(regs + S3C_DIEPTSIZ(idx)); 3219 in = readl(regs + DIEPTSIZ(idx));
3039 out = readl(regs + S3C_DOEPTSIZ(idx)); 3220 out = readl(regs + DOEPTSIZ(idx));
3040 3221
3041 seq_printf(seq, ", DIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x", 3222 seq_printf(seq, ", DIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x",
3042 in, out); 3223 in, out);
@@ -3067,7 +3248,7 @@ static const struct file_operations state_fops = {
3067 * 3248 *
3068 * Show the FIFO information for the overall fifo and all the 3249 * Show the FIFO information for the overall fifo and all the
3069 * periodic transmission FIFOs. 3250 * periodic transmission FIFOs.
3070*/ 3251 */
3071static int fifo_show(struct seq_file *seq, void *v) 3252static int fifo_show(struct seq_file *seq, void *v)
3072{ 3253{
3073 struct s3c_hsotg *hsotg = seq->private; 3254 struct s3c_hsotg *hsotg = seq->private;
@@ -3076,21 +3257,21 @@ static int fifo_show(struct seq_file *seq, void *v)
3076 int idx; 3257 int idx;
3077 3258
3078 seq_printf(seq, "Non-periodic FIFOs:\n"); 3259 seq_printf(seq, "Non-periodic FIFOs:\n");
3079 seq_printf(seq, "RXFIFO: Size %d\n", readl(regs + S3C_GRXFSIZ)); 3260 seq_printf(seq, "RXFIFO: Size %d\n", readl(regs + GRXFSIZ));
3080 3261
3081 val = readl(regs + S3C_GNPTXFSIZ); 3262 val = readl(regs + GNPTXFSIZ);
3082 seq_printf(seq, "NPTXFIFO: Size %d, Start 0x%08x\n", 3263 seq_printf(seq, "NPTXFIFO: Size %d, Start 0x%08x\n",
3083 val >> S3C_GNPTXFSIZ_NPTxFDep_SHIFT, 3264 val >> GNPTXFSIZ_NPTxFDep_SHIFT,
3084 val & S3C_GNPTXFSIZ_NPTxFStAddr_MASK); 3265 val & GNPTXFSIZ_NPTxFStAddr_MASK);
3085 3266
3086 seq_printf(seq, "\nPeriodic TXFIFOs:\n"); 3267 seq_printf(seq, "\nPeriodic TXFIFOs:\n");
3087 3268
3088 for (idx = 1; idx <= 15; idx++) { 3269 for (idx = 1; idx <= 15; idx++) {
3089 val = readl(regs + S3C_DPTXFSIZn(idx)); 3270 val = readl(regs + DPTXFSIZn(idx));
3090 3271
3091 seq_printf(seq, "\tDPTXFIFO%2d: Size %d, Start 0x%08x\n", idx, 3272 seq_printf(seq, "\tDPTXFIFO%2d: Size %d, Start 0x%08x\n", idx,
3092 val >> S3C_DPTXFSIZn_DPTxFSize_SHIFT, 3273 val >> DPTXFSIZn_DPTxFSize_SHIFT,
3093 val & S3C_DPTXFSIZn_DPTxFStAddr_MASK); 3274 val & DPTXFSIZn_DPTxFStAddr_MASK);
3094 } 3275 }
3095 3276
3096 return 0; 3277 return 0;
@@ -3122,7 +3303,7 @@ static const char *decode_direction(int is_in)
3122 * 3303 *
3123 * This debugfs entry shows the state of the given endpoint (one is 3304 * This debugfs entry shows the state of the given endpoint (one is
3124 * registered for each available). 3305 * registered for each available).
3125*/ 3306 */
3126static int ep_show(struct seq_file *seq, void *v) 3307static int ep_show(struct seq_file *seq, void *v)
3127{ 3308{
3128 struct s3c_hsotg_ep *ep = seq->private; 3309 struct s3c_hsotg_ep *ep = seq->private;
@@ -3139,20 +3320,20 @@ static int ep_show(struct seq_file *seq, void *v)
3139 /* first show the register state */ 3320 /* first show the register state */
3140 3321
3141 seq_printf(seq, "\tDIEPCTL=0x%08x, DOEPCTL=0x%08x\n", 3322 seq_printf(seq, "\tDIEPCTL=0x%08x, DOEPCTL=0x%08x\n",
3142 readl(regs + S3C_DIEPCTL(index)), 3323 readl(regs + DIEPCTL(index)),
3143 readl(regs + S3C_DOEPCTL(index))); 3324 readl(regs + DOEPCTL(index)));
3144 3325
3145 seq_printf(seq, "\tDIEPDMA=0x%08x, DOEPDMA=0x%08x\n", 3326 seq_printf(seq, "\tDIEPDMA=0x%08x, DOEPDMA=0x%08x\n",
3146 readl(regs + S3C_DIEPDMA(index)), 3327 readl(regs + DIEPDMA(index)),
3147 readl(regs + S3C_DOEPDMA(index))); 3328 readl(regs + DOEPDMA(index)));
3148 3329
3149 seq_printf(seq, "\tDIEPINT=0x%08x, DOEPINT=0x%08x\n", 3330 seq_printf(seq, "\tDIEPINT=0x%08x, DOEPINT=0x%08x\n",
3150 readl(regs + S3C_DIEPINT(index)), 3331 readl(regs + DIEPINT(index)),
3151 readl(regs + S3C_DOEPINT(index))); 3332 readl(regs + DOEPINT(index)));
3152 3333
3153 seq_printf(seq, "\tDIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x\n", 3334 seq_printf(seq, "\tDIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x\n",
3154 readl(regs + S3C_DIEPTSIZ(index)), 3335 readl(regs + DIEPTSIZ(index)),
3155 readl(regs + S3C_DOEPTSIZ(index))); 3336 readl(regs + DOEPTSIZ(index)));
3156 3337
3157 seq_printf(seq, "\n"); 3338 seq_printf(seq, "\n");
3158 seq_printf(seq, "mps %d\n", ep->ep.maxpacket); 3339 seq_printf(seq, "mps %d\n", ep->ep.maxpacket);
@@ -3202,7 +3383,7 @@ static const struct file_operations ep_fops = {
3202 * about the state of the system. The directory name is created 3383 * about the state of the system. The directory name is created
3203 * with the same name as the device itself, in case we end up 3384 * with the same name as the device itself, in case we end up
3204 * with multiple blocks in future systems. 3385 * with multiple blocks in future systems.
3205*/ 3386 */
3206static void __devinit s3c_hsotg_create_debug(struct s3c_hsotg *hsotg) 3387static void __devinit s3c_hsotg_create_debug(struct s3c_hsotg *hsotg)
3207{ 3388{
3208 struct dentry *root; 3389 struct dentry *root;
@@ -3231,7 +3412,7 @@ static void __devinit s3c_hsotg_create_debug(struct s3c_hsotg *hsotg)
3231 3412
3232 /* create one file for each endpoint */ 3413 /* create one file for each endpoint */
3233 3414
3234 for (epidx = 0; epidx < S3C_HSOTG_EPS; epidx++) { 3415 for (epidx = 0; epidx < hsotg->num_of_eps; epidx++) {
3235 struct s3c_hsotg_ep *ep = &hsotg->eps[epidx]; 3416 struct s3c_hsotg_ep *ep = &hsotg->eps[epidx];
3236 3417
3237 ep->debugfs = debugfs_create_file(ep->name, 0444, 3418 ep->debugfs = debugfs_create_file(ep->name, 0444,
@@ -3248,12 +3429,12 @@ static void __devinit s3c_hsotg_create_debug(struct s3c_hsotg *hsotg)
3248 * @hsotg: The driver state 3429 * @hsotg: The driver state
3249 * 3430 *
3250 * Cleanup (remove) the debugfs files for use on module exit. 3431 * Cleanup (remove) the debugfs files for use on module exit.
3251*/ 3432 */
3252static void __devexit s3c_hsotg_delete_debug(struct s3c_hsotg *hsotg) 3433static void __devexit s3c_hsotg_delete_debug(struct s3c_hsotg *hsotg)
3253{ 3434{
3254 unsigned epidx; 3435 unsigned epidx;
3255 3436
3256 for (epidx = 0; epidx < S3C_HSOTG_EPS; epidx++) { 3437 for (epidx = 0; epidx < hsotg->num_of_eps; epidx++) {
3257 struct s3c_hsotg_ep *ep = &hsotg->eps[epidx]; 3438 struct s3c_hsotg_ep *ep = &hsotg->eps[epidx];
3258 debugfs_remove(ep->debugfs); 3439 debugfs_remove(ep->debugfs);
3259 } 3440 }
@@ -3264,48 +3445,39 @@ static void __devexit s3c_hsotg_delete_debug(struct s3c_hsotg *hsotg)
3264} 3445}
3265 3446
3266/** 3447/**
3267 * s3c_hsotg_gate - set the hardware gate for the block 3448 * s3c_hsotg_release - release callback for hsotg device
3268 * @pdev: The device we bound to 3449 * @dev: Device to for which release is called
3269 * @on: On or off.
3270 *
3271 * Set the hardware gate setting into the block. If we end up on
3272 * something other than an S3C64XX, then we might need to change this
3273 * to using a platform data callback, or some other mechanism.
3274 */ 3450 */
3275static void s3c_hsotg_gate(struct platform_device *pdev, bool on) 3451static void s3c_hsotg_release(struct device *dev)
3276{ 3452{
3277 unsigned long flags; 3453 struct s3c_hsotg *hsotg = dev_get_drvdata(dev);
3278 u32 others;
3279
3280 local_irq_save(flags);
3281
3282 others = __raw_readl(S3C64XX_OTHERS);
3283 if (on)
3284 others |= S3C64XX_OTHERS_USBMASK;
3285 else
3286 others &= ~S3C64XX_OTHERS_USBMASK;
3287 __raw_writel(others, S3C64XX_OTHERS);
3288 3454
3289 local_irq_restore(flags); 3455 kfree(hsotg);
3290} 3456}
3291 3457
3292static struct s3c_hsotg_plat s3c_hsotg_default_pdata; 3458/**
3459 * s3c_hsotg_probe - probe function for hsotg driver
3460 * @pdev: The platform information for the driver
3461 */
3293 3462
3294static int __devinit s3c_hsotg_probe(struct platform_device *pdev) 3463static int __devinit s3c_hsotg_probe(struct platform_device *pdev)
3295{ 3464{
3296 struct s3c_hsotg_plat *plat = pdev->dev.platform_data; 3465 struct s3c_hsotg_plat *plat = pdev->dev.platform_data;
3297 struct device *dev = &pdev->dev; 3466 struct device *dev = &pdev->dev;
3467 struct s3c_hsotg_ep *eps;
3298 struct s3c_hsotg *hsotg; 3468 struct s3c_hsotg *hsotg;
3299 struct resource *res; 3469 struct resource *res;
3300 int epnum; 3470 int epnum;
3301 int ret; 3471 int ret;
3472 int i;
3302 3473
3303 if (!plat) 3474 plat = pdev->dev.platform_data;
3304 plat = &s3c_hsotg_default_pdata; 3475 if (!plat) {
3476 dev_err(&pdev->dev, "no platform data defined\n");
3477 return -EINVAL;
3478 }
3305 3479
3306 hsotg = kzalloc(sizeof(struct s3c_hsotg) + 3480 hsotg = kzalloc(sizeof(struct s3c_hsotg), GFP_KERNEL);
3307 sizeof(struct s3c_hsotg_ep) * S3C_HSOTG_EPS,
3308 GFP_KERNEL);
3309 if (!hsotg) { 3481 if (!hsotg) {
3310 dev_err(dev, "cannot get memory\n"); 3482 dev_err(dev, "cannot get memory\n");
3311 return -ENOMEM; 3483 return -ENOMEM;
@@ -3371,6 +3543,54 @@ static int __devinit s3c_hsotg_probe(struct platform_device *pdev)
3371 3543
3372 hsotg->gadget.dev.parent = dev; 3544 hsotg->gadget.dev.parent = dev;
3373 hsotg->gadget.dev.dma_mask = dev->dma_mask; 3545 hsotg->gadget.dev.dma_mask = dev->dma_mask;
3546 hsotg->gadget.dev.release = s3c_hsotg_release;
3547
3548 /* reset the system */
3549
3550 clk_prepare_enable(hsotg->clk);
3551
3552 /* regulators */
3553
3554 for (i = 0; i < ARRAY_SIZE(hsotg->supplies); i++)
3555 hsotg->supplies[i].supply = s3c_hsotg_supply_names[i];
3556
3557 ret = regulator_bulk_get(dev, ARRAY_SIZE(hsotg->supplies),
3558 hsotg->supplies);
3559 if (ret) {
3560 dev_err(dev, "failed to request supplies: %d\n", ret);
3561 goto err_irq;
3562 }
3563
3564 ret = regulator_bulk_enable(ARRAY_SIZE(hsotg->supplies),
3565 hsotg->supplies);
3566
3567 if (ret) {
3568 dev_err(hsotg->dev, "failed to enable supplies: %d\n", ret);
3569 goto err_supplies;
3570 }
3571
3572 /* usb phy enable */
3573 s3c_hsotg_phy_enable(hsotg);
3574
3575 s3c_hsotg_corereset(hsotg);
3576 s3c_hsotg_init(hsotg);
3577 s3c_hsotg_hw_cfg(hsotg);
3578
3579 /* hsotg->num_of_eps holds number of EPs other than ep0 */
3580
3581 if (hsotg->num_of_eps == 0) {
3582 dev_err(dev, "wrong number of EPs (zero)\n");
3583 goto err_supplies;
3584 }
3585
3586 eps = kcalloc(hsotg->num_of_eps + 1, sizeof(struct s3c_hsotg_ep),
3587 GFP_KERNEL);
3588 if (!eps) {
3589 dev_err(dev, "cannot get memory\n");
3590 goto err_supplies;
3591 }
3592
3593 hsotg->eps = eps;
3374 3594
3375 /* setup endpoint information */ 3595 /* setup endpoint information */
3376 3596
@@ -3383,39 +3603,47 @@ static int __devinit s3c_hsotg_probe(struct platform_device *pdev)
3383 GFP_KERNEL); 3603 GFP_KERNEL);
3384 if (!hsotg->ctrl_req) { 3604 if (!hsotg->ctrl_req) {
3385 dev_err(dev, "failed to allocate ctrl req\n"); 3605 dev_err(dev, "failed to allocate ctrl req\n");
3386 goto err_regs; 3606 goto err_ep_mem;
3387 } 3607 }
3388 3608
3389 /* reset the system */ 3609 /* initialise the endpoints now the core has been initialised */
3610 for (epnum = 0; epnum < hsotg->num_of_eps; epnum++)
3611 s3c_hsotg_initep(hsotg, &hsotg->eps[epnum], epnum);
3390 3612
3391 clk_enable(hsotg->clk); 3613 /* disable power and clock */
3392 3614
3393 s3c_hsotg_gate(pdev, true); 3615 ret = regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies),
3616 hsotg->supplies);
3617 if (ret) {
3618 dev_err(hsotg->dev, "failed to disable supplies: %d\n", ret);
3619 goto err_ep_mem;
3620 }
3394 3621
3395 s3c_hsotg_otgreset(hsotg); 3622 s3c_hsotg_phy_disable(hsotg);
3396 s3c_hsotg_corereset(hsotg);
3397 s3c_hsotg_init(hsotg);
3398 3623
3399 /* initialise the endpoints now the core has been initialised */ 3624 ret = device_add(&hsotg->gadget.dev);
3400 for (epnum = 0; epnum < S3C_HSOTG_EPS; epnum++) 3625 if (ret) {
3401 s3c_hsotg_initep(hsotg, &hsotg->eps[epnum], epnum); 3626 put_device(&hsotg->gadget.dev);
3627 goto err_ep_mem;
3628 }
3402 3629
3403 ret = usb_add_gadget_udc(&pdev->dev, &hsotg->gadget); 3630 ret = usb_add_gadget_udc(&pdev->dev, &hsotg->gadget);
3404 if (ret) 3631 if (ret)
3405 goto err_add_udc; 3632 goto err_ep_mem;
3406 3633
3407 s3c_hsotg_create_debug(hsotg); 3634 s3c_hsotg_create_debug(hsotg);
3408 3635
3409 s3c_hsotg_dump(hsotg); 3636 s3c_hsotg_dump(hsotg);
3410 3637
3411 our_hsotg = hsotg;
3412 return 0; 3638 return 0;
3413 3639
3414err_add_udc: 3640err_ep_mem:
3415 s3c_hsotg_gate(pdev, false); 3641 kfree(eps);
3416 clk_disable(hsotg->clk); 3642err_supplies:
3417 clk_put(hsotg->clk); 3643 s3c_hsotg_phy_disable(hsotg);
3418 3644 regulator_bulk_free(ARRAY_SIZE(hsotg->supplies), hsotg->supplies);
3645err_irq:
3646 free_irq(hsotg->irq, hsotg);
3419err_regs: 3647err_regs:
3420 iounmap(hsotg->regs); 3648 iounmap(hsotg->regs);
3421 3649
@@ -3423,12 +3651,17 @@ err_regs_res:
3423 release_resource(hsotg->regs_res); 3651 release_resource(hsotg->regs_res);
3424 kfree(hsotg->regs_res); 3652 kfree(hsotg->regs_res);
3425err_clk: 3653err_clk:
3654 clk_disable_unprepare(hsotg->clk);
3426 clk_put(hsotg->clk); 3655 clk_put(hsotg->clk);
3427err_mem: 3656err_mem:
3428 kfree(hsotg); 3657 kfree(hsotg);
3429 return ret; 3658 return ret;
3430} 3659}
3431 3660
3661/**
3662 * s3c_hsotg_remove - remove function for hsotg driver
3663 * @pdev: The platform information for the driver
3664 */
3432static int __devexit s3c_hsotg_remove(struct platform_device *pdev) 3665static int __devexit s3c_hsotg_remove(struct platform_device *pdev)
3433{ 3666{
3434 struct s3c_hsotg *hsotg = platform_get_drvdata(pdev); 3667 struct s3c_hsotg *hsotg = platform_get_drvdata(pdev);
@@ -3437,7 +3670,10 @@ static int __devexit s3c_hsotg_remove(struct platform_device *pdev)
3437 3670
3438 s3c_hsotg_delete_debug(hsotg); 3671 s3c_hsotg_delete_debug(hsotg);
3439 3672
3440 usb_gadget_unregister_driver(hsotg->driver); 3673 if (hsotg->driver) {
3674 /* should have been done already by driver model core */
3675 usb_gadget_unregister_driver(hsotg->driver);
3676 }
3441 3677
3442 free_irq(hsotg->irq, hsotg); 3678 free_irq(hsotg->irq, hsotg);
3443 iounmap(hsotg->regs); 3679 iounmap(hsotg->regs);
@@ -3445,12 +3681,13 @@ static int __devexit s3c_hsotg_remove(struct platform_device *pdev)
3445 release_resource(hsotg->regs_res); 3681 release_resource(hsotg->regs_res);
3446 kfree(hsotg->regs_res); 3682 kfree(hsotg->regs_res);
3447 3683
3448 s3c_hsotg_gate(pdev, false); 3684 s3c_hsotg_phy_disable(hsotg);
3685 regulator_bulk_free(ARRAY_SIZE(hsotg->supplies), hsotg->supplies);
3449 3686
3450 clk_disable(hsotg->clk); 3687 clk_disable_unprepare(hsotg->clk);
3451 clk_put(hsotg->clk); 3688 clk_put(hsotg->clk);
3452 3689
3453 kfree(hsotg); 3690 device_unregister(&hsotg->gadget.dev);
3454 return 0; 3691 return 0;
3455} 3692}
3456 3693
diff --git a/drivers/usb/gadget/s3c-hsotg.h b/drivers/usb/gadget/s3c-hsotg.h
new file mode 100644
index 000000000000..d650b1295831
--- /dev/null
+++ b/drivers/usb/gadget/s3c-hsotg.h
@@ -0,0 +1,377 @@
1/* drivers/usb/gadget/s3c-hsotg.h
2 *
3 * Copyright 2008 Openmoko, Inc.
4 * Copyright 2008 Simtec Electronics
5 * http://armlinux.simtec.co.uk/
6 * Ben Dooks <ben@simtec.co.uk>
7 *
8 * USB2.0 Highspeed/OtG Synopsis DWC2 device block registers
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13*/
14
15#ifndef __REGS_USB_HSOTG_H
16#define __REGS_USB_HSOTG_H __FILE__
17
18#define HSOTG_REG(x) (x)
19
20#define GOTGCTL HSOTG_REG(0x000)
21#define GOTGCTL_BSESVLD (1 << 19)
22#define GOTGCTL_ASESVLD (1 << 18)
23#define GOTGCTL_DBNC_SHORT (1 << 17)
24#define GOTGCTL_CONID_B (1 << 16)
25#define GOTGCTL_DEVHNPEN (1 << 11)
26#define GOTGCTL_HSSETHNPEN (1 << 10)
27#define GOTGCTL_HNPREQ (1 << 9)
28#define GOTGCTL_HSTNEGSCS (1 << 8)
29#define GOTGCTL_SESREQ (1 << 1)
30#define GOTGCTL_SESREQSCS (1 << 0)
31
32#define GOTGINT HSOTG_REG(0x004)
33#define GOTGINT_DbnceDone (1 << 19)
34#define GOTGINT_ADevTOUTChg (1 << 18)
35#define GOTGINT_HstNegDet (1 << 17)
36#define GOTGINT_HstnegSucStsChng (1 << 9)
37#define GOTGINT_SesReqSucStsChng (1 << 8)
38#define GOTGINT_SesEndDet (1 << 2)
39
40#define GAHBCFG HSOTG_REG(0x008)
41#define GAHBCFG_PTxFEmpLvl (1 << 8)
42#define GAHBCFG_NPTxFEmpLvl (1 << 7)
43#define GAHBCFG_DMAEn (1 << 5)
44#define GAHBCFG_HBstLen_MASK (0xf << 1)
45#define GAHBCFG_HBstLen_SHIFT (1)
46#define GAHBCFG_HBstLen_Single (0x0 << 1)
47#define GAHBCFG_HBstLen_Incr (0x1 << 1)
48#define GAHBCFG_HBstLen_Incr4 (0x3 << 1)
49#define GAHBCFG_HBstLen_Incr8 (0x5 << 1)
50#define GAHBCFG_HBstLen_Incr16 (0x7 << 1)
51#define GAHBCFG_GlblIntrEn (1 << 0)
52
53#define GUSBCFG HSOTG_REG(0x00C)
54#define GUSBCFG_PHYLPClkSel (1 << 15)
55#define GUSBCFG_HNPCap (1 << 9)
56#define GUSBCFG_SRPCap (1 << 8)
57#define GUSBCFG_PHYIf16 (1 << 3)
58#define GUSBCFG_TOutCal_MASK (0x7 << 0)
59#define GUSBCFG_TOutCal_SHIFT (0)
60#define GUSBCFG_TOutCal_LIMIT (0x7)
61#define GUSBCFG_TOutCal(_x) ((_x) << 0)
62
63#define GRSTCTL HSOTG_REG(0x010)
64
65#define GRSTCTL_AHBIdle (1 << 31)
66#define GRSTCTL_DMAReq (1 << 30)
67#define GRSTCTL_TxFNum_MASK (0x1f << 6)
68#define GRSTCTL_TxFNum_SHIFT (6)
69#define GRSTCTL_TxFNum_LIMIT (0x1f)
70#define GRSTCTL_TxFNum(_x) ((_x) << 6)
71#define GRSTCTL_TxFFlsh (1 << 5)
72#define GRSTCTL_RxFFlsh (1 << 4)
73#define GRSTCTL_INTknQFlsh (1 << 3)
74#define GRSTCTL_FrmCntrRst (1 << 2)
75#define GRSTCTL_HSftRst (1 << 1)
76#define GRSTCTL_CSftRst (1 << 0)
77
78#define GINTSTS HSOTG_REG(0x014)
79#define GINTMSK HSOTG_REG(0x018)
80
81#define GINTSTS_WkUpInt (1 << 31)
82#define GINTSTS_SessReqInt (1 << 30)
83#define GINTSTS_DisconnInt (1 << 29)
84#define GINTSTS_ConIDStsChng (1 << 28)
85#define GINTSTS_PTxFEmp (1 << 26)
86#define GINTSTS_HChInt (1 << 25)
87#define GINTSTS_PrtInt (1 << 24)
88#define GINTSTS_FetSusp (1 << 22)
89#define GINTSTS_incompIP (1 << 21)
90#define GINTSTS_IncomplSOIN (1 << 20)
91#define GINTSTS_OEPInt (1 << 19)
92#define GINTSTS_IEPInt (1 << 18)
93#define GINTSTS_EPMis (1 << 17)
94#define GINTSTS_EOPF (1 << 15)
95#define GINTSTS_ISOutDrop (1 << 14)
96#define GINTSTS_EnumDone (1 << 13)
97#define GINTSTS_USBRst (1 << 12)
98#define GINTSTS_USBSusp (1 << 11)
99#define GINTSTS_ErlySusp (1 << 10)
100#define GINTSTS_GOUTNakEff (1 << 7)
101#define GINTSTS_GINNakEff (1 << 6)
102#define GINTSTS_NPTxFEmp (1 << 5)
103#define GINTSTS_RxFLvl (1 << 4)
104#define GINTSTS_SOF (1 << 3)
105#define GINTSTS_OTGInt (1 << 2)
106#define GINTSTS_ModeMis (1 << 1)
107#define GINTSTS_CurMod_Host (1 << 0)
108
109#define GRXSTSR HSOTG_REG(0x01C)
110#define GRXSTSP HSOTG_REG(0x020)
111
112#define GRXSTS_FN_MASK (0x7f << 25)
113#define GRXSTS_FN_SHIFT (25)
114
115#define GRXSTS_PktSts_MASK (0xf << 17)
116#define GRXSTS_PktSts_SHIFT (17)
117#define GRXSTS_PktSts_GlobalOutNAK (0x1 << 17)
118#define GRXSTS_PktSts_OutRX (0x2 << 17)
119#define GRXSTS_PktSts_OutDone (0x3 << 17)
120#define GRXSTS_PktSts_SetupDone (0x4 << 17)
121#define GRXSTS_PktSts_SetupRX (0x6 << 17)
122
123#define GRXSTS_DPID_MASK (0x3 << 15)
124#define GRXSTS_DPID_SHIFT (15)
125#define GRXSTS_ByteCnt_MASK (0x7ff << 4)
126#define GRXSTS_ByteCnt_SHIFT (4)
127#define GRXSTS_EPNum_MASK (0xf << 0)
128#define GRXSTS_EPNum_SHIFT (0)
129
130#define GRXFSIZ HSOTG_REG(0x024)
131
132#define GNPTXFSIZ HSOTG_REG(0x028)
133
134#define GNPTXFSIZ_NPTxFDep_MASK (0xffff << 16)
135#define GNPTXFSIZ_NPTxFDep_SHIFT (16)
136#define GNPTXFSIZ_NPTxFDep_LIMIT (0xffff)
137#define GNPTXFSIZ_NPTxFDep(_x) ((_x) << 16)
138#define GNPTXFSIZ_NPTxFStAddr_MASK (0xffff << 0)
139#define GNPTXFSIZ_NPTxFStAddr_SHIFT (0)
140#define GNPTXFSIZ_NPTxFStAddr_LIMIT (0xffff)
141#define GNPTXFSIZ_NPTxFStAddr(_x) ((_x) << 0)
142
143#define GNPTXSTS HSOTG_REG(0x02C)
144
145#define GNPTXSTS_NPtxQTop_MASK (0x7f << 24)
146#define GNPTXSTS_NPtxQTop_SHIFT (24)
147
148#define GNPTXSTS_NPTxQSpcAvail_MASK (0xff << 16)
149#define GNPTXSTS_NPTxQSpcAvail_SHIFT (16)
150#define GNPTXSTS_NPTxQSpcAvail_GET(_v) (((_v) >> 16) & 0xff)
151
152#define GNPTXSTS_NPTxFSpcAvail_MASK (0xffff << 0)
153#define GNPTXSTS_NPTxFSpcAvail_SHIFT (0)
154#define GNPTXSTS_NPTxFSpcAvail_GET(_v) (((_v) >> 0) & 0xffff)
155
156
157#define HPTXFSIZ HSOTG_REG(0x100)
158
159#define DPTXFSIZn(_a) HSOTG_REG(0x104 + (((_a) - 1) * 4))
160
161#define DPTXFSIZn_DPTxFSize_MASK (0xffff << 16)
162#define DPTXFSIZn_DPTxFSize_SHIFT (16)
163#define DPTXFSIZn_DPTxFSize_GET(_v) (((_v) >> 16) & 0xffff)
164#define DPTXFSIZn_DPTxFSize_LIMIT (0xffff)
165#define DPTXFSIZn_DPTxFSize(_x) ((_x) << 16)
166
167#define DPTXFSIZn_DPTxFStAddr_MASK (0xffff << 0)
168#define DPTXFSIZn_DPTxFStAddr_SHIFT (0)
169
170/* Device mode registers */
171#define DCFG HSOTG_REG(0x800)
172
173#define DCFG_EPMisCnt_MASK (0x1f << 18)
174#define DCFG_EPMisCnt_SHIFT (18)
175#define DCFG_EPMisCnt_LIMIT (0x1f)
176#define DCFG_EPMisCnt(_x) ((_x) << 18)
177
178#define DCFG_PerFrInt_MASK (0x3 << 11)
179#define DCFG_PerFrInt_SHIFT (11)
180#define DCFG_PerFrInt_LIMIT (0x3)
181#define DCFG_PerFrInt(_x) ((_x) << 11)
182
183#define DCFG_DevAddr_MASK (0x7f << 4)
184#define DCFG_DevAddr_SHIFT (4)
185#define DCFG_DevAddr_LIMIT (0x7f)
186#define DCFG_DevAddr(_x) ((_x) << 4)
187
188#define DCFG_NZStsOUTHShk (1 << 2)
189
190#define DCFG_DevSpd_MASK (0x3 << 0)
191#define DCFG_DevSpd_SHIFT (0)
192#define DCFG_DevSpd_HS (0x0 << 0)
193#define DCFG_DevSpd_FS (0x1 << 0)
194#define DCFG_DevSpd_LS (0x2 << 0)
195#define DCFG_DevSpd_FS48 (0x3 << 0)
196
197#define DCTL HSOTG_REG(0x804)
198
199#define DCTL_PWROnPrgDone (1 << 11)
200#define DCTL_CGOUTNak (1 << 10)
201#define DCTL_SGOUTNak (1 << 9)
202#define DCTL_CGNPInNAK (1 << 8)
203#define DCTL_SGNPInNAK (1 << 7)
204#define DCTL_TstCtl_MASK (0x7 << 4)
205#define DCTL_TstCtl_SHIFT (4)
206#define DCTL_GOUTNakSts (1 << 3)
207#define DCTL_GNPINNakSts (1 << 2)
208#define DCTL_SftDiscon (1 << 1)
209#define DCTL_RmtWkUpSig (1 << 0)
210
211#define DSTS HSOTG_REG(0x808)
212
213#define DSTS_SOFFN_MASK (0x3fff << 8)
214#define DSTS_SOFFN_SHIFT (8)
215#define DSTS_SOFFN_LIMIT (0x3fff)
216#define DSTS_SOFFN(_x) ((_x) << 8)
217#define DSTS_ErraticErr (1 << 3)
218#define DSTS_EnumSpd_MASK (0x3 << 1)
219#define DSTS_EnumSpd_SHIFT (1)
220#define DSTS_EnumSpd_HS (0x0 << 1)
221#define DSTS_EnumSpd_FS (0x1 << 1)
222#define DSTS_EnumSpd_LS (0x2 << 1)
223#define DSTS_EnumSpd_FS48 (0x3 << 1)
224
225#define DSTS_SuspSts (1 << 0)
226
227#define DIEPMSK HSOTG_REG(0x810)
228
229#define DIEPMSK_TxFIFOEmpty (1 << 7)
230#define DIEPMSK_INEPNakEffMsk (1 << 6)
231#define DIEPMSK_INTknEPMisMsk (1 << 5)
232#define DIEPMSK_INTknTXFEmpMsk (1 << 4)
233#define DIEPMSK_TimeOUTMsk (1 << 3)
234#define DIEPMSK_AHBErrMsk (1 << 2)
235#define DIEPMSK_EPDisbldMsk (1 << 1)
236#define DIEPMSK_XferComplMsk (1 << 0)
237
238#define DOEPMSK HSOTG_REG(0x814)
239
240#define DOEPMSK_Back2BackSetup (1 << 6)
241#define DOEPMSK_OUTTknEPdisMsk (1 << 4)
242#define DOEPMSK_SetupMsk (1 << 3)
243#define DOEPMSK_AHBErrMsk (1 << 2)
244#define DOEPMSK_EPDisbldMsk (1 << 1)
245#define DOEPMSK_XferComplMsk (1 << 0)
246
247#define DAINT HSOTG_REG(0x818)
248#define DAINTMSK HSOTG_REG(0x81C)
249
250#define DAINT_OutEP_SHIFT (16)
251#define DAINT_OutEP(x) (1 << ((x) + 16))
252#define DAINT_InEP(x) (1 << (x))
253
254#define DTKNQR1 HSOTG_REG(0x820)
255#define DTKNQR2 HSOTG_REG(0x824)
256#define DTKNQR3 HSOTG_REG(0x830)
257#define DTKNQR4 HSOTG_REG(0x834)
258
259#define DVBUSDIS HSOTG_REG(0x828)
260#define DVBUSPULSE HSOTG_REG(0x82C)
261
262#define DIEPCTL0 HSOTG_REG(0x900)
263#define DOEPCTL0 HSOTG_REG(0xB00)
264#define DIEPCTL(_a) HSOTG_REG(0x900 + ((_a) * 0x20))
265#define DOEPCTL(_a) HSOTG_REG(0xB00 + ((_a) * 0x20))
266
267/* EP0 specialness:
268 * bits[29..28] - reserved (no SetD0PID, SetD1PID)
269 * bits[25..22] - should always be zero, this isn't a periodic endpoint
270 * bits[10..0] - MPS setting differenct for EP0
271 */
272#define D0EPCTL_MPS_MASK (0x3 << 0)
273#define D0EPCTL_MPS_SHIFT (0)
274#define D0EPCTL_MPS_64 (0x0 << 0)
275#define D0EPCTL_MPS_32 (0x1 << 0)
276#define D0EPCTL_MPS_16 (0x2 << 0)
277#define D0EPCTL_MPS_8 (0x3 << 0)
278
279#define DxEPCTL_EPEna (1 << 31)
280#define DxEPCTL_EPDis (1 << 30)
281#define DxEPCTL_SetD1PID (1 << 29)
282#define DxEPCTL_SetOddFr (1 << 29)
283#define DxEPCTL_SetD0PID (1 << 28)
284#define DxEPCTL_SetEvenFr (1 << 28)
285#define DxEPCTL_SNAK (1 << 27)
286#define DxEPCTL_CNAK (1 << 26)
287#define DxEPCTL_TxFNum_MASK (0xf << 22)
288#define DxEPCTL_TxFNum_SHIFT (22)
289#define DxEPCTL_TxFNum_LIMIT (0xf)
290#define DxEPCTL_TxFNum(_x) ((_x) << 22)
291
292#define DxEPCTL_Stall (1 << 21)
293#define DxEPCTL_Snp (1 << 20)
294#define DxEPCTL_EPType_MASK (0x3 << 18)
295#define DxEPCTL_EPType_SHIFT (18)
296#define DxEPCTL_EPType_Control (0x0 << 18)
297#define DxEPCTL_EPType_Iso (0x1 << 18)
298#define DxEPCTL_EPType_Bulk (0x2 << 18)
299#define DxEPCTL_EPType_Intterupt (0x3 << 18)
300
301#define DxEPCTL_NAKsts (1 << 17)
302#define DxEPCTL_DPID (1 << 16)
303#define DxEPCTL_EOFrNum (1 << 16)
304#define DxEPCTL_USBActEp (1 << 15)
305#define DxEPCTL_NextEp_MASK (0xf << 11)
306#define DxEPCTL_NextEp_SHIFT (11)
307#define DxEPCTL_NextEp_LIMIT (0xf)
308#define DxEPCTL_NextEp(_x) ((_x) << 11)
309
310#define DxEPCTL_MPS_MASK (0x7ff << 0)
311#define DxEPCTL_MPS_SHIFT (0)
312#define DxEPCTL_MPS_LIMIT (0x7ff)
313#define DxEPCTL_MPS(_x) ((_x) << 0)
314
315#define DIEPINT(_a) HSOTG_REG(0x908 + ((_a) * 0x20))
316#define DOEPINT(_a) HSOTG_REG(0xB08 + ((_a) * 0x20))
317
318#define DxEPINT_INEPNakEff (1 << 6)
319#define DxEPINT_Back2BackSetup (1 << 6)
320#define DxEPINT_INTknEPMis (1 << 5)
321#define DxEPINT_INTknTXFEmp (1 << 4)
322#define DxEPINT_OUTTknEPdis (1 << 4)
323#define DxEPINT_Timeout (1 << 3)
324#define DxEPINT_Setup (1 << 3)
325#define DxEPINT_AHBErr (1 << 2)
326#define DxEPINT_EPDisbld (1 << 1)
327#define DxEPINT_XferCompl (1 << 0)
328
329#define DIEPTSIZ0 HSOTG_REG(0x910)
330
331#define DIEPTSIZ0_PktCnt_MASK (0x3 << 19)
332#define DIEPTSIZ0_PktCnt_SHIFT (19)
333#define DIEPTSIZ0_PktCnt_LIMIT (0x3)
334#define DIEPTSIZ0_PktCnt(_x) ((_x) << 19)
335
336#define DIEPTSIZ0_XferSize_MASK (0x7f << 0)
337#define DIEPTSIZ0_XferSize_SHIFT (0)
338#define DIEPTSIZ0_XferSize_LIMIT (0x7f)
339#define DIEPTSIZ0_XferSize(_x) ((_x) << 0)
340
341#define DOEPTSIZ0 HSOTG_REG(0xB10)
342#define DOEPTSIZ0_SUPCnt_MASK (0x3 << 29)
343#define DOEPTSIZ0_SUPCnt_SHIFT (29)
344#define DOEPTSIZ0_SUPCnt_LIMIT (0x3)
345#define DOEPTSIZ0_SUPCnt(_x) ((_x) << 29)
346
347#define DOEPTSIZ0_PktCnt (1 << 19)
348#define DOEPTSIZ0_XferSize_MASK (0x7f << 0)
349#define DOEPTSIZ0_XferSize_SHIFT (0)
350
351#define DIEPTSIZ(_a) HSOTG_REG(0x910 + ((_a) * 0x20))
352#define DOEPTSIZ(_a) HSOTG_REG(0xB10 + ((_a) * 0x20))
353
354#define DxEPTSIZ_MC_MASK (0x3 << 29)
355#define DxEPTSIZ_MC_SHIFT (29)
356#define DxEPTSIZ_MC_LIMIT (0x3)
357#define DxEPTSIZ_MC(_x) ((_x) << 29)
358
359#define DxEPTSIZ_PktCnt_MASK (0x3ff << 19)
360#define DxEPTSIZ_PktCnt_SHIFT (19)
361#define DxEPTSIZ_PktCnt_GET(_v) (((_v) >> 19) & 0x3ff)
362#define DxEPTSIZ_PktCnt_LIMIT (0x3ff)
363#define DxEPTSIZ_PktCnt(_x) ((_x) << 19)
364
365#define DxEPTSIZ_XferSize_MASK (0x7ffff << 0)
366#define DxEPTSIZ_XferSize_SHIFT (0)
367#define DxEPTSIZ_XferSize_GET(_v) (((_v) >> 0) & 0x7ffff)
368#define DxEPTSIZ_XferSize_LIMIT (0x7ffff)
369#define DxEPTSIZ_XferSize(_x) ((_x) << 0)
370
371#define DIEPDMA(_a) HSOTG_REG(0x914 + ((_a) * 0x20))
372#define DOEPDMA(_a) HSOTG_REG(0xB14 + ((_a) * 0x20))
373#define DTXFSTS(_a) HSOTG_REG(0x918 + ((_a) * 0x20))
374
375#define EPFIFO(_a) HSOTG_REG(0x1000 + ((_a) * 0x1000))
376
377#endif /* __REGS_USB_HSOTG_H */
diff --git a/drivers/usb/gadget/s3c-hsudc.c b/drivers/usb/gadget/s3c-hsudc.c
index cef9b82ff911..36c6836eeb0f 100644
--- a/drivers/usb/gadget/s3c-hsudc.c
+++ b/drivers/usb/gadget/s3c-hsudc.c
@@ -110,7 +110,6 @@ struct s3c_hsudc_ep {
110 struct usb_ep ep; 110 struct usb_ep ep;
111 char name[20]; 111 char name[20];
112 struct s3c_hsudc *dev; 112 struct s3c_hsudc *dev;
113 const struct usb_endpoint_descriptor *desc;
114 struct list_head queue; 113 struct list_head queue;
115 u8 stopped; 114 u8 stopped;
116 u8 wedge; 115 u8 wedge;
@@ -761,7 +760,7 @@ static int s3c_hsudc_ep_enable(struct usb_ep *_ep,
761 u32 ecr = 0; 760 u32 ecr = 0;
762 761
763 hsep = our_ep(_ep); 762 hsep = our_ep(_ep);
764 if (!_ep || !desc || hsep->desc || _ep->name == ep0name 763 if (!_ep || !desc || hsep->ep.desc || _ep->name == ep0name
765 || desc->bDescriptorType != USB_DT_ENDPOINT 764 || desc->bDescriptorType != USB_DT_ENDPOINT
766 || hsep->bEndpointAddress != desc->bEndpointAddress 765 || hsep->bEndpointAddress != desc->bEndpointAddress
767 || ep_maxpacket(hsep) < usb_endpoint_maxp(desc)) 766 || ep_maxpacket(hsep) < usb_endpoint_maxp(desc))
@@ -783,7 +782,7 @@ static int s3c_hsudc_ep_enable(struct usb_ep *_ep,
783 writel(ecr, hsudc->regs + S3C_ECR); 782 writel(ecr, hsudc->regs + S3C_ECR);
784 783
785 hsep->stopped = hsep->wedge = 0; 784 hsep->stopped = hsep->wedge = 0;
786 hsep->desc = desc; 785 hsep->ep.desc = desc;
787 hsep->ep.maxpacket = usb_endpoint_maxp(desc); 786 hsep->ep.maxpacket = usb_endpoint_maxp(desc);
788 787
789 s3c_hsudc_set_halt(_ep, 0); 788 s3c_hsudc_set_halt(_ep, 0);
@@ -806,7 +805,7 @@ static int s3c_hsudc_ep_disable(struct usb_ep *_ep)
806 struct s3c_hsudc *hsudc = hsep->dev; 805 struct s3c_hsudc *hsudc = hsep->dev;
807 unsigned long flags; 806 unsigned long flags;
808 807
809 if (!_ep || !hsep->desc) 808 if (!_ep || !hsep->ep.desc)
810 return -EINVAL; 809 return -EINVAL;
811 810
812 spin_lock_irqsave(&hsudc->lock, flags); 811 spin_lock_irqsave(&hsudc->lock, flags);
@@ -816,7 +815,6 @@ static int s3c_hsudc_ep_disable(struct usb_ep *_ep)
816 815
817 s3c_hsudc_nuke_ep(hsep, -ESHUTDOWN); 816 s3c_hsudc_nuke_ep(hsep, -ESHUTDOWN);
818 817
819 hsep->desc = 0;
820 hsep->ep.desc = NULL; 818 hsep->ep.desc = NULL;
821 hsep->stopped = 1; 819 hsep->stopped = 1;
822 820
@@ -1006,7 +1004,6 @@ static void s3c_hsudc_initep(struct s3c_hsudc *hsudc,
1006 hsep->ep.maxpacket = epnum ? 512 : 64; 1004 hsep->ep.maxpacket = epnum ? 512 : 64;
1007 hsep->ep.ops = &s3c_hsudc_ep_ops; 1005 hsep->ep.ops = &s3c_hsudc_ep_ops;
1008 hsep->fifo = hsudc->regs + S3C_BR(epnum); 1006 hsep->fifo = hsudc->regs + S3C_BR(epnum);
1009 hsep->desc = 0;
1010 hsep->ep.desc = NULL; 1007 hsep->ep.desc = NULL;
1011 hsep->stopped = 0; 1008 hsep->stopped = 0;
1012 hsep->wedge = 0; 1009 hsep->wedge = 0;
diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
index 195524cde6c3..3de71d37d75e 100644
--- a/drivers/usb/gadget/s3c2410_udc.c
+++ b/drivers/usb/gadget/s3c2410_udc.c
@@ -1062,7 +1062,7 @@ static int s3c2410_udc_ep_enable(struct usb_ep *_ep,
1062 1062
1063 ep = to_s3c2410_ep(_ep); 1063 ep = to_s3c2410_ep(_ep);
1064 1064
1065 if (!_ep || !desc || ep->desc 1065 if (!_ep || !desc || ep->ep.desc
1066 || _ep->name == ep0name 1066 || _ep->name == ep0name
1067 || desc->bDescriptorType != USB_DT_ENDPOINT) 1067 || desc->bDescriptorType != USB_DT_ENDPOINT)
1068 return -EINVAL; 1068 return -EINVAL;
@@ -1075,7 +1075,7 @@ static int s3c2410_udc_ep_enable(struct usb_ep *_ep,
1075 1075
1076 local_irq_save (flags); 1076 local_irq_save (flags);
1077 _ep->maxpacket = max & 0x7ff; 1077 _ep->maxpacket = max & 0x7ff;
1078 ep->desc = desc; 1078 ep->ep.desc = desc;
1079 ep->halted = 0; 1079 ep->halted = 0;
1080 ep->bEndpointAddress = desc->bEndpointAddress; 1080 ep->bEndpointAddress = desc->bEndpointAddress;
1081 1081
@@ -1136,7 +1136,7 @@ static int s3c2410_udc_ep_disable(struct usb_ep *_ep)
1136 unsigned long flags; 1136 unsigned long flags;
1137 u32 int_en_reg; 1137 u32 int_en_reg;
1138 1138
1139 if (!_ep || !ep->desc) { 1139 if (!_ep || !ep->ep.desc) {
1140 dprintk(DEBUG_NORMAL, "%s not enabled\n", 1140 dprintk(DEBUG_NORMAL, "%s not enabled\n",
1141 _ep ? ep->ep.name : NULL); 1141 _ep ? ep->ep.name : NULL);
1142 return -EINVAL; 1142 return -EINVAL;
@@ -1146,7 +1146,6 @@ static int s3c2410_udc_ep_disable(struct usb_ep *_ep)
1146 1146
1147 dprintk(DEBUG_NORMAL, "ep_disable: %s\n", _ep->name); 1147 dprintk(DEBUG_NORMAL, "ep_disable: %s\n", _ep->name);
1148 1148
1149 ep->desc = NULL;
1150 ep->ep.desc = NULL; 1149 ep->ep.desc = NULL;
1151 ep->halted = 1; 1150 ep->halted = 1;
1152 1151
@@ -1195,7 +1194,7 @@ s3c2410_udc_free_request(struct usb_ep *_ep, struct usb_request *_req)
1195 1194
1196 dprintk(DEBUG_VERBOSE, "%s(%p,%p)\n", __func__, _ep, _req); 1195 dprintk(DEBUG_VERBOSE, "%s(%p,%p)\n", __func__, _ep, _req);
1197 1196
1198 if (!ep || !_req || (!ep->desc && _ep->name != ep0name)) 1197 if (!ep || !_req || (!ep->ep.desc && _ep->name != ep0name))
1199 return; 1198 return;
1200 1199
1201 WARN_ON (!list_empty (&req->queue)); 1200 WARN_ON (!list_empty (&req->queue));
@@ -1215,7 +1214,7 @@ static int s3c2410_udc_queue(struct usb_ep *_ep, struct usb_request *_req,
1215 int fifo_count = 0; 1214 int fifo_count = 0;
1216 unsigned long flags; 1215 unsigned long flags;
1217 1216
1218 if (unlikely (!_ep || (!ep->desc && ep->ep.name != ep0name))) { 1217 if (unlikely(!_ep || (!ep->ep.desc && ep->ep.name != ep0name))) {
1219 dprintk(DEBUG_NORMAL, "%s: invalid args\n", __func__); 1218 dprintk(DEBUG_NORMAL, "%s: invalid args\n", __func__);
1220 return -EINVAL; 1219 return -EINVAL;
1221 } 1220 }
@@ -1363,7 +1362,7 @@ static int s3c2410_udc_set_halt(struct usb_ep *_ep, int value)
1363 unsigned long flags; 1362 unsigned long flags;
1364 u32 idx; 1363 u32 idx;
1365 1364
1366 if (unlikely (!_ep || (!ep->desc && ep->ep.name != ep0name))) { 1365 if (unlikely(!_ep || (!ep->ep.desc && ep->ep.name != ep0name))) {
1367 dprintk(DEBUG_NORMAL, "%s: inval 2\n", __func__); 1366 dprintk(DEBUG_NORMAL, "%s: inval 2\n", __func__);
1368 return -EINVAL; 1367 return -EINVAL;
1369 } 1368 }
@@ -1629,7 +1628,6 @@ static void s3c2410_udc_reinit(struct s3c2410_udc *dev)
1629 list_add_tail (&ep->ep.ep_list, &dev->gadget.ep_list); 1628 list_add_tail (&ep->ep.ep_list, &dev->gadget.ep_list);
1630 1629
1631 ep->dev = dev; 1630 ep->dev = dev;
1632 ep->desc = NULL;
1633 ep->ep.desc = NULL; 1631 ep->ep.desc = NULL;
1634 ep->halted = 0; 1632 ep->halted = 0;
1635 INIT_LIST_HEAD (&ep->queue); 1633 INIT_LIST_HEAD (&ep->queue);
diff --git a/drivers/usb/gadget/s3c2410_udc.h b/drivers/usb/gadget/s3c2410_udc.h
index 1653bae08b80..3e80fd5c820f 100644
--- a/drivers/usb/gadget/s3c2410_udc.h
+++ b/drivers/usb/gadget/s3c2410_udc.h
@@ -19,7 +19,6 @@ struct s3c2410_ep {
19 unsigned long last_io; /* jiffies timestamp */ 19 unsigned long last_io; /* jiffies timestamp */
20 struct usb_gadget *gadget; 20 struct usb_gadget *gadget;
21 struct s3c2410_udc *dev; 21 struct s3c2410_udc *dev;
22 const struct usb_endpoint_descriptor *desc;
23 struct usb_ep ep; 22 struct usb_ep ep;
24 u8 num; 23 u8 num;
25 24
diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c
index 29c854bbca44..47cf48b51c9d 100644
--- a/drivers/usb/gadget/u_ether.c
+++ b/drivers/usb/gadget/u_ether.c
@@ -744,10 +744,11 @@ static struct device_type gadget_type = {
744}; 744};
745 745
746/** 746/**
747 * gether_setup - initialize one ethernet-over-usb link 747 * gether_setup_name - initialize one ethernet-over-usb link
748 * @g: gadget to associated with these links 748 * @g: gadget to associated with these links
749 * @ethaddr: NULL, or a buffer in which the ethernet address of the 749 * @ethaddr: NULL, or a buffer in which the ethernet address of the
750 * host side of the link is recorded 750 * host side of the link is recorded
751 * @netname: name for network device (for example, "usb")
751 * Context: may sleep 752 * Context: may sleep
752 * 753 *
753 * This sets up the single network link that may be exported by a 754 * This sets up the single network link that may be exported by a
@@ -756,7 +757,8 @@ static struct device_type gadget_type = {
756 * 757 *
757 * Returns negative errno, or zero on success 758 * Returns negative errno, or zero on success
758 */ 759 */
759int gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN]) 760int gether_setup_name(struct usb_gadget *g, u8 ethaddr[ETH_ALEN],
761 const char *netname)
760{ 762{
761 struct eth_dev *dev; 763 struct eth_dev *dev;
762 struct net_device *net; 764 struct net_device *net;
@@ -780,7 +782,7 @@ int gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN])
780 782
781 /* network device setup */ 783 /* network device setup */
782 dev->net = net; 784 dev->net = net;
783 strcpy(net->name, "usb%d"); 785 snprintf(net->name, sizeof(net->name), "%s%%d", netname);
784 786
785 if (get_ether_addr(dev_addr, net->dev_addr)) 787 if (get_ether_addr(dev_addr, net->dev_addr))
786 dev_warn(&g->dev, 788 dev_warn(&g->dev,
diff --git a/drivers/usb/gadget/u_ether.h b/drivers/usb/gadget/u_ether.h
index 8012357e98aa..6f4a1623d854 100644
--- a/drivers/usb/gadget/u_ether.h
+++ b/drivers/usb/gadget/u_ether.h
@@ -69,9 +69,28 @@ struct gether {
69 |USB_CDC_PACKET_TYPE_PROMISCUOUS \ 69 |USB_CDC_PACKET_TYPE_PROMISCUOUS \
70 |USB_CDC_PACKET_TYPE_DIRECTED) 70 |USB_CDC_PACKET_TYPE_DIRECTED)
71 71
72/* variant of gether_setup that allows customizing network device name */
73int gether_setup_name(struct usb_gadget *g, u8 ethaddr[ETH_ALEN],
74 const char *netname);
72 75
73/* netdev setup/teardown as directed by the gadget driver */ 76/* netdev setup/teardown as directed by the gadget driver */
74int gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN]); 77/* gether_setup - initialize one ethernet-over-usb link
78 * @g: gadget to associated with these links
79 * @ethaddr: NULL, or a buffer in which the ethernet address of the
80 * host side of the link is recorded
81 * Context: may sleep
82 *
83 * This sets up the single network link that may be exported by a
84 * gadget driver using this framework. The link layer addresses are
85 * set up using module parameters.
86 *
87 * Returns negative errno, or zero on success
88 */
89static inline int gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN])
90{
91 return gether_setup_name(g, ethaddr, "usb");
92}
93
75void gether_cleanup(void); 94void gether_cleanup(void);
76 95
77/* connect/disconnect is handled by individual functions */ 96/* connect/disconnect is handled by individual functions */
@@ -99,16 +118,37 @@ int eem_bind_config(struct usb_configuration *c);
99 118
100#ifdef USB_ETH_RNDIS 119#ifdef USB_ETH_RNDIS
101 120
102int rndis_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]); 121int rndis_bind_config_vendor(struct usb_configuration *c, u8 ethaddr[ETH_ALEN],
122 u32 vendorID, const char *manufacturer);
103 123
104#else 124#else
105 125
106static inline int 126static inline int
107rndis_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]) 127rndis_bind_config_vendor(struct usb_configuration *c, u8 ethaddr[ETH_ALEN],
128 u32 vendorID, const char *manufacturer)
108{ 129{
109 return 0; 130 return 0;
110} 131}
111 132
112#endif 133#endif
113 134
135/**
136 * rndis_bind_config - add RNDIS network link to a configuration
137 * @c: the configuration to support the network link
138 * @ethaddr: a buffer in which the ethernet address of the host side
139 * side of the link was recorded
140 * Context: single threaded during gadget setup
141 *
142 * Returns zero on success, else negative errno.
143 *
144 * Caller must have called @gether_setup(). Caller is also responsible
145 * for calling @gether_cleanup() before module unload.
146 */
147static inline int rndis_bind_config(struct usb_configuration *c,
148 u8 ethaddr[ETH_ALEN])
149{
150 return rndis_bind_config_vendor(c, ethaddr, 0, NULL);
151}
152
153
114#endif /* __U_ETHER_H */ 154#endif /* __U_ETHER_H */
diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c
index 6c23938d2711..380a87f6e56c 100644
--- a/drivers/usb/gadget/u_serial.c
+++ b/drivers/usb/gadget/u_serial.c
@@ -1025,7 +1025,7 @@ static const struct tty_operations gs_tty_ops = {
1025 1025
1026static struct tty_driver *gs_tty_driver; 1026static struct tty_driver *gs_tty_driver;
1027 1027
1028static int __init 1028static int
1029gs_port_alloc(unsigned port_num, struct usb_cdc_line_coding *coding) 1029gs_port_alloc(unsigned port_num, struct usb_cdc_line_coding *coding)
1030{ 1030{
1031 struct gs_port *port; 1031 struct gs_port *port;
@@ -1071,7 +1071,7 @@ gs_port_alloc(unsigned port_num, struct usb_cdc_line_coding *coding)
1071 * 1071 *
1072 * Returns negative errno or zero. 1072 * Returns negative errno or zero.
1073 */ 1073 */
1074int __init gserial_setup(struct usb_gadget *g, unsigned count) 1074int gserial_setup(struct usb_gadget *g, unsigned count)
1075{ 1075{
1076 unsigned i; 1076 unsigned i;
1077 struct usb_cdc_line_coding coding; 1077 struct usb_cdc_line_coding coding;
diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c
index 31d34832907e..12ad516ada77 100644
--- a/drivers/usb/gadget/zero.c
+++ b/drivers/usb/gadget/zero.c
@@ -72,7 +72,7 @@
72 72
73static const char longname[] = "Gadget Zero"; 73static const char longname[] = "Gadget Zero";
74 74
75unsigned buflen = 4096; 75unsigned buflen = 4096; /* only used for bulk endpoints */
76module_param(buflen, uint, 0); 76module_param(buflen, uint, 0);
77 77
78/* 78/*
@@ -170,14 +170,17 @@ static struct usb_gadget_strings *dev_strings[] = {
170 170
171/*-------------------------------------------------------------------------*/ 171/*-------------------------------------------------------------------------*/
172 172
173struct usb_request *alloc_ep_req(struct usb_ep *ep) 173struct usb_request *alloc_ep_req(struct usb_ep *ep, int len)
174{ 174{
175 struct usb_request *req; 175 struct usb_request *req;
176 176
177 req = usb_ep_alloc_request(ep, GFP_ATOMIC); 177 req = usb_ep_alloc_request(ep, GFP_ATOMIC);
178 if (req) { 178 if (req) {
179 req->length = buflen; 179 if (len)
180 req->buf = kmalloc(buflen, GFP_ATOMIC); 180 req->length = len;
181 else
182 req->length = buflen;
183 req->buf = kmalloc(req->length, GFP_ATOMIC);
181 if (!req->buf) { 184 if (!req->buf) {
182 usb_ep_free_request(ep, req); 185 usb_ep_free_request(ep, req);
183 req = NULL; 186 req = NULL;
@@ -206,10 +209,15 @@ static void disable_ep(struct usb_composite_dev *cdev, struct usb_ep *ep)
206} 209}
207 210
208void disable_endpoints(struct usb_composite_dev *cdev, 211void disable_endpoints(struct usb_composite_dev *cdev,
209 struct usb_ep *in, struct usb_ep *out) 212 struct usb_ep *in, struct usb_ep *out,
213 struct usb_ep *iso_in, struct usb_ep *iso_out)
210{ 214{
211 disable_ep(cdev, in); 215 disable_ep(cdev, in);
212 disable_ep(cdev, out); 216 disable_ep(cdev, out);
217 if (iso_in)
218 disable_ep(cdev, iso_in);
219 if (iso_out)
220 disable_ep(cdev, iso_out);
213} 221}
214 222
215/*-------------------------------------------------------------------------*/ 223/*-------------------------------------------------------------------------*/
@@ -311,7 +319,6 @@ static int __init zero_bind(struct usb_composite_dev *cdev)
311 device_desc.bcdDevice = cpu_to_le16(0x9999); 319 device_desc.bcdDevice = cpu_to_le16(0x9999);
312 } 320 }
313 321
314
315 INFO(cdev, "%s, version: " DRIVER_VERSION "\n", longname); 322 INFO(cdev, "%s, version: " DRIVER_VERSION "\n", longname);
316 323
317 snprintf(manufacturer, sizeof manufacturer, "%s %s with %s", 324 snprintf(manufacturer, sizeof manufacturer, "%s %s with %s",
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index f788eb86707c..74a14f6ed34c 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -65,7 +65,7 @@ config USB_EHCI_HCD
65 65
66config USB_EHCI_ROOT_HUB_TT 66config USB_EHCI_ROOT_HUB_TT
67 bool "Root Hub Transaction Translators" 67 bool "Root Hub Transaction Translators"
68 depends on USB_EHCI_HCD 68 depends on USB_EHCI_HCD || USB_CHIPIDEA_HOST
69 ---help--- 69 ---help---
70 Some EHCI chips have vendor-specific extensions to integrate 70 Some EHCI chips have vendor-specific extensions to integrate
71 transaction translators, so that no OHCI or UHCI companion 71 transaction translators, so that no OHCI or UHCI companion
@@ -77,7 +77,7 @@ config USB_EHCI_ROOT_HUB_TT
77 77
78config USB_EHCI_TT_NEWSCHED 78config USB_EHCI_TT_NEWSCHED
79 bool "Improved Transaction Translator scheduling" 79 bool "Improved Transaction Translator scheduling"
80 depends on USB_EHCI_HCD 80 depends on USB_EHCI_HCD || USB_CHIPIDEA_HOST
81 default y 81 default y
82 ---help--- 82 ---help---
83 This changes the periodic scheduling code to fill more of the low 83 This changes the periodic scheduling code to fill more of the low
@@ -110,13 +110,14 @@ config USB_EHCI_BIG_ENDIAN_MMIO
110 depends on USB_EHCI_HCD && (PPC_CELLEB || PPC_PS3 || 440EPX || \ 110 depends on USB_EHCI_HCD && (PPC_CELLEB || PPC_PS3 || 440EPX || \
111 ARCH_IXP4XX || XPS_USB_HCD_XILINX || \ 111 ARCH_IXP4XX || XPS_USB_HCD_XILINX || \
112 PPC_MPC512x || CPU_CAVIUM_OCTEON || \ 112 PPC_MPC512x || CPU_CAVIUM_OCTEON || \
113 PMC_MSP || SPARC_LEON) 113 PMC_MSP || SPARC_LEON || MIPS_SEAD3)
114 default y 114 default y
115 115
116config USB_EHCI_BIG_ENDIAN_DESC 116config USB_EHCI_BIG_ENDIAN_DESC
117 bool 117 bool
118 depends on USB_EHCI_HCD && (440EPX || ARCH_IXP4XX || XPS_USB_HCD_XILINX || \ 118 depends on USB_EHCI_HCD && (440EPX || ARCH_IXP4XX || XPS_USB_HCD_XILINX || \
119 PPC_MPC512x || PMC_MSP || SPARC_LEON) 119 PPC_MPC512x || PMC_MSP || SPARC_LEON || \
120 MIPS_SEAD3)
120 default y 121 default y
121 122
122config XPS_USB_HCD_XILINX 123config XPS_USB_HCD_XILINX
@@ -291,6 +292,7 @@ config USB_OHCI_HCD
291 depends on USB && USB_ARCH_HAS_OHCI 292 depends on USB && USB_ARCH_HAS_OHCI
292 select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 293 select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
293 select USB_OTG_UTILS if ARCH_OMAP 294 select USB_OTG_UTILS if ARCH_OMAP
295 select USB_ISP1301 if ARCH_LPC32XX || ARCH_PNX4008
294 ---help--- 296 ---help---
295 The Open Host Controller Interface (OHCI) is a standard for accessing 297 The Open Host Controller Interface (OHCI) is a standard for accessing
296 USB 1.1 host controller hardware. It does more in hardware than Intel's 298 USB 1.1 host controller hardware. It does more in hardware than Intel's
@@ -373,10 +375,15 @@ config USB_OHCI_HCD_PCI
373 If unsure, say Y. 375 If unsure, say Y.
374 376
375config USB_OHCI_HCD_SSB 377config USB_OHCI_HCD_SSB
376 bool "OHCI support for Broadcom SSB OHCI core" 378 bool "OHCI support for Broadcom SSB OHCI core (DEPRECATED)"
377 depends on USB_OHCI_HCD && (SSB = y || SSB = USB_OHCI_HCD) && EXPERIMENTAL 379 depends on USB_OHCI_HCD && (SSB = y || SSB = USB_OHCI_HCD) && EXPERIMENTAL
380 select USB_HCD_SSB
381 select USB_OHCI_HCD_PLATFORM
378 default n 382 default n
379 ---help--- 383 ---help---
384 This option is deprecated now and the driver was removed, use
385 USB_HCD_SSB and USB_OHCI_HCD_PLATFORM instead.
386
380 Support for the Sonics Silicon Backplane (SSB) attached 387 Support for the Sonics Silicon Backplane (SSB) attached
381 Broadcom USB OHCI core. 388 Broadcom USB OHCI core.
382 389
@@ -638,3 +645,27 @@ config USB_OCTEON_OHCI
638config USB_OCTEON2_COMMON 645config USB_OCTEON2_COMMON
639 bool 646 bool
640 default y if USB_OCTEON_EHCI || USB_OCTEON_OHCI 647 default y if USB_OCTEON_EHCI || USB_OCTEON_OHCI
648
649config USB_HCD_BCMA
650 tristate "BCMA usb host driver"
651 depends on BCMA && EXPERIMENTAL
652 select USB_OHCI_HCD_PLATFORM if USB_OHCI_HCD
653 select USB_EHCI_HCD_PLATFORM if USB_EHCI_HCD
654 help
655 Enbale support for the EHCI and OCHI host controller on an bcma bus.
656 It converts the bcma driver into two platform device drivers
657 for ehci and ohci.
658
659 If unsure, say N.
660
661config USB_HCD_SSB
662 tristate "SSB usb host driver"
663 depends on SSB && EXPERIMENTAL
664 select USB_OHCI_HCD_PLATFORM if USB_OHCI_HCD
665 select USB_EHCI_HCD_PLATFORM if USB_EHCI_HCD
666 help
667 Enbale support for the EHCI and OCHI host controller on an bcma bus.
668 It converts the bcma driver into two platform device drivers
669 for ehci and ohci.
670
671 If unsure, say N.
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
index 0982bcc140bd..9e0a89ced15c 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -41,3 +41,5 @@ obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
41obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o 41obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
42obj-$(CONFIG_USB_OCTEON2_COMMON) += octeon2-common.o 42obj-$(CONFIG_USB_OCTEON2_COMMON) += octeon2-common.o
43obj-$(CONFIG_MIPS_ALCHEMY) += alchemy-common.o 43obj-$(CONFIG_MIPS_ALCHEMY) += alchemy-common.o
44obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
45obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
new file mode 100644
index 000000000000..443da21d73ca
--- /dev/null
+++ b/drivers/usb/host/bcma-hcd.c
@@ -0,0 +1,335 @@
1/*
2 * Broadcom specific Advanced Microcontroller Bus
3 * Broadcom USB-core driver (BCMA bus glue)
4 *
5 * Copyright 2011-2012 Hauke Mehrtens <hauke@hauke-m.de>
6 *
7 * Based on ssb-ohci driver
8 * Copyright 2007 Michael Buesch <m@bues.ch>
9 *
10 * Derived from the OHCI-PCI driver
11 * Copyright 1999 Roman Weissgaerber
12 * Copyright 2000-2002 David Brownell
13 * Copyright 1999 Linus Torvalds
14 * Copyright 1999 Gregory P. Smith
15 *
16 * Derived from the USBcore related parts of Broadcom-SB
17 * Copyright 2005-2011 Broadcom Corporation
18 *
19 * Licensed under the GNU/GPL. See COPYING for details.
20 */
21#include <linux/bcma/bcma.h>
22#include <linux/delay.h>
23#include <linux/platform_device.h>
24#include <linux/module.h>
25#include <linux/slab.h>
26#include <linux/usb/ehci_pdriver.h>
27#include <linux/usb/ohci_pdriver.h>
28
29MODULE_AUTHOR("Hauke Mehrtens");
30MODULE_DESCRIPTION("Common USB driver for BCMA Bus");
31MODULE_LICENSE("GPL");
32
33struct bcma_hcd_device {
34 struct platform_device *ehci_dev;
35 struct platform_device *ohci_dev;
36};
37
38/* Wait for bitmask in a register to get set or cleared.
39 * timeout is in units of ten-microseconds.
40 */
41static int bcma_wait_bits(struct bcma_device *dev, u16 reg, u32 bitmask,
42 int timeout)
43{
44 int i;
45 u32 val;
46
47 for (i = 0; i < timeout; i++) {
48 val = bcma_read32(dev, reg);
49 if ((val & bitmask) == bitmask)
50 return 0;
51 udelay(10);
52 }
53
54 return -ETIMEDOUT;
55}
56
57static void __devinit bcma_hcd_4716wa(struct bcma_device *dev)
58{
59#ifdef CONFIG_BCMA_DRIVER_MIPS
60 /* Work around for 4716 failures. */
61 if (dev->bus->chipinfo.id == 0x4716) {
62 u32 tmp;
63
64 tmp = bcma_cpu_clock(&dev->bus->drv_mips);
65 if (tmp >= 480000000)
66 tmp = 0x1846b; /* set CDR to 0x11(fast) */
67 else if (tmp == 453000000)
68 tmp = 0x1046b; /* set CDR to 0x10(slow) */
69 else
70 tmp = 0;
71
72 /* Change Shim mdio control reg to fix host not acking at
73 * high frequencies
74 */
75 if (tmp) {
76 bcma_write32(dev, 0x524, 0x1); /* write sel to enable */
77 udelay(500);
78
79 bcma_write32(dev, 0x524, tmp);
80 udelay(500);
81 bcma_write32(dev, 0x524, 0x4ab);
82 udelay(500);
83 bcma_read32(dev, 0x528);
84 bcma_write32(dev, 0x528, 0x80000000);
85 }
86 }
87#endif /* CONFIG_BCMA_DRIVER_MIPS */
88}
89
90/* based on arch/mips/brcm-boards/bcm947xx/pcibios.c */
91static void __devinit bcma_hcd_init_chip(struct bcma_device *dev)
92{
93 u32 tmp;
94
95 /*
96 * USB 2.0 special considerations:
97 *
98 * 1. Since the core supports both OHCI and EHCI functions, it must
99 * only be reset once.
100 *
101 * 2. In addition to the standard SI reset sequence, the Host Control
102 * Register must be programmed to bring the USB core and various
103 * phy components out of reset.
104 */
105 if (!bcma_core_is_enabled(dev)) {
106 bcma_core_enable(dev, 0);
107 mdelay(10);
108 if (dev->id.rev >= 5) {
109 /* Enable Misc PLL */
110 tmp = bcma_read32(dev, 0x1e0);
111 tmp |= 0x100;
112 bcma_write32(dev, 0x1e0, tmp);
113 if (bcma_wait_bits(dev, 0x1e0, 1 << 24, 100))
114 printk(KERN_EMERG "Failed to enable misc PPL!\n");
115
116 /* Take out of resets */
117 bcma_write32(dev, 0x200, 0x4ff);
118 udelay(25);
119 bcma_write32(dev, 0x200, 0x6ff);
120 udelay(25);
121
122 /* Make sure digital and AFE are locked in USB PHY */
123 bcma_write32(dev, 0x524, 0x6b);
124 udelay(50);
125 tmp = bcma_read32(dev, 0x524);
126 udelay(50);
127 bcma_write32(dev, 0x524, 0xab);
128 udelay(50);
129 tmp = bcma_read32(dev, 0x524);
130 udelay(50);
131 bcma_write32(dev, 0x524, 0x2b);
132 udelay(50);
133 tmp = bcma_read32(dev, 0x524);
134 udelay(50);
135 bcma_write32(dev, 0x524, 0x10ab);
136 udelay(50);
137 tmp = bcma_read32(dev, 0x524);
138
139 if (bcma_wait_bits(dev, 0x528, 0xc000, 10000)) {
140 tmp = bcma_read32(dev, 0x528);
141 printk(KERN_EMERG
142 "USB20H mdio_rddata 0x%08x\n", tmp);
143 }
144 bcma_write32(dev, 0x528, 0x80000000);
145 tmp = bcma_read32(dev, 0x314);
146 udelay(265);
147 bcma_write32(dev, 0x200, 0x7ff);
148 udelay(10);
149
150 /* Take USB and HSIC out of non-driving modes */
151 bcma_write32(dev, 0x510, 0);
152 } else {
153 bcma_write32(dev, 0x200, 0x7ff);
154
155 udelay(1);
156 }
157
158 bcma_hcd_4716wa(dev);
159 }
160}
161
162static const struct usb_ehci_pdata ehci_pdata = {
163};
164
165static const struct usb_ohci_pdata ohci_pdata = {
166};
167
168static struct platform_device * __devinit
169bcma_hcd_create_pdev(struct bcma_device *dev, bool ohci, u32 addr)
170{
171 struct platform_device *hci_dev;
172 struct resource hci_res[2];
173 int ret = -ENOMEM;
174
175 memset(hci_res, 0, sizeof(hci_res));
176
177 hci_res[0].start = addr;
178 hci_res[0].end = hci_res[0].start + 0x1000 - 1;
179 hci_res[0].flags = IORESOURCE_MEM;
180
181 hci_res[1].start = dev->irq;
182 hci_res[1].flags = IORESOURCE_IRQ;
183
184 hci_dev = platform_device_alloc(ohci ? "ohci-platform" :
185 "ehci-platform" , 0);
186 if (!hci_dev)
187 return NULL;
188
189 hci_dev->dev.parent = &dev->dev;
190 hci_dev->dev.dma_mask = &hci_dev->dev.coherent_dma_mask;
191
192 ret = platform_device_add_resources(hci_dev, hci_res,
193 ARRAY_SIZE(hci_res));
194 if (ret)
195 goto err_alloc;
196 if (ohci)
197 ret = platform_device_add_data(hci_dev, &ohci_pdata,
198 sizeof(ohci_pdata));
199 else
200 ret = platform_device_add_data(hci_dev, &ehci_pdata,
201 sizeof(ehci_pdata));
202 if (ret)
203 goto err_alloc;
204 ret = platform_device_add(hci_dev);
205 if (ret)
206 goto err_alloc;
207
208 return hci_dev;
209
210err_alloc:
211 platform_device_put(hci_dev);
212 return ERR_PTR(ret);
213}
214
215static int __devinit bcma_hcd_probe(struct bcma_device *dev)
216{
217 int err;
218 u16 chipid_top;
219 u32 ohci_addr;
220 struct bcma_hcd_device *usb_dev;
221 struct bcma_chipinfo *chipinfo;
222
223 chipinfo = &dev->bus->chipinfo;
224 /* USBcores are only connected on embedded devices. */
225 chipid_top = (chipinfo->id & 0xFF00);
226 if (chipid_top != 0x4700 && chipid_top != 0x5300)
227 return -ENODEV;
228
229 /* TODO: Probably need checks here; is the core connected? */
230
231 if (dma_set_mask(dev->dma_dev, DMA_BIT_MASK(32)) ||
232 dma_set_coherent_mask(dev->dma_dev, DMA_BIT_MASK(32)))
233 return -EOPNOTSUPP;
234
235 usb_dev = kzalloc(sizeof(struct bcma_hcd_device), GFP_KERNEL);
236 if (!usb_dev)
237 return -ENOMEM;
238
239 bcma_hcd_init_chip(dev);
240
241 /* In AI chips EHCI is addrspace 0, OHCI is 1 */
242 ohci_addr = dev->addr1;
243 if ((chipinfo->id == 0x5357 || chipinfo->id == 0x4749)
244 && chipinfo->rev == 0)
245 ohci_addr = 0x18009000;
246
247 usb_dev->ohci_dev = bcma_hcd_create_pdev(dev, true, ohci_addr);
248 if (IS_ERR(usb_dev->ohci_dev)) {
249 err = PTR_ERR(usb_dev->ohci_dev);
250 goto err_free_usb_dev;
251 }
252
253 usb_dev->ehci_dev = bcma_hcd_create_pdev(dev, false, dev->addr);
254 if (IS_ERR(usb_dev->ehci_dev)) {
255 err = PTR_ERR(usb_dev->ehci_dev);
256 goto err_unregister_ohci_dev;
257 }
258
259 bcma_set_drvdata(dev, usb_dev);
260 return 0;
261
262err_unregister_ohci_dev:
263 platform_device_unregister(usb_dev->ohci_dev);
264err_free_usb_dev:
265 kfree(usb_dev);
266 return err;
267}
268
269static void __devexit bcma_hcd_remove(struct bcma_device *dev)
270{
271 struct bcma_hcd_device *usb_dev = bcma_get_drvdata(dev);
272 struct platform_device *ohci_dev = usb_dev->ohci_dev;
273 struct platform_device *ehci_dev = usb_dev->ehci_dev;
274
275 if (ohci_dev)
276 platform_device_unregister(ohci_dev);
277 if (ehci_dev)
278 platform_device_unregister(ehci_dev);
279
280 bcma_core_disable(dev, 0);
281}
282
283static void bcma_hcd_shutdown(struct bcma_device *dev)
284{
285 bcma_core_disable(dev, 0);
286}
287
288#ifdef CONFIG_PM
289
290static int bcma_hcd_suspend(struct bcma_device *dev)
291{
292 bcma_core_disable(dev, 0);
293
294 return 0;
295}
296
297static int bcma_hcd_resume(struct bcma_device *dev)
298{
299 bcma_core_enable(dev, 0);
300
301 return 0;
302}
303
304#else /* !CONFIG_PM */
305#define bcma_hcd_suspend NULL
306#define bcma_hcd_resume NULL
307#endif /* CONFIG_PM */
308
309static const struct bcma_device_id bcma_hcd_table[] __devinitconst = {
310 BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_USB20_HOST, BCMA_ANY_REV, BCMA_ANY_CLASS),
311 BCMA_CORETABLE_END
312};
313MODULE_DEVICE_TABLE(bcma, bcma_hcd_table);
314
315static struct bcma_driver bcma_hcd_driver = {
316 .name = KBUILD_MODNAME,
317 .id_table = bcma_hcd_table,
318 .probe = bcma_hcd_probe,
319 .remove = __devexit_p(bcma_hcd_remove),
320 .shutdown = bcma_hcd_shutdown,
321 .suspend = bcma_hcd_suspend,
322 .resume = bcma_hcd_resume,
323};
324
325static int __init bcma_hcd_init(void)
326{
327 return bcma_driver_register(&bcma_hcd_driver);
328}
329module_init(bcma_hcd_init);
330
331static void __exit bcma_hcd_exit(void)
332{
333 bcma_driver_unregister(&bcma_hcd_driver);
334}
335module_exit(bcma_hcd_exit);
diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c
index 680e1a31fb87..7561966fbdc4 100644
--- a/drivers/usb/host/ehci-dbg.c
+++ b/drivers/usb/host/ehci-dbg.c
@@ -1025,10 +1025,8 @@ static ssize_t debug_lpm_write(struct file *file, const char __user *user_buf,
1025 if (strict_strtoul(buf + 5, 16, &hird)) 1025 if (strict_strtoul(buf + 5, 16, &hird))
1026 return -EINVAL; 1026 return -EINVAL;
1027 printk(KERN_INFO "setting hird %s %lu\n", buf + 6, hird); 1027 printk(KERN_INFO "setting hird %s %lu\n", buf + 6, hird);
1028 temp = ehci_readl(ehci, &ehci->regs->command); 1028 ehci->command = (ehci->command & ~CMD_HIRD) | (hird << 24);
1029 temp &= ~CMD_HIRD; 1029 ehci_writel(ehci, ehci->command, &ehci->regs->command);
1030 temp |= hird << 24;
1031 ehci_writel(ehci, temp, &ehci->regs->command);
1032 } else if (strncmp(buf, "disable", 7) == 0) { 1030 } else if (strncmp(buf, "disable", 7) == 0) {
1033 if (strict_strtoul(buf + 8, 10, &port)) 1031 if (strict_strtoul(buf + 8, 10, &port))
1034 return -EINVAL; 1032 return -EINVAL;
diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
index d0a84bd3f3eb..43362577b54a 100644
--- a/drivers/usb/host/ehci-fsl.c
+++ b/drivers/usb/host/ehci-fsl.c
@@ -1,6 +1,6 @@
1/* 1/*
2 * Copyright 2005-2009 MontaVista Software, Inc. 2 * Copyright 2005-2009 MontaVista Software, Inc.
3 * Copyright 2008 Freescale Semiconductor, Inc. 3 * Copyright 2008,2012 Freescale Semiconductor, Inc.
4 * 4 *
5 * This program is free software; you can redistribute it and/or modify it 5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the 6 * under the terms of the GNU General Public License as published by the
@@ -150,8 +150,7 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
150 retval = otg_set_host(ehci->transceiver->otg, 150 retval = otg_set_host(ehci->transceiver->otg,
151 &ehci_to_hcd(ehci)->self); 151 &ehci_to_hcd(ehci)->self);
152 if (retval) { 152 if (retval) {
153 if (ehci->transceiver) 153 usb_put_transceiver(ehci->transceiver);
154 put_device(ehci->transceiver->dev);
155 goto err4; 154 goto err4;
156 } 155 }
157 } else { 156 } else {
@@ -195,7 +194,7 @@ static void usb_hcd_fsl_remove(struct usb_hcd *hcd,
195 194
196 if (ehci->transceiver) { 195 if (ehci->transceiver) {
197 otg_set_host(ehci->transceiver->otg, NULL); 196 otg_set_host(ehci->transceiver->otg, NULL);
198 put_device(ehci->transceiver->dev); 197 usb_put_transceiver(ehci->transceiver);
199 } 198 }
200 199
201 usb_remove_hcd(hcd); 200 usb_remove_hcd(hcd);
@@ -211,22 +210,32 @@ static void usb_hcd_fsl_remove(struct usb_hcd *hcd,
211 usb_put_hcd(hcd); 210 usb_put_hcd(hcd);
212} 211}
213 212
214static void ehci_fsl_setup_phy(struct ehci_hcd *ehci, 213static void ehci_fsl_setup_phy(struct usb_hcd *hcd,
215 enum fsl_usb2_phy_modes phy_mode, 214 enum fsl_usb2_phy_modes phy_mode,
216 unsigned int port_offset) 215 unsigned int port_offset)
217{ 216{
218 u32 portsc; 217 u32 portsc, temp;
219 struct usb_hcd *hcd = ehci_to_hcd(ehci); 218 struct ehci_hcd *ehci = hcd_to_ehci(hcd);
220 void __iomem *non_ehci = hcd->regs; 219 void __iomem *non_ehci = hcd->regs;
221 struct fsl_usb2_platform_data *pdata; 220 struct device *dev = hcd->self.controller;
221 struct fsl_usb2_platform_data *pdata = dev->platform_data;
222 222
223 pdata = hcd->self.controller->platform_data; 223 if (pdata->controller_ver < 0) {
224 dev_warn(hcd->self.controller, "Could not get controller version\n");
225 return;
226 }
224 227
225 portsc = ehci_readl(ehci, &ehci->regs->port_status[port_offset]); 228 portsc = ehci_readl(ehci, &ehci->regs->port_status[port_offset]);
226 portsc &= ~(PORT_PTS_MSK | PORT_PTS_PTW); 229 portsc &= ~(PORT_PTS_MSK | PORT_PTS_PTW);
227 230
228 switch (phy_mode) { 231 switch (phy_mode) {
229 case FSL_USB2_PHY_ULPI: 232 case FSL_USB2_PHY_ULPI:
233 if (pdata->controller_ver) {
234 /* controller version 1.6 or above */
235 temp = in_be32(non_ehci + FSL_SOC_USB_CTRL);
236 out_be32(non_ehci + FSL_SOC_USB_CTRL, temp |
237 USB_CTRL_USB_EN | ULPI_PHY_CLK_SEL);
238 }
230 portsc |= PORT_PTS_ULPI; 239 portsc |= PORT_PTS_ULPI;
231 break; 240 break;
232 case FSL_USB2_PHY_SERIAL: 241 case FSL_USB2_PHY_SERIAL:
@@ -236,6 +245,14 @@ static void ehci_fsl_setup_phy(struct ehci_hcd *ehci,
236 portsc |= PORT_PTS_PTW; 245 portsc |= PORT_PTS_PTW;
237 /* fall through */ 246 /* fall through */
238 case FSL_USB2_PHY_UTMI: 247 case FSL_USB2_PHY_UTMI:
248 if (pdata->controller_ver) {
249 /* controller version 1.6 or above */
250 temp = in_be32(non_ehci + FSL_SOC_USB_CTRL);
251 out_be32(non_ehci + FSL_SOC_USB_CTRL, temp |
252 UTMI_PHY_EN | USB_CTRL_USB_EN);
253 mdelay(FSL_UTMI_PHY_DLY); /* Delay for UTMI PHY CLK to
254 become stable - 10ms*/
255 }
239 /* enable UTMI PHY */ 256 /* enable UTMI PHY */
240 if (pdata->have_sysif_regs) 257 if (pdata->have_sysif_regs)
241 setbits32(non_ehci + FSL_SOC_USB_CTRL, 258 setbits32(non_ehci + FSL_SOC_USB_CTRL,
@@ -276,7 +293,7 @@ static void ehci_fsl_usb_setup(struct ehci_hcd *ehci)
276 293
277 if ((pdata->operating_mode == FSL_USB2_DR_HOST) || 294 if ((pdata->operating_mode == FSL_USB2_DR_HOST) ||
278 (pdata->operating_mode == FSL_USB2_DR_OTG)) 295 (pdata->operating_mode == FSL_USB2_DR_OTG))
279 ehci_fsl_setup_phy(ehci, pdata->phy_mode, 0); 296 ehci_fsl_setup_phy(hcd, pdata->phy_mode, 0);
280 297
281 if (pdata->operating_mode == FSL_USB2_MPH_HOST) { 298 if (pdata->operating_mode == FSL_USB2_MPH_HOST) {
282 unsigned int chip, rev, svr; 299 unsigned int chip, rev, svr;
@@ -290,9 +307,9 @@ static void ehci_fsl_usb_setup(struct ehci_hcd *ehci)
290 ehci->has_fsl_port_bug = 1; 307 ehci->has_fsl_port_bug = 1;
291 308
292 if (pdata->port_enables & FSL_USB2_PORT0_ENABLED) 309 if (pdata->port_enables & FSL_USB2_PORT0_ENABLED)
293 ehci_fsl_setup_phy(ehci, pdata->phy_mode, 0); 310 ehci_fsl_setup_phy(hcd, pdata->phy_mode, 0);
294 if (pdata->port_enables & FSL_USB2_PORT1_ENABLED) 311 if (pdata->port_enables & FSL_USB2_PORT1_ENABLED)
295 ehci_fsl_setup_phy(ehci, pdata->phy_mode, 1); 312 ehci_fsl_setup_phy(hcd, pdata->phy_mode, 1);
296 } 313 }
297 314
298 if (pdata->have_sysif_regs) { 315 if (pdata->have_sysif_regs) {
diff --git a/drivers/usb/host/ehci-fsl.h b/drivers/usb/host/ehci-fsl.h
index 863fb0c080d7..88403684d10b 100644
--- a/drivers/usb/host/ehci-fsl.h
+++ b/drivers/usb/host/ehci-fsl.h
@@ -1,4 +1,4 @@
1/* Copyright (C) 2005-2010 Freescale Semiconductor, Inc. 1/* Copyright (C) 2005-2010,2012 Freescale Semiconductor, Inc.
2 * Copyright (c) 2005 MontaVista Software 2 * Copyright (c) 2005 MontaVista Software
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify it 4 * This program is free software; you can redistribute it and/or modify it
@@ -50,4 +50,15 @@
50#define CTRL_UTMI_PHY_EN (1<<9) 50#define CTRL_UTMI_PHY_EN (1<<9)
51#define CTRL_PHY_CLK_VALID (1 << 17) 51#define CTRL_PHY_CLK_VALID (1 << 17)
52#define SNOOP_SIZE_2GB 0x1e 52#define SNOOP_SIZE_2GB 0x1e
53
54/* control Register Bit Masks */
55#define ULPI_INT_EN (1<<0)
56#define WU_INT_EN (1<<1)
57#define USB_CTRL_USB_EN (1<<2)
58#define LINE_STATE_FILTER__EN (1<<3)
59#define KEEP_OTG_ON (1<<4)
60#define OTG_PORT (1<<5)
61#define PLL_RESET (1<<8)
62#define UTMI_PHY_EN (1<<9)
63#define ULPI_PHY_CLK_SEL (1<<10)
53#endif /* _EHCI_FSL_H */ 64#endif /* _EHCI_FSL_H */
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 4a3bc5b7a06f..b100f5f9f4b6 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -226,8 +226,13 @@ static int ehci_halt (struct ehci_hcd *ehci)
226 if ((temp & STS_HALT) != 0) 226 if ((temp & STS_HALT) != 0)
227 return 0; 227 return 0;
228 228
229 /*
230 * This routine gets called during probe before ehci->command
231 * has been initialized, so we can't rely on its value.
232 */
233 ehci->command &= ~CMD_RUN;
229 temp = ehci_readl(ehci, &ehci->regs->command); 234 temp = ehci_readl(ehci, &ehci->regs->command);
230 temp &= ~CMD_RUN; 235 temp &= ~(CMD_RUN | CMD_IAAD);
231 ehci_writel(ehci, temp, &ehci->regs->command); 236 ehci_writel(ehci, temp, &ehci->regs->command);
232 return handshake (ehci, &ehci->regs->status, 237 return handshake (ehci, &ehci->regs->status,
233 STS_HALT, STS_HALT, 16 * 125); 238 STS_HALT, STS_HALT, 16 * 125);
@@ -363,16 +368,14 @@ static void ehci_quiesce (struct ehci_hcd *ehci)
363#endif 368#endif
364 369
365 /* wait for any schedule enables/disables to take effect */ 370 /* wait for any schedule enables/disables to take effect */
366 temp = ehci_readl(ehci, &ehci->regs->command) << 10; 371 temp = (ehci->command << 10) & (STS_ASS | STS_PSS);
367 temp &= STS_ASS | STS_PSS;
368 if (handshake_on_error_set_halt(ehci, &ehci->regs->status, 372 if (handshake_on_error_set_halt(ehci, &ehci->regs->status,
369 STS_ASS | STS_PSS, temp, 16 * 125)) 373 STS_ASS | STS_PSS, temp, 16 * 125))
370 return; 374 return;
371 375
372 /* then disable anything that's still active */ 376 /* then disable anything that's still active */
373 temp = ehci_readl(ehci, &ehci->regs->command); 377 ehci->command &= ~(CMD_ASE | CMD_PSE);
374 temp &= ~(CMD_ASE | CMD_IAAD | CMD_PSE); 378 ehci_writel(ehci, ehci->command, &ehci->regs->command);
375 ehci_writel(ehci, temp, &ehci->regs->command);
376 379
377 /* hardware can take 16 microframes to turn off ... */ 380 /* hardware can take 16 microframes to turn off ... */
378 handshake_on_error_set_halt(ehci, &ehci->regs->status, 381 handshake_on_error_set_halt(ehci, &ehci->regs->status,
@@ -417,9 +420,6 @@ static void ehci_iaa_watchdog(unsigned long param)
417 * CMD_IAAD when it sets STS_IAA.) 420 * CMD_IAAD when it sets STS_IAA.)
418 */ 421 */
419 cmd = ehci_readl(ehci, &ehci->regs->command); 422 cmd = ehci_readl(ehci, &ehci->regs->command);
420 if (cmd & CMD_IAAD)
421 ehci_writel(ehci, cmd & ~CMD_IAAD,
422 &ehci->regs->command);
423 423
424 /* If IAA is set here it either legitimately triggered 424 /* If IAA is set here it either legitimately triggered
425 * before we cleared IAAD above (but _way_ late, so we'll 425 * before we cleared IAAD above (but _way_ late, so we'll
@@ -894,11 +894,8 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
894 /* complete the unlinking of some qh [4.15.2.3] */ 894 /* complete the unlinking of some qh [4.15.2.3] */
895 if (status & STS_IAA) { 895 if (status & STS_IAA) {
896 /* guard against (alleged) silicon errata */ 896 /* guard against (alleged) silicon errata */
897 if (cmd & CMD_IAAD) { 897 if (cmd & CMD_IAAD)
898 ehci_writel(ehci, cmd & ~CMD_IAAD,
899 &ehci->regs->command);
900 ehci_dbg(ehci, "IAA with IAAD still set?\n"); 898 ehci_dbg(ehci, "IAA with IAAD still set?\n");
901 }
902 if (ehci->reclaim) { 899 if (ehci->reclaim) {
903 COUNT(ehci->stats.reclaim); 900 COUNT(ehci->stats.reclaim);
904 end_unlink_async(ehci); 901 end_unlink_async(ehci);
@@ -1248,6 +1245,13 @@ static int ehci_get_frame (struct usb_hcd *hcd)
1248} 1245}
1249 1246
1250/*-------------------------------------------------------------------------*/ 1247/*-------------------------------------------------------------------------*/
1248/*
1249 * The EHCI in ChipIdea HDRC cannot be a separate module or device,
1250 * because its registers (and irq) are shared between host/gadget/otg
1251 * functions and in order to facilitate role switching we cannot
1252 * give the ehci driver exclusive access to those.
1253 */
1254#ifndef CHIPIDEA_EHCI
1251 1255
1252MODULE_DESCRIPTION(DRIVER_DESC); 1256MODULE_DESCRIPTION(DRIVER_DESC);
1253MODULE_AUTHOR (DRIVER_AUTHOR); 1257MODULE_AUTHOR (DRIVER_AUTHOR);
@@ -1378,6 +1382,11 @@ MODULE_LICENSE ("GPL");
1378#define PLATFORM_DRIVER ehci_ls1x_driver 1382#define PLATFORM_DRIVER ehci_ls1x_driver
1379#endif 1383#endif
1380 1384
1385#ifdef CONFIG_MIPS_SEAD3
1386#include "ehci-sead3.c"
1387#define PLATFORM_DRIVER ehci_hcd_sead3_driver
1388#endif
1389
1381#ifdef CONFIG_USB_EHCI_HCD_PLATFORM 1390#ifdef CONFIG_USB_EHCI_HCD_PLATFORM
1382#include "ehci-platform.c" 1391#include "ehci-platform.c"
1383#define PLATFORM_DRIVER ehci_platform_driver 1392#define PLATFORM_DRIVER ehci_platform_driver
@@ -1501,3 +1510,4 @@ static void __exit ehci_hcd_cleanup(void)
1501} 1510}
1502module_exit(ehci_hcd_cleanup); 1511module_exit(ehci_hcd_cleanup);
1503 1512
1513#endif /* CHIPIDEA_EHCI */
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index 38fe07623152..fc9e7cc6ac9b 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -233,7 +233,6 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
233 /* stop schedules, clean any completed work */ 233 /* stop schedules, clean any completed work */
234 if (ehci->rh_state == EHCI_RH_RUNNING) 234 if (ehci->rh_state == EHCI_RH_RUNNING)
235 ehci_quiesce (ehci); 235 ehci_quiesce (ehci);
236 ehci->command = ehci_readl(ehci, &ehci->regs->command);
237 ehci_work(ehci); 236 ehci_work(ehci);
238 237
239 /* Unlike other USB host controller types, EHCI doesn't have 238 /* Unlike other USB host controller types, EHCI doesn't have
@@ -374,6 +373,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd)
374 ehci_writel(ehci, (u32) ehci->async->qh_dma, &ehci->regs->async_next); 373 ehci_writel(ehci, (u32) ehci->async->qh_dma, &ehci->regs->async_next);
375 374
376 /* restore CMD_RUN, framelist size, and irq threshold */ 375 /* restore CMD_RUN, framelist size, and irq threshold */
376 ehci->command |= CMD_RUN;
377 ehci_writel(ehci, ehci->command, &ehci->regs->command); 377 ehci_writel(ehci, ehci->command, &ehci->regs->command);
378 ehci->rh_state = EHCI_RH_RUNNING; 378 ehci->rh_state = EHCI_RH_RUNNING;
379 379
@@ -531,7 +531,8 @@ static int check_reset_complete (
531 if (ehci->has_amcc_usb23) 531 if (ehci->has_amcc_usb23)
532 set_ohci_hcfs(ehci, 1); 532 set_ohci_hcfs(ehci, 1);
533 } else { 533 } else {
534 ehci_dbg (ehci, "port %d high speed\n", index + 1); 534 ehci_dbg(ehci, "port %d reset complete, port enabled\n",
535 index + 1);
535 /* ensure 440EPx ohci controller state is suspended */ 536 /* ensure 440EPx ohci controller state is suspended */
536 if (ehci->has_amcc_usb23) 537 if (ehci->has_amcc_usb23)
537 set_ohci_hcfs(ehci, 0); 538 set_ohci_hcfs(ehci, 0);
@@ -699,6 +700,7 @@ static int ehci_hub_control (
699 goto error; 700 goto error;
700 wIndex--; 701 wIndex--;
701 temp = ehci_readl(ehci, status_reg); 702 temp = ehci_readl(ehci, status_reg);
703 temp &= ~PORT_RWC_BITS;
702 704
703 /* 705 /*
704 * Even if OWNER is set, so the port is owned by the 706 * Even if OWNER is set, so the port is owned by the
@@ -712,8 +714,7 @@ static int ehci_hub_control (
712 ehci_writel(ehci, temp & ~PORT_PE, status_reg); 714 ehci_writel(ehci, temp & ~PORT_PE, status_reg);
713 break; 715 break;
714 case USB_PORT_FEAT_C_ENABLE: 716 case USB_PORT_FEAT_C_ENABLE:
715 ehci_writel(ehci, (temp & ~PORT_RWC_BITS) | PORT_PEC, 717 ehci_writel(ehci, temp | PORT_PEC, status_reg);
716 status_reg);
717 break; 718 break;
718 case USB_PORT_FEAT_SUSPEND: 719 case USB_PORT_FEAT_SUSPEND:
719 if (temp & PORT_RESET) 720 if (temp & PORT_RESET)
@@ -742,7 +743,7 @@ static int ehci_hub_control (
742 spin_lock_irqsave(&ehci->lock, flags); 743 spin_lock_irqsave(&ehci->lock, flags);
743 } 744 }
744 /* resume signaling for 20 msec */ 745 /* resume signaling for 20 msec */
745 temp &= ~(PORT_RWC_BITS | PORT_WAKE_BITS); 746 temp &= ~PORT_WAKE_BITS;
746 ehci_writel(ehci, temp | PORT_RESUME, status_reg); 747 ehci_writel(ehci, temp | PORT_RESUME, status_reg);
747 ehci->reset_done[wIndex] = jiffies 748 ehci->reset_done[wIndex] = jiffies
748 + msecs_to_jiffies(20); 749 + msecs_to_jiffies(20);
@@ -752,9 +753,8 @@ static int ehci_hub_control (
752 break; 753 break;
753 case USB_PORT_FEAT_POWER: 754 case USB_PORT_FEAT_POWER:
754 if (HCS_PPC (ehci->hcs_params)) 755 if (HCS_PPC (ehci->hcs_params))
755 ehci_writel(ehci, 756 ehci_writel(ehci, temp & ~PORT_POWER,
756 temp & ~(PORT_RWC_BITS | PORT_POWER), 757 status_reg);
757 status_reg);
758 break; 758 break;
759 case USB_PORT_FEAT_C_CONNECTION: 759 case USB_PORT_FEAT_C_CONNECTION:
760 if (ehci->has_lpm) { 760 if (ehci->has_lpm) {
@@ -762,12 +762,10 @@ static int ehci_hub_control (
762 temp &= ~PORT_LPM; 762 temp &= ~PORT_LPM;
763 temp &= ~PORT_DEV_ADDR; 763 temp &= ~PORT_DEV_ADDR;
764 } 764 }
765 ehci_writel(ehci, (temp & ~PORT_RWC_BITS) | PORT_CSC, 765 ehci_writel(ehci, temp | PORT_CSC, status_reg);
766 status_reg);
767 break; 766 break;
768 case USB_PORT_FEAT_C_OVER_CURRENT: 767 case USB_PORT_FEAT_C_OVER_CURRENT:
769 ehci_writel(ehci, (temp & ~PORT_RWC_BITS) | PORT_OCC, 768 ehci_writel(ehci, temp | PORT_OCC, status_reg);
770 status_reg);
771 break; 769 break;
772 case USB_PORT_FEAT_C_RESET: 770 case USB_PORT_FEAT_C_RESET:
773 /* GetPortStatus clears reset */ 771 /* GetPortStatus clears reset */
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
index 5c78f9e71466..a44294d13494 100644
--- a/drivers/usb/host/ehci-omap.c
+++ b/drivers/usb/host/ehci-omap.c
@@ -242,15 +242,6 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev)
242 242
243 ehci_reset(omap_ehci); 243 ehci_reset(omap_ehci);
244 244
245 ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
246 if (ret) {
247 dev_err(dev, "failed to add hcd with err %d\n", ret);
248 goto err_add_hcd;
249 }
250
251 /* root ports should always stay powered */
252 ehci_port_power(omap_ehci, 1);
253
254 if (pdata->phy_reset) { 245 if (pdata->phy_reset) {
255 /* Hold the PHY in RESET for enough time till 246 /* Hold the PHY in RESET for enough time till
256 * PHY is settled and ready 247 * PHY is settled and ready
@@ -258,12 +249,21 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev)
258 udelay(10); 249 udelay(10);
259 250
260 if (gpio_is_valid(pdata->reset_gpio_port[0])) 251 if (gpio_is_valid(pdata->reset_gpio_port[0]))
261 gpio_set_value(pdata->reset_gpio_port[0], 1); 252 gpio_set_value_cansleep(pdata->reset_gpio_port[0], 1);
262 253
263 if (gpio_is_valid(pdata->reset_gpio_port[1])) 254 if (gpio_is_valid(pdata->reset_gpio_port[1]))
264 gpio_set_value(pdata->reset_gpio_port[1], 1); 255 gpio_set_value_cansleep(pdata->reset_gpio_port[1], 1);
265 } 256 }
266 257
258 ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
259 if (ret) {
260 dev_err(dev, "failed to add hcd with err %d\n", ret);
261 goto err_add_hcd;
262 }
263
264 /* root ports should always stay powered */
265 ehci_port_power(omap_ehci, 1);
266
267 return 0; 267 return 0;
268 268
269err_add_hcd: 269err_add_hcd:
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
index fe8dc069164e..bc94d7bf072d 100644
--- a/drivers/usb/host/ehci-pci.c
+++ b/drivers/usb/host/ehci-pci.c
@@ -368,7 +368,9 @@ static bool usb_is_intel_switchable_ehci(struct pci_dev *pdev)
368{ 368{
369 return pdev->class == PCI_CLASS_SERIAL_USB_EHCI && 369 return pdev->class == PCI_CLASS_SERIAL_USB_EHCI &&
370 pdev->vendor == PCI_VENDOR_ID_INTEL && 370 pdev->vendor == PCI_VENDOR_ID_INTEL &&
371 pdev->device == 0x1E26; 371 (pdev->device == 0x1E26 ||
372 pdev->device == 0x8C2D ||
373 pdev->device == 0x8C26);
372} 374}
373 375
374static void ehci_enable_xhci_companion(void) 376static void ehci_enable_xhci_companion(void)
diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
index d238b4e24bb6..dfe881a34ae2 100644
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
@@ -75,8 +75,6 @@ static const struct hc_driver ehci_platform_hc_driver = {
75 .relinquish_port = ehci_relinquish_port, 75 .relinquish_port = ehci_relinquish_port,
76 .port_handed_over = ehci_port_handed_over, 76 .port_handed_over = ehci_port_handed_over,
77 77
78 .update_device = ehci_update_device,
79
80 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, 78 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
81}; 79};
82 80
@@ -94,12 +92,12 @@ static int __devinit ehci_platform_probe(struct platform_device *dev)
94 92
95 irq = platform_get_irq(dev, 0); 93 irq = platform_get_irq(dev, 0);
96 if (irq < 0) { 94 if (irq < 0) {
97 pr_err("no irq provieded"); 95 pr_err("no irq provided");
98 return irq; 96 return irq;
99 } 97 }
100 res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0); 98 res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0);
101 if (!res_mem) { 99 if (!res_mem) {
102 pr_err("no memory recourse provieded"); 100 pr_err("no memory recourse provided");
103 return -ENXIO; 101 return -ENXIO;
104 } 102 }
105 103
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
index 36ca5077cdf7..4378bf72bbac 100644
--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -943,7 +943,8 @@ qh_make (
943 } 943 }
944 break; 944 break;
945 default: 945 default:
946 dbg ("bogus dev %p speed %d", urb->dev, urb->dev->speed); 946 ehci_dbg(ehci, "bogus dev %p speed %d\n", urb->dev,
947 urb->dev->speed);
947done: 948done:
948 qh_put (qh); 949 qh_put (qh);
949 return NULL; 950 return NULL;
@@ -981,14 +982,12 @@ static void qh_link_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
981 head = ehci->async; 982 head = ehci->async;
982 timer_action_done (ehci, TIMER_ASYNC_OFF); 983 timer_action_done (ehci, TIMER_ASYNC_OFF);
983 if (!head->qh_next.qh) { 984 if (!head->qh_next.qh) {
984 u32 cmd = ehci_readl(ehci, &ehci->regs->command); 985 if (!(ehci->command & CMD_ASE)) {
985
986 if (!(cmd & CMD_ASE)) {
987 /* in case a clear of CMD_ASE didn't take yet */ 986 /* in case a clear of CMD_ASE didn't take yet */
988 (void)handshake(ehci, &ehci->regs->status, 987 (void)handshake(ehci, &ehci->regs->status,
989 STS_ASS, 0, 150); 988 STS_ASS, 0, 150);
990 cmd |= CMD_ASE; 989 ehci->command |= CMD_ASE;
991 ehci_writel(ehci, cmd, &ehci->regs->command); 990 ehci_writel(ehci, ehci->command, &ehci->regs->command);
992 /* posted write need not be known to HC yet ... */ 991 /* posted write need not be known to HC yet ... */
993 } 992 }
994 } 993 }
@@ -1204,7 +1203,6 @@ static void end_unlink_async (struct ehci_hcd *ehci)
1204 1203
1205static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh) 1204static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
1206{ 1205{
1207 int cmd = ehci_readl(ehci, &ehci->regs->command);
1208 struct ehci_qh *prev; 1206 struct ehci_qh *prev;
1209 1207
1210#ifdef DEBUG 1208#ifdef DEBUG
@@ -1222,8 +1220,8 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
1222 if (ehci->rh_state != EHCI_RH_HALTED 1220 if (ehci->rh_state != EHCI_RH_HALTED
1223 && !ehci->reclaim) { 1221 && !ehci->reclaim) {
1224 /* ... and CMD_IAAD clear */ 1222 /* ... and CMD_IAAD clear */
1225 ehci_writel(ehci, cmd & ~CMD_ASE, 1223 ehci->command &= ~CMD_ASE;
1226 &ehci->regs->command); 1224 ehci_writel(ehci, ehci->command, &ehci->regs->command);
1227 wmb (); 1225 wmb ();
1228 // handshake later, if we need to 1226 // handshake later, if we need to
1229 timer_action_done (ehci, TIMER_ASYNC_OFF); 1227 timer_action_done (ehci, TIMER_ASYNC_OFF);
@@ -1253,8 +1251,7 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
1253 return; 1251 return;
1254 } 1252 }
1255 1253
1256 cmd |= CMD_IAAD; 1254 ehci_writel(ehci, ehci->command | CMD_IAAD, &ehci->regs->command);
1257 ehci_writel(ehci, cmd, &ehci->regs->command);
1258 (void)ehci_readl(ehci, &ehci->regs->command); 1255 (void)ehci_readl(ehci, &ehci->regs->command);
1259 iaa_watchdog_start(ehci); 1256 iaa_watchdog_start(ehci);
1260} 1257}
diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c
index f098e2a291a0..c474cec064e4 100644
--- a/drivers/usb/host/ehci-s5p.c
+++ b/drivers/usb/host/ehci-s5p.c
@@ -232,6 +232,8 @@ static int s5p_ehci_suspend(struct device *dev)
232 if (pdata && pdata->phy_exit) 232 if (pdata && pdata->phy_exit)
233 pdata->phy_exit(pdev, S5P_USB_PHY_HOST); 233 pdata->phy_exit(pdev, S5P_USB_PHY_HOST);
234 234
235 clk_disable(s5p_ehci->clk);
236
235 return rc; 237 return rc;
236} 238}
237 239
@@ -243,6 +245,8 @@ static int s5p_ehci_resume(struct device *dev)
243 struct platform_device *pdev = to_platform_device(dev); 245 struct platform_device *pdev = to_platform_device(dev);
244 struct s5p_ehci_platdata *pdata = pdev->dev.platform_data; 246 struct s5p_ehci_platdata *pdata = pdev->dev.platform_data;
245 247
248 clk_enable(s5p_ehci->clk);
249
246 if (pdata && pdata->phy_init) 250 if (pdata && pdata->phy_init)
247 pdata->phy_init(pdev, S5P_USB_PHY_HOST); 251 pdata->phy_init(pdev, S5P_USB_PHY_HOST);
248 252
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
index a60679cbbf85..33182c6d1ff9 100644
--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -481,7 +481,6 @@ static int tt_no_collision (
481 481
482static int enable_periodic (struct ehci_hcd *ehci) 482static int enable_periodic (struct ehci_hcd *ehci)
483{ 483{
484 u32 cmd;
485 int status; 484 int status;
486 485
487 if (ehci->periodic_sched++) 486 if (ehci->periodic_sched++)
@@ -497,8 +496,8 @@ static int enable_periodic (struct ehci_hcd *ehci)
497 return status; 496 return status;
498 } 497 }
499 498
500 cmd = ehci_readl(ehci, &ehci->regs->command) | CMD_PSE; 499 ehci->command |= CMD_PSE;
501 ehci_writel(ehci, cmd, &ehci->regs->command); 500 ehci_writel(ehci, ehci->command, &ehci->regs->command);
502 /* posted write ... PSS happens later */ 501 /* posted write ... PSS happens later */
503 502
504 /* make sure ehci_work scans these */ 503 /* make sure ehci_work scans these */
@@ -511,7 +510,6 @@ static int enable_periodic (struct ehci_hcd *ehci)
511 510
512static int disable_periodic (struct ehci_hcd *ehci) 511static int disable_periodic (struct ehci_hcd *ehci)
513{ 512{
514 u32 cmd;
515 int status; 513 int status;
516 514
517 if (--ehci->periodic_sched) 515 if (--ehci->periodic_sched)
@@ -537,8 +535,8 @@ static int disable_periodic (struct ehci_hcd *ehci)
537 return status; 535 return status;
538 } 536 }
539 537
540 cmd = ehci_readl(ehci, &ehci->regs->command) & ~CMD_PSE; 538 ehci->command &= ~CMD_PSE;
541 ehci_writel(ehci, cmd, &ehci->regs->command); 539 ehci_writel(ehci, ehci->command, &ehci->regs->command);
542 /* posted write ... */ 540 /* posted write ... */
543 541
544 free_cached_lists(ehci); 542 free_cached_lists(ehci);
@@ -1333,34 +1331,36 @@ sitd_slot_ok (
1333 if (mask & ~0xffff) 1331 if (mask & ~0xffff)
1334 return 0; 1332 return 0;
1335 1333
1334 /* check bandwidth */
1335 uframe %= period_uframes;
1336 frame = uframe >> 3;
1337
1338#ifdef CONFIG_USB_EHCI_TT_NEWSCHED
1339 /* The tt's fullspeed bus bandwidth must be available.
1340 * tt_available scheduling guarantees 10+% for control/bulk.
1341 */
1342 uf = uframe & 7;
1343 if (!tt_available(ehci, period_uframes >> 3,
1344 stream->udev, frame, uf, stream->tt_usecs))
1345 return 0;
1346#else
1347 /* tt must be idle for start(s), any gap, and csplit.
1348 * assume scheduling slop leaves 10+% for control/bulk.
1349 */
1350 if (!tt_no_collision(ehci, period_uframes >> 3,
1351 stream->udev, frame, mask))
1352 return 0;
1353#endif
1354
1336 /* this multi-pass logic is simple, but performance may 1355 /* this multi-pass logic is simple, but performance may
1337 * suffer when the schedule data isn't cached. 1356 * suffer when the schedule data isn't cached.
1338 */ 1357 */
1339
1340 /* check bandwidth */
1341 uframe %= period_uframes;
1342 do { 1358 do {
1343 u32 max_used; 1359 u32 max_used;
1344 1360
1345 frame = uframe >> 3; 1361 frame = uframe >> 3;
1346 uf = uframe & 7; 1362 uf = uframe & 7;
1347 1363
1348#ifdef CONFIG_USB_EHCI_TT_NEWSCHED
1349 /* The tt's fullspeed bus bandwidth must be available.
1350 * tt_available scheduling guarantees 10+% for control/bulk.
1351 */
1352 if (!tt_available (ehci, period_uframes << 3,
1353 stream->udev, frame, uf, stream->tt_usecs))
1354 return 0;
1355#else
1356 /* tt must be idle for start(s), any gap, and csplit.
1357 * assume scheduling slop leaves 10+% for control/bulk.
1358 */
1359 if (!tt_no_collision (ehci, period_uframes << 3,
1360 stream->udev, frame, mask))
1361 return 0;
1362#endif
1363
1364 /* check starts (OUT uses more than one) */ 1364 /* check starts (OUT uses more than one) */
1365 max_used = ehci->uframe_periodic_max - stream->usecs; 1365 max_used = ehci->uframe_periodic_max - stream->usecs;
1366 for (tmp = stream->raw_mask & 0xff; tmp; tmp >>= 1, uf++) { 1366 for (tmp = stream->raw_mask & 0xff; tmp; tmp >>= 1, uf++) {
@@ -2358,7 +2358,8 @@ restart:
2358 * in the previous frame for completions. 2358 * in the previous frame for completions.
2359 */ 2359 */
2360 if (q.fstn->hw_prev != EHCI_LIST_END(ehci)) { 2360 if (q.fstn->hw_prev != EHCI_LIST_END(ehci)) {
2361 dbg ("ignoring completions from FSTNs"); 2361 ehci_dbg(ehci,
2362 "ignoring completions from FSTNs\n");
2362 } 2363 }
2363 type = Q_NEXT_TYPE(ehci, q.fstn->hw_next); 2364 type = Q_NEXT_TYPE(ehci, q.fstn->hw_next);
2364 q = q.fstn->fstn_next; 2365 q = q.fstn->fstn_next;
@@ -2441,7 +2442,7 @@ restart:
2441 q = *q_p; 2442 q = *q_p;
2442 break; 2443 break;
2443 default: 2444 default:
2444 dbg ("corrupt type %d frame %d shadow %p", 2445 ehci_dbg(ehci, "corrupt type %d frame %d shadow %p\n",
2445 type, frame, q.ptr); 2446 type, frame, q.ptr);
2446 // BUG (); 2447 // BUG ();
2447 q.ptr = NULL; 2448 q.ptr = NULL;
diff --git a/drivers/usb/host/ehci-sead3.c b/drivers/usb/host/ehci-sead3.c
new file mode 100644
index 000000000000..cc199e87a7a9
--- /dev/null
+++ b/drivers/usb/host/ehci-sead3.c
@@ -0,0 +1,266 @@
1/*
2 * MIPS CI13320A EHCI Host Controller driver
3 * Based on "ehci-au1xxx.c" by K.Boge <karsten.boge@amd.com>
4 *
5 * Copyright (C) 2012 MIPS Technologies, Inc.
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software Foundation,
19 * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#include <linux/platform_device.h>
23
24static int ehci_sead3_setup(struct usb_hcd *hcd)
25{
26 int ret;
27 struct ehci_hcd *ehci = hcd_to_ehci(hcd);
28
29 ehci->caps = hcd->regs + 0x100;
30
31#ifdef __BIG_ENDIAN
32 ehci->big_endian_mmio = 1;
33 ehci->big_endian_desc = 1;
34#endif
35
36 ret = ehci_setup(hcd);
37 if (ret)
38 return ret;
39
40 ehci->need_io_watchdog = 0;
41
42 /* Set burst length to 16 words. */
43 ehci_writel(ehci, 0x1010, &ehci->regs->reserved[1]);
44
45 return ret;
46}
47
48const struct hc_driver ehci_sead3_hc_driver = {
49 .description = hcd_name,
50 .product_desc = "SEAD-3 EHCI",
51 .hcd_priv_size = sizeof(struct ehci_hcd),
52
53 /*
54 * generic hardware linkage
55 */
56 .irq = ehci_irq,
57 .flags = HCD_MEMORY | HCD_USB2,
58
59 /*
60 * basic lifecycle operations
61 *
62 */
63 .reset = ehci_sead3_setup,
64 .start = ehci_run,
65 .stop = ehci_stop,
66 .shutdown = ehci_shutdown,
67
68 /*
69 * managing i/o requests and associated device resources
70 */
71 .urb_enqueue = ehci_urb_enqueue,
72 .urb_dequeue = ehci_urb_dequeue,
73 .endpoint_disable = ehci_endpoint_disable,
74 .endpoint_reset = ehci_endpoint_reset,
75
76 /*
77 * scheduling support
78 */
79 .get_frame_number = ehci_get_frame,
80
81 /*
82 * root hub support
83 */
84 .hub_status_data = ehci_hub_status_data,
85 .hub_control = ehci_hub_control,
86 .bus_suspend = ehci_bus_suspend,
87 .bus_resume = ehci_bus_resume,
88 .relinquish_port = ehci_relinquish_port,
89 .port_handed_over = ehci_port_handed_over,
90
91 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
92};
93
94static int ehci_hcd_sead3_drv_probe(struct platform_device *pdev)
95{
96 struct usb_hcd *hcd;
97 struct resource *res;
98 int ret;
99
100 if (usb_disabled())
101 return -ENODEV;
102
103 if (pdev->resource[1].flags != IORESOURCE_IRQ) {
104 pr_debug("resource[1] is not IORESOURCE_IRQ");
105 return -ENOMEM;
106 }
107 hcd = usb_create_hcd(&ehci_sead3_hc_driver, &pdev->dev, "SEAD-3");
108 if (!hcd)
109 return -ENOMEM;
110
111 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
112 hcd->rsrc_start = res->start;
113 hcd->rsrc_len = resource_size(res);
114
115 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
116 pr_debug("request_mem_region failed");
117 ret = -EBUSY;
118 goto err1;
119 }
120
121 hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
122 if (!hcd->regs) {
123 pr_debug("ioremap failed");
124 ret = -ENOMEM;
125 goto err2;
126 }
127
128 /* Root hub has integrated TT. */
129 hcd->has_tt = 1;
130
131 ret = usb_add_hcd(hcd, pdev->resource[1].start,
132 IRQF_SHARED);
133 if (ret == 0) {
134 platform_set_drvdata(pdev, hcd);
135 return ret;
136 }
137
138 iounmap(hcd->regs);
139err2:
140 release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
141err1:
142 usb_put_hcd(hcd);
143 return ret;
144}
145
146static int ehci_hcd_sead3_drv_remove(struct platform_device *pdev)
147{
148 struct usb_hcd *hcd = platform_get_drvdata(pdev);
149
150 usb_remove_hcd(hcd);
151 iounmap(hcd->regs);
152 release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
153 usb_put_hcd(hcd);
154 platform_set_drvdata(pdev, NULL);
155
156 return 0;
157}
158
159#ifdef CONFIG_PM
160static int ehci_hcd_sead3_drv_suspend(struct device *dev)
161{
162 struct usb_hcd *hcd = dev_get_drvdata(dev);
163 struct ehci_hcd *ehci = hcd_to_ehci(hcd);
164 unsigned long flags;
165 int rc = 0;
166
167 if (time_before(jiffies, ehci->next_statechange))
168 msleep(20);
169
170 /* Root hub was already suspended. Disable irq emission and
171 * mark HW unaccessible. The PM and USB cores make sure that
172 * the root hub is either suspended or stopped.
173 */
174 ehci_prepare_ports_for_controller_suspend(ehci, device_may_wakeup(dev));
175 spin_lock_irqsave(&ehci->lock, flags);
176 ehci_writel(ehci, 0, &ehci->regs->intr_enable);
177 (void)ehci_readl(ehci, &ehci->regs->intr_enable);
178
179 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
180 spin_unlock_irqrestore(&ehci->lock, flags);
181
182 /* could save FLADJ in case of Vaux power loss
183 * ... we'd only use it to handle clock skew
184 */
185
186 return rc;
187}
188
189static int ehci_hcd_sead3_drv_resume(struct device *dev)
190{
191 struct usb_hcd *hcd = dev_get_drvdata(dev);
192 struct ehci_hcd *ehci = hcd_to_ehci(hcd);
193
194 /* maybe restore FLADJ. */
195
196 if (time_before(jiffies, ehci->next_statechange))
197 msleep(100);
198
199 /* Mark hardware accessible again as we are out of D3 state by now */
200 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
201
202 /* If CF is still set, we maintained PCI Vaux power.
203 * Just undo the effect of ehci_pci_suspend().
204 */
205 if (ehci_readl(ehci, &ehci->regs->configured_flag) == FLAG_CF) {
206 int mask = INTR_MASK;
207
208 ehci_prepare_ports_for_controller_resume(ehci);
209 if (!hcd->self.root_hub->do_remote_wakeup)
210 mask &= ~STS_PCD;
211 ehci_writel(ehci, mask, &ehci->regs->intr_enable);
212 ehci_readl(ehci, &ehci->regs->intr_enable);
213 return 0;
214 }
215
216 ehci_dbg(ehci, "lost power, restarting\n");
217 usb_root_hub_lost_power(hcd->self.root_hub);
218
219 /* Else reset, to cope with power loss or flush-to-storage
220 * style "resume" having let BIOS kick in during reboot.
221 */
222 (void) ehci_halt(ehci);
223 (void) ehci_reset(ehci);
224
225 /* emptying the schedule aborts any urbs */
226 spin_lock_irq(&ehci->lock);
227 if (ehci->reclaim)
228 end_unlink_async(ehci);
229 ehci_work(ehci);
230 spin_unlock_irq(&ehci->lock);
231
232 ehci_writel(ehci, ehci->command, &ehci->regs->command);
233 ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
234 ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
235
236 /* here we "know" root ports should always stay powered */
237 ehci_port_power(ehci, 1);
238
239 ehci->rh_state = EHCI_RH_SUSPENDED;
240
241 return 0;
242}
243
244static const struct dev_pm_ops sead3_ehci_pmops = {
245 .suspend = ehci_hcd_sead3_drv_suspend,
246 .resume = ehci_hcd_sead3_drv_resume,
247};
248
249#define SEAD3_EHCI_PMOPS (&sead3_ehci_pmops)
250
251#else
252#define SEAD3_EHCI_PMOPS NULL
253#endif
254
255static struct platform_driver ehci_hcd_sead3_driver = {
256 .probe = ehci_hcd_sead3_drv_probe,
257 .remove = ehci_hcd_sead3_drv_remove,
258 .shutdown = usb_hcd_platform_shutdown,
259 .driver = {
260 .name = "sead3-ehci",
261 .owner = THIS_MODULE,
262 .pm = SEAD3_EHCI_PMOPS,
263 }
264};
265
266MODULE_ALIAS("platform:sead3-ehci");
diff --git a/drivers/usb/host/ehci-sh.c b/drivers/usb/host/ehci-sh.c
index 9d9cf47d80da..ca819cdd0c5e 100644
--- a/drivers/usb/host/ehci-sh.c
+++ b/drivers/usb/host/ehci-sh.c
@@ -11,6 +11,7 @@
11 */ 11 */
12#include <linux/platform_device.h> 12#include <linux/platform_device.h>
13#include <linux/clk.h> 13#include <linux/clk.h>
14#include <linux/platform_data/ehci-sh.h>
14 15
15struct ehci_sh_priv { 16struct ehci_sh_priv {
16 struct clk *iclk, *fclk; 17 struct clk *iclk, *fclk;
@@ -100,6 +101,7 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev)
100 const struct hc_driver *driver = &ehci_sh_hc_driver; 101 const struct hc_driver *driver = &ehci_sh_hc_driver;
101 struct resource *res; 102 struct resource *res;
102 struct ehci_sh_priv *priv; 103 struct ehci_sh_priv *priv;
104 struct ehci_sh_platdata *pdata;
103 struct usb_hcd *hcd; 105 struct usb_hcd *hcd;
104 int irq, ret; 106 int irq, ret;
105 107
@@ -124,6 +126,9 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev)
124 goto fail_create_hcd; 126 goto fail_create_hcd;
125 } 127 }
126 128
129 if (pdev->dev.platform_data != NULL)
130 pdata = pdev->dev.platform_data;
131
127 /* initialize hcd */ 132 /* initialize hcd */
128 hcd = usb_create_hcd(&ehci_sh_hc_driver, &pdev->dev, 133 hcd = usb_create_hcd(&ehci_sh_hc_driver, &pdev->dev,
129 dev_name(&pdev->dev)); 134 dev_name(&pdev->dev));
@@ -168,6 +173,9 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev)
168 clk_enable(priv->fclk); 173 clk_enable(priv->fclk);
169 clk_enable(priv->iclk); 174 clk_enable(priv->iclk);
170 175
176 if (pdata && pdata->phy_init)
177 pdata->phy_init();
178
171 ret = usb_add_hcd(hcd, irq, IRQF_SHARED); 179 ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
172 if (ret != 0) { 180 if (ret != 0) {
173 dev_err(&pdev->dev, "Failed to add hcd"); 181 dev_err(&pdev->dev, "Failed to add hcd");
diff --git a/drivers/usb/host/ehci-spear.c b/drivers/usb/host/ehci-spear.c
index 6e928559169c..37ba8c8d2fd0 100644
--- a/drivers/usb/host/ehci-spear.c
+++ b/drivers/usb/host/ehci-spear.c
@@ -13,6 +13,7 @@
13 13
14#include <linux/clk.h> 14#include <linux/clk.h>
15#include <linux/jiffies.h> 15#include <linux/jiffies.h>
16#include <linux/of.h>
16#include <linux/platform_device.h> 17#include <linux/platform_device.h>
17#include <linux/pm.h> 18#include <linux/pm.h>
18 19
@@ -25,12 +26,12 @@ struct spear_ehci {
25 26
26static void spear_start_ehci(struct spear_ehci *ehci) 27static void spear_start_ehci(struct spear_ehci *ehci)
27{ 28{
28 clk_enable(ehci->clk); 29 clk_prepare_enable(ehci->clk);
29} 30}
30 31
31static void spear_stop_ehci(struct spear_ehci *ehci) 32static void spear_stop_ehci(struct spear_ehci *ehci)
32{ 33{
33 clk_disable(ehci->clk); 34 clk_disable_unprepare(ehci->clk);
34} 35}
35 36
36static int ehci_spear_setup(struct usb_hcd *hcd) 37static int ehci_spear_setup(struct usb_hcd *hcd)
@@ -168,6 +169,8 @@ static int ehci_spear_drv_resume(struct device *dev)
168static SIMPLE_DEV_PM_OPS(ehci_spear_pm_ops, ehci_spear_drv_suspend, 169static SIMPLE_DEV_PM_OPS(ehci_spear_pm_ops, ehci_spear_drv_suspend,
169 ehci_spear_drv_resume); 170 ehci_spear_drv_resume);
170 171
172static u64 spear_ehci_dma_mask = DMA_BIT_MASK(32);
173
171static int spear_ehci_hcd_drv_probe(struct platform_device *pdev) 174static int spear_ehci_hcd_drv_probe(struct platform_device *pdev)
172{ 175{
173 struct usb_hcd *hcd ; 176 struct usb_hcd *hcd ;
@@ -175,12 +178,9 @@ static int spear_ehci_hcd_drv_probe(struct platform_device *pdev)
175 struct resource *res; 178 struct resource *res;
176 struct clk *usbh_clk; 179 struct clk *usbh_clk;
177 const struct hc_driver *driver = &ehci_spear_hc_driver; 180 const struct hc_driver *driver = &ehci_spear_hc_driver;
178 int *pdata = pdev->dev.platform_data;
179 int irq, retval; 181 int irq, retval;
180 char clk_name[20] = "usbh_clk"; 182 char clk_name[20] = "usbh_clk";
181 183 static int instance = -1;
182 if (pdata == NULL)
183 return -EFAULT;
184 184
185 if (usb_disabled()) 185 if (usb_disabled())
186 return -ENODEV; 186 return -ENODEV;
@@ -191,8 +191,22 @@ static int spear_ehci_hcd_drv_probe(struct platform_device *pdev)
191 goto fail_irq_get; 191 goto fail_irq_get;
192 } 192 }
193 193
194 if (*pdata >= 0) 194 /*
195 sprintf(clk_name, "usbh.%01d_clk", *pdata); 195 * Right now device-tree probed devices don't get dma_mask set.
196 * Since shared usb code relies on it, set it here for now.
197 * Once we have dma capability bindings this can go away.
198 */
199 if (!pdev->dev.dma_mask)
200 pdev->dev.dma_mask = &spear_ehci_dma_mask;
201
202 /*
203 * Increment the device instance, when probing via device-tree
204 */
205 if (pdev->id < 0)
206 instance++;
207 else
208 instance = pdev->id;
209 sprintf(clk_name, "usbh.%01d_clk", instance);
196 210
197 usbh_clk = clk_get(NULL, clk_name); 211 usbh_clk = clk_get(NULL, clk_name);
198 if (IS_ERR(usbh_clk)) { 212 if (IS_ERR(usbh_clk)) {
@@ -277,6 +291,11 @@ static int spear_ehci_hcd_drv_remove(struct platform_device *pdev)
277 return 0; 291 return 0;
278} 292}
279 293
294static struct of_device_id spear_ehci_id_table[] __devinitdata = {
295 { .compatible = "st,spear600-ehci", },
296 { },
297};
298
280static struct platform_driver spear_ehci_hcd_driver = { 299static struct platform_driver spear_ehci_hcd_driver = {
281 .probe = spear_ehci_hcd_drv_probe, 300 .probe = spear_ehci_hcd_drv_probe,
282 .remove = spear_ehci_hcd_drv_remove, 301 .remove = spear_ehci_hcd_drv_remove,
@@ -285,6 +304,7 @@ static struct platform_driver spear_ehci_hcd_driver = {
285 .name = "spear-ehci", 304 .name = "spear-ehci",
286 .bus = &platform_bus_type, 305 .bus = &platform_bus_type,
287 .pm = &ehci_spear_pm_ops, 306 .pm = &ehci_spear_pm_ops,
307 .of_match_table = of_match_ptr(spear_ehci_id_table),
288 } 308 }
289}; 309};
290 310
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index 87e271b9c157..4a44bf833611 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -147,18 +147,7 @@ static int tegra_ehci_hub_control(
147 147
148 spin_lock_irqsave(&ehci->lock, flags); 148 spin_lock_irqsave(&ehci->lock, flags);
149 149
150 /* 150 if (typeReq == GetPortStatus) {
151 * In ehci_hub_control() for USB_PORT_FEAT_ENABLE clears the other bits
152 * that are write on clear, by writing back the register read value, so
153 * USB_PORT_FEAT_ENABLE is handled by masking the set on clear bits
154 */
155 if (typeReq == ClearPortFeature && wValue == USB_PORT_FEAT_ENABLE) {
156 temp = ehci_readl(ehci, status_reg) & ~PORT_RWC_BITS;
157 ehci_writel(ehci, temp & ~PORT_PE, status_reg);
158 goto done;
159 }
160
161 else if (typeReq == GetPortStatus) {
162 temp = ehci_readl(ehci, status_reg); 151 temp = ehci_readl(ehci, status_reg);
163 if (tegra->port_resuming && !(temp & PORT_SUSPEND)) { 152 if (tegra->port_resuming && !(temp & PORT_SUSPEND)) {
164 /* Resume completed, re-enable disconnect detection */ 153 /* Resume completed, re-enable disconnect detection */
@@ -174,7 +163,7 @@ static int tegra_ehci_hub_control(
174 goto done; 163 goto done;
175 } 164 }
176 165
177 temp &= ~PORT_WKCONN_E; 166 temp &= ~(PORT_RWC_BITS | PORT_WKCONN_E);
178 temp |= PORT_WKDISC_E | PORT_WKOC_E; 167 temp |= PORT_WKDISC_E | PORT_WKOC_E;
179 ehci_writel(ehci, temp | PORT_SUSPEND, status_reg); 168 ehci_writel(ehci, temp | PORT_SUSPEND, status_reg);
180 169
@@ -319,26 +308,23 @@ static int tegra_ehci_setup(struct usb_hcd *hcd)
319 return retval; 308 return retval;
320} 309}
321 310
322struct temp_buffer { 311struct dma_aligned_buffer {
323 void *kmalloc_ptr; 312 void *kmalloc_ptr;
324 void *old_xfer_buffer; 313 void *old_xfer_buffer;
325 u8 data[0]; 314 u8 data[0];
326}; 315};
327 316
328static void free_temp_buffer(struct urb *urb) 317static void free_dma_aligned_buffer(struct urb *urb)
329{ 318{
330 enum dma_data_direction dir; 319 struct dma_aligned_buffer *temp;
331 struct temp_buffer *temp;
332 320
333 if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER)) 321 if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
334 return; 322 return;
335 323
336 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; 324 temp = container_of(urb->transfer_buffer,
337 325 struct dma_aligned_buffer, data);
338 temp = container_of(urb->transfer_buffer, struct temp_buffer,
339 data);
340 326
341 if (dir == DMA_FROM_DEVICE) 327 if (usb_urb_dir_in(urb))
342 memcpy(temp->old_xfer_buffer, temp->data, 328 memcpy(temp->old_xfer_buffer, temp->data,
343 urb->transfer_buffer_length); 329 urb->transfer_buffer_length);
344 urb->transfer_buffer = temp->old_xfer_buffer; 330 urb->transfer_buffer = temp->old_xfer_buffer;
@@ -347,10 +333,9 @@ static void free_temp_buffer(struct urb *urb)
347 urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER; 333 urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
348} 334}
349 335
350static int alloc_temp_buffer(struct urb *urb, gfp_t mem_flags) 336static int alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
351{ 337{
352 enum dma_data_direction dir; 338 struct dma_aligned_buffer *temp, *kmalloc_ptr;
353 struct temp_buffer *temp, *kmalloc_ptr;
354 size_t kmalloc_size; 339 size_t kmalloc_size;
355 340
356 if (urb->num_sgs || urb->sg || 341 if (urb->num_sgs || urb->sg ||
@@ -358,22 +343,19 @@ static int alloc_temp_buffer(struct urb *urb, gfp_t mem_flags)
358 !((uintptr_t)urb->transfer_buffer & (TEGRA_USB_DMA_ALIGN - 1))) 343 !((uintptr_t)urb->transfer_buffer & (TEGRA_USB_DMA_ALIGN - 1)))
359 return 0; 344 return 0;
360 345
361 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
362
363 /* Allocate a buffer with enough padding for alignment */ 346 /* Allocate a buffer with enough padding for alignment */
364 kmalloc_size = urb->transfer_buffer_length + 347 kmalloc_size = urb->transfer_buffer_length +
365 sizeof(struct temp_buffer) + TEGRA_USB_DMA_ALIGN - 1; 348 sizeof(struct dma_aligned_buffer) + TEGRA_USB_DMA_ALIGN - 1;
366 349
367 kmalloc_ptr = kmalloc(kmalloc_size, mem_flags); 350 kmalloc_ptr = kmalloc(kmalloc_size, mem_flags);
368 if (!kmalloc_ptr) 351 if (!kmalloc_ptr)
369 return -ENOMEM; 352 return -ENOMEM;
370 353
371 /* Position our struct temp_buffer such that data is aligned */ 354 /* Position our struct dma_aligned_buffer such that data is aligned */
372 temp = PTR_ALIGN(kmalloc_ptr + 1, TEGRA_USB_DMA_ALIGN) - 1; 355 temp = PTR_ALIGN(kmalloc_ptr + 1, TEGRA_USB_DMA_ALIGN) - 1;
373
374 temp->kmalloc_ptr = kmalloc_ptr; 356 temp->kmalloc_ptr = kmalloc_ptr;
375 temp->old_xfer_buffer = urb->transfer_buffer; 357 temp->old_xfer_buffer = urb->transfer_buffer;
376 if (dir == DMA_TO_DEVICE) 358 if (usb_urb_dir_out(urb))
377 memcpy(temp->data, urb->transfer_buffer, 359 memcpy(temp->data, urb->transfer_buffer,
378 urb->transfer_buffer_length); 360 urb->transfer_buffer_length);
379 urb->transfer_buffer = temp->data; 361 urb->transfer_buffer = temp->data;
@@ -388,13 +370,13 @@ static int tegra_ehci_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
388{ 370{
389 int ret; 371 int ret;
390 372
391 ret = alloc_temp_buffer(urb, mem_flags); 373 ret = alloc_dma_aligned_buffer(urb, mem_flags);
392 if (ret) 374 if (ret)
393 return ret; 375 return ret;
394 376
395 ret = usb_hcd_map_urb_for_dma(hcd, urb, mem_flags); 377 ret = usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
396 if (ret) 378 if (ret)
397 free_temp_buffer(urb); 379 free_dma_aligned_buffer(urb);
398 380
399 return ret; 381 return ret;
400} 382}
@@ -402,38 +384,39 @@ static int tegra_ehci_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
402static void tegra_ehci_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb) 384static void tegra_ehci_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
403{ 385{
404 usb_hcd_unmap_urb_for_dma(hcd, urb); 386 usb_hcd_unmap_urb_for_dma(hcd, urb);
405 free_temp_buffer(urb); 387 free_dma_aligned_buffer(urb);
406} 388}
407 389
408static const struct hc_driver tegra_ehci_hc_driver = { 390static const struct hc_driver tegra_ehci_hc_driver = {
409 .description = hcd_name, 391 .description = hcd_name,
410 .product_desc = "Tegra EHCI Host Controller", 392 .product_desc = "Tegra EHCI Host Controller",
411 .hcd_priv_size = sizeof(struct ehci_hcd), 393 .hcd_priv_size = sizeof(struct ehci_hcd),
412
413 .flags = HCD_USB2 | HCD_MEMORY, 394 .flags = HCD_USB2 | HCD_MEMORY,
414 395
415 .reset = tegra_ehci_setup, 396 /* standard ehci functions */
416 .irq = ehci_irq, 397 .irq = ehci_irq,
417
418 .start = ehci_run, 398 .start = ehci_run,
419 .stop = ehci_stop, 399 .stop = ehci_stop,
420 .shutdown = tegra_ehci_shutdown,
421 .urb_enqueue = ehci_urb_enqueue, 400 .urb_enqueue = ehci_urb_enqueue,
422 .urb_dequeue = ehci_urb_dequeue, 401 .urb_dequeue = ehci_urb_dequeue,
423 .map_urb_for_dma = tegra_ehci_map_urb_for_dma,
424 .unmap_urb_for_dma = tegra_ehci_unmap_urb_for_dma,
425 .endpoint_disable = ehci_endpoint_disable, 402 .endpoint_disable = ehci_endpoint_disable,
426 .endpoint_reset = ehci_endpoint_reset, 403 .endpoint_reset = ehci_endpoint_reset,
427 .get_frame_number = ehci_get_frame, 404 .get_frame_number = ehci_get_frame,
428 .hub_status_data = ehci_hub_status_data, 405 .hub_status_data = ehci_hub_status_data,
429 .hub_control = tegra_ehci_hub_control,
430 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, 406 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
407 .relinquish_port = ehci_relinquish_port,
408 .port_handed_over = ehci_port_handed_over,
409
410 /* modified ehci functions for tegra */
411 .reset = tegra_ehci_setup,
412 .shutdown = tegra_ehci_shutdown,
413 .map_urb_for_dma = tegra_ehci_map_urb_for_dma,
414 .unmap_urb_for_dma = tegra_ehci_unmap_urb_for_dma,
415 .hub_control = tegra_ehci_hub_control,
431#ifdef CONFIG_PM 416#ifdef CONFIG_PM
432 .bus_suspend = ehci_bus_suspend, 417 .bus_suspend = ehci_bus_suspend,
433 .bus_resume = ehci_bus_resume, 418 .bus_resume = ehci_bus_resume,
434#endif 419#endif
435 .relinquish_port = ehci_relinquish_port,
436 .port_handed_over = ehci_port_handed_over,
437}; 420};
438 421
439static int setup_vbus_gpio(struct platform_device *pdev, 422static int setup_vbus_gpio(struct platform_device *pdev,
diff --git a/drivers/usb/host/fhci-tds.c b/drivers/usb/host/fhci-tds.c
index 0ea577bfca2a..c5ed88199292 100644
--- a/drivers/usb/host/fhci-tds.c
+++ b/drivers/usb/host/fhci-tds.c
@@ -155,7 +155,7 @@ u32 fhci_create_ep(struct fhci_usb *usb, enum fhci_mem_alloc data_mem,
155 struct endpoint *ep; 155 struct endpoint *ep;
156 struct usb_td __iomem *td; 156 struct usb_td __iomem *td;
157 unsigned long ep_offset; 157 unsigned long ep_offset;
158 char *err_for = "enpoint PRAM"; 158 char *err_for = "endpoint PRAM";
159 int ep_mem_size; 159 int ep_mem_size;
160 u32 i; 160 u32 i;
161 161
diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c
index ab333ac6071d..22ff6b3a676f 100644
--- a/drivers/usb/host/fsl-mph-dr-of.c
+++ b/drivers/usb/host/fsl-mph-dr-of.c
@@ -119,6 +119,39 @@ error:
119 119
120static const struct of_device_id fsl_usb2_mph_dr_of_match[]; 120static const struct of_device_id fsl_usb2_mph_dr_of_match[];
121 121
122static int usb_get_ver_info(struct device_node *np)
123{
124 int ver = -1;
125
126 /*
127 * returns 1 for usb controller version 1.6
128 * returns 2 for usb controller version 2.2
129 * returns 0 otherwise
130 */
131 if (of_device_is_compatible(np, "fsl-usb2-dr")) {
132 if (of_device_is_compatible(np, "fsl-usb2-dr-v1.6"))
133 ver = FSL_USB_VER_1_6;
134 else if (of_device_is_compatible(np, "fsl-usb2-dr-v2.2"))
135 ver = FSL_USB_VER_2_2;
136 else /* for previous controller versions */
137 ver = FSL_USB_VER_OLD;
138
139 if (ver > -1)
140 return ver;
141 }
142
143 if (of_device_is_compatible(np, "fsl-usb2-mph")) {
144 if (of_device_is_compatible(np, "fsl-usb2-mph-v1.6"))
145 ver = FSL_USB_VER_1_6;
146 else if (of_device_is_compatible(np, "fsl-usb2-mph-v2.2"))
147 ver = FSL_USB_VER_2_2;
148 else /* for previous controller versions */
149 ver = FSL_USB_VER_OLD;
150 }
151
152 return ver;
153}
154
122static int __devinit fsl_usb2_mph_dr_of_probe(struct platform_device *ofdev) 155static int __devinit fsl_usb2_mph_dr_of_probe(struct platform_device *ofdev)
123{ 156{
124 struct device_node *np = ofdev->dev.of_node; 157 struct device_node *np = ofdev->dev.of_node;
@@ -166,6 +199,14 @@ static int __devinit fsl_usb2_mph_dr_of_probe(struct platform_device *ofdev)
166 199
167 prop = of_get_property(np, "phy_type", NULL); 200 prop = of_get_property(np, "phy_type", NULL);
168 pdata->phy_mode = determine_usb_phy(prop); 201 pdata->phy_mode = determine_usb_phy(prop);
202 pdata->controller_ver = usb_get_ver_info(np);
203
204 if (pdata->have_sysif_regs) {
205 if (pdata->controller_ver < 0) {
206 dev_warn(&ofdev->dev, "Could not get controller version\n");
207 return -ENODEV;
208 }
209 }
169 210
170 for (i = 0; i < ARRAY_SIZE(dev_data->drivers); i++) { 211 for (i = 0; i < ARRAY_SIZE(dev_data->drivers); i++) {
171 if (!dev_data->drivers[i]) 212 if (!dev_data->drivers[i])
diff --git a/drivers/usb/host/isp1760-hcd.c b/drivers/usb/host/isp1760-hcd.c
index fc72d44bf787..a35bbddf8968 100644
--- a/drivers/usb/host/isp1760-hcd.c
+++ b/drivers/usb/host/isp1760-hcd.c
@@ -1562,11 +1562,14 @@ static int isp1760_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
1562 1562
1563 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) { 1563 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) {
1564 retval = -ESHUTDOWN; 1564 retval = -ESHUTDOWN;
1565 qtd_list_free(&new_qtds);
1565 goto out; 1566 goto out;
1566 } 1567 }
1567 retval = usb_hcd_link_urb_to_ep(hcd, urb); 1568 retval = usb_hcd_link_urb_to_ep(hcd, urb);
1568 if (retval) 1569 if (retval) {
1570 qtd_list_free(&new_qtds);
1569 goto out; 1571 goto out;
1572 }
1570 1573
1571 qh = urb->ep->hcpriv; 1574 qh = urb->ep->hcpriv;
1572 if (qh) { 1575 if (qh) {
@@ -1584,6 +1587,7 @@ static int isp1760_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
1584 if (!qh) { 1587 if (!qh) {
1585 retval = -ENOMEM; 1588 retval = -ENOMEM;
1586 usb_hcd_unlink_urb_from_ep(hcd, urb); 1589 usb_hcd_unlink_urb_from_ep(hcd, urb);
1590 qtd_list_free(&new_qtds);
1587 goto out; 1591 goto out;
1588 } 1592 }
1589 list_add_tail(&qh->qh_list, ep_queue); 1593 list_add_tail(&qh->qh_list, ep_queue);
@@ -1683,6 +1687,7 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
1683 list_for_each_entry(qtd, &qh->qtd_list, qtd_list) 1687 list_for_each_entry(qtd, &qh->qtd_list, qtd_list)
1684 if (qtd->urb == urb) { 1688 if (qtd->urb == urb) {
1685 dequeue_urb_from_qtd(hcd, qh, qtd); 1689 dequeue_urb_from_qtd(hcd, qh, qtd);
1690 list_move(&qtd->qtd_list, &qh->qtd_list);
1686 break; 1691 break;
1687 } 1692 }
1688 1693
@@ -2176,7 +2181,7 @@ static const struct hc_driver isp1760_hc_driver = {
2176 2181
2177int __init init_kmem_once(void) 2182int __init init_kmem_once(void)
2178{ 2183{
2179 urb_listitem_cachep = kmem_cache_create("isp1760 urb_listitem", 2184 urb_listitem_cachep = kmem_cache_create("isp1760_urb_listitem",
2180 sizeof(struct urb_listitem), 0, SLAB_TEMPORARY | 2185 sizeof(struct urb_listitem), 0, SLAB_TEMPORARY |
2181 SLAB_MEM_SPREAD, NULL); 2186 SLAB_MEM_SPREAD, NULL);
2182 2187
diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c
index 4592dc17a9f9..fff114fd5461 100644
--- a/drivers/usb/host/isp1760-if.c
+++ b/drivers/usb/host/isp1760-if.c
@@ -398,6 +398,9 @@ static int __devinit isp1760_plat_probe(struct platform_device *pdev)
398 hcd = isp1760_register(mem_res->start, mem_size, irq_res->start, 398 hcd = isp1760_register(mem_res->start, mem_size, irq_res->start,
399 irqflags, -ENOENT, 399 irqflags, -ENOENT,
400 &pdev->dev, dev_name(&pdev->dev), devflags); 400 &pdev->dev, dev_name(&pdev->dev), devflags);
401
402 dev_set_drvdata(&pdev->dev, hcd);
403
401 if (IS_ERR(hcd)) { 404 if (IS_ERR(hcd)) {
402 pr_warning("isp1760: Failed to register the HCD device\n"); 405 pr_warning("isp1760: Failed to register the HCD device\n");
403 ret = -ENODEV; 406 ret = -ENODEV;
@@ -417,11 +420,16 @@ static int __devexit isp1760_plat_remove(struct platform_device *pdev)
417{ 420{
418 struct resource *mem_res; 421 struct resource *mem_res;
419 resource_size_t mem_size; 422 resource_size_t mem_size;
423 struct usb_hcd *hcd = dev_get_drvdata(&pdev->dev);
424
425 usb_remove_hcd(hcd);
420 426
421 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 427 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
422 mem_size = resource_size(mem_res); 428 mem_size = resource_size(mem_res);
423 release_mem_region(mem_res->start, mem_size); 429 release_mem_region(mem_res->start, mem_size);
424 430
431 usb_put_hcd(hcd);
432
425 return 0; 433 return 0;
426} 434}
427 435
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 13ebeca8e73e..a665b3eaa746 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -129,7 +129,7 @@ static int __devinit usb_hcd_at91_probe(const struct hc_driver *driver,
129 if (!hcd) 129 if (!hcd)
130 return -ENOMEM; 130 return -ENOMEM;
131 hcd->rsrc_start = pdev->resource[0].start; 131 hcd->rsrc_start = pdev->resource[0].start;
132 hcd->rsrc_len = pdev->resource[0].end - pdev->resource[0].start + 1; 132 hcd->rsrc_len = resource_size(&pdev->resource[0]);
133 133
134 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { 134 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
135 pr_debug("request_mem_region failed\n"); 135 pr_debug("request_mem_region failed\n");
@@ -223,7 +223,7 @@ static void __devexit usb_hcd_at91_remove(struct usb_hcd *hcd,
223/*-------------------------------------------------------------------------*/ 223/*-------------------------------------------------------------------------*/
224 224
225static int __devinit 225static int __devinit
226ohci_at91_start (struct usb_hcd *hcd) 226ohci_at91_reset (struct usb_hcd *hcd)
227{ 227{
228 struct at91_usbh_data *board = hcd->self.controller->platform_data; 228 struct at91_usbh_data *board = hcd->self.controller->platform_data;
229 struct ohci_hcd *ohci = hcd_to_ohci (hcd); 229 struct ohci_hcd *ohci = hcd_to_ohci (hcd);
@@ -233,9 +233,18 @@ ohci_at91_start (struct usb_hcd *hcd)
233 return ret; 233 return ret;
234 234
235 ohci->num_ports = board->ports; 235 ohci->num_ports = board->ports;
236 return 0;
237}
238
239static int __devinit
240ohci_at91_start (struct usb_hcd *hcd)
241{
242 struct ohci_hcd *ohci = hcd_to_ohci (hcd);
243 int ret;
236 244
237 if ((ret = ohci_run(ohci)) < 0) { 245 if ((ret = ohci_run(ohci)) < 0) {
238 err("can't start %s", hcd->self.bus_name); 246 dev_err(hcd->self.controller, "can't start %s\n",
247 hcd->self.bus_name);
239 ohci_stop(hcd); 248 ohci_stop(hcd);
240 return ret; 249 return ret;
241 } 250 }
@@ -418,6 +427,7 @@ static const struct hc_driver ohci_at91_hc_driver = {
418 /* 427 /*
419 * basic lifecycle operations 428 * basic lifecycle operations
420 */ 429 */
430 .reset = ohci_at91_reset,
421 .start = ohci_at91_start, 431 .start = ohci_at91_start,
422 .stop = ohci_stop, 432 .stop = ohci_stop,
423 .shutdown = ohci_shutdown, 433 .shutdown = ohci_shutdown,
diff --git a/drivers/usb/host/ohci-au1xxx.c b/drivers/usb/host/ohci-au1xxx.c
index 4ea63b2cac42..c611699b4aa6 100644
--- a/drivers/usb/host/ohci-au1xxx.c
+++ b/drivers/usb/host/ohci-au1xxx.c
@@ -37,7 +37,8 @@ static int __devinit ohci_au1xxx_start(struct usb_hcd *hcd)
37 return ret; 37 return ret;
38 38
39 if ((ret = ohci_run(ohci)) < 0) { 39 if ((ret = ohci_run(ohci)) < 0) {
40 err ("can't start %s", hcd->self.bus_name); 40 dev_err(hcd->self.controller, "can't start %s",
41 hcd->self.bus_name);
41 ohci_stop(hcd); 42 ohci_stop(hcd);
42 return ret; 43 return ret;
43 } 44 }
diff --git a/drivers/usb/host/ohci-cns3xxx.c b/drivers/usb/host/ohci-cns3xxx.c
index 5a00a1e1c6ca..2c9f233047be 100644
--- a/drivers/usb/host/ohci-cns3xxx.c
+++ b/drivers/usb/host/ohci-cns3xxx.c
@@ -41,7 +41,8 @@ cns3xxx_ohci_start(struct usb_hcd *hcd)
41 41
42 ret = ohci_run(ohci); 42 ret = ohci_run(ohci);
43 if (ret < 0) { 43 if (ret < 0) {
44 err("can't start %s", hcd->self.bus_name); 44 dev_err(hcd->self.controller, "can't start %s\n",
45 hcd->self.bus_name);
45 ohci_stop(hcd); 46 ohci_stop(hcd);
46 return ret; 47 return ret;
47 } 48 }
diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c
index 843509778a33..269b1e0f7691 100644
--- a/drivers/usb/host/ohci-da8xx.c
+++ b/drivers/usb/host/ohci-da8xx.c
@@ -454,3 +454,5 @@ static struct platform_driver ohci_hcd_da8xx_driver = {
454 .name = "ohci", 454 .name = "ohci",
455 }, 455 },
456}; 456};
457
458MODULE_ALIAS("platform:ohci");
diff --git a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c
index e4bcb62b930a..31b81f9eacdc 100644
--- a/drivers/usb/host/ohci-dbg.c
+++ b/drivers/usb/host/ohci-dbg.c
@@ -29,14 +29,14 @@ urb_print(struct urb * urb, char * str, int small, int status)
29 unsigned int pipe= urb->pipe; 29 unsigned int pipe= urb->pipe;
30 30
31 if (!urb->dev || !urb->dev->bus) { 31 if (!urb->dev || !urb->dev->bus) {
32 dbg("%s URB: no dev", str); 32 printk(KERN_DEBUG "%s URB: no dev\n", str);
33 return; 33 return;
34 } 34 }
35 35
36#ifndef OHCI_VERBOSE_DEBUG 36#ifndef OHCI_VERBOSE_DEBUG
37 if (status != 0) 37 if (status != 0)
38#endif 38#endif
39 dbg("%s %p dev=%d ep=%d%s-%s flags=%x len=%d/%d stat=%d", 39 printk(KERN_DEBUG "%s %p dev=%d ep=%d%s-%s flags=%x len=%d/%d stat=%d\n",
40 str, 40 str,
41 urb, 41 urb,
42 usb_pipedevice (pipe), 42 usb_pipedevice (pipe),
diff --git a/drivers/usb/host/ohci-ep93xx.c b/drivers/usb/host/ohci-ep93xx.c
index 3d63574d2c7e..dbfbd1dfd2e2 100644
--- a/drivers/usb/host/ohci-ep93xx.c
+++ b/drivers/usb/host/ohci-ep93xx.c
@@ -47,7 +47,7 @@ static int usb_hcd_ep93xx_probe(const struct hc_driver *driver,
47 struct usb_hcd *hcd; 47 struct usb_hcd *hcd;
48 48
49 if (pdev->resource[1].flags != IORESOURCE_IRQ) { 49 if (pdev->resource[1].flags != IORESOURCE_IRQ) {
50 dbg("resource[1] is not IORESOURCE_IRQ"); 50 dev_dbg(&pdev->dev, "resource[1] is not IORESOURCE_IRQ\n");
51 return -ENOMEM; 51 return -ENOMEM;
52 } 52 }
53 53
@@ -65,14 +65,14 @@ static int usb_hcd_ep93xx_probe(const struct hc_driver *driver,
65 65
66 hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); 66 hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
67 if (hcd->regs == NULL) { 67 if (hcd->regs == NULL) {
68 dbg("ioremap failed"); 68 dev_dbg(&pdev->dev, "ioremap failed\n");
69 retval = -ENOMEM; 69 retval = -ENOMEM;
70 goto err2; 70 goto err2;
71 } 71 }
72 72
73 usb_host_clock = clk_get(&pdev->dev, NULL); 73 usb_host_clock = clk_get(&pdev->dev, NULL);
74 if (IS_ERR(usb_host_clock)) { 74 if (IS_ERR(usb_host_clock)) {
75 dbg("clk_get failed"); 75 dev_dbg(&pdev->dev, "clk_get failed\n");
76 retval = PTR_ERR(usb_host_clock); 76 retval = PTR_ERR(usb_host_clock);
77 goto err3; 77 goto err3;
78 } 78 }
@@ -116,7 +116,8 @@ static int __devinit ohci_ep93xx_start(struct usb_hcd *hcd)
116 return ret; 116 return ret;
117 117
118 if ((ret = ohci_run(ohci)) < 0) { 118 if ((ret = ohci_run(ohci)) < 0) {
119 err("can't start %s", hcd->self.bus_name); 119 dev_err(hcd->self.controller, "can't start %s\n",
120 hcd->self.bus_name);
120 ohci_stop(hcd); 121 ohci_stop(hcd);
121 return ret; 122 return ret;
122 } 123 }
diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c
index 37bb20ebb6fc..2909621ea196 100644
--- a/drivers/usb/host/ohci-exynos.c
+++ b/drivers/usb/host/ohci-exynos.c
@@ -35,7 +35,8 @@ static int ohci_exynos_start(struct usb_hcd *hcd)
35 35
36 ret = ohci_run(ohci); 36 ret = ohci_run(ohci);
37 if (ret < 0) { 37 if (ret < 0) {
38 err("can't start %s", hcd->self.bus_name); 38 dev_err(hcd->self.controller, "can't start %s\n",
39 hcd->self.bus_name);
39 ohci_stop(hcd); 40 ohci_stop(hcd);
40 return ret; 41 return ret;
41 } 42 }
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index 235171f29460..e0adf5c0cf55 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -1080,11 +1080,6 @@ MODULE_LICENSE ("GPL");
1080#define PS3_SYSTEM_BUS_DRIVER ps3_ohci_driver 1080#define PS3_SYSTEM_BUS_DRIVER ps3_ohci_driver
1081#endif 1081#endif
1082 1082
1083#ifdef CONFIG_USB_OHCI_HCD_SSB
1084#include "ohci-ssb.c"
1085#define SSB_OHCI_DRIVER ssb_ohci_driver
1086#endif
1087
1088#ifdef CONFIG_MFD_SM501 1083#ifdef CONFIG_MFD_SM501
1089#include "ohci-sm501.c" 1084#include "ohci-sm501.c"
1090#define SM501_OHCI_DRIVER ohci_hcd_sm501_driver 1085#define SM501_OHCI_DRIVER ohci_hcd_sm501_driver
@@ -1128,8 +1123,7 @@ MODULE_LICENSE ("GPL");
1128 !defined(SA1111_DRIVER) && \ 1123 !defined(SA1111_DRIVER) && \
1129 !defined(PS3_SYSTEM_BUS_DRIVER) && \ 1124 !defined(PS3_SYSTEM_BUS_DRIVER) && \
1130 !defined(SM501_OHCI_DRIVER) && \ 1125 !defined(SM501_OHCI_DRIVER) && \
1131 !defined(TMIO_OHCI_DRIVER) && \ 1126 !defined(TMIO_OHCI_DRIVER)
1132 !defined(SSB_OHCI_DRIVER)
1133#error "missing bus glue for ohci-hcd" 1127#error "missing bus glue for ohci-hcd"
1134#endif 1128#endif
1135 1129
@@ -1195,12 +1189,6 @@ static int __init ohci_hcd_mod_init(void)
1195 goto error_pci; 1189 goto error_pci;
1196#endif 1190#endif
1197 1191
1198#ifdef SSB_OHCI_DRIVER
1199 retval = ssb_driver_register(&SSB_OHCI_DRIVER);
1200 if (retval)
1201 goto error_ssb;
1202#endif
1203
1204#ifdef SM501_OHCI_DRIVER 1192#ifdef SM501_OHCI_DRIVER
1205 retval = platform_driver_register(&SM501_OHCI_DRIVER); 1193 retval = platform_driver_register(&SM501_OHCI_DRIVER);
1206 if (retval < 0) 1194 if (retval < 0)
@@ -1224,10 +1212,6 @@ static int __init ohci_hcd_mod_init(void)
1224 platform_driver_unregister(&SM501_OHCI_DRIVER); 1212 platform_driver_unregister(&SM501_OHCI_DRIVER);
1225 error_sm501: 1213 error_sm501:
1226#endif 1214#endif
1227#ifdef SSB_OHCI_DRIVER
1228 ssb_driver_unregister(&SSB_OHCI_DRIVER);
1229 error_ssb:
1230#endif
1231#ifdef PCI_DRIVER 1215#ifdef PCI_DRIVER
1232 pci_unregister_driver(&PCI_DRIVER); 1216 pci_unregister_driver(&PCI_DRIVER);
1233 error_pci: 1217 error_pci:
@@ -1275,9 +1259,6 @@ static void __exit ohci_hcd_mod_exit(void)
1275#ifdef SM501_OHCI_DRIVER 1259#ifdef SM501_OHCI_DRIVER
1276 platform_driver_unregister(&SM501_OHCI_DRIVER); 1260 platform_driver_unregister(&SM501_OHCI_DRIVER);
1277#endif 1261#endif
1278#ifdef SSB_OHCI_DRIVER
1279 ssb_driver_unregister(&SSB_OHCI_DRIVER);
1280#endif
1281#ifdef PCI_DRIVER 1262#ifdef PCI_DRIVER
1282 pci_unregister_driver(&PCI_DRIVER); 1263 pci_unregister_driver(&PCI_DRIVER);
1283#endif 1264#endif
diff --git a/drivers/usb/host/ohci-nxp.c b/drivers/usb/host/ohci-nxp.c
index 6618de1d881d..1e364ec962fb 100644
--- a/drivers/usb/host/ohci-nxp.c
+++ b/drivers/usb/host/ohci-nxp.c
@@ -22,6 +22,8 @@
22#include <linux/clk.h> 22#include <linux/clk.h>
23#include <linux/platform_device.h> 23#include <linux/platform_device.h>
24#include <linux/i2c.h> 24#include <linux/i2c.h>
25#include <linux/of.h>
26#include <linux/usb/isp1301.h>
25 27
26#include <mach/hardware.h> 28#include <mach/hardware.h>
27#include <asm/mach-types.h> 29#include <asm/mach-types.h>
@@ -29,7 +31,6 @@
29 31
30#include <mach/platform.h> 32#include <mach/platform.h>
31#include <mach/irqs.h> 33#include <mach/irqs.h>
32#include <asm/gpio.h>
33 34
34#define USB_CONFIG_BASE 0x31020000 35#define USB_CONFIG_BASE 0x31020000
35#define PWRMAN_BASE 0x40004000 36#define PWRMAN_BASE 0x40004000
@@ -38,7 +39,9 @@
38 39
39/* USB_CTRL bit defines */ 40/* USB_CTRL bit defines */
40#define USB_SLAVE_HCLK_EN (1 << 24) 41#define USB_SLAVE_HCLK_EN (1 << 24)
42#define USB_DEV_NEED_CLK_EN (1 << 22)
41#define USB_HOST_NEED_CLK_EN (1 << 21) 43#define USB_HOST_NEED_CLK_EN (1 << 21)
44#define PAD_CONTROL_LAST_DRIVEN (1 << 19)
42 45
43#define USB_OTG_CLK_CTRL IO_ADDRESS(USB_CONFIG_BASE + 0xFF4) 46#define USB_OTG_CLK_CTRL IO_ADDRESS(USB_CONFIG_BASE + 0xFF4)
44#define USB_OTG_CLK_STAT IO_ADDRESS(USB_CONFIG_BASE + 0xFF8) 47#define USB_OTG_CLK_STAT IO_ADDRESS(USB_CONFIG_BASE + 0xFF8)
@@ -56,54 +59,6 @@
56#define TRANSPARENT_I2C_EN (1 << 7) 59#define TRANSPARENT_I2C_EN (1 << 7)
57#define HOST_EN (1 << 0) 60#define HOST_EN (1 << 0)
58 61
59/* ISP1301 USB transceiver I2C registers */
60#define ISP1301_MODE_CONTROL_1 0x04 /* u8 read, set, +1 clear */
61
62#define MC1_SPEED_REG (1 << 0)
63#define MC1_SUSPEND_REG (1 << 1)
64#define MC1_DAT_SE0 (1 << 2)
65#define MC1_TRANSPARENT (1 << 3)
66#define MC1_BDIS_ACON_EN (1 << 4)
67#define MC1_OE_INT_EN (1 << 5)
68#define MC1_UART_EN (1 << 6)
69#define MC1_MASK 0x7f
70
71#define ISP1301_MODE_CONTROL_2 0x12 /* u8 read, set, +1 clear */
72
73#define MC2_GLOBAL_PWR_DN (1 << 0)
74#define MC2_SPD_SUSP_CTRL (1 << 1)
75#define MC2_BI_DI (1 << 2)
76#define MC2_TRANSP_BDIR0 (1 << 3)
77#define MC2_TRANSP_BDIR1 (1 << 4)
78#define MC2_AUDIO_EN (1 << 5)
79#define MC2_PSW_EN (1 << 6)
80#define MC2_EN2V7 (1 << 7)
81
82#define ISP1301_OTG_CONTROL_1 0x06 /* u8 read, set, +1 clear */
83# define OTG1_DP_PULLUP (1 << 0)
84# define OTG1_DM_PULLUP (1 << 1)
85# define OTG1_DP_PULLDOWN (1 << 2)
86# define OTG1_DM_PULLDOWN (1 << 3)
87# define OTG1_ID_PULLDOWN (1 << 4)
88# define OTG1_VBUS_DRV (1 << 5)
89# define OTG1_VBUS_DISCHRG (1 << 6)
90# define OTG1_VBUS_CHRG (1 << 7)
91#define ISP1301_OTG_STATUS 0x10 /* u8 readonly */
92# define OTG_B_SESS_END (1 << 6)
93# define OTG_B_SESS_VLD (1 << 7)
94
95#define ISP1301_I2C_ADDR 0x2C
96
97#define ISP1301_I2C_MODE_CONTROL_1 0x4
98#define ISP1301_I2C_MODE_CONTROL_2 0x12
99#define ISP1301_I2C_OTG_CONTROL_1 0x6
100#define ISP1301_I2C_OTG_CONTROL_2 0x10
101#define ISP1301_I2C_INTERRUPT_SOURCE 0x8
102#define ISP1301_I2C_INTERRUPT_LATCH 0xA
103#define ISP1301_I2C_INTERRUPT_FALLING 0xC
104#define ISP1301_I2C_INTERRUPT_RISING 0xE
105#define ISP1301_I2C_REG_CLEAR_ADDR 1
106
107/* On LPC32xx, those are undefined */ 62/* On LPC32xx, those are undefined */
108#ifndef start_int_set_falling_edge 63#ifndef start_int_set_falling_edge
109#define start_int_set_falling_edge(irq) 64#define start_int_set_falling_edge(irq)
@@ -113,42 +68,12 @@
113#define start_int_umask(irq) 68#define start_int_umask(irq)
114#endif 69#endif
115 70
116static struct i2c_driver isp1301_driver;
117static struct i2c_client *isp1301_i2c_client; 71static struct i2c_client *isp1301_i2c_client;
118 72
119extern int usb_disabled(void); 73extern int usb_disabled(void);
120extern int ocpi_enable(void);
121 74
122static struct clk *usb_clk; 75static struct clk *usb_clk;
123 76
124static const unsigned short normal_i2c[] =
125 { ISP1301_I2C_ADDR, ISP1301_I2C_ADDR + 1, I2C_CLIENT_END };
126
127static int isp1301_probe(struct i2c_client *client,
128 const struct i2c_device_id *id)
129{
130 return 0;
131}
132
133static int isp1301_remove(struct i2c_client *client)
134{
135 return 0;
136}
137
138static const struct i2c_device_id isp1301_id[] = {
139 { "isp1301_nxp", 0 },
140 { }
141};
142
143static struct i2c_driver isp1301_driver = {
144 .driver = {
145 .name = "isp1301_nxp",
146 },
147 .probe = isp1301_probe,
148 .remove = isp1301_remove,
149 .id_table = isp1301_id,
150};
151
152static void isp1301_configure_pnx4008(void) 77static void isp1301_configure_pnx4008(void)
153{ 78{
154 /* PNX4008 only supports DAT_SE0 USB mode */ 79 /* PNX4008 only supports DAT_SE0 USB mode */
@@ -220,7 +145,7 @@ static void isp1301_configure_lpc32xx(void)
220 ISP1301_I2C_INTERRUPT_RISING | ISP1301_I2C_REG_CLEAR_ADDR, ~0); 145 ISP1301_I2C_INTERRUPT_RISING | ISP1301_I2C_REG_CLEAR_ADDR, ~0);
221 146
222 /* Enable usb_need_clk clock after transceiver is initialized */ 147 /* Enable usb_need_clk clock after transceiver is initialized */
223 __raw_writel((__raw_readl(USB_CTRL) | (1 << 22)), USB_CTRL); 148 __raw_writel(__raw_readl(USB_CTRL) | USB_HOST_NEED_CLK_EN, USB_CTRL);
224 149
225 printk(KERN_INFO "ISP1301 Vendor ID : 0x%04x\n", 150 printk(KERN_INFO "ISP1301 Vendor ID : 0x%04x\n",
226 i2c_smbus_read_word_data(isp1301_i2c_client, 0x00)); 151 i2c_smbus_read_word_data(isp1301_i2c_client, 0x00));
@@ -372,65 +297,55 @@ static int __devinit usb_hcd_nxp_probe(struct platform_device *pdev)
372 struct usb_hcd *hcd = 0; 297 struct usb_hcd *hcd = 0;
373 struct ohci_hcd *ohci; 298 struct ohci_hcd *ohci;
374 const struct hc_driver *driver = &ohci_nxp_hc_driver; 299 const struct hc_driver *driver = &ohci_nxp_hc_driver;
375 struct i2c_adapter *i2c_adap; 300 struct resource *res;
376 struct i2c_board_info i2c_info;
377
378 int ret = 0, irq; 301 int ret = 0, irq;
302 struct device_node *isp1301_node;
379 303
380 dev_dbg(&pdev->dev, "%s: " DRIVER_DESC " (nxp)\n", hcd_name); 304 if (pdev->dev.of_node) {
381 if (usb_disabled()) { 305 isp1301_node = of_parse_phandle(pdev->dev.of_node,
382 err("USB is disabled"); 306 "transceiver", 0);
383 ret = -ENODEV; 307 } else {
384 goto out; 308 isp1301_node = NULL;
385 } 309 }
386 310
387 if (pdev->num_resources != 2 311 isp1301_i2c_client = isp1301_get_client(isp1301_node);
388 || pdev->resource[0].flags != IORESOURCE_MEM 312 if (!isp1301_i2c_client) {
389 || pdev->resource[1].flags != IORESOURCE_IRQ) { 313 ret = -EPROBE_DEFER;
390 err("Invalid resource configuration");
391 ret = -ENODEV;
392 goto out; 314 goto out;
393 } 315 }
394 316
395 /* Enable AHB slave USB clock, needed for further USB clock control */ 317 pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
396 __raw_writel(USB_SLAVE_HCLK_EN | (1 << 19), USB_CTRL); 318 pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
397 319
398 ret = i2c_add_driver(&isp1301_driver); 320 dev_dbg(&pdev->dev, "%s: " DRIVER_DESC " (nxp)\n", hcd_name);
399 if (ret < 0) { 321 if (usb_disabled()) {
400 err("failed to add ISP1301 driver"); 322 dev_err(&pdev->dev, "USB is disabled\n");
401 goto out;
402 }
403 i2c_adap = i2c_get_adapter(2);
404 memset(&i2c_info, 0, sizeof(struct i2c_board_info));
405 strlcpy(i2c_info.type, "isp1301_nxp", I2C_NAME_SIZE);
406 isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info,
407 normal_i2c, NULL);
408 i2c_put_adapter(i2c_adap);
409 if (!isp1301_i2c_client) {
410 err("failed to connect I2C to ISP1301 USB Transceiver");
411 ret = -ENODEV; 323 ret = -ENODEV;
412 goto out_i2c_driver; 324 goto out;
413 } 325 }
414 326
327 /* Enable AHB slave USB clock, needed for further USB clock control */
328 __raw_writel(USB_SLAVE_HCLK_EN | PAD_CONTROL_LAST_DRIVEN, USB_CTRL);
329
415 isp1301_configure(); 330 isp1301_configure();
416 331
417 /* Enable USB PLL */ 332 /* Enable USB PLL */
418 usb_clk = clk_get(&pdev->dev, "ck_pll5"); 333 usb_clk = clk_get(&pdev->dev, "ck_pll5");
419 if (IS_ERR(usb_clk)) { 334 if (IS_ERR(usb_clk)) {
420 err("failed to acquire USB PLL"); 335 dev_err(&pdev->dev, "failed to acquire USB PLL\n");
421 ret = PTR_ERR(usb_clk); 336 ret = PTR_ERR(usb_clk);
422 goto out1; 337 goto out1;
423 } 338 }
424 339
425 ret = clk_enable(usb_clk); 340 ret = clk_enable(usb_clk);
426 if (ret < 0) { 341 if (ret < 0) {
427 err("failed to start USB PLL"); 342 dev_err(&pdev->dev, "failed to start USB PLL\n");
428 goto out2; 343 goto out2;
429 } 344 }
430 345
431 ret = clk_set_rate(usb_clk, 48000); 346 ret = clk_set_rate(usb_clk, 48000);
432 if (ret < 0) { 347 if (ret < 0) {
433 err("failed to set USB clock rate"); 348 dev_err(&pdev->dev, "failed to set USB clock rate\n");
434 goto out3; 349 goto out3;
435 } 350 }
436 351
@@ -442,9 +357,9 @@ static int __devinit usb_hcd_nxp_probe(struct platform_device *pdev)
442 while ((__raw_readl(USB_OTG_CLK_STAT) & USB_CLOCK_MASK) != 357 while ((__raw_readl(USB_OTG_CLK_STAT) & USB_CLOCK_MASK) !=
443 USB_CLOCK_MASK) ; 358 USB_CLOCK_MASK) ;
444 359
445 hcd = usb_create_hcd (driver, &pdev->dev, dev_name(&pdev->dev)); 360 hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
446 if (!hcd) { 361 if (!hcd) {
447 err("Failed to allocate HC buffer"); 362 dev_err(&pdev->dev, "Failed to allocate HC buffer\n");
448 ret = -ENOMEM; 363 ret = -ENOMEM;
449 goto out3; 364 goto out3;
450 } 365 }
@@ -452,14 +367,21 @@ static int __devinit usb_hcd_nxp_probe(struct platform_device *pdev)
452 /* Set all USB bits in the Start Enable register */ 367 /* Set all USB bits in the Start Enable register */
453 nxp_set_usb_bits(); 368 nxp_set_usb_bits();
454 369
455 hcd->rsrc_start = pdev->resource[0].start; 370 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
456 hcd->rsrc_len = pdev->resource[0].end - pdev->resource[0].start + 1; 371 if (!res) {
457 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { 372 dev_err(&pdev->dev, "Failed to get MEM resource\n");
458 dev_dbg(&pdev->dev, "request_mem_region failed\n"); 373 ret = -ENOMEM;
374 goto out4;
375 }
376
377 hcd->regs = devm_request_and_ioremap(&pdev->dev, res);
378 if (!hcd->regs) {
379 dev_err(&pdev->dev, "Failed to devm_request_and_ioremap\n");
459 ret = -ENOMEM; 380 ret = -ENOMEM;
460 goto out4; 381 goto out4;
461 } 382 }
462 hcd->regs = (void __iomem *)pdev->resource[0].start; 383 hcd->rsrc_start = res->start;
384 hcd->rsrc_len = resource_size(res);
463 385
464 irq = platform_get_irq(pdev, 0); 386 irq = platform_get_irq(pdev, 0);
465 if (irq < 0) { 387 if (irq < 0) {
@@ -486,10 +408,7 @@ out3:
486out2: 408out2:
487 clk_put(usb_clk); 409 clk_put(usb_clk);
488out1: 410out1:
489 i2c_unregister_device(isp1301_i2c_client);
490 isp1301_i2c_client = NULL; 411 isp1301_i2c_client = NULL;
491out_i2c_driver:
492 i2c_del_driver(&isp1301_driver);
493out: 412out:
494 return ret; 413 return ret;
495} 414}
@@ -507,7 +426,6 @@ static int usb_hcd_nxp_remove(struct platform_device *pdev)
507 clk_put(usb_clk); 426 clk_put(usb_clk);
508 i2c_unregister_device(isp1301_i2c_client); 427 i2c_unregister_device(isp1301_i2c_client);
509 isp1301_i2c_client = NULL; 428 isp1301_i2c_client = NULL;
510 i2c_del_driver(&isp1301_driver);
511 429
512 platform_set_drvdata(pdev, NULL); 430 platform_set_drvdata(pdev, NULL);
513 431
@@ -517,10 +435,19 @@ static int usb_hcd_nxp_remove(struct platform_device *pdev)
517/* work with hotplug and coldplug */ 435/* work with hotplug and coldplug */
518MODULE_ALIAS("platform:usb-ohci"); 436MODULE_ALIAS("platform:usb-ohci");
519 437
438#ifdef CONFIG_OF
439static const struct of_device_id usb_hcd_nxp_match[] = {
440 { .compatible = "nxp,ohci-nxp" },
441 {},
442};
443MODULE_DEVICE_TABLE(of, usb_hcd_nxp_match);
444#endif
445
520static struct platform_driver usb_hcd_nxp_driver = { 446static struct platform_driver usb_hcd_nxp_driver = {
521 .driver = { 447 .driver = {
522 .name = "usb-ohci", 448 .name = "usb-ohci",
523 .owner = THIS_MODULE, 449 .owner = THIS_MODULE,
450 .of_match_table = of_match_ptr(usb_hcd_nxp_match),
524 }, 451 },
525 .probe = usb_hcd_nxp_probe, 452 .probe = usb_hcd_nxp_probe,
526 .remove = usb_hcd_nxp_remove, 453 .remove = usb_hcd_nxp_remove,
diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c
index 71229cb97e3e..9ce35d0d9d5d 100644
--- a/drivers/usb/host/ohci-omap.c
+++ b/drivers/usb/host/ohci-omap.c
@@ -218,8 +218,7 @@ static int ohci_omap_init(struct usb_hcd *hcd)
218 dev_dbg(hcd->self.controller, "init %s transceiver, status %d\n", 218 dev_dbg(hcd->self.controller, "init %s transceiver, status %d\n",
219 ohci->transceiver->label, status); 219 ohci->transceiver->label, status);
220 if (status) { 220 if (status) {
221 if (ohci->transceiver) 221 usb_put_transceiver(ohci->transceiver);
222 put_device(ohci->transceiver->dev);
223 return status; 222 return status;
224 } 223 }
225 } else { 224 } else {
@@ -406,7 +405,7 @@ usb_hcd_omap_remove (struct usb_hcd *hcd, struct platform_device *pdev)
406 usb_remove_hcd(hcd); 405 usb_remove_hcd(hcd);
407 if (ohci->transceiver) { 406 if (ohci->transceiver) {
408 (void) otg_set_host(ohci->transceiver->otg, 0); 407 (void) otg_set_host(ohci->transceiver->otg, 0);
409 put_device(ohci->transceiver->dev); 408 usb_put_transceiver(ohci->transceiver);
410 } 409 }
411 if (machine_is_omap_osk()) 410 if (machine_is_omap_osk())
412 gpio_free(9); 411 gpio_free(9);
diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
index ec5c6791c8b4..670c7059c9ae 100644
--- a/drivers/usb/host/ohci-platform.c
+++ b/drivers/usb/host/ohci-platform.c
@@ -93,13 +93,13 @@ static int __devinit ohci_platform_probe(struct platform_device *dev)
93 93
94 irq = platform_get_irq(dev, 0); 94 irq = platform_get_irq(dev, 0);
95 if (irq < 0) { 95 if (irq < 0) {
96 pr_err("no irq provieded"); 96 pr_err("no irq provided");
97 return irq; 97 return irq;
98 } 98 }
99 99
100 res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0); 100 res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0);
101 if (!res_mem) { 101 if (!res_mem) {
102 pr_err("no memory recourse provieded"); 102 pr_err("no memory recourse provided");
103 return -ENXIO; 103 return -ENXIO;
104 } 104 }
105 105
diff --git a/drivers/usb/host/ohci-pnx8550.c b/drivers/usb/host/ohci-pnx8550.c
index f13d08f94d6b..148d27d6a67c 100644
--- a/drivers/usb/host/ohci-pnx8550.c
+++ b/drivers/usb/host/ohci-pnx8550.c
@@ -157,7 +157,8 @@ ohci_pnx8550_start (struct usb_hcd *hcd)
157 return ret; 157 return ret;
158 158
159 if ((ret = ohci_run (ohci)) < 0) { 159 if ((ret = ohci_run (ohci)) < 0) {
160 err ("can't start %s", hcd->self.bus_name); 160 dev_err(hcd->self.controller, "can't start %s",
161 hcd->self.bus_name);
161 ohci_stop (hcd); 162 ohci_stop (hcd);
162 return ret; 163 return ret;
163 } 164 }
diff --git a/drivers/usb/host/ohci-ppc-of.c b/drivers/usb/host/ohci-ppc-of.c
index d24cc89de16f..e27d5ae2b9eb 100644
--- a/drivers/usb/host/ohci-ppc-of.c
+++ b/drivers/usb/host/ohci-ppc-of.c
@@ -29,7 +29,8 @@ ohci_ppc_of_start(struct usb_hcd *hcd)
29 return ret; 29 return ret;
30 30
31 if ((ret = ohci_run(ohci)) < 0) { 31 if ((ret = ohci_run(ohci)) < 0) {
32 err("can't start %s", ohci_to_hcd(ohci)->self.bus_name); 32 dev_err(hcd->self.controller, "can't start %s\n",
33 hcd->self.bus_name);
33 ohci_stop(hcd); 34 ohci_stop(hcd);
34 return ret; 35 return ret;
35 } 36 }
@@ -236,7 +237,7 @@ MODULE_DEVICE_TABLE(of, ohci_hcd_ppc_of_match);
236 237
237#if !defined(CONFIG_USB_OHCI_HCD_PPC_OF_BE) && \ 238#if !defined(CONFIG_USB_OHCI_HCD_PPC_OF_BE) && \
238 !defined(CONFIG_USB_OHCI_HCD_PPC_OF_LE) 239 !defined(CONFIG_USB_OHCI_HCD_PPC_OF_LE)
239#error "No endianess selected for ppc-of-ohci" 240#error "No endianness selected for ppc-of-ohci"
240#endif 241#endif
241 242
242 243
diff --git a/drivers/usb/host/ohci-ppc-soc.c b/drivers/usb/host/ohci-ppc-soc.c
index 1514b7067470..185c39ed81b7 100644
--- a/drivers/usb/host/ohci-ppc-soc.c
+++ b/drivers/usb/host/ohci-ppc-soc.c
@@ -130,7 +130,8 @@ ohci_ppc_soc_start(struct usb_hcd *hcd)
130 return ret; 130 return ret;
131 131
132 if ((ret = ohci_run(ohci)) < 0) { 132 if ((ret = ohci_run(ohci)) < 0) {
133 err("can't start %s", ohci_to_hcd(ohci)->self.bus_name); 133 dev_err(hcd->self.controller, "can't start %s\n",
134 hcd->self.bus_name);
134 ohci_stop(hcd); 135 ohci_stop(hcd);
135 return ret; 136 return ret;
136 } 137 }
diff --git a/drivers/usb/host/ohci-ps3.c b/drivers/usb/host/ohci-ps3.c
index 6fd4fa1f19bb..2ee1d8d713d2 100644
--- a/drivers/usb/host/ohci-ps3.c
+++ b/drivers/usb/host/ohci-ps3.c
@@ -45,7 +45,8 @@ static int __devinit ps3_ohci_hc_start(struct usb_hcd *hcd)
45 result = ohci_run(ohci); 45 result = ohci_run(ohci);
46 46
47 if (result < 0) { 47 if (result < 0) {
48 err("can't start %s", hcd->self.bus_name); 48 dev_err(hcd->self.controller, "can't start %s\n",
49 hcd->self.bus_name);
49 ohci_stop(hcd); 50 ohci_stop(hcd);
50 } 51 }
51 52
diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c
index c31b2815be1c..e1a3cc6d28dc 100644
--- a/drivers/usb/host/ohci-pxa27x.c
+++ b/drivers/usb/host/ohci-pxa27x.c
@@ -419,7 +419,8 @@ ohci_pxa27x_start (struct usb_hcd *hcd)
419 return ret; 419 return ret;
420 420
421 if ((ret = ohci_run (ohci)) < 0) { 421 if ((ret = ohci_run (ohci)) < 0) {
422 err ("can't start %s", hcd->self.bus_name); 422 dev_err(hcd->self.controller, "can't start %s",
423 hcd->self.bus_name);
423 ohci_stop (hcd); 424 ohci_stop (hcd);
424 return ret; 425 return ret;
425 } 426 }
diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c
index 56dcf069246d..664c869eb096 100644
--- a/drivers/usb/host/ohci-s3c2410.c
+++ b/drivers/usb/host/ohci-s3c2410.c
@@ -420,7 +420,8 @@ ohci_s3c2410_start(struct usb_hcd *hcd)
420 420
421 ret = ohci_run(ohci); 421 ret = ohci_run(ohci);
422 if (ret < 0) { 422 if (ret < 0) {
423 err("can't start %s", hcd->self.bus_name); 423 dev_err(hcd->self.controller, "can't start %s\n",
424 hcd->self.bus_name);
424 ohci_stop(hcd); 425 ohci_stop(hcd);
425 return ret; 426 return ret;
426 } 427 }
diff --git a/drivers/usb/host/ohci-sa1111.c b/drivers/usb/host/ohci-sa1111.c
index e1004fb37bd9..b6cc92520924 100644
--- a/drivers/usb/host/ohci-sa1111.c
+++ b/drivers/usb/host/ohci-sa1111.c
@@ -46,7 +46,7 @@ static void dump_hci_status(struct usb_hcd *hcd, const char *label)
46{ 46{
47 unsigned long status = sa1111_readl(hcd->regs + USB_STATUS); 47 unsigned long status = sa1111_readl(hcd->regs + USB_STATUS);
48 48
49 dbg("%s USB_STATUS = { %s%s%s%s%s}", label, 49 printk(KERN_DEBUG "%s USB_STATUS = { %s%s%s%s%s}\n", label,
50 ((status & USB_STATUS_IRQHCIRMTWKUP) ? "IRQHCIRMTWKUP " : ""), 50 ((status & USB_STATUS_IRQHCIRMTWKUP) ? "IRQHCIRMTWKUP " : ""),
51 ((status & USB_STATUS_IRQHCIBUFFACC) ? "IRQHCIBUFFACC " : ""), 51 ((status & USB_STATUS_IRQHCIBUFFACC) ? "IRQHCIBUFFACC " : ""),
52 ((status & USB_STATUS_NIRQHCIM) ? "" : "IRQHCIM "), 52 ((status & USB_STATUS_NIRQHCIM) ? "" : "IRQHCIM "),
@@ -193,7 +193,7 @@ static int ohci_hcd_sa1111_probe(struct sa1111_dev *dev)
193 hcd->rsrc_len = resource_size(&dev->res); 193 hcd->rsrc_len = resource_size(&dev->res);
194 194
195 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { 195 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
196 dbg("request_mem_region failed"); 196 dev_dbg(&dev->dev, "request_mem_region failed\n");
197 ret = -EBUSY; 197 ret = -EBUSY;
198 goto err1; 198 goto err1;
199 } 199 }
diff --git a/drivers/usb/host/ohci-sh.c b/drivers/usb/host/ohci-sh.c
index 84686d90805b..76a20c278362 100644
--- a/drivers/usb/host/ohci-sh.c
+++ b/drivers/usb/host/ohci-sh.c
@@ -88,20 +88,20 @@ static int ohci_hcd_sh_probe(struct platform_device *pdev)
88 88
89 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 89 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
90 if (!res) { 90 if (!res) {
91 err("platform_get_resource error."); 91 dev_err(&pdev->dev, "platform_get_resource error.\n");
92 return -ENODEV; 92 return -ENODEV;
93 } 93 }
94 94
95 irq = platform_get_irq(pdev, 0); 95 irq = platform_get_irq(pdev, 0);
96 if (irq < 0) { 96 if (irq < 0) {
97 err("platform_get_irq error."); 97 dev_err(&pdev->dev, "platform_get_irq error.\n");
98 return -ENODEV; 98 return -ENODEV;
99 } 99 }
100 100
101 /* initialize hcd */ 101 /* initialize hcd */
102 hcd = usb_create_hcd(&ohci_sh_hc_driver, &pdev->dev, (char *)hcd_name); 102 hcd = usb_create_hcd(&ohci_sh_hc_driver, &pdev->dev, (char *)hcd_name);
103 if (!hcd) { 103 if (!hcd) {
104 err("Failed to create hcd"); 104 dev_err(&pdev->dev, "Failed to create hcd\n");
105 return -ENOMEM; 105 return -ENOMEM;
106 } 106 }
107 107
@@ -110,7 +110,7 @@ static int ohci_hcd_sh_probe(struct platform_device *pdev)
110 hcd->rsrc_len = resource_size(res); 110 hcd->rsrc_len = resource_size(res);
111 ret = usb_add_hcd(hcd, irq, IRQF_SHARED); 111 ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
112 if (ret != 0) { 112 if (ret != 0) {
113 err("Failed to add hcd"); 113 dev_err(&pdev->dev, "Failed to add hcd\n");
114 usb_put_hcd(hcd); 114 usb_put_hcd(hcd);
115 return ret; 115 return ret;
116 } 116 }
diff --git a/drivers/usb/host/ohci-spear.c b/drivers/usb/host/ohci-spear.c
index 95c16489e883..fc7305ee3c9c 100644
--- a/drivers/usb/host/ohci-spear.c
+++ b/drivers/usb/host/ohci-spear.c
@@ -14,6 +14,7 @@
14#include <linux/signal.h> 14#include <linux/signal.h>
15#include <linux/platform_device.h> 15#include <linux/platform_device.h>
16#include <linux/clk.h> 16#include <linux/clk.h>
17#include <linux/of.h>
17 18
18struct spear_ohci { 19struct spear_ohci {
19 struct ohci_hcd ohci; 20 struct ohci_hcd ohci;
@@ -24,12 +25,12 @@ struct spear_ohci {
24 25
25static void spear_start_ohci(struct spear_ohci *ohci) 26static void spear_start_ohci(struct spear_ohci *ohci)
26{ 27{
27 clk_enable(ohci->clk); 28 clk_prepare_enable(ohci->clk);
28} 29}
29 30
30static void spear_stop_ohci(struct spear_ohci *ohci) 31static void spear_stop_ohci(struct spear_ohci *ohci)
31{ 32{
32 clk_disable(ohci->clk); 33 clk_disable_unprepare(ohci->clk);
33} 34}
34 35
35static int __devinit ohci_spear_start(struct usb_hcd *hcd) 36static int __devinit ohci_spear_start(struct usb_hcd *hcd)
@@ -90,6 +91,8 @@ static const struct hc_driver ohci_spear_hc_driver = {
90 .start_port_reset = ohci_start_port_reset, 91 .start_port_reset = ohci_start_port_reset,
91}; 92};
92 93
94static u64 spear_ohci_dma_mask = DMA_BIT_MASK(32);
95
93static int spear_ohci_hcd_drv_probe(struct platform_device *pdev) 96static int spear_ohci_hcd_drv_probe(struct platform_device *pdev)
94{ 97{
95 const struct hc_driver *driver = &ohci_spear_hc_driver; 98 const struct hc_driver *driver = &ohci_spear_hc_driver;
@@ -98,11 +101,8 @@ static int spear_ohci_hcd_drv_probe(struct platform_device *pdev)
98 struct spear_ohci *ohci_p; 101 struct spear_ohci *ohci_p;
99 struct resource *res; 102 struct resource *res;
100 int retval, irq; 103 int retval, irq;
101 int *pdata = pdev->dev.platform_data;
102 char clk_name[20] = "usbh_clk"; 104 char clk_name[20] = "usbh_clk";
103 105 static int instance = -1;
104 if (pdata == NULL)
105 return -EFAULT;
106 106
107 irq = platform_get_irq(pdev, 0); 107 irq = platform_get_irq(pdev, 0);
108 if (irq < 0) { 108 if (irq < 0) {
@@ -110,8 +110,22 @@ static int spear_ohci_hcd_drv_probe(struct platform_device *pdev)
110 goto fail_irq_get; 110 goto fail_irq_get;
111 } 111 }
112 112
113 if (*pdata >= 0) 113 /*
114 sprintf(clk_name, "usbh.%01d_clk", *pdata); 114 * Right now device-tree probed devices don't get dma_mask set.
115 * Since shared usb code relies on it, set it here for now.
116 * Once we have dma capability bindings this can go away.
117 */
118 if (!pdev->dev.dma_mask)
119 pdev->dev.dma_mask = &spear_ohci_dma_mask;
120
121 /*
122 * Increment the device instance, when probing via device-tree
123 */
124 if (pdev->id < 0)
125 instance++;
126 else
127 instance = pdev->id;
128 sprintf(clk_name, "usbh.%01d_clk", instance);
115 129
116 usbh_clk = clk_get(NULL, clk_name); 130 usbh_clk = clk_get(NULL, clk_name);
117 if (IS_ERR(usbh_clk)) { 131 if (IS_ERR(usbh_clk)) {
@@ -222,6 +236,11 @@ static int spear_ohci_hcd_drv_resume(struct platform_device *dev)
222} 236}
223#endif 237#endif
224 238
239static struct of_device_id spear_ohci_id_table[] __devinitdata = {
240 { .compatible = "st,spear600-ohci", },
241 { },
242};
243
225/* Driver definition to register with the platform bus */ 244/* Driver definition to register with the platform bus */
226static struct platform_driver spear_ohci_hcd_driver = { 245static struct platform_driver spear_ohci_hcd_driver = {
227 .probe = spear_ohci_hcd_drv_probe, 246 .probe = spear_ohci_hcd_drv_probe,
@@ -233,6 +252,7 @@ static struct platform_driver spear_ohci_hcd_driver = {
233 .driver = { 252 .driver = {
234 .owner = THIS_MODULE, 253 .owner = THIS_MODULE,
235 .name = "spear-ohci", 254 .name = "spear-ohci",
255 .of_match_table = of_match_ptr(spear_ohci_id_table),
236 }, 256 },
237}; 257};
238 258
diff --git a/drivers/usb/host/ohci-ssb.c b/drivers/usb/host/ohci-ssb.c
deleted file mode 100644
index 5ba18595d6f7..000000000000
--- a/drivers/usb/host/ohci-ssb.c
+++ /dev/null
@@ -1,260 +0,0 @@
1/*
2 * Sonics Silicon Backplane
3 * Broadcom USB-core OHCI driver
4 *
5 * Copyright 2007 Michael Buesch <m@bues.ch>
6 *
7 * Derived from the OHCI-PCI driver
8 * Copyright 1999 Roman Weissgaerber
9 * Copyright 2000-2002 David Brownell
10 * Copyright 1999 Linus Torvalds
11 * Copyright 1999 Gregory P. Smith
12 *
13 * Derived from the USBcore related parts of Broadcom-SB
14 * Copyright 2005 Broadcom Corporation
15 *
16 * Licensed under the GNU/GPL. See COPYING for details.
17 */
18#include <linux/ssb/ssb.h>
19
20
21#define SSB_OHCI_TMSLOW_HOSTMODE (1 << 29)
22
23struct ssb_ohci_device {
24 struct ohci_hcd ohci; /* _must_ be at the beginning. */
25
26 u32 enable_flags;
27};
28
29static inline
30struct ssb_ohci_device *hcd_to_ssb_ohci(struct usb_hcd *hcd)
31{
32 return (struct ssb_ohci_device *)(hcd->hcd_priv);
33}
34
35
36static int ssb_ohci_reset(struct usb_hcd *hcd)
37{
38 struct ssb_ohci_device *ohcidev = hcd_to_ssb_ohci(hcd);
39 struct ohci_hcd *ohci = &ohcidev->ohci;
40 int err;
41
42 ohci_hcd_init(ohci);
43 err = ohci_init(ohci);
44
45 return err;
46}
47
48static int ssb_ohci_start(struct usb_hcd *hcd)
49{
50 struct ssb_ohci_device *ohcidev = hcd_to_ssb_ohci(hcd);
51 struct ohci_hcd *ohci = &ohcidev->ohci;
52 int err;
53
54 err = ohci_run(ohci);
55 if (err < 0) {
56 ohci_err(ohci, "can't start\n");
57 ohci_stop(hcd);
58 }
59
60 return err;
61}
62
63static const struct hc_driver ssb_ohci_hc_driver = {
64 .description = "ssb-usb-ohci",
65 .product_desc = "SSB OHCI Controller",
66 .hcd_priv_size = sizeof(struct ssb_ohci_device),
67
68 .irq = ohci_irq,
69 .flags = HCD_MEMORY | HCD_USB11,
70
71 .reset = ssb_ohci_reset,
72 .start = ssb_ohci_start,
73 .stop = ohci_stop,
74 .shutdown = ohci_shutdown,
75
76 .urb_enqueue = ohci_urb_enqueue,
77 .urb_dequeue = ohci_urb_dequeue,
78 .endpoint_disable = ohci_endpoint_disable,
79
80 .get_frame_number = ohci_get_frame,
81
82 .hub_status_data = ohci_hub_status_data,
83 .hub_control = ohci_hub_control,
84#ifdef CONFIG_PM
85 .bus_suspend = ohci_bus_suspend,
86 .bus_resume = ohci_bus_resume,
87#endif
88
89 .start_port_reset = ohci_start_port_reset,
90};
91
92static void ssb_ohci_detach(struct ssb_device *dev)
93{
94 struct usb_hcd *hcd = ssb_get_drvdata(dev);
95
96 if (hcd->driver->shutdown)
97 hcd->driver->shutdown(hcd);
98 usb_remove_hcd(hcd);
99 iounmap(hcd->regs);
100 release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
101 usb_put_hcd(hcd);
102 ssb_device_disable(dev, 0);
103}
104
105static int ssb_ohci_attach(struct ssb_device *dev)
106{
107 struct ssb_ohci_device *ohcidev;
108 struct usb_hcd *hcd;
109 int err = -ENOMEM;
110 u32 tmp, flags = 0;
111
112 if (dma_set_mask(dev->dma_dev, DMA_BIT_MASK(32)) ||
113 dma_set_coherent_mask(dev->dma_dev, DMA_BIT_MASK(32)))
114 return -EOPNOTSUPP;
115
116 if (dev->id.coreid == SSB_DEV_USB11_HOSTDEV) {
117 /* Put the device into host-mode. */
118 flags |= SSB_OHCI_TMSLOW_HOSTMODE;
119 ssb_device_enable(dev, flags);
120 } else if (dev->id.coreid == SSB_DEV_USB20_HOST) {
121 /*
122 * USB 2.0 special considerations:
123 *
124 * In addition to the standard SSB reset sequence, the Host
125 * Control Register must be programmed to bring the USB core
126 * and various phy components out of reset.
127 */
128 ssb_device_enable(dev, 0);
129 ssb_write32(dev, 0x200, 0x7ff);
130
131 /* Change Flush control reg */
132 tmp = ssb_read32(dev, 0x400);
133 tmp &= ~8;
134 ssb_write32(dev, 0x400, tmp);
135 tmp = ssb_read32(dev, 0x400);
136
137 /* Change Shim control reg */
138 tmp = ssb_read32(dev, 0x304);
139 tmp &= ~0x100;
140 ssb_write32(dev, 0x304, tmp);
141 tmp = ssb_read32(dev, 0x304);
142
143 udelay(1);
144
145 /* Work around for 5354 failures */
146 if (dev->id.revision == 2 && dev->bus->chip_id == 0x5354) {
147 /* Change syn01 reg */
148 tmp = 0x00fe00fe;
149 ssb_write32(dev, 0x894, tmp);
150
151 /* Change syn03 reg */
152 tmp = ssb_read32(dev, 0x89c);
153 tmp |= 0x1;
154 ssb_write32(dev, 0x89c, tmp);
155 }
156 } else
157 ssb_device_enable(dev, 0);
158
159 hcd = usb_create_hcd(&ssb_ohci_hc_driver, dev->dev,
160 dev_name(dev->dev));
161 if (!hcd)
162 goto err_dev_disable;
163 ohcidev = hcd_to_ssb_ohci(hcd);
164 ohcidev->enable_flags = flags;
165
166 tmp = ssb_read32(dev, SSB_ADMATCH0);
167 hcd->rsrc_start = ssb_admatch_base(tmp);
168 hcd->rsrc_len = ssb_admatch_size(tmp);
169 hcd->regs = ioremap_nocache(hcd->rsrc_start, hcd->rsrc_len);
170 if (!hcd->regs)
171 goto err_put_hcd;
172 err = usb_add_hcd(hcd, dev->irq, IRQF_SHARED);
173 if (err)
174 goto err_iounmap;
175
176 ssb_set_drvdata(dev, hcd);
177
178 return err;
179
180err_iounmap:
181 iounmap(hcd->regs);
182err_put_hcd:
183 usb_put_hcd(hcd);
184err_dev_disable:
185 ssb_device_disable(dev, flags);
186 return err;
187}
188
189static int ssb_ohci_probe(struct ssb_device *dev,
190 const struct ssb_device_id *id)
191{
192 int err;
193 u16 chipid_top;
194
195 /* USBcores are only connected on embedded devices. */
196 chipid_top = (dev->bus->chip_id & 0xFF00);
197 if (chipid_top != 0x4700 && chipid_top != 0x5300)
198 return -ENODEV;
199
200 /* TODO: Probably need checks here; is the core connected? */
201
202 if (usb_disabled())
203 return -ENODEV;
204
205 /* We currently always attach SSB_DEV_USB11_HOSTDEV
206 * as HOST OHCI. If we want to attach it as Client device,
207 * we must branch here and call into the (yet to
208 * be written) Client mode driver. Same for remove(). */
209
210 err = ssb_ohci_attach(dev);
211
212 return err;
213}
214
215static void ssb_ohci_remove(struct ssb_device *dev)
216{
217 ssb_ohci_detach(dev);
218}
219
220#ifdef CONFIG_PM
221
222static int ssb_ohci_suspend(struct ssb_device *dev, pm_message_t state)
223{
224 ssb_device_disable(dev, 0);
225
226 return 0;
227}
228
229static int ssb_ohci_resume(struct ssb_device *dev)
230{
231 struct usb_hcd *hcd = ssb_get_drvdata(dev);
232 struct ssb_ohci_device *ohcidev = hcd_to_ssb_ohci(hcd);
233
234 ssb_device_enable(dev, ohcidev->enable_flags);
235
236 ohci_finish_controller_resume(hcd);
237 return 0;
238}
239
240#else /* !CONFIG_PM */
241#define ssb_ohci_suspend NULL
242#define ssb_ohci_resume NULL
243#endif /* CONFIG_PM */
244
245static const struct ssb_device_id ssb_ohci_table[] = {
246 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB11_HOSTDEV, SSB_ANY_REV),
247 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB11_HOST, SSB_ANY_REV),
248 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB20_HOST, SSB_ANY_REV),
249 SSB_DEVTABLE_END
250};
251MODULE_DEVICE_TABLE(ssb, ssb_ohci_table);
252
253static struct ssb_driver ssb_ohci_driver = {
254 .name = KBUILD_MODNAME,
255 .id_table = ssb_ohci_table,
256 .probe = ssb_ohci_probe,
257 .remove = ssb_ohci_remove,
258 .suspend = ssb_ohci_suspend,
259 .resume = ssb_ohci_resume,
260};
diff --git a/drivers/usb/host/ohci-tmio.c b/drivers/usb/host/ohci-tmio.c
index 120bfe6ede38..60c2b0722f2e 100644
--- a/drivers/usb/host/ohci-tmio.c
+++ b/drivers/usb/host/ohci-tmio.c
@@ -140,7 +140,8 @@ static int ohci_tmio_start(struct usb_hcd *hcd)
140 return ret; 140 return ret;
141 141
142 if ((ret = ohci_run(ohci)) < 0) { 142 if ((ret = ohci_run(ohci)) < 0) {
143 err("can't start %s", hcd->self.bus_name); 143 dev_err(hcd->self.controller, "can't start %s\n",
144 hcd->self.bus_name);
144 ohci_stop(hcd); 145 ohci_stop(hcd);
145 return ret; 146 return ret;
146 } 147 }
diff --git a/drivers/usb/host/ohci-xls.c b/drivers/usb/host/ohci-xls.c
index a2247867af86..41e378f17c66 100644
--- a/drivers/usb/host/ohci-xls.c
+++ b/drivers/usb/host/ohci-xls.c
@@ -88,7 +88,8 @@ static int __devinit ohci_xls_start(struct usb_hcd *hcd)
88 ohci = hcd_to_ohci(hcd); 88 ohci = hcd_to_ohci(hcd);
89 ret = ohci_run(ohci); 89 ret = ohci_run(ohci);
90 if (ret < 0) { 90 if (ret < 0) {
91 err("can't start %s", hcd->self.bus_name); 91 dev_err(hcd->self.controller, "can't start %s\n",
92 hcd->self.bus_name);
92 ohci_stop(hcd); 93 ohci_stop(hcd);
93 return ret; 94 return ret;
94 } 95 }
diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c
index 3b38030b02a8..4f0f0339532f 100644
--- a/drivers/usb/host/oxu210hp-hcd.c
+++ b/drivers/usb/host/oxu210hp-hcd.c
@@ -1399,8 +1399,8 @@ static struct ehci_qh *qh_make(struct oxu_hcd *oxu,
1399 * But interval 1 scheduling is simpler, and 1399 * But interval 1 scheduling is simpler, and
1400 * includes high bandwidth. 1400 * includes high bandwidth.
1401 */ 1401 */
1402 dbg("intr period %d uframes, NYET!", 1402 oxu_dbg(oxu, "intr period %d uframes, NYET!\n",
1403 urb->interval); 1403 urb->interval);
1404 goto done; 1404 goto done;
1405 } 1405 }
1406 } else { 1406 } else {
@@ -1471,7 +1471,7 @@ static struct ehci_qh *qh_make(struct oxu_hcd *oxu,
1471 } 1471 }
1472 break; 1472 break;
1473 default: 1473 default:
1474 dbg("bogus dev %p speed %d", urb->dev, urb->dev->speed); 1474 oxu_dbg(oxu, "bogus dev %p speed %d\n", urb->dev, urb->dev->speed);
1475done: 1475done:
1476 qh_put(qh); 1476 qh_put(qh);
1477 return NULL; 1477 return NULL;
@@ -2307,7 +2307,7 @@ restart:
2307 qh_put(temp.qh); 2307 qh_put(temp.qh);
2308 break; 2308 break;
2309 default: 2309 default:
2310 dbg("corrupt type %d frame %d shadow %p", 2310 oxu_dbg(oxu, "corrupt type %d frame %d shadow %p\n",
2311 type, frame, q.ptr); 2311 type, frame, q.ptr);
2312 q.ptr = NULL; 2312 q.ptr = NULL;
2313 } 2313 }
@@ -2991,8 +2991,9 @@ static int oxu_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
2991 /* shouldn't happen often, but ... 2991 /* shouldn't happen often, but ...
2992 * FIXME kill those tds' urbs 2992 * FIXME kill those tds' urbs
2993 */ 2993 */
2994 err("can't reschedule qh %p, err %d", 2994 dev_err(hcd->self.controller,
2995 qh, status); 2995 "can't reschedule qh %p, err %d\n", qh,
2996 status);
2996 } 2997 }
2997 return status; 2998 return status;
2998 } 2999 }
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index 32dada8c8b4f..df0828cb2aa3 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -9,6 +9,7 @@
9 */ 9 */
10 10
11#include <linux/types.h> 11#include <linux/types.h>
12#include <linux/kconfig.h>
12#include <linux/kernel.h> 13#include <linux/kernel.h>
13#include <linux/pci.h> 14#include <linux/pci.h>
14#include <linux/init.h> 15#include <linux/init.h>
@@ -712,12 +713,28 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done,
712 return -ETIMEDOUT; 713 return -ETIMEDOUT;
713} 714}
714 715
715bool usb_is_intel_switchable_xhci(struct pci_dev *pdev) 716#define PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI 0x8C31
717
718bool usb_is_intel_ppt_switchable_xhci(struct pci_dev *pdev)
716{ 719{
717 return pdev->class == PCI_CLASS_SERIAL_USB_XHCI && 720 return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
718 pdev->vendor == PCI_VENDOR_ID_INTEL && 721 pdev->vendor == PCI_VENDOR_ID_INTEL &&
719 pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI; 722 pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI;
720} 723}
724
725/* The Intel Lynx Point chipset also has switchable ports. */
726bool usb_is_intel_lpt_switchable_xhci(struct pci_dev *pdev)
727{
728 return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
729 pdev->vendor == PCI_VENDOR_ID_INTEL &&
730 pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI;
731}
732
733bool usb_is_intel_switchable_xhci(struct pci_dev *pdev)
734{
735 return usb_is_intel_ppt_switchable_xhci(pdev) ||
736 usb_is_intel_lpt_switchable_xhci(pdev);
737}
721EXPORT_SYMBOL_GPL(usb_is_intel_switchable_xhci); 738EXPORT_SYMBOL_GPL(usb_is_intel_switchable_xhci);
722 739
723/* 740/*
@@ -742,6 +759,19 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
742{ 759{
743 u32 ports_available; 760 u32 ports_available;
744 761
762 /* Don't switchover the ports if the user hasn't compiled the xHCI
763 * driver. Otherwise they will see "dead" USB ports that don't power
764 * the devices.
765 */
766 if (!IS_ENABLED(CONFIG_USB_XHCI_HCD)) {
767 dev_warn(&xhci_pdev->dev,
768 "CONFIG_USB_XHCI_HCD is turned off, "
769 "defaulting to EHCI.\n");
770 dev_warn(&xhci_pdev->dev,
771 "USB 3.0 devices will work at USB 2.0 speeds.\n");
772 return;
773 }
774
745 ports_available = 0xffffffff; 775 ports_available = 0xffffffff;
746 /* Write USB3_PSSEN, the USB 3.0 Port SuperSpeed Enable 776 /* Write USB3_PSSEN, the USB 3.0 Port SuperSpeed Enable
747 * Register, to turn on SuperSpeed terminations for all 777 * Register, to turn on SuperSpeed terminations for all
diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
index 2bf1320dc9c3..c868be65e763 100644
--- a/drivers/usb/host/r8a66597-hcd.c
+++ b/drivers/usb/host/r8a66597-hcd.c
@@ -401,7 +401,7 @@ static u8 alloc_usb_address(struct r8a66597 *r8a66597, struct urb *urb)
401 if (r8a66597->address_map & (1 << addr)) 401 if (r8a66597->address_map & (1 << addr))
402 continue; 402 continue;
403 403
404 dbg("alloc_address: r8a66597_addr=%d", addr); 404 dev_dbg(&urb->dev->dev, "alloc_address: r8a66597_addr=%d\n", addr);
405 r8a66597->address_map |= 1 << addr; 405 r8a66597->address_map |= 1 << addr;
406 406
407 if (make_r8a66597_device(r8a66597, urb, addr) < 0) 407 if (make_r8a66597_device(r8a66597, urb, addr) < 0)
@@ -426,7 +426,7 @@ static void free_usb_address(struct r8a66597 *r8a66597,
426 if (!dev) 426 if (!dev)
427 return; 427 return;
428 428
429 dbg("free_addr: addr=%d", dev->address); 429 dev_dbg(&dev->udev->dev, "free_addr: addr=%d\n", dev->address);
430 430
431 dev->state = USB_STATE_DEFAULT; 431 dev->state = USB_STATE_DEFAULT;
432 r8a66597->address_map &= ~(1 << dev->address); 432 r8a66597->address_map &= ~(1 << dev->address);
@@ -819,7 +819,7 @@ static void enable_r8a66597_pipe(struct r8a66597 *r8a66597, struct urb *urb,
819 struct r8a66597_device *dev = get_urb_to_r8a66597_dev(r8a66597, urb); 819 struct r8a66597_device *dev = get_urb_to_r8a66597_dev(r8a66597, urb);
820 struct r8a66597_pipe *pipe = hep->hcpriv; 820 struct r8a66597_pipe *pipe = hep->hcpriv;
821 821
822 dbg("enable_pipe:"); 822 dev_dbg(&dev->udev->dev, "enable_pipe:\n");
823 823
824 pipe->info = *info; 824 pipe->info = *info;
825 set_pipe_reg_addr(pipe, R8A66597_PIPE_NO_DMA); 825 set_pipe_reg_addr(pipe, R8A66597_PIPE_NO_DMA);
@@ -898,7 +898,7 @@ static void disable_r8a66597_pipe_all(struct r8a66597 *r8a66597,
898 force_dequeue(r8a66597, pipenum, dev->address); 898 force_dequeue(r8a66597, pipenum, dev->address);
899 } 899 }
900 900
901 dbg("disable_pipe"); 901 dev_dbg(&dev->udev->dev, "disable_pipe\n");
902 902
903 r8a66597->dma_map &= ~(dev->dma_map); 903 r8a66597->dma_map &= ~(dev->dma_map);
904 dev->dma_map = 0; 904 dev->dma_map = 0;
@@ -2264,7 +2264,7 @@ static int r8a66597_bus_suspend(struct usb_hcd *hcd)
2264 struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd); 2264 struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
2265 int port; 2265 int port;
2266 2266
2267 dbg("%s", __func__); 2267 dev_dbg(&r8a66597->device0.udev->dev, "%s\n", __func__);
2268 2268
2269 for (port = 0; port < r8a66597->max_root_hub; port++) { 2269 for (port = 0; port < r8a66597->max_root_hub; port++) {
2270 struct r8a66597_root_hub *rh = &r8a66597->root_hub[port]; 2270 struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
@@ -2273,7 +2273,7 @@ static int r8a66597_bus_suspend(struct usb_hcd *hcd)
2273 if (!(rh->port & USB_PORT_STAT_ENABLE)) 2273 if (!(rh->port & USB_PORT_STAT_ENABLE))
2274 continue; 2274 continue;
2275 2275
2276 dbg("suspend port = %d", port); 2276 dev_dbg(&rh->dev->udev->dev, "suspend port = %d\n", port);
2277 r8a66597_bclr(r8a66597, UACT, dvstctr_reg); /* suspend */ 2277 r8a66597_bclr(r8a66597, UACT, dvstctr_reg); /* suspend */
2278 rh->port |= USB_PORT_STAT_SUSPEND; 2278 rh->port |= USB_PORT_STAT_SUSPEND;
2279 2279
@@ -2295,7 +2295,7 @@ static int r8a66597_bus_resume(struct usb_hcd *hcd)
2295 struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd); 2295 struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
2296 int port; 2296 int port;
2297 2297
2298 dbg("%s", __func__); 2298 dev_dbg(&r8a66597->device0.udev->dev, "%s\n", __func__);
2299 2299
2300 for (port = 0; port < r8a66597->max_root_hub; port++) { 2300 for (port = 0; port < r8a66597->max_root_hub; port++) {
2301 struct r8a66597_root_hub *rh = &r8a66597->root_hub[port]; 2301 struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
@@ -2304,7 +2304,7 @@ static int r8a66597_bus_resume(struct usb_hcd *hcd)
2304 if (!(rh->port & USB_PORT_STAT_SUSPEND)) 2304 if (!(rh->port & USB_PORT_STAT_SUSPEND))
2305 continue; 2305 continue;
2306 2306
2307 dbg("resume port = %d", port); 2307 dev_dbg(&rh->dev->udev->dev, "resume port = %d\n", port);
2308 rh->port &= ~USB_PORT_STAT_SUSPEND; 2308 rh->port &= ~USB_PORT_STAT_SUSPEND;
2309 rh->port |= USB_PORT_STAT_C_SUSPEND << 16; 2309 rh->port |= USB_PORT_STAT_C_SUSPEND << 16;
2310 r8a66597_mdfy(r8a66597, RESUME, RESUME | UACT, dvstctr_reg); 2310 r8a66597_mdfy(r8a66597, RESUME, RESUME | UACT, dvstctr_reg);
@@ -2360,7 +2360,7 @@ static int r8a66597_suspend(struct device *dev)
2360 struct r8a66597 *r8a66597 = dev_get_drvdata(dev); 2360 struct r8a66597 *r8a66597 = dev_get_drvdata(dev);
2361 int port; 2361 int port;
2362 2362
2363 dbg("%s", __func__); 2363 dev_dbg(dev, "%s\n", __func__);
2364 2364
2365 disable_controller(r8a66597); 2365 disable_controller(r8a66597);
2366 2366
@@ -2378,7 +2378,7 @@ static int r8a66597_resume(struct device *dev)
2378 struct r8a66597 *r8a66597 = dev_get_drvdata(dev); 2378 struct r8a66597 *r8a66597 = dev_get_drvdata(dev);
2379 struct usb_hcd *hcd = r8a66597_to_hcd(r8a66597); 2379 struct usb_hcd *hcd = r8a66597_to_hcd(r8a66597);
2380 2380
2381 dbg("%s", __func__); 2381 dev_dbg(dev, "%s\n", __func__);
2382 2382
2383 enable_controller(r8a66597); 2383 enable_controller(r8a66597);
2384 usb_root_hub_lost_power(hcd->self.root_hub); 2384 usb_root_hub_lost_power(hcd->self.root_hub);
diff --git a/drivers/usb/host/ssb-hcd.c b/drivers/usb/host/ssb-hcd.c
new file mode 100644
index 000000000000..c2a29faba076
--- /dev/null
+++ b/drivers/usb/host/ssb-hcd.c
@@ -0,0 +1,280 @@
1/*
2 * Sonics Silicon Backplane
3 * Broadcom USB-core driver (SSB bus glue)
4 *
5 * Copyright 2011-2012 Hauke Mehrtens <hauke@hauke-m.de>
6 *
7 * Based on ssb-ohci driver
8 * Copyright 2007 Michael Buesch <m@bues.ch>
9 *
10 * Derived from the OHCI-PCI driver
11 * Copyright 1999 Roman Weissgaerber
12 * Copyright 2000-2002 David Brownell
13 * Copyright 1999 Linus Torvalds
14 * Copyright 1999 Gregory P. Smith
15 *
16 * Derived from the USBcore related parts of Broadcom-SB
17 * Copyright 2005-2011 Broadcom Corporation
18 *
19 * Licensed under the GNU/GPL. See COPYING for details.
20 */
21#include <linux/ssb/ssb.h>
22#include <linux/delay.h>
23#include <linux/platform_device.h>
24#include <linux/module.h>
25#include <linux/slab.h>
26#include <linux/usb/ehci_pdriver.h>
27#include <linux/usb/ohci_pdriver.h>
28
29MODULE_AUTHOR("Hauke Mehrtens");
30MODULE_DESCRIPTION("Common USB driver for SSB Bus");
31MODULE_LICENSE("GPL");
32
33#define SSB_HCD_TMSLOW_HOSTMODE (1 << 29)
34
35struct ssb_hcd_device {
36 struct platform_device *ehci_dev;
37 struct platform_device *ohci_dev;
38
39 u32 enable_flags;
40};
41
42static void __devinit ssb_hcd_5354wa(struct ssb_device *dev)
43{
44#ifdef CONFIG_SSB_DRIVER_MIPS
45 /* Work around for 5354 failures */
46 if (dev->id.revision == 2 && dev->bus->chip_id == 0x5354) {
47 /* Change syn01 reg */
48 ssb_write32(dev, 0x894, 0x00fe00fe);
49
50 /* Change syn03 reg */
51 ssb_write32(dev, 0x89c, ssb_read32(dev, 0x89c) | 0x1);
52 }
53#endif
54}
55
56static void __devinit ssb_hcd_usb20wa(struct ssb_device *dev)
57{
58 if (dev->id.coreid == SSB_DEV_USB20_HOST) {
59 /*
60 * USB 2.0 special considerations:
61 *
62 * In addition to the standard SSB reset sequence, the Host
63 * Control Register must be programmed to bring the USB core
64 * and various phy components out of reset.
65 */
66 ssb_write32(dev, 0x200, 0x7ff);
67
68 /* Change Flush control reg */
69 ssb_write32(dev, 0x400, ssb_read32(dev, 0x400) & ~8);
70 ssb_read32(dev, 0x400);
71
72 /* Change Shim control reg */
73 ssb_write32(dev, 0x304, ssb_read32(dev, 0x304) & ~0x100);
74 ssb_read32(dev, 0x304);
75
76 udelay(1);
77
78 ssb_hcd_5354wa(dev);
79 }
80}
81
82/* based on arch/mips/brcm-boards/bcm947xx/pcibios.c */
83static u32 __devinit ssb_hcd_init_chip(struct ssb_device *dev)
84{
85 u32 flags = 0;
86
87 if (dev->id.coreid == SSB_DEV_USB11_HOSTDEV)
88 /* Put the device into host-mode. */
89 flags |= SSB_HCD_TMSLOW_HOSTMODE;
90
91 ssb_device_enable(dev, flags);
92
93 ssb_hcd_usb20wa(dev);
94
95 return flags;
96}
97
98static const struct usb_ehci_pdata ehci_pdata = {
99};
100
101static const struct usb_ohci_pdata ohci_pdata = {
102};
103
104static struct platform_device * __devinit
105ssb_hcd_create_pdev(struct ssb_device *dev, bool ohci, u32 addr, u32 len)
106{
107 struct platform_device *hci_dev;
108 struct resource hci_res[2];
109 int ret = -ENOMEM;
110
111 memset(hci_res, 0, sizeof(hci_res));
112
113 hci_res[0].start = addr;
114 hci_res[0].end = hci_res[0].start + len - 1;
115 hci_res[0].flags = IORESOURCE_MEM;
116
117 hci_res[1].start = dev->irq;
118 hci_res[1].flags = IORESOURCE_IRQ;
119
120 hci_dev = platform_device_alloc(ohci ? "ohci-platform" :
121 "ehci-platform" , 0);
122 if (!hci_dev)
123 return NULL;
124
125 hci_dev->dev.parent = dev->dev;
126 hci_dev->dev.dma_mask = &hci_dev->dev.coherent_dma_mask;
127
128 ret = platform_device_add_resources(hci_dev, hci_res,
129 ARRAY_SIZE(hci_res));
130 if (ret)
131 goto err_alloc;
132 if (ohci)
133 ret = platform_device_add_data(hci_dev, &ohci_pdata,
134 sizeof(ohci_pdata));
135 else
136 ret = platform_device_add_data(hci_dev, &ehci_pdata,
137 sizeof(ehci_pdata));
138 if (ret)
139 goto err_alloc;
140 ret = platform_device_add(hci_dev);
141 if (ret)
142 goto err_alloc;
143
144 return hci_dev;
145
146err_alloc:
147 platform_device_put(hci_dev);
148 return ERR_PTR(ret);
149}
150
151static int __devinit ssb_hcd_probe(struct ssb_device *dev,
152 const struct ssb_device_id *id)
153{
154 int err, tmp;
155 int start, len;
156 u16 chipid_top;
157 u16 coreid = dev->id.coreid;
158 struct ssb_hcd_device *usb_dev;
159
160 /* USBcores are only connected on embedded devices. */
161 chipid_top = (dev->bus->chip_id & 0xFF00);
162 if (chipid_top != 0x4700 && chipid_top != 0x5300)
163 return -ENODEV;
164
165 /* TODO: Probably need checks here; is the core connected? */
166
167 if (dma_set_mask(dev->dma_dev, DMA_BIT_MASK(32)) ||
168 dma_set_coherent_mask(dev->dma_dev, DMA_BIT_MASK(32)))
169 return -EOPNOTSUPP;
170
171 usb_dev = kzalloc(sizeof(struct ssb_hcd_device), GFP_KERNEL);
172 if (!usb_dev)
173 return -ENOMEM;
174
175 /* We currently always attach SSB_DEV_USB11_HOSTDEV
176 * as HOST OHCI. If we want to attach it as Client device,
177 * we must branch here and call into the (yet to
178 * be written) Client mode driver. Same for remove(). */
179 usb_dev->enable_flags = ssb_hcd_init_chip(dev);
180
181 tmp = ssb_read32(dev, SSB_ADMATCH0);
182
183 start = ssb_admatch_base(tmp);
184 len = (coreid == SSB_DEV_USB20_HOST) ? 0x800 : ssb_admatch_size(tmp);
185 usb_dev->ohci_dev = ssb_hcd_create_pdev(dev, true, start, len);
186 if (IS_ERR(usb_dev->ohci_dev)) {
187 err = PTR_ERR(usb_dev->ohci_dev);
188 goto err_free_usb_dev;
189 }
190
191 if (coreid == SSB_DEV_USB20_HOST) {
192 start = ssb_admatch_base(tmp) + 0x800; /* ehci core offset */
193 usb_dev->ehci_dev = ssb_hcd_create_pdev(dev, false, start, len);
194 if (IS_ERR(usb_dev->ehci_dev)) {
195 err = PTR_ERR(usb_dev->ehci_dev);
196 goto err_unregister_ohci_dev;
197 }
198 }
199
200 ssb_set_drvdata(dev, usb_dev);
201 return 0;
202
203err_unregister_ohci_dev:
204 platform_device_unregister(usb_dev->ohci_dev);
205err_free_usb_dev:
206 kfree(usb_dev);
207 return err;
208}
209
210static void __devexit ssb_hcd_remove(struct ssb_device *dev)
211{
212 struct ssb_hcd_device *usb_dev = ssb_get_drvdata(dev);
213 struct platform_device *ohci_dev = usb_dev->ohci_dev;
214 struct platform_device *ehci_dev = usb_dev->ehci_dev;
215
216 if (ohci_dev)
217 platform_device_unregister(ohci_dev);
218 if (ehci_dev)
219 platform_device_unregister(ehci_dev);
220
221 ssb_device_disable(dev, 0);
222}
223
224static void __devexit ssb_hcd_shutdown(struct ssb_device *dev)
225{
226 ssb_device_disable(dev, 0);
227}
228
229#ifdef CONFIG_PM
230
231static int ssb_hcd_suspend(struct ssb_device *dev, pm_message_t state)
232{
233 ssb_device_disable(dev, 0);
234
235 return 0;
236}
237
238static int ssb_hcd_resume(struct ssb_device *dev)
239{
240 struct ssb_hcd_device *usb_dev = ssb_get_drvdata(dev);
241
242 ssb_device_enable(dev, usb_dev->enable_flags);
243
244 return 0;
245}
246
247#else /* !CONFIG_PM */
248#define ssb_hcd_suspend NULL
249#define ssb_hcd_resume NULL
250#endif /* CONFIG_PM */
251
252static const struct ssb_device_id ssb_hcd_table[] __devinitconst = {
253 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB11_HOSTDEV, SSB_ANY_REV),
254 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB11_HOST, SSB_ANY_REV),
255 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB20_HOST, SSB_ANY_REV),
256 SSB_DEVTABLE_END
257};
258MODULE_DEVICE_TABLE(ssb, ssb_hcd_table);
259
260static struct ssb_driver ssb_hcd_driver = {
261 .name = KBUILD_MODNAME,
262 .id_table = ssb_hcd_table,
263 .probe = ssb_hcd_probe,
264 .remove = __devexit_p(ssb_hcd_remove),
265 .shutdown = ssb_hcd_shutdown,
266 .suspend = ssb_hcd_suspend,
267 .resume = ssb_hcd_resume,
268};
269
270static int __init ssb_hcd_init(void)
271{
272 return ssb_driver_register(&ssb_hcd_driver);
273}
274module_init(ssb_hcd_init);
275
276static void __exit ssb_hcd_exit(void)
277{
278 ssb_driver_unregister(&ssb_hcd_driver);
279}
280module_exit(ssb_hcd_exit);
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
index 673ad120c43e..2732ef660c5c 100644
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -475,6 +475,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
475 struct xhci_bus_state *bus_state; 475 struct xhci_bus_state *bus_state;
476 u16 link_state = 0; 476 u16 link_state = 0;
477 u16 wake_mask = 0; 477 u16 wake_mask = 0;
478 u16 timeout = 0;
478 479
479 max_ports = xhci_get_ports(hcd, &port_array); 480 max_ports = xhci_get_ports(hcd, &port_array);
480 bus_state = &xhci->bus_state[hcd_index(hcd)]; 481 bus_state = &xhci->bus_state[hcd_index(hcd)];
@@ -558,6 +559,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
558 xhci_dbg(xhci, "Resume USB2 port %d\n", 559 xhci_dbg(xhci, "Resume USB2 port %d\n",
559 wIndex + 1); 560 wIndex + 1);
560 bus_state->resume_done[wIndex] = 0; 561 bus_state->resume_done[wIndex] = 0;
562 clear_bit(wIndex, &bus_state->resuming_ports);
561 xhci_set_link_state(xhci, port_array, wIndex, 563 xhci_set_link_state(xhci, port_array, wIndex,
562 XDEV_U0); 564 XDEV_U0);
563 xhci_dbg(xhci, "set port %d resume\n", 565 xhci_dbg(xhci, "set port %d resume\n",
@@ -622,6 +624,8 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
622 link_state = (wIndex & 0xff00) >> 3; 624 link_state = (wIndex & 0xff00) >> 3;
623 if (wValue == USB_PORT_FEAT_REMOTE_WAKE_MASK) 625 if (wValue == USB_PORT_FEAT_REMOTE_WAKE_MASK)
624 wake_mask = wIndex & 0xff00; 626 wake_mask = wIndex & 0xff00;
627 /* The MSB of wIndex is the U1/U2 timeout */
628 timeout = (wIndex & 0xff00) >> 8;
625 wIndex &= 0xff; 629 wIndex &= 0xff;
626 if (!wIndex || wIndex > max_ports) 630 if (!wIndex || wIndex > max_ports)
627 goto error; 631 goto error;
@@ -746,6 +750,22 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
746 750
747 temp = xhci_readl(xhci, port_array[wIndex]); 751 temp = xhci_readl(xhci, port_array[wIndex]);
748 break; 752 break;
753 case USB_PORT_FEAT_U1_TIMEOUT:
754 if (hcd->speed != HCD_USB3)
755 goto error;
756 temp = xhci_readl(xhci, port_array[wIndex] + 1);
757 temp &= ~PORT_U1_TIMEOUT_MASK;
758 temp |= PORT_U1_TIMEOUT(timeout);
759 xhci_writel(xhci, temp, port_array[wIndex] + 1);
760 break;
761 case USB_PORT_FEAT_U2_TIMEOUT:
762 if (hcd->speed != HCD_USB3)
763 goto error;
764 temp = xhci_readl(xhci, port_array[wIndex] + 1);
765 temp &= ~PORT_U2_TIMEOUT_MASK;
766 temp |= PORT_U2_TIMEOUT(timeout);
767 xhci_writel(xhci, temp, port_array[wIndex] + 1);
768 break;
749 default: 769 default:
750 goto error; 770 goto error;
751 } 771 }
@@ -845,7 +865,12 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
845 /* Initial status is no changes */ 865 /* Initial status is no changes */
846 retval = (max_ports + 8) / 8; 866 retval = (max_ports + 8) / 8;
847 memset(buf, 0, retval); 867 memset(buf, 0, retval);
848 status = 0; 868
869 /*
870 * Inform the usbcore about resume-in-progress by returning
871 * a non-zero value even if there are no status changes.
872 */
873 status = bus_state->resuming_ports;
849 874
850 mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC; 875 mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC;
851 876
@@ -885,15 +910,11 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
885 spin_lock_irqsave(&xhci->lock, flags); 910 spin_lock_irqsave(&xhci->lock, flags);
886 911
887 if (hcd->self.root_hub->do_remote_wakeup) { 912 if (hcd->self.root_hub->do_remote_wakeup) {
888 port_index = max_ports; 913 if (bus_state->resuming_ports) {
889 while (port_index--) { 914 spin_unlock_irqrestore(&xhci->lock, flags);
890 if (bus_state->resume_done[port_index] != 0) { 915 xhci_dbg(xhci, "suspend failed because "
891 spin_unlock_irqrestore(&xhci->lock, flags); 916 "a port is resuming\n");
892 xhci_dbg(xhci, "suspend failed because " 917 return -EBUSY;
893 "port %d is resuming\n",
894 port_index + 1);
895 return -EBUSY;
896 }
897 } 918 }
898 } 919 }
899 920
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 68eaa908ac8e..ec4338eec826 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -1791,6 +1791,14 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1791{ 1791{
1792 struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); 1792 struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
1793 struct dev_info *dev_info, *next; 1793 struct dev_info *dev_info, *next;
1794 struct list_head *tt_list_head;
1795 struct list_head *tt;
1796 struct list_head *endpoints;
1797 struct list_head *ep, *q;
1798 struct xhci_tt_bw_info *tt_info;
1799 struct xhci_interval_bw_table *bwt;
1800 struct xhci_virt_ep *virt_ep;
1801
1794 unsigned long flags; 1802 unsigned long flags;
1795 int size; 1803 int size;
1796 int i; 1804 int i;
@@ -1807,6 +1815,9 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1807 xhci->event_ring = NULL; 1815 xhci->event_ring = NULL;
1808 xhci_dbg(xhci, "Freed event ring\n"); 1816 xhci_dbg(xhci, "Freed event ring\n");
1809 1817
1818 if (xhci->lpm_command)
1819 xhci_free_command(xhci, xhci->lpm_command);
1820 xhci->cmd_ring_reserved_trbs = 0;
1810 if (xhci->cmd_ring) 1821 if (xhci->cmd_ring)
1811 xhci_ring_free(xhci, xhci->cmd_ring); 1822 xhci_ring_free(xhci, xhci->cmd_ring);
1812 xhci->cmd_ring = NULL; 1823 xhci->cmd_ring = NULL;
@@ -1849,8 +1860,26 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1849 } 1860 }
1850 spin_unlock_irqrestore(&xhci->lock, flags); 1861 spin_unlock_irqrestore(&xhci->lock, flags);
1851 1862
1863 bwt = &xhci->rh_bw->bw_table;
1864 for (i = 0; i < XHCI_MAX_INTERVAL; i++) {
1865 endpoints = &bwt->interval_bw[i].endpoints;
1866 list_for_each_safe(ep, q, endpoints) {
1867 virt_ep = list_entry(ep, struct xhci_virt_ep, bw_endpoint_list);
1868 list_del(&virt_ep->bw_endpoint_list);
1869 kfree(virt_ep);
1870 }
1871 }
1872
1873 tt_list_head = &xhci->rh_bw->tts;
1874 list_for_each_safe(tt, q, tt_list_head) {
1875 tt_info = list_entry(tt, struct xhci_tt_bw_info, tt_list);
1876 list_del(tt);
1877 kfree(tt_info);
1878 }
1879
1852 xhci->num_usb2_ports = 0; 1880 xhci->num_usb2_ports = 0;
1853 xhci->num_usb3_ports = 0; 1881 xhci->num_usb3_ports = 0;
1882 xhci->num_active_eps = 0;
1854 kfree(xhci->usb2_ports); 1883 kfree(xhci->usb2_ports);
1855 kfree(xhci->usb3_ports); 1884 kfree(xhci->usb3_ports);
1856 kfree(xhci->port_array); 1885 kfree(xhci->port_array);
@@ -2350,6 +2379,16 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
2350 xhci_write_64(xhci, val_64, &xhci->op_regs->cmd_ring); 2379 xhci_write_64(xhci, val_64, &xhci->op_regs->cmd_ring);
2351 xhci_dbg_cmd_ptrs(xhci); 2380 xhci_dbg_cmd_ptrs(xhci);
2352 2381
2382 xhci->lpm_command = xhci_alloc_command(xhci, true, true, flags);
2383 if (!xhci->lpm_command)
2384 goto fail;
2385
2386 /* Reserve one command ring TRB for disabling LPM.
2387 * Since the USB core grabs the shared usb_bus bandwidth mutex before
2388 * disabling LPM, we only need to reserve one TRB for all devices.
2389 */
2390 xhci->cmd_ring_reserved_trbs++;
2391
2353 val = xhci_readl(xhci, &xhci->cap_regs->db_off); 2392 val = xhci_readl(xhci, &xhci->cap_regs->db_off);
2354 val &= DBOFF_MASK; 2393 val &= DBOFF_MASK;
2355 xhci_dbg(xhci, "// Doorbell array is located at offset 0x%x" 2394 xhci_dbg(xhci, "// Doorbell array is located at offset 0x%x"
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 7a856a767e77..18b231b0c5d3 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -72,6 +72,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
72 xhci_dbg(xhci, "QUIRK: Fresco Logic revision %u " 72 xhci_dbg(xhci, "QUIRK: Fresco Logic revision %u "
73 "has broken MSI implementation\n", 73 "has broken MSI implementation\n",
74 pdev->revision); 74 pdev->revision);
75 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
75 } 76 }
76 77
77 if (pdev->vendor == PCI_VENDOR_ID_NEC) 78 if (pdev->vendor == PCI_VENDOR_ID_NEC)
@@ -83,6 +84,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
83 /* AMD PLL quirk */ 84 /* AMD PLL quirk */
84 if (pdev->vendor == PCI_VENDOR_ID_AMD && usb_amd_find_chipset_info()) 85 if (pdev->vendor == PCI_VENDOR_ID_AMD && usb_amd_find_chipset_info())
85 xhci->quirks |= XHCI_AMD_PLL_FIX; 86 xhci->quirks |= XHCI_AMD_PLL_FIX;
87 if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
88 xhci->quirks |= XHCI_LPM_SUPPORT;
89 xhci->quirks |= XHCI_INTEL_HOST;
90 }
86 if (pdev->vendor == PCI_VENDOR_ID_INTEL && 91 if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
87 pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { 92 pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
88 xhci->quirks |= XHCI_SPURIOUS_SUCCESS; 93 xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
@@ -169,6 +174,13 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
169 if (retval) 174 if (retval)
170 goto put_usb3_hcd; 175 goto put_usb3_hcd;
171 /* Roothub already marked as USB 3.0 speed */ 176 /* Roothub already marked as USB 3.0 speed */
177
178 /* We know the LPM timeout algorithms for this host, let the USB core
179 * enable and disable LPM for devices under the USB 3.0 roothub.
180 */
181 if (xhci->quirks & XHCI_LPM_SUPPORT)
182 hcd_to_bus(xhci->shared_hcd)->root_hub->lpm_capable = 1;
183
172 return 0; 184 return 0;
173 185
174put_usb3_hcd: 186put_usb3_hcd:
@@ -292,6 +304,8 @@ static const struct hc_driver xhci_pci_hc_driver = {
292 */ 304 */
293 .update_device = xhci_update_device, 305 .update_device = xhci_update_device,
294 .set_usb2_hw_lpm = xhci_set_usb2_hardware_lpm, 306 .set_usb2_hw_lpm = xhci_set_usb2_hardware_lpm,
307 .enable_usb3_lpm_timeout = xhci_enable_usb3_lpm_timeout,
308 .disable_usb3_lpm_timeout = xhci_disable_usb3_lpm_timeout,
295}; 309};
296 310
297/*-------------------------------------------------------------------------*/ 311/*-------------------------------------------------------------------------*/
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 3d9422f16a20..23b4aefd1036 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -1377,6 +1377,7 @@ static void handle_port_status(struct xhci_hcd *xhci,
1377 xhci_dbg(xhci, "resume HS port %d\n", port_id); 1377 xhci_dbg(xhci, "resume HS port %d\n", port_id);
1378 bus_state->resume_done[faked_port_index] = jiffies + 1378 bus_state->resume_done[faked_port_index] = jiffies +
1379 msecs_to_jiffies(20); 1379 msecs_to_jiffies(20);
1380 set_bit(faked_port_index, &bus_state->resuming_ports);
1380 mod_timer(&hcd->rh_timer, 1381 mod_timer(&hcd->rh_timer,
1381 bus_state->resume_done[faked_port_index]); 1382 bus_state->resume_done[faked_port_index]);
1382 /* Do the rest in GetPortStatus */ 1383 /* Do the rest in GetPortStatus */
@@ -1786,8 +1787,12 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
1786 /* handle completion code */ 1787 /* handle completion code */
1787 switch (trb_comp_code) { 1788 switch (trb_comp_code) {
1788 case COMP_SUCCESS: 1789 case COMP_SUCCESS:
1789 frame->status = 0; 1790 if (TRB_LEN(le32_to_cpu(event->transfer_len)) == 0) {
1790 break; 1791 frame->status = 0;
1792 break;
1793 }
1794 if ((xhci->quirks & XHCI_TRUST_TX_LENGTH))
1795 trb_comp_code = COMP_SHORT_TX;
1791 case COMP_SHORT_TX: 1796 case COMP_SHORT_TX:
1792 frame->status = td->urb->transfer_flags & URB_SHORT_NOT_OK ? 1797 frame->status = td->urb->transfer_flags & URB_SHORT_NOT_OK ?
1793 -EREMOTEIO : 0; 1798 -EREMOTEIO : 0;
@@ -1803,6 +1808,7 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
1803 break; 1808 break;
1804 case COMP_DEV_ERR: 1809 case COMP_DEV_ERR:
1805 case COMP_STALL: 1810 case COMP_STALL:
1811 case COMP_TX_ERR:
1806 frame->status = -EPROTO; 1812 frame->status = -EPROTO;
1807 skip_td = true; 1813 skip_td = true;
1808 break; 1814 break;
@@ -1883,13 +1889,16 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
1883 switch (trb_comp_code) { 1889 switch (trb_comp_code) {
1884 case COMP_SUCCESS: 1890 case COMP_SUCCESS:
1885 /* Double check that the HW transferred everything. */ 1891 /* Double check that the HW transferred everything. */
1886 if (event_trb != td->last_trb) { 1892 if (event_trb != td->last_trb ||
1893 TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) {
1887 xhci_warn(xhci, "WARN Successful completion " 1894 xhci_warn(xhci, "WARN Successful completion "
1888 "on short TX\n"); 1895 "on short TX\n");
1889 if (td->urb->transfer_flags & URB_SHORT_NOT_OK) 1896 if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
1890 *status = -EREMOTEIO; 1897 *status = -EREMOTEIO;
1891 else 1898 else
1892 *status = 0; 1899 *status = 0;
1900 if ((xhci->quirks & XHCI_TRUST_TX_LENGTH))
1901 trb_comp_code = COMP_SHORT_TX;
1893 } else { 1902 } else {
1894 *status = 0; 1903 *status = 0;
1895 } 1904 }
@@ -2048,6 +2057,13 @@ static int handle_tx_event(struct xhci_hcd *xhci,
2048 * transfer type 2057 * transfer type
2049 */ 2058 */
2050 case COMP_SUCCESS: 2059 case COMP_SUCCESS:
2060 if (TRB_LEN(le32_to_cpu(event->transfer_len)) == 0)
2061 break;
2062 if (xhci->quirks & XHCI_TRUST_TX_LENGTH)
2063 trb_comp_code = COMP_SHORT_TX;
2064 else
2065 xhci_warn(xhci, "WARN Successful completion on short TX: "
2066 "needs XHCI_TRUST_TX_LENGTH quirk?\n");
2051 case COMP_SHORT_TX: 2067 case COMP_SHORT_TX:
2052 break; 2068 break;
2053 case COMP_STOP: 2069 case COMP_STOP:
@@ -2270,7 +2286,7 @@ cleanup:
2270 (status != 0 && 2286 (status != 0 &&
2271 !usb_endpoint_xfer_isoc(&urb->ep->desc))) 2287 !usb_endpoint_xfer_isoc(&urb->ep->desc)))
2272 xhci_dbg(xhci, "Giveback URB %p, len = %d, " 2288 xhci_dbg(xhci, "Giveback URB %p, len = %d, "
2273 "expected = %x, status = %d\n", 2289 "expected = %d, status = %d\n",
2274 urb, urb->actual_length, 2290 urb, urb->actual_length,
2275 urb->transfer_buffer_length, 2291 urb->transfer_buffer_length,
2276 status); 2292 status);
@@ -3593,12 +3609,12 @@ int xhci_queue_configure_endpoint(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
3593 3609
3594/* Queue an evaluate context command TRB */ 3610/* Queue an evaluate context command TRB */
3595int xhci_queue_evaluate_context(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr, 3611int xhci_queue_evaluate_context(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
3596 u32 slot_id) 3612 u32 slot_id, bool command_must_succeed)
3597{ 3613{
3598 return queue_command(xhci, lower_32_bits(in_ctx_ptr), 3614 return queue_command(xhci, lower_32_bits(in_ctx_ptr),
3599 upper_32_bits(in_ctx_ptr), 0, 3615 upper_32_bits(in_ctx_ptr), 0,
3600 TRB_TYPE(TRB_EVAL_CONTEXT) | SLOT_ID_FOR_TRB(slot_id), 3616 TRB_TYPE(TRB_EVAL_CONTEXT) | SLOT_ID_FOR_TRB(slot_id),
3601 false); 3617 command_must_succeed);
3602} 3618}
3603 3619
3604/* 3620/*
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 36641a7f2371..afdc73ee84a6 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -152,7 +152,7 @@ int xhci_reset(struct xhci_hcd *xhci)
152{ 152{
153 u32 command; 153 u32 command;
154 u32 state; 154 u32 state;
155 int ret; 155 int ret, i;
156 156
157 state = xhci_readl(xhci, &xhci->op_regs->status); 157 state = xhci_readl(xhci, &xhci->op_regs->status);
158 if ((state & STS_HALT) == 0) { 158 if ((state & STS_HALT) == 0) {
@@ -175,7 +175,15 @@ int xhci_reset(struct xhci_hcd *xhci)
175 * xHCI cannot write to any doorbells or operational registers other 175 * xHCI cannot write to any doorbells or operational registers other
176 * than status until the "Controller Not Ready" flag is cleared. 176 * than status until the "Controller Not Ready" flag is cleared.
177 */ 177 */
178 return handshake(xhci, &xhci->op_regs->status, STS_CNR, 0, 250 * 1000); 178 ret = handshake(xhci, &xhci->op_regs->status, STS_CNR, 0, 250 * 1000);
179
180 for (i = 0; i < 2; ++i) {
181 xhci->bus_state[i].port_c_suspend = 0;
182 xhci->bus_state[i].suspended_ports = 0;
183 xhci->bus_state[i].resuming_ports = 0;
184 }
185
186 return ret;
179} 187}
180 188
181#ifdef CONFIG_PCI 189#ifdef CONFIG_PCI
@@ -2438,7 +2446,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,
2438 udev->slot_id, must_succeed); 2446 udev->slot_id, must_succeed);
2439 else 2447 else
2440 ret = xhci_queue_evaluate_context(xhci, in_ctx->dma, 2448 ret = xhci_queue_evaluate_context(xhci, in_ctx->dma,
2441 udev->slot_id); 2449 udev->slot_id, must_succeed);
2442 if (ret < 0) { 2450 if (ret < 0) {
2443 if (command) 2451 if (command)
2444 list_del(&command->cmd_list); 2452 list_del(&command->cmd_list);
@@ -3863,6 +3871,474 @@ int xhci_update_device(struct usb_hcd *hcd, struct usb_device *udev)
3863 3871
3864#endif /* CONFIG_USB_SUSPEND */ 3872#endif /* CONFIG_USB_SUSPEND */
3865 3873
3874/*---------------------- USB 3.0 Link PM functions ------------------------*/
3875
3876#ifdef CONFIG_PM
3877/* Service interval in nanoseconds = 2^(bInterval - 1) * 125us * 1000ns / 1us */
3878static unsigned long long xhci_service_interval_to_ns(
3879 struct usb_endpoint_descriptor *desc)
3880{
3881 return (1 << (desc->bInterval - 1)) * 125 * 1000;
3882}
3883
3884static u16 xhci_get_timeout_no_hub_lpm(struct usb_device *udev,
3885 enum usb3_link_state state)
3886{
3887 unsigned long long sel;
3888 unsigned long long pel;
3889 unsigned int max_sel_pel;
3890 char *state_name;
3891
3892 switch (state) {
3893 case USB3_LPM_U1:
3894 /* Convert SEL and PEL stored in nanoseconds to microseconds */
3895 sel = DIV_ROUND_UP(udev->u1_params.sel, 1000);
3896 pel = DIV_ROUND_UP(udev->u1_params.pel, 1000);
3897 max_sel_pel = USB3_LPM_MAX_U1_SEL_PEL;
3898 state_name = "U1";
3899 break;
3900 case USB3_LPM_U2:
3901 sel = DIV_ROUND_UP(udev->u2_params.sel, 1000);
3902 pel = DIV_ROUND_UP(udev->u2_params.pel, 1000);
3903 max_sel_pel = USB3_LPM_MAX_U2_SEL_PEL;
3904 state_name = "U2";
3905 break;
3906 default:
3907 dev_warn(&udev->dev, "%s: Can't get timeout for non-U1 or U2 state.\n",
3908 __func__);
3909 return -EINVAL;
3910 }
3911
3912 if (sel <= max_sel_pel && pel <= max_sel_pel)
3913 return USB3_LPM_DEVICE_INITIATED;
3914
3915 if (sel > max_sel_pel)
3916 dev_dbg(&udev->dev, "Device-initiated %s disabled "
3917 "due to long SEL %llu ms\n",
3918 state_name, sel);
3919 else
3920 dev_dbg(&udev->dev, "Device-initiated %s disabled "
3921 "due to long PEL %llu\n ms",
3922 state_name, pel);
3923 return USB3_LPM_DISABLED;
3924}
3925
3926/* Returns the hub-encoded U1 timeout value.
3927 * The U1 timeout should be the maximum of the following values:
3928 * - For control endpoints, U1 system exit latency (SEL) * 3
3929 * - For bulk endpoints, U1 SEL * 5
3930 * - For interrupt endpoints:
3931 * - Notification EPs, U1 SEL * 3
3932 * - Periodic EPs, max(105% of bInterval, U1 SEL * 2)
3933 * - For isochronous endpoints, max(105% of bInterval, U1 SEL * 2)
3934 */
3935static u16 xhci_calculate_intel_u1_timeout(struct usb_device *udev,
3936 struct usb_endpoint_descriptor *desc)
3937{
3938 unsigned long long timeout_ns;
3939 int ep_type;
3940 int intr_type;
3941
3942 ep_type = usb_endpoint_type(desc);
3943 switch (ep_type) {
3944 case USB_ENDPOINT_XFER_CONTROL:
3945 timeout_ns = udev->u1_params.sel * 3;
3946 break;
3947 case USB_ENDPOINT_XFER_BULK:
3948 timeout_ns = udev->u1_params.sel * 5;
3949 break;
3950 case USB_ENDPOINT_XFER_INT:
3951 intr_type = usb_endpoint_interrupt_type(desc);
3952 if (intr_type == USB_ENDPOINT_INTR_NOTIFICATION) {
3953 timeout_ns = udev->u1_params.sel * 3;
3954 break;
3955 }
3956 /* Otherwise the calculation is the same as isoc eps */
3957 case USB_ENDPOINT_XFER_ISOC:
3958 timeout_ns = xhci_service_interval_to_ns(desc);
3959 timeout_ns = DIV_ROUND_UP_ULL(timeout_ns * 105, 100);
3960 if (timeout_ns < udev->u1_params.sel * 2)
3961 timeout_ns = udev->u1_params.sel * 2;
3962 break;
3963 default:
3964 return 0;
3965 }
3966
3967 /* The U1 timeout is encoded in 1us intervals. */
3968 timeout_ns = DIV_ROUND_UP_ULL(timeout_ns, 1000);
3969 /* Don't return a timeout of zero, because that's USB3_LPM_DISABLED. */
3970 if (timeout_ns == USB3_LPM_DISABLED)
3971 timeout_ns++;
3972
3973 /* If the necessary timeout value is bigger than what we can set in the
3974 * USB 3.0 hub, we have to disable hub-initiated U1.
3975 */
3976 if (timeout_ns <= USB3_LPM_U1_MAX_TIMEOUT)
3977 return timeout_ns;
3978 dev_dbg(&udev->dev, "Hub-initiated U1 disabled "
3979 "due to long timeout %llu ms\n", timeout_ns);
3980 return xhci_get_timeout_no_hub_lpm(udev, USB3_LPM_U1);
3981}
3982
3983/* Returns the hub-encoded U2 timeout value.
3984 * The U2 timeout should be the maximum of:
3985 * - 10 ms (to avoid the bandwidth impact on the scheduler)
3986 * - largest bInterval of any active periodic endpoint (to avoid going
3987 * into lower power link states between intervals).
3988 * - the U2 Exit Latency of the device
3989 */
3990static u16 xhci_calculate_intel_u2_timeout(struct usb_device *udev,
3991 struct usb_endpoint_descriptor *desc)
3992{
3993 unsigned long long timeout_ns;
3994 unsigned long long u2_del_ns;
3995
3996 timeout_ns = 10 * 1000 * 1000;
3997
3998 if ((usb_endpoint_xfer_int(desc) || usb_endpoint_xfer_isoc(desc)) &&
3999 (xhci_service_interval_to_ns(desc) > timeout_ns))
4000 timeout_ns = xhci_service_interval_to_ns(desc);
4001
4002 u2_del_ns = udev->bos->ss_cap->bU2DevExitLat * 1000;
4003 if (u2_del_ns > timeout_ns)
4004 timeout_ns = u2_del_ns;
4005
4006 /* The U2 timeout is encoded in 256us intervals */
4007 timeout_ns = DIV_ROUND_UP_ULL(timeout_ns, 256 * 1000);
4008 /* If the necessary timeout value is bigger than what we can set in the
4009 * USB 3.0 hub, we have to disable hub-initiated U2.
4010 */
4011 if (timeout_ns <= USB3_LPM_U2_MAX_TIMEOUT)
4012 return timeout_ns;
4013 dev_dbg(&udev->dev, "Hub-initiated U2 disabled "
4014 "due to long timeout %llu ms\n", timeout_ns);
4015 return xhci_get_timeout_no_hub_lpm(udev, USB3_LPM_U2);
4016}
4017
4018static u16 xhci_call_host_update_timeout_for_endpoint(struct xhci_hcd *xhci,
4019 struct usb_device *udev,
4020 struct usb_endpoint_descriptor *desc,
4021 enum usb3_link_state state,
4022 u16 *timeout)
4023{
4024 if (state == USB3_LPM_U1) {
4025 if (xhci->quirks & XHCI_INTEL_HOST)
4026 return xhci_calculate_intel_u1_timeout(udev, desc);
4027 } else {
4028 if (xhci->quirks & XHCI_INTEL_HOST)
4029 return xhci_calculate_intel_u2_timeout(udev, desc);
4030 }
4031
4032 return USB3_LPM_DISABLED;
4033}
4034
4035static int xhci_update_timeout_for_endpoint(struct xhci_hcd *xhci,
4036 struct usb_device *udev,
4037 struct usb_endpoint_descriptor *desc,
4038 enum usb3_link_state state,
4039 u16 *timeout)
4040{
4041 u16 alt_timeout;
4042
4043 alt_timeout = xhci_call_host_update_timeout_for_endpoint(xhci, udev,
4044 desc, state, timeout);
4045
4046 /* If we found we can't enable hub-initiated LPM, or
4047 * the U1 or U2 exit latency was too high to allow
4048 * device-initiated LPM as well, just stop searching.
4049 */
4050 if (alt_timeout == USB3_LPM_DISABLED ||
4051 alt_timeout == USB3_LPM_DEVICE_INITIATED) {
4052 *timeout = alt_timeout;
4053 return -E2BIG;
4054 }
4055 if (alt_timeout > *timeout)
4056 *timeout = alt_timeout;
4057 return 0;
4058}
4059
4060static int xhci_update_timeout_for_interface(struct xhci_hcd *xhci,
4061 struct usb_device *udev,
4062 struct usb_host_interface *alt,
4063 enum usb3_link_state state,
4064 u16 *timeout)
4065{
4066 int j;
4067
4068 for (j = 0; j < alt->desc.bNumEndpoints; j++) {
4069 if (xhci_update_timeout_for_endpoint(xhci, udev,
4070 &alt->endpoint[j].desc, state, timeout))
4071 return -E2BIG;
4072 continue;
4073 }
4074 return 0;
4075}
4076
4077static int xhci_check_intel_tier_policy(struct usb_device *udev,
4078 enum usb3_link_state state)
4079{
4080 struct usb_device *parent;
4081 unsigned int num_hubs;
4082
4083 if (state == USB3_LPM_U2)
4084 return 0;
4085
4086 /* Don't enable U1 if the device is on a 2nd tier hub or lower. */
4087 for (parent = udev->parent, num_hubs = 0; parent->parent;
4088 parent = parent->parent)
4089 num_hubs++;
4090
4091 if (num_hubs < 2)
4092 return 0;
4093
4094 dev_dbg(&udev->dev, "Disabling U1 link state for device"
4095 " below second-tier hub.\n");
4096 dev_dbg(&udev->dev, "Plug device into first-tier hub "
4097 "to decrease power consumption.\n");
4098 return -E2BIG;
4099}
4100
4101static int xhci_check_tier_policy(struct xhci_hcd *xhci,
4102 struct usb_device *udev,
4103 enum usb3_link_state state)
4104{
4105 if (xhci->quirks & XHCI_INTEL_HOST)
4106 return xhci_check_intel_tier_policy(udev, state);
4107 return -EINVAL;
4108}
4109
4110/* Returns the U1 or U2 timeout that should be enabled.
4111 * If the tier check or timeout setting functions return with a non-zero exit
4112 * code, that means the timeout value has been finalized and we shouldn't look
4113 * at any more endpoints.
4114 */
4115static u16 xhci_calculate_lpm_timeout(struct usb_hcd *hcd,
4116 struct usb_device *udev, enum usb3_link_state state)
4117{
4118 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
4119 struct usb_host_config *config;
4120 char *state_name;
4121 int i;
4122 u16 timeout = USB3_LPM_DISABLED;
4123
4124 if (state == USB3_LPM_U1)
4125 state_name = "U1";
4126 else if (state == USB3_LPM_U2)
4127 state_name = "U2";
4128 else {
4129 dev_warn(&udev->dev, "Can't enable unknown link state %i\n",
4130 state);
4131 return timeout;
4132 }
4133
4134 if (xhci_check_tier_policy(xhci, udev, state) < 0)
4135 return timeout;
4136
4137 /* Gather some information about the currently installed configuration
4138 * and alternate interface settings.
4139 */
4140 if (xhci_update_timeout_for_endpoint(xhci, udev, &udev->ep0.desc,
4141 state, &timeout))
4142 return timeout;
4143
4144 config = udev->actconfig;
4145 if (!config)
4146 return timeout;
4147
4148 for (i = 0; i < USB_MAXINTERFACES; i++) {
4149 struct usb_driver *driver;
4150 struct usb_interface *intf = config->interface[i];
4151
4152 if (!intf)
4153 continue;
4154
4155 /* Check if any currently bound drivers want hub-initiated LPM
4156 * disabled.
4157 */
4158 if (intf->dev.driver) {
4159 driver = to_usb_driver(intf->dev.driver);
4160 if (driver && driver->disable_hub_initiated_lpm) {
4161 dev_dbg(&udev->dev, "Hub-initiated %s disabled "
4162 "at request of driver %s\n",
4163 state_name, driver->name);
4164 return xhci_get_timeout_no_hub_lpm(udev, state);
4165 }
4166 }
4167
4168 /* Not sure how this could happen... */
4169 if (!intf->cur_altsetting)
4170 continue;
4171
4172 if (xhci_update_timeout_for_interface(xhci, udev,
4173 intf->cur_altsetting,
4174 state, &timeout))
4175 return timeout;
4176 }
4177 return timeout;
4178}
4179
4180/*
4181 * Issue an Evaluate Context command to change the Maximum Exit Latency in the
4182 * slot context. If that succeeds, store the new MEL in the xhci_virt_device.
4183 */
4184static int xhci_change_max_exit_latency(struct xhci_hcd *xhci,
4185 struct usb_device *udev, u16 max_exit_latency)
4186{
4187 struct xhci_virt_device *virt_dev;
4188 struct xhci_command *command;
4189 struct xhci_input_control_ctx *ctrl_ctx;
4190 struct xhci_slot_ctx *slot_ctx;
4191 unsigned long flags;
4192 int ret;
4193
4194 spin_lock_irqsave(&xhci->lock, flags);
4195 if (max_exit_latency == xhci->devs[udev->slot_id]->current_mel) {
4196 spin_unlock_irqrestore(&xhci->lock, flags);
4197 return 0;
4198 }
4199
4200 /* Attempt to issue an Evaluate Context command to change the MEL. */
4201 virt_dev = xhci->devs[udev->slot_id];
4202 command = xhci->lpm_command;
4203 xhci_slot_copy(xhci, command->in_ctx, virt_dev->out_ctx);
4204 spin_unlock_irqrestore(&xhci->lock, flags);
4205
4206 ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx);
4207 ctrl_ctx->add_flags |= cpu_to_le32(SLOT_FLAG);
4208 slot_ctx = xhci_get_slot_ctx(xhci, command->in_ctx);
4209 slot_ctx->dev_info2 &= cpu_to_le32(~((u32) MAX_EXIT));
4210 slot_ctx->dev_info2 |= cpu_to_le32(max_exit_latency);
4211
4212 xhci_dbg(xhci, "Set up evaluate context for LPM MEL change.\n");
4213 xhci_dbg(xhci, "Slot %u Input Context:\n", udev->slot_id);
4214 xhci_dbg_ctx(xhci, command->in_ctx, 0);
4215
4216 /* Issue and wait for the evaluate context command. */
4217 ret = xhci_configure_endpoint(xhci, udev, command,
4218 true, true);
4219 xhci_dbg(xhci, "Slot %u Output Context:\n", udev->slot_id);
4220 xhci_dbg_ctx(xhci, virt_dev->out_ctx, 0);
4221
4222 if (!ret) {
4223 spin_lock_irqsave(&xhci->lock, flags);
4224 virt_dev->current_mel = max_exit_latency;
4225 spin_unlock_irqrestore(&xhci->lock, flags);
4226 }
4227 return ret;
4228}
4229
4230static int calculate_max_exit_latency(struct usb_device *udev,
4231 enum usb3_link_state state_changed,
4232 u16 hub_encoded_timeout)
4233{
4234 unsigned long long u1_mel_us = 0;
4235 unsigned long long u2_mel_us = 0;
4236 unsigned long long mel_us = 0;
4237 bool disabling_u1;
4238 bool disabling_u2;
4239 bool enabling_u1;
4240 bool enabling_u2;
4241
4242 disabling_u1 = (state_changed == USB3_LPM_U1 &&
4243 hub_encoded_timeout == USB3_LPM_DISABLED);
4244 disabling_u2 = (state_changed == USB3_LPM_U2 &&
4245 hub_encoded_timeout == USB3_LPM_DISABLED);
4246
4247 enabling_u1 = (state_changed == USB3_LPM_U1 &&
4248 hub_encoded_timeout != USB3_LPM_DISABLED);
4249 enabling_u2 = (state_changed == USB3_LPM_U2 &&
4250 hub_encoded_timeout != USB3_LPM_DISABLED);
4251
4252 /* If U1 was already enabled and we're not disabling it,
4253 * or we're going to enable U1, account for the U1 max exit latency.
4254 */
4255 if ((udev->u1_params.timeout != USB3_LPM_DISABLED && !disabling_u1) ||
4256 enabling_u1)
4257 u1_mel_us = DIV_ROUND_UP(udev->u1_params.mel, 1000);
4258 if ((udev->u2_params.timeout != USB3_LPM_DISABLED && !disabling_u2) ||
4259 enabling_u2)
4260 u2_mel_us = DIV_ROUND_UP(udev->u2_params.mel, 1000);
4261
4262 if (u1_mel_us > u2_mel_us)
4263 mel_us = u1_mel_us;
4264 else
4265 mel_us = u2_mel_us;
4266 /* xHCI host controller max exit latency field is only 16 bits wide. */
4267 if (mel_us > MAX_EXIT) {
4268 dev_warn(&udev->dev, "Link PM max exit latency of %lluus "
4269 "is too big.\n", mel_us);
4270 return -E2BIG;
4271 }
4272 return mel_us;
4273}
4274
4275/* Returns the USB3 hub-encoded value for the U1/U2 timeout. */
4276int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd,
4277 struct usb_device *udev, enum usb3_link_state state)
4278{
4279 struct xhci_hcd *xhci;
4280 u16 hub_encoded_timeout;
4281 int mel;
4282 int ret;
4283
4284 xhci = hcd_to_xhci(hcd);
4285 /* The LPM timeout values are pretty host-controller specific, so don't
4286 * enable hub-initiated timeouts unless the vendor has provided
4287 * information about their timeout algorithm.
4288 */
4289 if (!xhci || !(xhci->quirks & XHCI_LPM_SUPPORT) ||
4290 !xhci->devs[udev->slot_id])
4291 return USB3_LPM_DISABLED;
4292
4293 hub_encoded_timeout = xhci_calculate_lpm_timeout(hcd, udev, state);
4294 mel = calculate_max_exit_latency(udev, state, hub_encoded_timeout);
4295 if (mel < 0) {
4296 /* Max Exit Latency is too big, disable LPM. */
4297 hub_encoded_timeout = USB3_LPM_DISABLED;
4298 mel = 0;
4299 }
4300
4301 ret = xhci_change_max_exit_latency(xhci, udev, mel);
4302 if (ret)
4303 return ret;
4304 return hub_encoded_timeout;
4305}
4306
4307int xhci_disable_usb3_lpm_timeout(struct usb_hcd *hcd,
4308 struct usb_device *udev, enum usb3_link_state state)
4309{
4310 struct xhci_hcd *xhci;
4311 u16 mel;
4312 int ret;
4313
4314 xhci = hcd_to_xhci(hcd);
4315 if (!xhci || !(xhci->quirks & XHCI_LPM_SUPPORT) ||
4316 !xhci->devs[udev->slot_id])
4317 return 0;
4318
4319 mel = calculate_max_exit_latency(udev, state, USB3_LPM_DISABLED);
4320 ret = xhci_change_max_exit_latency(xhci, udev, mel);
4321 if (ret)
4322 return ret;
4323 return 0;
4324}
4325#else /* CONFIG_PM */
4326
4327int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd,
4328 struct usb_device *udev, enum usb3_link_state state)
4329{
4330 return USB3_LPM_DISABLED;
4331}
4332
4333int xhci_disable_usb3_lpm_timeout(struct usb_hcd *hcd,
4334 struct usb_device *udev, enum usb3_link_state state)
4335{
4336 return 0;
4337}
4338#endif /* CONFIG_PM */
4339
4340/*-------------------------------------------------------------------------*/
4341
3866/* Once a hub descriptor is fetched for a device, we need to update the xHC's 4342/* Once a hub descriptor is fetched for a device, we need to update the xHC's
3867 * internal data structures for the device. 4343 * internal data structures for the device.
3868 */ 4344 */
@@ -4090,7 +4566,6 @@ static int __init xhci_hcd_init(void)
4090 BUILD_BUG_ON(sizeof(struct xhci_intr_reg) != 8*32/8); 4566 BUILD_BUG_ON(sizeof(struct xhci_intr_reg) != 8*32/8);
4091 /* xhci_run_regs has eight fields and embeds 128 xhci_intr_regs */ 4567 /* xhci_run_regs has eight fields and embeds 128 xhci_intr_regs */
4092 BUILD_BUG_ON(sizeof(struct xhci_run_regs) != (8+8*128)*32/8); 4568 BUILD_BUG_ON(sizeof(struct xhci_run_regs) != (8+8*128)*32/8);
4093 BUILD_BUG_ON(sizeof(struct xhci_doorbell_array) != 256*32/8);
4094 return 0; 4569 return 0;
4095unreg_pci: 4570unreg_pci:
4096 xhci_unregister_pci(); 4571 xhci_unregister_pci();
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index 3d69c4b2b542..de3d6e3e57be 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -362,8 +362,10 @@ struct xhci_op_regs {
362 * Timeout can be up to 127us. 0xFF means an infinite timeout. 362 * Timeout can be up to 127us. 0xFF means an infinite timeout.
363 */ 363 */
364#define PORT_U1_TIMEOUT(p) ((p) & 0xff) 364#define PORT_U1_TIMEOUT(p) ((p) & 0xff)
365#define PORT_U1_TIMEOUT_MASK 0xff
365/* Inactivity timer value for transitions into U2 */ 366/* Inactivity timer value for transitions into U2 */
366#define PORT_U2_TIMEOUT(p) (((p) & 0xff) << 8) 367#define PORT_U2_TIMEOUT(p) (((p) & 0xff) << 8)
368#define PORT_U2_TIMEOUT_MASK (0xff << 8)
367/* Bits 24:31 for port testing */ 369/* Bits 24:31 for port testing */
368 370
369/* USB2 Protocol PORTSPMSC */ 371/* USB2 Protocol PORTSPMSC */
@@ -914,6 +916,8 @@ struct xhci_virt_device {
914 u8 real_port; 916 u8 real_port;
915 struct xhci_interval_bw_table *bw_table; 917 struct xhci_interval_bw_table *bw_table;
916 struct xhci_tt_bw_info *tt_info; 918 struct xhci_tt_bw_info *tt_info;
919 /* The current max exit latency for the enabled USB3 link states. */
920 u16 current_mel;
917}; 921};
918 922
919/* 923/*
@@ -1362,6 +1366,8 @@ struct xhci_bus_state {
1362 u32 suspended_ports; 1366 u32 suspended_ports;
1363 u32 port_remote_wakeup; 1367 u32 port_remote_wakeup;
1364 unsigned long resume_done[USB_MAXCHILDREN]; 1368 unsigned long resume_done[USB_MAXCHILDREN];
1369 /* which ports have started to resume */
1370 unsigned long resuming_ports;
1365}; 1371};
1366 1372
1367static inline unsigned int hcd_index(struct usb_hcd *hcd) 1373static inline unsigned int hcd_index(struct usb_hcd *hcd)
@@ -1422,6 +1428,8 @@ struct xhci_hcd {
1422 /* slot enabling and address device helpers */ 1428 /* slot enabling and address device helpers */
1423 struct completion addr_dev; 1429 struct completion addr_dev;
1424 int slot_id; 1430 int slot_id;
1431 /* For USB 3.0 LPM enable/disable. */
1432 struct xhci_command *lpm_command;
1425 /* Internal mirror of the HW's dcbaa */ 1433 /* Internal mirror of the HW's dcbaa */
1426 struct xhci_virt_device *devs[MAX_HC_SLOTS]; 1434 struct xhci_virt_device *devs[MAX_HC_SLOTS];
1427 /* For keeping track of bandwidth domains per roothub. */ 1435 /* For keeping track of bandwidth domains per roothub. */
@@ -1479,6 +1487,9 @@ struct xhci_hcd {
1479#define XHCI_RESET_ON_RESUME (1 << 7) 1487#define XHCI_RESET_ON_RESUME (1 << 7)
1480#define XHCI_SW_BW_CHECKING (1 << 8) 1488#define XHCI_SW_BW_CHECKING (1 << 8)
1481#define XHCI_AMD_0x96_HOST (1 << 9) 1489#define XHCI_AMD_0x96_HOST (1 << 9)
1490#define XHCI_TRUST_TX_LENGTH (1 << 10)
1491#define XHCI_LPM_SUPPORT (1 << 11)
1492#define XHCI_INTEL_HOST (1 << 12)
1482 unsigned int num_active_eps; 1493 unsigned int num_active_eps;
1483 unsigned int limit_active_eps; 1494 unsigned int limit_active_eps;
1484 /* There are two roothubs to keep track of bus suspend info for */ 1495 /* There are two roothubs to keep track of bus suspend info for */
@@ -1752,7 +1763,7 @@ int xhci_queue_isoc_tx_prepare(struct xhci_hcd *xhci, gfp_t mem_flags,
1752int xhci_queue_configure_endpoint(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr, 1763int xhci_queue_configure_endpoint(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
1753 u32 slot_id, bool command_must_succeed); 1764 u32 slot_id, bool command_must_succeed);
1754int xhci_queue_evaluate_context(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr, 1765int xhci_queue_evaluate_context(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
1755 u32 slot_id); 1766 u32 slot_id, bool command_must_succeed);
1756int xhci_queue_reset_ep(struct xhci_hcd *xhci, int slot_id, 1767int xhci_queue_reset_ep(struct xhci_hcd *xhci, int slot_id,
1757 unsigned int ep_index); 1768 unsigned int ep_index);
1758int xhci_queue_reset_device(struct xhci_hcd *xhci, u32 slot_id); 1769int xhci_queue_reset_device(struct xhci_hcd *xhci, u32 slot_id);
@@ -1776,6 +1787,10 @@ void xhci_ring_ep_doorbell(struct xhci_hcd *xhci, unsigned int slot_id,
1776/* xHCI roothub code */ 1787/* xHCI roothub code */
1777void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array, 1788void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array,
1778 int port_id, u32 link_state); 1789 int port_id, u32 link_state);
1790int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd,
1791 struct usb_device *udev, enum usb3_link_state state);
1792int xhci_disable_usb3_lpm_timeout(struct usb_hcd *hcd,
1793 struct usb_device *udev, enum usb3_link_state state);
1779void xhci_test_and_clear_bit(struct xhci_hcd *xhci, __le32 __iomem **port_array, 1794void xhci_test_and_clear_bit(struct xhci_hcd *xhci, __le32 __iomem **port_array,
1780 int port_id, u32 port_bit); 1795 int port_id, u32 port_bit);
1781int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex, 1796int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex,
diff --git a/drivers/usb/image/mdc800.c b/drivers/usb/image/mdc800.c
index 575b56c79e97..7121b50098d3 100644
--- a/drivers/usb/image/mdc800.c
+++ b/drivers/usb/image/mdc800.c
@@ -284,18 +284,16 @@ static void mdc800_usb_irq (struct urb *urb)
284 int data_received=0, wake_up; 284 int data_received=0, wake_up;
285 unsigned char* b=urb->transfer_buffer; 285 unsigned char* b=urb->transfer_buffer;
286 struct mdc800_data* mdc800=urb->context; 286 struct mdc800_data* mdc800=urb->context;
287 struct device *dev = &mdc800->dev->dev;
287 int status = urb->status; 288 int status = urb->status;
288 289
289 if (status >= 0) { 290 if (status >= 0) {
290
291 //dbg ("%i %i %i %i %i %i %i %i \n",b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]);
292
293 if (mdc800_isBusy (b)) 291 if (mdc800_isBusy (b))
294 { 292 {
295 if (!mdc800->camera_busy) 293 if (!mdc800->camera_busy)
296 { 294 {
297 mdc800->camera_busy=1; 295 mdc800->camera_busy=1;
298 dbg ("gets busy"); 296 dev_dbg(dev, "gets busy\n");
299 } 297 }
300 } 298 }
301 else 299 else
@@ -303,13 +301,13 @@ static void mdc800_usb_irq (struct urb *urb)
303 if (mdc800->camera_busy && mdc800_isReady (b)) 301 if (mdc800->camera_busy && mdc800_isReady (b))
304 { 302 {
305 mdc800->camera_busy=0; 303 mdc800->camera_busy=0;
306 dbg ("gets ready"); 304 dev_dbg(dev, "gets ready\n");
307 } 305 }
308 } 306 }
309 if (!(mdc800_isBusy (b) || mdc800_isReady (b))) 307 if (!(mdc800_isBusy (b) || mdc800_isReady (b)))
310 { 308 {
311 /* Store Data in camera_answer field */ 309 /* Store Data in camera_answer field */
312 dbg ("%i %i %i %i %i %i %i %i ",b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]); 310 dev_dbg(dev, "%i %i %i %i %i %i %i %i \n",b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]);
313 311
314 memcpy (mdc800->camera_response,b,8); 312 memcpy (mdc800->camera_response,b,8);
315 data_received=1; 313 data_received=1;
@@ -441,7 +439,7 @@ static int mdc800_usb_probe (struct usb_interface *intf,
441 int irq_interval=0; 439 int irq_interval=0;
442 int retval; 440 int retval;
443 441
444 dbg ("(mdc800_usb_probe) called."); 442 dev_dbg(&intf->dev, "(%s) called.\n", __func__);
445 443
446 444
447 if (mdc800->dev != NULL) 445 if (mdc800->dev != NULL)
@@ -554,7 +552,7 @@ static void mdc800_usb_disconnect (struct usb_interface *intf)
554{ 552{
555 struct mdc800_data* mdc800 = usb_get_intfdata(intf); 553 struct mdc800_data* mdc800 = usb_get_intfdata(intf);
556 554
557 dbg ("(mdc800_usb_disconnect) called"); 555 dev_dbg(&intf->dev, "(%s) called\n", __func__);
558 556
559 if (mdc800) { 557 if (mdc800) {
560 if (mdc800->state == NOT_CONNECTED) 558 if (mdc800->state == NOT_CONNECTED)
@@ -656,7 +654,7 @@ static int mdc800_device_open (struct inode* inode, struct file *file)
656 } 654 }
657 655
658 mdc800->open=1; 656 mdc800->open=1;
659 dbg ("Mustek MDC800 device opened."); 657 dev_dbg(&mdc800->dev->dev, "Mustek MDC800 device opened.\n");
660 658
661error_out: 659error_out:
662 mutex_unlock(&mdc800->io_lock); 660 mutex_unlock(&mdc800->io_lock);
@@ -670,7 +668,6 @@ error_out:
670static int mdc800_device_release (struct inode* inode, struct file *file) 668static int mdc800_device_release (struct inode* inode, struct file *file)
671{ 669{
672 int retval=0; 670 int retval=0;
673 dbg ("Mustek MDC800 device closed.");
674 671
675 mutex_lock(&mdc800->io_lock); 672 mutex_lock(&mdc800->io_lock);
676 if (mdc800->open && (mdc800->state != NOT_CONNECTED)) 673 if (mdc800->open && (mdc800->state != NOT_CONNECTED))
@@ -927,7 +924,7 @@ static ssize_t mdc800_device_write (struct file *file, const char __user *buf, s
927 { 924 {
928 mdc800->pic_len=(int) 65536*(unsigned char) mdc800->camera_response[0]+256*(unsigned char) mdc800->camera_response[1]+(unsigned char) mdc800->camera_response[2]; 925 mdc800->pic_len=(int) 65536*(unsigned char) mdc800->camera_response[0]+256*(unsigned char) mdc800->camera_response[1]+(unsigned char) mdc800->camera_response[2];
929 926
930 dbg ("cached imagesize = %i",mdc800->pic_len); 927 dev_dbg(&mdc800->dev->dev, "cached imagesize = %i\n", mdc800->pic_len);
931 } 928 }
932 929
933 } 930 }
diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c
index ac0d75a9005a..0fc6e5fc745f 100644
--- a/drivers/usb/misc/appledisplay.c
+++ b/drivers/usb/misc/appledisplay.c
@@ -88,6 +88,7 @@ static struct workqueue_struct *wq;
88static void appledisplay_complete(struct urb *urb) 88static void appledisplay_complete(struct urb *urb)
89{ 89{
90 struct appledisplay *pdata = urb->context; 90 struct appledisplay *pdata = urb->context;
91 struct device *dev = &pdata->udev->dev;
91 unsigned long flags; 92 unsigned long flags;
92 int status = urb->status; 93 int status = urb->status;
93 int retval; 94 int retval;
@@ -97,18 +98,18 @@ static void appledisplay_complete(struct urb *urb)
97 /* success */ 98 /* success */
98 break; 99 break;
99 case -EOVERFLOW: 100 case -EOVERFLOW:
100 printk(KERN_ERR "appletouch: OVERFLOW with data " 101 dev_err(dev,
101 "length %d, actual length is %d\n", 102 "OVERFLOW with data length %d, actual length is %d\n",
102 ACD_URB_BUFFER_LEN, pdata->urb->actual_length); 103 ACD_URB_BUFFER_LEN, pdata->urb->actual_length);
103 case -ECONNRESET: 104 case -ECONNRESET:
104 case -ENOENT: 105 case -ENOENT:
105 case -ESHUTDOWN: 106 case -ESHUTDOWN:
106 /* This urb is terminated, clean up */ 107 /* This urb is terminated, clean up */
107 dbg("%s - urb shuttingdown with status: %d", 108 dev_dbg(dev, "%s - urb shuttingdown with status: %d\n",
108 __func__, status); 109 __func__, status);
109 return; 110 return;
110 default: 111 default:
111 dbg("%s - nonzero urb status received: %d", 112 dev_dbg(dev, "%s - nonzero urb status received: %d/n",
112 __func__, status); 113 __func__, status);
113 goto exit; 114 goto exit;
114 } 115 }
@@ -132,8 +133,7 @@ static void appledisplay_complete(struct urb *urb)
132exit: 133exit:
133 retval = usb_submit_urb(pdata->urb, GFP_ATOMIC); 134 retval = usb_submit_urb(pdata->urb, GFP_ATOMIC);
134 if (retval) { 135 if (retval) {
135 dev_err(&pdata->udev->dev, 136 dev_err(dev, "%s - usb_submit_urb failed with result %d\n",
136 "%s - usb_submit_urb failed with result %d\n",
137 __func__, retval); 137 __func__, retval);
138 } 138 }
139} 139}
diff --git a/drivers/usb/misc/emi26.c b/drivers/usb/misc/emi26.c
index da97dcec1f32..d65984dee751 100644
--- a/drivers/usb/misc/emi26.c
+++ b/drivers/usb/misc/emi26.c
@@ -78,18 +78,14 @@ static int emi26_load_firmware (struct usb_device *dev)
78 const struct firmware *bitstream_fw = NULL; 78 const struct firmware *bitstream_fw = NULL;
79 const struct firmware *firmware_fw = NULL; 79 const struct firmware *firmware_fw = NULL;
80 const struct ihex_binrec *rec; 80 const struct ihex_binrec *rec;
81 int err; 81 int err = -ENOMEM;
82 int i; 82 int i;
83 __u32 addr; /* Address to write */ 83 __u32 addr; /* Address to write */
84 __u8 *buf; 84 __u8 *buf;
85 85
86 buf = kmalloc(FW_LOAD_SIZE, GFP_KERNEL); 86 buf = kmalloc(FW_LOAD_SIZE, GFP_KERNEL);
87 if (!buf) { 87 if (!buf)
88 dev_err(&dev->dev, "%s - error loading firmware: error = %d\n",
89 __func__, -ENOMEM);
90 err = -ENOMEM;
91 goto wraperr; 88 goto wraperr;
92 }
93 89
94 err = request_ihex_firmware(&loader_fw, "emi26/loader.fw", &dev->dev); 90 err = request_ihex_firmware(&loader_fw, "emi26/loader.fw", &dev->dev);
95 if (err) 91 if (err)
@@ -111,11 +107,8 @@ static int emi26_load_firmware (struct usb_device *dev)
111 107
112 /* Assert reset (stop the CPU in the EMI) */ 108 /* Assert reset (stop the CPU in the EMI) */
113 err = emi26_set_reset(dev,1); 109 err = emi26_set_reset(dev,1);
114 if (err < 0) { 110 if (err < 0)
115 dev_err(&dev->dev,"%s - error loading firmware: error = %d\n",
116 __func__, err);
117 goto wraperr; 111 goto wraperr;
118 }
119 112
120 rec = (const struct ihex_binrec *)loader_fw->data; 113 rec = (const struct ihex_binrec *)loader_fw->data;
121 /* 1. We need to put the loader for the FPGA into the EZ-USB */ 114 /* 1. We need to put the loader for the FPGA into the EZ-USB */
@@ -123,19 +116,15 @@ static int emi26_load_firmware (struct usb_device *dev)
123 err = emi26_writememory(dev, be32_to_cpu(rec->addr), 116 err = emi26_writememory(dev, be32_to_cpu(rec->addr),
124 rec->data, be16_to_cpu(rec->len), 117 rec->data, be16_to_cpu(rec->len),
125 ANCHOR_LOAD_INTERNAL); 118 ANCHOR_LOAD_INTERNAL);
126 if (err < 0) { 119 if (err < 0)
127 err("%s - error loading firmware: error = %d", __func__, err);
128 goto wraperr; 120 goto wraperr;
129 }
130 rec = ihex_next_binrec(rec); 121 rec = ihex_next_binrec(rec);
131 } 122 }
132 123
133 /* De-assert reset (let the CPU run) */ 124 /* De-assert reset (let the CPU run) */
134 err = emi26_set_reset(dev,0); 125 err = emi26_set_reset(dev,0);
135 if (err < 0) { 126 if (err < 0)
136 err("%s - error loading firmware: error = %d", __func__, err);
137 goto wraperr; 127 goto wraperr;
138 }
139 msleep(250); /* let device settle */ 128 msleep(250); /* let device settle */
140 129
141 /* 2. We upload the FPGA firmware into the EMI 130 /* 2. We upload the FPGA firmware into the EMI
@@ -153,18 +142,14 @@ static int emi26_load_firmware (struct usb_device *dev)
153 rec = ihex_next_binrec(rec); 142 rec = ihex_next_binrec(rec);
154 } 143 }
155 err = emi26_writememory(dev, addr, buf, i, ANCHOR_LOAD_FPGA); 144 err = emi26_writememory(dev, addr, buf, i, ANCHOR_LOAD_FPGA);
156 if (err < 0) { 145 if (err < 0)
157 err("%s - error loading firmware: error = %d", __func__, err);
158 goto wraperr; 146 goto wraperr;
159 }
160 } while (rec); 147 } while (rec);
161 148
162 /* Assert reset (stop the CPU in the EMI) */ 149 /* Assert reset (stop the CPU in the EMI) */
163 err = emi26_set_reset(dev,1); 150 err = emi26_set_reset(dev,1);
164 if (err < 0) { 151 if (err < 0)
165 err("%s - error loading firmware: error = %d", __func__, err);
166 goto wraperr; 152 goto wraperr;
167 }
168 153
169 /* 3. We need to put the loader for the firmware into the EZ-USB (again...) */ 154 /* 3. We need to put the loader for the firmware into the EZ-USB (again...) */
170 for (rec = (const struct ihex_binrec *)loader_fw->data; 155 for (rec = (const struct ihex_binrec *)loader_fw->data;
@@ -172,19 +157,15 @@ static int emi26_load_firmware (struct usb_device *dev)
172 err = emi26_writememory(dev, be32_to_cpu(rec->addr), 157 err = emi26_writememory(dev, be32_to_cpu(rec->addr),
173 rec->data, be16_to_cpu(rec->len), 158 rec->data, be16_to_cpu(rec->len),
174 ANCHOR_LOAD_INTERNAL); 159 ANCHOR_LOAD_INTERNAL);
175 if (err < 0) { 160 if (err < 0)
176 err("%s - error loading firmware: error = %d", __func__, err);
177 goto wraperr; 161 goto wraperr;
178 }
179 } 162 }
180 msleep(250); /* let device settle */ 163 msleep(250); /* let device settle */
181 164
182 /* De-assert reset (let the CPU run) */ 165 /* De-assert reset (let the CPU run) */
183 err = emi26_set_reset(dev,0); 166 err = emi26_set_reset(dev,0);
184 if (err < 0) { 167 if (err < 0)
185 err("%s - error loading firmware: error = %d", __func__, err);
186 goto wraperr; 168 goto wraperr;
187 }
188 169
189 /* 4. We put the part of the firmware that lies in the external RAM into the EZ-USB */ 170 /* 4. We put the part of the firmware that lies in the external RAM into the EZ-USB */
190 171
@@ -194,19 +175,15 @@ static int emi26_load_firmware (struct usb_device *dev)
194 err = emi26_writememory(dev, be32_to_cpu(rec->addr), 175 err = emi26_writememory(dev, be32_to_cpu(rec->addr),
195 rec->data, be16_to_cpu(rec->len), 176 rec->data, be16_to_cpu(rec->len),
196 ANCHOR_LOAD_EXTERNAL); 177 ANCHOR_LOAD_EXTERNAL);
197 if (err < 0) { 178 if (err < 0)
198 err("%s - error loading firmware: error = %d", __func__, err);
199 goto wraperr; 179 goto wraperr;
200 }
201 } 180 }
202 } 181 }
203 182
204 /* Assert reset (stop the CPU in the EMI) */ 183 /* Assert reset (stop the CPU in the EMI) */
205 err = emi26_set_reset(dev,1); 184 err = emi26_set_reset(dev,1);
206 if (err < 0) { 185 if (err < 0)
207 err("%s - error loading firmware: error = %d", __func__, err);
208 goto wraperr; 186 goto wraperr;
209 }
210 187
211 for (rec = (const struct ihex_binrec *)firmware_fw->data; 188 for (rec = (const struct ihex_binrec *)firmware_fw->data;
212 rec; rec = ihex_next_binrec(rec)) { 189 rec; rec = ihex_next_binrec(rec)) {
@@ -214,19 +191,15 @@ static int emi26_load_firmware (struct usb_device *dev)
214 err = emi26_writememory(dev, be32_to_cpu(rec->addr), 191 err = emi26_writememory(dev, be32_to_cpu(rec->addr),
215 rec->data, be16_to_cpu(rec->len), 192 rec->data, be16_to_cpu(rec->len),
216 ANCHOR_LOAD_INTERNAL); 193 ANCHOR_LOAD_INTERNAL);
217 if (err < 0) { 194 if (err < 0)
218 err("%s - error loading firmware: error = %d", __func__, err);
219 goto wraperr; 195 goto wraperr;
220 }
221 } 196 }
222 } 197 }
223 198
224 /* De-assert reset (let the CPU run) */ 199 /* De-assert reset (let the CPU run) */
225 err = emi26_set_reset(dev,0); 200 err = emi26_set_reset(dev,0);
226 if (err < 0) { 201 if (err < 0)
227 err("%s - error loading firmware: error = %d", __func__, err);
228 goto wraperr; 202 goto wraperr;
229 }
230 msleep(250); /* let device settle */ 203 msleep(250); /* let device settle */
231 204
232 /* return 1 to fail the driver inialization 205 /* return 1 to fail the driver inialization
@@ -234,6 +207,10 @@ static int emi26_load_firmware (struct usb_device *dev)
234 err = 1; 207 err = 1;
235 208
236wraperr: 209wraperr:
210 if (err < 0)
211 dev_err(&dev->dev,"%s - error loading firmware: error = %d\n",
212 __func__, err);
213
237 release_firmware(loader_fw); 214 release_firmware(loader_fw);
238 release_firmware(bitstream_fw); 215 release_firmware(bitstream_fw);
239 release_firmware(firmware_fw); 216 release_firmware(firmware_fw);
diff --git a/drivers/usb/misc/emi62.c b/drivers/usb/misc/emi62.c
index 4e0f167a6c4e..ff08015b230c 100644
--- a/drivers/usb/misc/emi62.c
+++ b/drivers/usb/misc/emi62.c
@@ -56,7 +56,7 @@ static int emi62_writememory(struct usb_device *dev, int address,
56 unsigned char *buffer = kmemdup(data, length, GFP_KERNEL); 56 unsigned char *buffer = kmemdup(data, length, GFP_KERNEL);
57 57
58 if (!buffer) { 58 if (!buffer) {
59 err("emi62: kmalloc(%d) failed.", length); 59 dev_err(&dev->dev, "kmalloc(%d) failed.\n", length);
60 return -ENOMEM; 60 return -ENOMEM;
61 } 61 }
62 /* Note: usb_control_msg returns negative value on error or length of the 62 /* Note: usb_control_msg returns negative value on error or length of the
@@ -73,9 +73,8 @@ static int emi62_set_reset (struct usb_device *dev, unsigned char reset_bit)
73 dev_info(&dev->dev, "%s - %d\n", __func__, reset_bit); 73 dev_info(&dev->dev, "%s - %d\n", __func__, reset_bit);
74 74
75 response = emi62_writememory (dev, CPUCS_REG, &reset_bit, 1, 0xa0); 75 response = emi62_writememory (dev, CPUCS_REG, &reset_bit, 1, 0xa0);
76 if (response < 0) { 76 if (response < 0)
77 err("emi62: set_reset (%d) failed", reset_bit); 77 dev_err(&dev->dev, "set_reset (%d) failed\n", reset_bit);
78 }
79 return response; 78 return response;
80} 79}
81 80
@@ -87,18 +86,15 @@ static int emi62_load_firmware (struct usb_device *dev)
87 const struct firmware *bitstream_fw = NULL; 86 const struct firmware *bitstream_fw = NULL;
88 const struct firmware *firmware_fw = NULL; 87 const struct firmware *firmware_fw = NULL;
89 const struct ihex_binrec *rec; 88 const struct ihex_binrec *rec;
90 int err; 89 int err = -ENOMEM;
91 int i; 90 int i;
92 __u32 addr; /* Address to write */ 91 __u32 addr; /* Address to write */
93 __u8 *buf; 92 __u8 *buf;
94 93
95 dev_dbg(&dev->dev, "load_firmware\n"); 94 dev_dbg(&dev->dev, "load_firmware\n");
96 buf = kmalloc(FW_LOAD_SIZE, GFP_KERNEL); 95 buf = kmalloc(FW_LOAD_SIZE, GFP_KERNEL);
97 if (!buf) { 96 if (!buf)
98 err( "%s - error loading firmware: error = %d", __func__, -ENOMEM);
99 err = -ENOMEM;
100 goto wraperr; 97 goto wraperr;
101 }
102 98
103 err = request_ihex_firmware(&loader_fw, "emi62/loader.fw", &dev->dev); 99 err = request_ihex_firmware(&loader_fw, "emi62/loader.fw", &dev->dev);
104 if (err) 100 if (err)
@@ -112,16 +108,13 @@ static int emi62_load_firmware (struct usb_device *dev)
112 err = request_ihex_firmware(&firmware_fw, FIRMWARE_FW, &dev->dev); 108 err = request_ihex_firmware(&firmware_fw, FIRMWARE_FW, &dev->dev);
113 if (err) { 109 if (err) {
114 nofw: 110 nofw:
115 err( "%s - request_firmware() failed", __func__);
116 goto wraperr; 111 goto wraperr;
117 } 112 }
118 113
119 /* Assert reset (stop the CPU in the EMI) */ 114 /* Assert reset (stop the CPU in the EMI) */
120 err = emi62_set_reset(dev,1); 115 err = emi62_set_reset(dev,1);
121 if (err < 0) { 116 if (err < 0)
122 err("%s - error loading firmware: error = %d", __func__, err);
123 goto wraperr; 117 goto wraperr;
124 }
125 118
126 rec = (const struct ihex_binrec *)loader_fw->data; 119 rec = (const struct ihex_binrec *)loader_fw->data;
127 120
@@ -130,19 +123,15 @@ static int emi62_load_firmware (struct usb_device *dev)
130 err = emi62_writememory(dev, be32_to_cpu(rec->addr), 123 err = emi62_writememory(dev, be32_to_cpu(rec->addr),
131 rec->data, be16_to_cpu(rec->len), 124 rec->data, be16_to_cpu(rec->len),
132 ANCHOR_LOAD_INTERNAL); 125 ANCHOR_LOAD_INTERNAL);
133 if (err < 0) { 126 if (err < 0)
134 err("%s - error loading firmware: error = %d", __func__, err);
135 goto wraperr; 127 goto wraperr;
136 }
137 rec = ihex_next_binrec(rec); 128 rec = ihex_next_binrec(rec);
138 } 129 }
139 130
140 /* De-assert reset (let the CPU run) */ 131 /* De-assert reset (let the CPU run) */
141 err = emi62_set_reset(dev,0); 132 err = emi62_set_reset(dev,0);
142 if (err < 0) { 133 if (err < 0)
143 err("%s - error loading firmware: error = %d", __func__, err);
144 goto wraperr; 134 goto wraperr;
145 }
146 msleep(250); /* let device settle */ 135 msleep(250); /* let device settle */
147 136
148 /* 2. We upload the FPGA firmware into the EMI 137 /* 2. We upload the FPGA firmware into the EMI
@@ -160,18 +149,14 @@ static int emi62_load_firmware (struct usb_device *dev)
160 rec = ihex_next_binrec(rec); 149 rec = ihex_next_binrec(rec);
161 } 150 }
162 err = emi62_writememory(dev, addr, buf, i, ANCHOR_LOAD_FPGA); 151 err = emi62_writememory(dev, addr, buf, i, ANCHOR_LOAD_FPGA);
163 if (err < 0) { 152 if (err < 0)
164 err("%s - error loading firmware: error = %d", __func__, err);
165 goto wraperr; 153 goto wraperr;
166 }
167 } while (rec); 154 } while (rec);
168 155
169 /* Assert reset (stop the CPU in the EMI) */ 156 /* Assert reset (stop the CPU in the EMI) */
170 err = emi62_set_reset(dev,1); 157 err = emi62_set_reset(dev,1);
171 if (err < 0) { 158 if (err < 0)
172 err("%s - error loading firmware: error = %d", __func__, err);
173 goto wraperr; 159 goto wraperr;
174 }
175 160
176 /* 3. We need to put the loader for the firmware into the EZ-USB (again...) */ 161 /* 3. We need to put the loader for the firmware into the EZ-USB (again...) */
177 for (rec = (const struct ihex_binrec *)loader_fw->data; 162 for (rec = (const struct ihex_binrec *)loader_fw->data;
@@ -179,18 +164,14 @@ static int emi62_load_firmware (struct usb_device *dev)
179 err = emi62_writememory(dev, be32_to_cpu(rec->addr), 164 err = emi62_writememory(dev, be32_to_cpu(rec->addr),
180 rec->data, be16_to_cpu(rec->len), 165 rec->data, be16_to_cpu(rec->len),
181 ANCHOR_LOAD_INTERNAL); 166 ANCHOR_LOAD_INTERNAL);
182 if (err < 0) { 167 if (err < 0)
183 err("%s - error loading firmware: error = %d", __func__, err);
184 goto wraperr; 168 goto wraperr;
185 }
186 } 169 }
187 170
188 /* De-assert reset (let the CPU run) */ 171 /* De-assert reset (let the CPU run) */
189 err = emi62_set_reset(dev,0); 172 err = emi62_set_reset(dev,0);
190 if (err < 0) { 173 if (err < 0)
191 err("%s - error loading firmware: error = %d", __func__, err);
192 goto wraperr; 174 goto wraperr;
193 }
194 msleep(250); /* let device settle */ 175 msleep(250); /* let device settle */
195 176
196 /* 4. We put the part of the firmware that lies in the external RAM into the EZ-USB */ 177 /* 4. We put the part of the firmware that lies in the external RAM into the EZ-USB */
@@ -201,19 +182,15 @@ static int emi62_load_firmware (struct usb_device *dev)
201 err = emi62_writememory(dev, be32_to_cpu(rec->addr), 182 err = emi62_writememory(dev, be32_to_cpu(rec->addr),
202 rec->data, be16_to_cpu(rec->len), 183 rec->data, be16_to_cpu(rec->len),
203 ANCHOR_LOAD_EXTERNAL); 184 ANCHOR_LOAD_EXTERNAL);
204 if (err < 0) { 185 if (err < 0)
205 err("%s - error loading firmware: error = %d", __func__, err);
206 goto wraperr; 186 goto wraperr;
207 }
208 } 187 }
209 } 188 }
210 189
211 /* Assert reset (stop the CPU in the EMI) */ 190 /* Assert reset (stop the CPU in the EMI) */
212 err = emi62_set_reset(dev,1); 191 err = emi62_set_reset(dev,1);
213 if (err < 0) { 192 if (err < 0)
214 err("%s - error loading firmware: error = %d", __func__, err);
215 goto wraperr; 193 goto wraperr;
216 }
217 194
218 for (rec = (const struct ihex_binrec *)firmware_fw->data; 195 for (rec = (const struct ihex_binrec *)firmware_fw->data;
219 rec; rec = ihex_next_binrec(rec)) { 196 rec; rec = ihex_next_binrec(rec)) {
@@ -221,19 +198,15 @@ static int emi62_load_firmware (struct usb_device *dev)
221 err = emi62_writememory(dev, be32_to_cpu(rec->addr), 198 err = emi62_writememory(dev, be32_to_cpu(rec->addr),
222 rec->data, be16_to_cpu(rec->len), 199 rec->data, be16_to_cpu(rec->len),
223 ANCHOR_LOAD_EXTERNAL); 200 ANCHOR_LOAD_EXTERNAL);
224 if (err < 0) { 201 if (err < 0)
225 err("%s - error loading firmware: error = %d", __func__, err);
226 goto wraperr; 202 goto wraperr;
227 }
228 } 203 }
229 } 204 }
230 205
231 /* De-assert reset (let the CPU run) */ 206 /* De-assert reset (let the CPU run) */
232 err = emi62_set_reset(dev,0); 207 err = emi62_set_reset(dev,0);
233 if (err < 0) { 208 if (err < 0)
234 err("%s - error loading firmware: error = %d", __func__, err);
235 goto wraperr; 209 goto wraperr;
236 }
237 msleep(250); /* let device settle */ 210 msleep(250); /* let device settle */
238 211
239 release_firmware(loader_fw); 212 release_firmware(loader_fw);
@@ -247,6 +220,9 @@ static int emi62_load_firmware (struct usb_device *dev)
247 return 1; 220 return 1;
248 221
249wraperr: 222wraperr:
223 if (err < 0)
224 dev_err(&dev->dev,"%s - error loading firmware: error = %d\n",
225 __func__, err);
250 release_firmware(loader_fw); 226 release_firmware(loader_fw);
251 release_firmware(bitstream_fw); 227 release_firmware(bitstream_fw);
252 release_firmware(firmware_fw); 228 release_firmware(firmware_fw);
diff --git a/drivers/usb/misc/idmouse.c b/drivers/usb/misc/idmouse.c
index 0dee24698504..ce978384fda1 100644
--- a/drivers/usb/misc/idmouse.c
+++ b/drivers/usb/misc/idmouse.c
@@ -200,7 +200,8 @@ reset:
200 return -EAGAIN; 200 return -EAGAIN;
201 201
202 /* should be IMGSIZE == 65040 */ 202 /* should be IMGSIZE == 65040 */
203 dbg("read %d bytes fingerprint data", bytes_read); 203 dev_dbg(&dev->interface->dev, "read %d bytes fingerprint data\n",
204 bytes_read);
204 return result; 205 return result;
205} 206}
206 207
@@ -366,14 +367,14 @@ static int idmouse_probe(struct usb_interface *interface,
366 kmalloc(IMGSIZE + dev->bulk_in_size, GFP_KERNEL); 367 kmalloc(IMGSIZE + dev->bulk_in_size, GFP_KERNEL);
367 368
368 if (!dev->bulk_in_buffer) { 369 if (!dev->bulk_in_buffer) {
369 err("Unable to allocate input buffer."); 370 dev_err(&interface->dev, "Unable to allocate input buffer.\n");
370 idmouse_delete(dev); 371 idmouse_delete(dev);
371 return -ENOMEM; 372 return -ENOMEM;
372 } 373 }
373 } 374 }
374 375
375 if (!(dev->bulk_in_endpointAddr)) { 376 if (!(dev->bulk_in_endpointAddr)) {
376 err("Unable to find bulk-in endpoint."); 377 dev_err(&interface->dev, "Unable to find bulk-in endpoint.\n");
377 idmouse_delete(dev); 378 idmouse_delete(dev);
378 return -ENODEV; 379 return -ENODEV;
379 } 380 }
@@ -385,7 +386,7 @@ static int idmouse_probe(struct usb_interface *interface,
385 result = usb_register_dev(interface, &idmouse_class); 386 result = usb_register_dev(interface, &idmouse_class);
386 if (result) { 387 if (result) {
387 /* something prevented us from registering this device */ 388 /* something prevented us from registering this device */
388 err("Unble to allocate minor number."); 389 dev_err(&interface->dev, "Unble to allocate minor number.\n");
389 usb_set_intfdata(interface, NULL); 390 usb_set_intfdata(interface, NULL);
390 idmouse_delete(dev); 391 idmouse_delete(dev);
391 return result; 392 return result;
diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c
index 4fd0dc835ae5..db46143c67a6 100644
--- a/drivers/usb/misc/iowarrior.c
+++ b/drivers/usb/misc/iowarrior.c
@@ -610,8 +610,8 @@ static int iowarrior_open(struct inode *inode, struct file *file)
610 interface = usb_find_interface(&iowarrior_driver, subminor); 610 interface = usb_find_interface(&iowarrior_driver, subminor);
611 if (!interface) { 611 if (!interface) {
612 mutex_unlock(&iowarrior_mutex); 612 mutex_unlock(&iowarrior_mutex);
613 err("%s - error, can't find device for minor %d", __func__, 613 printk(KERN_ERR "%s - error, can't find device for minor %d\n",
614 subminor); 614 __func__, subminor);
615 return -ENODEV; 615 return -ENODEV;
616 } 616 }
617 617
diff --git a/drivers/usb/misc/ldusb.c b/drivers/usb/misc/ldusb.c
index 5db4ab52061e..ac762299eaa8 100644
--- a/drivers/usb/misc/ldusb.c
+++ b/drivers/usb/misc/ldusb.c
@@ -334,8 +334,8 @@ static int ld_usb_open(struct inode *inode, struct file *file)
334 interface = usb_find_interface(&ld_usb_driver, subminor); 334 interface = usb_find_interface(&ld_usb_driver, subminor);
335 335
336 if (!interface) { 336 if (!interface) {
337 err("%s - error, can't find device for minor %d\n", 337 printk(KERN_ERR "%s - error, can't find device for minor %d\n",
338 __func__, subminor); 338 __func__, subminor);
339 return -ENODEV; 339 return -ENODEV;
340 } 340 }
341 341
@@ -485,7 +485,7 @@ static ssize_t ld_usb_read(struct file *file, char __user *buffer, size_t count,
485 /* verify that the device wasn't unplugged */ 485 /* verify that the device wasn't unplugged */
486 if (dev->intf == NULL) { 486 if (dev->intf == NULL) {
487 retval = -ENODEV; 487 retval = -ENODEV;
488 err("No device or device unplugged %d\n", retval); 488 printk(KERN_ERR "ldusb: No device or device unplugged %d\n", retval);
489 goto unlock_exit; 489 goto unlock_exit;
490 } 490 }
491 491
@@ -565,7 +565,7 @@ static ssize_t ld_usb_write(struct file *file, const char __user *buffer,
565 /* verify that the device wasn't unplugged */ 565 /* verify that the device wasn't unplugged */
566 if (dev->intf == NULL) { 566 if (dev->intf == NULL) {
567 retval = -ENODEV; 567 retval = -ENODEV;
568 err("No device or device unplugged %d\n", retval); 568 printk(KERN_ERR "ldusb: No device or device unplugged %d\n", retval);
569 goto unlock_exit; 569 goto unlock_exit;
570 } 570 }
571 571
@@ -603,7 +603,9 @@ static ssize_t ld_usb_write(struct file *file, const char __user *buffer,
603 bytes_to_write, 603 bytes_to_write,
604 USB_CTRL_SET_TIMEOUT * HZ); 604 USB_CTRL_SET_TIMEOUT * HZ);
605 if (retval < 0) 605 if (retval < 0)
606 err("Couldn't submit HID_REQ_SET_REPORT %d\n", retval); 606 dev_err(&dev->intf->dev,
607 "Couldn't submit HID_REQ_SET_REPORT %d\n",
608 retval);
607 goto unlock_exit; 609 goto unlock_exit;
608 } 610 }
609 611
@@ -624,7 +626,8 @@ static ssize_t ld_usb_write(struct file *file, const char __user *buffer,
624 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL); 626 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL);
625 if (retval) { 627 if (retval) {
626 dev->interrupt_out_busy = 0; 628 dev->interrupt_out_busy = 0;
627 err("Couldn't submit interrupt_out_urb %d\n", retval); 629 dev_err(&dev->intf->dev,
630 "Couldn't submit interrupt_out_urb %d\n", retval);
628 goto unlock_exit; 631 goto unlock_exit;
629 } 632 }
630 retval = bytes_to_write; 633 retval = bytes_to_write;
diff --git a/drivers/usb/misc/legousbtower.c b/drivers/usb/misc/legousbtower.c
index 575222042767..a2702cbfe804 100644
--- a/drivers/usb/misc/legousbtower.c
+++ b/drivers/usb/misc/legousbtower.c
@@ -354,8 +354,8 @@ static int tower_open (struct inode *inode, struct file *file)
354 interface = usb_find_interface (&tower_driver, subminor); 354 interface = usb_find_interface (&tower_driver, subminor);
355 355
356 if (!interface) { 356 if (!interface) {
357 err ("%s - error, can't find device for minor %d", 357 printk(KERN_ERR "%s - error, can't find device for minor %d\n",
358 __func__, subminor); 358 __func__, subminor);
359 retval = -ENODEV; 359 retval = -ENODEV;
360 goto exit; 360 goto exit;
361 } 361 }
@@ -397,7 +397,8 @@ static int tower_open (struct inode *inode, struct file *file)
397 sizeof(reset_reply), 397 sizeof(reset_reply),
398 1000); 398 1000);
399 if (result < 0) { 399 if (result < 0) {
400 err("LEGO USB Tower reset control request failed"); 400 dev_err(&dev->udev->dev,
401 "LEGO USB Tower reset control request failed\n");
401 retval = result; 402 retval = result;
402 goto unlock_exit; 403 goto unlock_exit;
403 } 404 }
@@ -420,7 +421,8 @@ static int tower_open (struct inode *inode, struct file *file)
420 421
421 retval = usb_submit_urb (dev->interrupt_in_urb, GFP_KERNEL); 422 retval = usb_submit_urb (dev->interrupt_in_urb, GFP_KERNEL);
422 if (retval) { 423 if (retval) {
423 err("Couldn't submit interrupt_in_urb %d", retval); 424 dev_err(&dev->udev->dev,
425 "Couldn't submit interrupt_in_urb %d\n", retval);
424 dev->interrupt_in_running = 0; 426 dev->interrupt_in_running = 0;
425 dev->open_count = 0; 427 dev->open_count = 0;
426 goto unlock_exit; 428 goto unlock_exit;
@@ -608,7 +610,7 @@ static ssize_t tower_read (struct file *file, char __user *buffer, size_t count,
608 /* verify that the device wasn't unplugged */ 610 /* verify that the device wasn't unplugged */
609 if (dev->udev == NULL) { 611 if (dev->udev == NULL) {
610 retval = -ENODEV; 612 retval = -ENODEV;
611 err("No device or device unplugged %d", retval); 613 printk(KERN_ERR "legousbtower: No device or device unplugged %d\n", retval);
612 goto unlock_exit; 614 goto unlock_exit;
613 } 615 }
614 616
@@ -697,7 +699,7 @@ static ssize_t tower_write (struct file *file, const char __user *buffer, size_t
697 /* verify that the device wasn't unplugged */ 699 /* verify that the device wasn't unplugged */
698 if (dev->udev == NULL) { 700 if (dev->udev == NULL) {
699 retval = -ENODEV; 701 retval = -ENODEV;
700 err("No device or device unplugged %d", retval); 702 printk(KERN_ERR "legousbtower: No device or device unplugged %d\n", retval);
701 goto unlock_exit; 703 goto unlock_exit;
702 } 704 }
703 705
@@ -744,7 +746,8 @@ static ssize_t tower_write (struct file *file, const char __user *buffer, size_t
744 retval = usb_submit_urb (dev->interrupt_out_urb, GFP_KERNEL); 746 retval = usb_submit_urb (dev->interrupt_out_urb, GFP_KERNEL);
745 if (retval) { 747 if (retval) {
746 dev->interrupt_out_busy = 0; 748 dev->interrupt_out_busy = 0;
747 err("Couldn't submit interrupt_out_urb %d", retval); 749 dev_err(&dev->udev->dev,
750 "Couldn't submit interrupt_out_urb %d\n", retval);
748 goto unlock_exit; 751 goto unlock_exit;
749 } 752 }
750 retval = bytes_to_write; 753 retval = bytes_to_write;
@@ -803,9 +806,10 @@ resubmit:
803 /* resubmit if we're still running */ 806 /* resubmit if we're still running */
804 if (dev->interrupt_in_running && dev->udev) { 807 if (dev->interrupt_in_running && dev->udev) {
805 retval = usb_submit_urb (dev->interrupt_in_urb, GFP_ATOMIC); 808 retval = usb_submit_urb (dev->interrupt_in_urb, GFP_ATOMIC);
806 if (retval) { 809 if (retval)
807 err("%s: usb_submit_urb failed (%d)", __func__, retval); 810 dev_err(&dev->udev->dev,
808 } 811 "%s: usb_submit_urb failed (%d)\n",
812 __func__, retval);
809 } 813 }
810 814
811exit: 815exit:
@@ -852,6 +856,7 @@ static void tower_interrupt_out_callback (struct urb *urb)
852 */ 856 */
853static int tower_probe (struct usb_interface *interface, const struct usb_device_id *id) 857static int tower_probe (struct usb_interface *interface, const struct usb_device_id *id)
854{ 858{
859 struct device *idev = &interface->dev;
855 struct usb_device *udev = interface_to_usbdev(interface); 860 struct usb_device *udev = interface_to_usbdev(interface);
856 struct lego_usb_tower *dev = NULL; 861 struct lego_usb_tower *dev = NULL;
857 struct usb_host_interface *iface_desc; 862 struct usb_host_interface *iface_desc;
@@ -871,7 +876,7 @@ static int tower_probe (struct usb_interface *interface, const struct usb_device
871 dev = kmalloc (sizeof(struct lego_usb_tower), GFP_KERNEL); 876 dev = kmalloc (sizeof(struct lego_usb_tower), GFP_KERNEL);
872 877
873 if (dev == NULL) { 878 if (dev == NULL) {
874 err ("Out of memory"); 879 dev_err(idev, "Out of memory\n");
875 goto exit; 880 goto exit;
876 } 881 }
877 882
@@ -915,37 +920,37 @@ static int tower_probe (struct usb_interface *interface, const struct usb_device
915 } 920 }
916 } 921 }
917 if(dev->interrupt_in_endpoint == NULL) { 922 if(dev->interrupt_in_endpoint == NULL) {
918 err("interrupt in endpoint not found"); 923 dev_err(idev, "interrupt in endpoint not found\n");
919 goto error; 924 goto error;
920 } 925 }
921 if (dev->interrupt_out_endpoint == NULL) { 926 if (dev->interrupt_out_endpoint == NULL) {
922 err("interrupt out endpoint not found"); 927 dev_err(idev, "interrupt out endpoint not found\n");
923 goto error; 928 goto error;
924 } 929 }
925 930
926 dev->read_buffer = kmalloc (read_buffer_size, GFP_KERNEL); 931 dev->read_buffer = kmalloc (read_buffer_size, GFP_KERNEL);
927 if (!dev->read_buffer) { 932 if (!dev->read_buffer) {
928 err("Couldn't allocate read_buffer"); 933 dev_err(idev, "Couldn't allocate read_buffer\n");
929 goto error; 934 goto error;
930 } 935 }
931 dev->interrupt_in_buffer = kmalloc (usb_endpoint_maxp(dev->interrupt_in_endpoint), GFP_KERNEL); 936 dev->interrupt_in_buffer = kmalloc (usb_endpoint_maxp(dev->interrupt_in_endpoint), GFP_KERNEL);
932 if (!dev->interrupt_in_buffer) { 937 if (!dev->interrupt_in_buffer) {
933 err("Couldn't allocate interrupt_in_buffer"); 938 dev_err(idev, "Couldn't allocate interrupt_in_buffer\n");
934 goto error; 939 goto error;
935 } 940 }
936 dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL); 941 dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
937 if (!dev->interrupt_in_urb) { 942 if (!dev->interrupt_in_urb) {
938 err("Couldn't allocate interrupt_in_urb"); 943 dev_err(idev, "Couldn't allocate interrupt_in_urb\n");
939 goto error; 944 goto error;
940 } 945 }
941 dev->interrupt_out_buffer = kmalloc (write_buffer_size, GFP_KERNEL); 946 dev->interrupt_out_buffer = kmalloc (write_buffer_size, GFP_KERNEL);
942 if (!dev->interrupt_out_buffer) { 947 if (!dev->interrupt_out_buffer) {
943 err("Couldn't allocate interrupt_out_buffer"); 948 dev_err(idev, "Couldn't allocate interrupt_out_buffer\n");
944 goto error; 949 goto error;
945 } 950 }
946 dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL); 951 dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
947 if (!dev->interrupt_out_urb) { 952 if (!dev->interrupt_out_urb) {
948 err("Couldn't allocate interrupt_out_urb"); 953 dev_err(idev, "Couldn't allocate interrupt_out_urb\n");
949 goto error; 954 goto error;
950 } 955 }
951 dev->interrupt_in_interval = interrupt_in_interval ? interrupt_in_interval : dev->interrupt_in_endpoint->bInterval; 956 dev->interrupt_in_interval = interrupt_in_interval ? interrupt_in_interval : dev->interrupt_in_endpoint->bInterval;
@@ -958,7 +963,7 @@ static int tower_probe (struct usb_interface *interface, const struct usb_device
958 963
959 if (retval) { 964 if (retval) {
960 /* something prevented us from registering this driver */ 965 /* something prevented us from registering this driver */
961 err ("Not able to get a minor for this device."); 966 dev_err(idev, "Not able to get a minor for this device.\n");
962 usb_set_intfdata (interface, NULL); 967 usb_set_intfdata (interface, NULL);
963 goto error; 968 goto error;
964 } 969 }
@@ -980,7 +985,7 @@ static int tower_probe (struct usb_interface *interface, const struct usb_device
980 sizeof(get_version_reply), 985 sizeof(get_version_reply),
981 1000); 986 1000);
982 if (result < 0) { 987 if (result < 0) {
983 err("LEGO USB Tower get version control request failed"); 988 dev_err(idev, "LEGO USB Tower get version control request failed\n");
984 retval = result; 989 retval = result;
985 goto error; 990 goto error;
986 } 991 }
diff --git a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c
index 487a8ce0775e..1084124c4a44 100644
--- a/drivers/usb/misc/rio500.c
+++ b/drivers/usb/misc/rio500.c
@@ -153,10 +153,10 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
153 153
154 requesttype = rio_cmd.requesttype | USB_DIR_IN | 154 requesttype = rio_cmd.requesttype | USB_DIR_IN |
155 USB_TYPE_VENDOR | USB_RECIP_DEVICE; 155 USB_TYPE_VENDOR | USB_RECIP_DEVICE;
156 dbg 156 dev_dbg(&rio->rio_dev->dev,
157 ("sending command:reqtype=%0x req=%0x value=%0x index=%0x len=%0x", 157 "sending command:reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
158 requesttype, rio_cmd.request, rio_cmd.value, 158 requesttype, rio_cmd.request, rio_cmd.value,
159 rio_cmd.index, rio_cmd.length); 159 rio_cmd.index, rio_cmd.length);
160 /* Send rio control message */ 160 /* Send rio control message */
161 retries = 3; 161 retries = 3;
162 while (retries) { 162 while (retries) {
@@ -171,11 +171,14 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
171 if (result == -ETIMEDOUT) 171 if (result == -ETIMEDOUT)
172 retries--; 172 retries--;
173 else if (result < 0) { 173 else if (result < 0) {
174 err("Error executing ioctrl. code = %d", result); 174 dev_err(&rio->rio_dev->dev,
175 "Error executing ioctrl. code = %d\n",
176 result);
175 retries = 0; 177 retries = 0;
176 } else { 178 } else {
177 dbg("Executed ioctl. Result = %d (data=%02x)", 179 dev_dbg(&rio->rio_dev->dev,
178 result, buffer[0]); 180 "Executed ioctl. Result = %d (data=%02x)\n",
181 result, buffer[0]);
179 if (copy_to_user(rio_cmd.buffer, buffer, 182 if (copy_to_user(rio_cmd.buffer, buffer,
180 rio_cmd.length)) { 183 rio_cmd.length)) {
181 free_page((unsigned long) buffer); 184 free_page((unsigned long) buffer);
@@ -221,9 +224,10 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
221 224
222 requesttype = rio_cmd.requesttype | USB_DIR_OUT | 225 requesttype = rio_cmd.requesttype | USB_DIR_OUT |
223 USB_TYPE_VENDOR | USB_RECIP_DEVICE; 226 USB_TYPE_VENDOR | USB_RECIP_DEVICE;
224 dbg("sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x", 227 dev_dbg(&rio->rio_dev->dev,
225 requesttype, rio_cmd.request, rio_cmd.value, 228 "sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
226 rio_cmd.index, rio_cmd.length); 229 requesttype, rio_cmd.request, rio_cmd.value,
230 rio_cmd.index, rio_cmd.length);
227 /* Send rio control message */ 231 /* Send rio control message */
228 retries = 3; 232 retries = 3;
229 while (retries) { 233 while (retries) {
@@ -238,10 +242,13 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
238 if (result == -ETIMEDOUT) 242 if (result == -ETIMEDOUT)
239 retries--; 243 retries--;
240 else if (result < 0) { 244 else if (result < 0) {
241 err("Error executing ioctrl. code = %d", result); 245 dev_err(&rio->rio_dev->dev,
246 "Error executing ioctrl. code = %d\n",
247 result);
242 retries = 0; 248 retries = 0;
243 } else { 249 } else {
244 dbg("Executed ioctl. Result = %d", result); 250 dev_dbg(&rio->rio_dev->dev,
251 "Executed ioctl. Result = %d\n", result);
245 retries = 0; 252 retries = 0;
246 253
247 } 254 }
@@ -313,8 +320,9 @@ write_rio(struct file *file, const char __user *buffer,
313 usb_sndbulkpipe(rio->rio_dev, 2), 320 usb_sndbulkpipe(rio->rio_dev, 2),
314 obuf, thistime, &partial, 5000); 321 obuf, thistime, &partial, 5000);
315 322
316 dbg("write stats: result:%d thistime:%lu partial:%u", 323 dev_dbg(&rio->rio_dev->dev,
317 result, thistime, partial); 324 "write stats: result:%d thistime:%lu partial:%u\n",
325 result, thistime, partial);
318 326
319 if (result == -ETIMEDOUT) { /* NAK - so hold for a while */ 327 if (result == -ETIMEDOUT) { /* NAK - so hold for a while */
320 if (!maxretry--) { 328 if (!maxretry--) {
@@ -332,7 +340,8 @@ write_rio(struct file *file, const char __user *buffer,
332 break; 340 break;
333 }; 341 };
334 if (result) { 342 if (result) {
335 err("Write Whoops - %x", result); 343 dev_err(&rio->rio_dev->dev, "Write Whoops - %x\n",
344 result);
336 errn = -EIO; 345 errn = -EIO;
337 goto error; 346 goto error;
338 } 347 }
@@ -393,15 +402,17 @@ read_rio(struct file *file, char __user *buffer, size_t count, loff_t * ppos)
393 ibuf, this_read, &partial, 402 ibuf, this_read, &partial,
394 8000); 403 8000);
395 404
396 dbg("read stats: result:%d this_read:%u partial:%u", 405 dev_dbg(&rio->rio_dev->dev,
397 result, this_read, partial); 406 "read stats: result:%d this_read:%u partial:%u\n",
407 result, this_read, partial);
398 408
399 if (partial) { 409 if (partial) {
400 count = this_read = partial; 410 count = this_read = partial;
401 } else if (result == -ETIMEDOUT || result == 15) { /* FIXME: 15 ??? */ 411 } else if (result == -ETIMEDOUT || result == 15) { /* FIXME: 15 ??? */
402 if (!maxretry--) { 412 if (!maxretry--) {
403 mutex_unlock(&(rio->lock)); 413 mutex_unlock(&(rio->lock));
404 err("read_rio: maxretry timeout"); 414 dev_err(&rio->rio_dev->dev,
415 "read_rio: maxretry timeout\n");
405 return -ETIME; 416 return -ETIME;
406 } 417 }
407 prepare_to_wait(&rio->wait_q, &wait, TASK_INTERRUPTIBLE); 418 prepare_to_wait(&rio->wait_q, &wait, TASK_INTERRUPTIBLE);
@@ -410,8 +421,9 @@ read_rio(struct file *file, char __user *buffer, size_t count, loff_t * ppos)
410 continue; 421 continue;
411 } else if (result != -EREMOTEIO) { 422 } else if (result != -EREMOTEIO) {
412 mutex_unlock(&(rio->lock)); 423 mutex_unlock(&(rio->lock));
413 err("Read Whoops - result:%u partial:%u this_read:%u", 424 dev_err(&rio->rio_dev->dev,
414 result, partial, this_read); 425 "Read Whoops - result:%u partial:%u this_read:%u\n",
426 result, partial, this_read);
415 return -EIO; 427 return -EIO;
416 } else { 428 } else {
417 mutex_unlock(&(rio->lock)); 429 mutex_unlock(&(rio->lock));
@@ -459,26 +471,29 @@ static int probe_rio(struct usb_interface *intf,
459 471
460 retval = usb_register_dev(intf, &usb_rio_class); 472 retval = usb_register_dev(intf, &usb_rio_class);
461 if (retval) { 473 if (retval) {
462 err("Not able to get a minor for this device."); 474 dev_err(&dev->dev,
475 "Not able to get a minor for this device.\n");
463 return -ENOMEM; 476 return -ENOMEM;
464 } 477 }
465 478
466 rio->rio_dev = dev; 479 rio->rio_dev = dev;
467 480
468 if (!(rio->obuf = kmalloc(OBUF_SIZE, GFP_KERNEL))) { 481 if (!(rio->obuf = kmalloc(OBUF_SIZE, GFP_KERNEL))) {
469 err("probe_rio: Not enough memory for the output buffer"); 482 dev_err(&dev->dev,
483 "probe_rio: Not enough memory for the output buffer\n");
470 usb_deregister_dev(intf, &usb_rio_class); 484 usb_deregister_dev(intf, &usb_rio_class);
471 return -ENOMEM; 485 return -ENOMEM;
472 } 486 }
473 dbg("probe_rio: obuf address:%p", rio->obuf); 487 dev_dbg(&intf->dev, "obuf address:%p\n", rio->obuf);
474 488
475 if (!(rio->ibuf = kmalloc(IBUF_SIZE, GFP_KERNEL))) { 489 if (!(rio->ibuf = kmalloc(IBUF_SIZE, GFP_KERNEL))) {
476 err("probe_rio: Not enough memory for the input buffer"); 490 dev_err(&dev->dev,
491 "probe_rio: Not enough memory for the input buffer\n");
477 usb_deregister_dev(intf, &usb_rio_class); 492 usb_deregister_dev(intf, &usb_rio_class);
478 kfree(rio->obuf); 493 kfree(rio->obuf);
479 return -ENOMEM; 494 return -ENOMEM;
480 } 495 }
481 dbg("probe_rio: ibuf address:%p", rio->ibuf); 496 dev_dbg(&intf->dev, "ibuf address:%p\n", rio->ibuf);
482 497
483 mutex_init(&(rio->lock)); 498 mutex_init(&(rio->lock));
484 499
diff --git a/drivers/usb/misc/usblcd.c b/drivers/usb/misc/usblcd.c
index e2b4bd31c2b6..89927bcff974 100644
--- a/drivers/usb/misc/usblcd.c
+++ b/drivers/usb/misc/usblcd.c
@@ -87,8 +87,8 @@ static int lcd_open(struct inode *inode, struct file *file)
87 interface = usb_find_interface(&lcd_driver, subminor); 87 interface = usb_find_interface(&lcd_driver, subminor);
88 if (!interface) { 88 if (!interface) {
89 mutex_unlock(&lcd_mutex); 89 mutex_unlock(&lcd_mutex);
90 err("USBLCD: %s - error, can't find device for minor %d", 90 printk(KERN_ERR "USBLCD: %s - error, can't find device for minor %d\n",
91 __func__, subminor); 91 __func__, subminor);
92 return -ENODEV; 92 return -ENODEV;
93 } 93 }
94 94
@@ -209,8 +209,8 @@ static void lcd_write_bulk_callback(struct urb *urb)
209 !(status == -ENOENT || 209 !(status == -ENOENT ||
210 status == -ECONNRESET || 210 status == -ECONNRESET ||
211 status == -ESHUTDOWN)) { 211 status == -ESHUTDOWN)) {
212 dbg("USBLCD: %s - nonzero write bulk status received: %d", 212 dev_dbg(&dev->interface->dev,
213 __func__, status); 213 "nonzero write bulk status received: %d\n", status);
214 } 214 }
215 215
216 /* free up our allocated buffer */ 216 /* free up our allocated buffer */
@@ -268,8 +268,9 @@ static ssize_t lcd_write(struct file *file, const char __user * user_buffer,
268 /* send the data out the bulk port */ 268 /* send the data out the bulk port */
269 retval = usb_submit_urb(urb, GFP_KERNEL); 269 retval = usb_submit_urb(urb, GFP_KERNEL);
270 if (retval) { 270 if (retval) {
271 err("USBLCD: %s - failed submitting write urb, error %d", 271 dev_err(&dev->udev->dev,
272 __func__, retval); 272 "%s - failed submitting write urb, error %d\n",
273 __func__, retval);
273 goto error_unanchor; 274 goto error_unanchor;
274 } 275 }
275 276
@@ -322,7 +323,7 @@ static int lcd_probe(struct usb_interface *interface,
322 /* allocate memory for our device state and initialize it */ 323 /* allocate memory for our device state and initialize it */
323 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 324 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
324 if (dev == NULL) { 325 if (dev == NULL) {
325 err("Out of memory"); 326 dev_err(&interface->dev, "Out of memory\n");
326 goto error; 327 goto error;
327 } 328 }
328 kref_init(&dev->kref); 329 kref_init(&dev->kref);
@@ -352,7 +353,8 @@ static int lcd_probe(struct usb_interface *interface,
352 dev->bulk_in_endpointAddr = endpoint->bEndpointAddress; 353 dev->bulk_in_endpointAddr = endpoint->bEndpointAddress;
353 dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL); 354 dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
354 if (!dev->bulk_in_buffer) { 355 if (!dev->bulk_in_buffer) {
355 err("Could not allocate bulk_in_buffer"); 356 dev_err(&interface->dev,
357 "Could not allocate bulk_in_buffer\n");
356 goto error; 358 goto error;
357 } 359 }
358 } 360 }
@@ -364,7 +366,8 @@ static int lcd_probe(struct usb_interface *interface,
364 } 366 }
365 } 367 }
366 if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) { 368 if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) {
367 err("Could not find both bulk-in and bulk-out endpoints"); 369 dev_err(&interface->dev,
370 "Could not find both bulk-in and bulk-out endpoints\n");
368 goto error; 371 goto error;
369 } 372 }
370 373
@@ -375,7 +378,8 @@ static int lcd_probe(struct usb_interface *interface,
375 retval = usb_register_dev(interface, &lcd_class); 378 retval = usb_register_dev(interface, &lcd_class);
376 if (retval) { 379 if (retval) {
377 /* something prevented us from registering this driver */ 380 /* something prevented us from registering this driver */
378 err("Not able to get a minor for this device."); 381 dev_err(&interface->dev,
382 "Not able to get a minor for this device.\n");
379 usb_set_intfdata(interface, NULL); 383 usb_set_intfdata(interface, NULL);
380 goto error; 384 goto error;
381 } 385 }
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index 9dcb68f04f03..055b84adedac 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -1028,7 +1028,10 @@ test_ctrl_queue(struct usbtest_dev *dev, struct usbtest_param *param)
1028 case 13: /* short read, resembling case 10 */ 1028 case 13: /* short read, resembling case 10 */
1029 req.wValue = cpu_to_le16((USB_DT_CONFIG << 8) | 0); 1029 req.wValue = cpu_to_le16((USB_DT_CONFIG << 8) | 0);
1030 /* last data packet "should" be DATA1, not DATA0 */ 1030 /* last data packet "should" be DATA1, not DATA0 */
1031 len = 1024 - udev->descriptor.bMaxPacketSize0; 1031 if (udev->speed == USB_SPEED_SUPER)
1032 len = 1024 - 512;
1033 else
1034 len = 1024 - udev->descriptor.bMaxPacketSize0;
1032 expected = -EREMOTEIO; 1035 expected = -EREMOTEIO;
1033 break; 1036 break;
1034 case 14: /* short read; try to fill the last packet */ 1037 case 14: /* short read; try to fill the last packet */
@@ -1387,11 +1390,15 @@ static int test_halt(struct usbtest_dev *tdev, int ep, struct urb *urb)
1387 1390
1388static int halt_simple(struct usbtest_dev *dev) 1391static int halt_simple(struct usbtest_dev *dev)
1389{ 1392{
1390 int ep; 1393 int ep;
1391 int retval = 0; 1394 int retval = 0;
1392 struct urb *urb; 1395 struct urb *urb;
1396 struct usb_device *udev = testdev_to_usbdev(dev);
1393 1397
1394 urb = simple_alloc_urb(testdev_to_usbdev(dev), 0, 512); 1398 if (udev->speed == USB_SPEED_SUPER)
1399 urb = simple_alloc_urb(udev, 0, 1024);
1400 else
1401 urb = simple_alloc_urb(udev, 0, 512);
1395 if (urb == NULL) 1402 if (urb == NULL)
1396 return -ENOMEM; 1403 return -ENOMEM;
1397 1404
diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c
index 8b1d94a76914..29cad9e0a7a9 100644
--- a/drivers/usb/misc/uss720.c
+++ b/drivers/usb/misc/uss720.c
@@ -85,9 +85,9 @@ static void destroy_priv(struct kref *kref)
85{ 85{
86 struct parport_uss720_private *priv = container_of(kref, struct parport_uss720_private, ref_count); 86 struct parport_uss720_private *priv = container_of(kref, struct parport_uss720_private, ref_count);
87 87
88 dev_dbg(&priv->usbdev->dev, "destroying priv datastructure\n");
88 usb_put_dev(priv->usbdev); 89 usb_put_dev(priv->usbdev);
89 kfree(priv); 90 kfree(priv);
90 dbg("destroying priv datastructure");
91} 91}
92 92
93static void destroy_async(struct kref *kref) 93static void destroy_async(struct kref *kref)
@@ -118,14 +118,17 @@ static void async_complete(struct urb *urb)
118 priv = rq->priv; 118 priv = rq->priv;
119 pp = priv->pp; 119 pp = priv->pp;
120 if (status) { 120 if (status) {
121 err("async_complete: urb error %d", status); 121 dev_err(&urb->dev->dev, "async_complete: urb error %d\n",
122 status);
122 } else if (rq->dr.bRequest == 3) { 123 } else if (rq->dr.bRequest == 3) {
123 memcpy(priv->reg, rq->reg, sizeof(priv->reg)); 124 memcpy(priv->reg, rq->reg, sizeof(priv->reg));
124#if 0 125#if 0
125 dbg("async_complete regs %02x %02x %02x %02x %02x %02x %02x", 126 dev_dbg(&priv->usbdev->dev,
126 (unsigned int)priv->reg[0], (unsigned int)priv->reg[1], (unsigned int)priv->reg[2], 127 "async_complete regs %02x %02x %02x %02x %02x %02x %02x\n",
127 (unsigned int)priv->reg[3], (unsigned int)priv->reg[4], (unsigned int)priv->reg[5], 128 (unsigned int)priv->reg[0], (unsigned int)priv->reg[1],
128 (unsigned int)priv->reg[6]); 129 (unsigned int)priv->reg[2], (unsigned int)priv->reg[3],
130 (unsigned int)priv->reg[4], (unsigned int)priv->reg[5],
131 (unsigned int)priv->reg[6]);
129#endif 132#endif
130 /* if nAck interrupts are enabled and we have an interrupt, call the interrupt procedure */ 133 /* if nAck interrupts are enabled and we have an interrupt, call the interrupt procedure */
131 if (rq->reg[2] & rq->reg[1] & 0x10 && pp) 134 if (rq->reg[2] & rq->reg[1] & 0x10 && pp)
@@ -151,7 +154,7 @@ static struct uss720_async_request *submit_async_request(struct parport_uss720_p
151 return NULL; 154 return NULL;
152 rq = kmalloc(sizeof(struct uss720_async_request), mem_flags); 155 rq = kmalloc(sizeof(struct uss720_async_request), mem_flags);
153 if (!rq) { 156 if (!rq) {
154 err("submit_async_request out of memory"); 157 dev_err(&usbdev->dev, "submit_async_request out of memory\n");
155 return NULL; 158 return NULL;
156 } 159 }
157 kref_init(&rq->ref_count); 160 kref_init(&rq->ref_count);
@@ -162,7 +165,7 @@ static struct uss720_async_request *submit_async_request(struct parport_uss720_p
162 rq->urb = usb_alloc_urb(0, mem_flags); 165 rq->urb = usb_alloc_urb(0, mem_flags);
163 if (!rq->urb) { 166 if (!rq->urb) {
164 kref_put(&rq->ref_count, destroy_async); 167 kref_put(&rq->ref_count, destroy_async);
165 err("submit_async_request out of memory"); 168 dev_err(&usbdev->dev, "submit_async_request out of memory\n");
166 return NULL; 169 return NULL;
167 } 170 }
168 rq->dr.bRequestType = requesttype; 171 rq->dr.bRequestType = requesttype;
@@ -182,7 +185,7 @@ static struct uss720_async_request *submit_async_request(struct parport_uss720_p
182 if (!ret) 185 if (!ret)
183 return rq; 186 return rq;
184 destroy_async(&rq->ref_count); 187 destroy_async(&rq->ref_count);
185 err("submit_async_request submit_urb failed with %d", ret); 188 dev_err(&usbdev->dev, "submit_async_request submit_urb failed with %d\n", ret);
186 return NULL; 189 return NULL;
187} 190}
188 191
@@ -217,7 +220,8 @@ static int get_1284_register(struct parport *pp, unsigned char reg, unsigned cha
217 priv = pp->private_data; 220 priv = pp->private_data;
218 rq = submit_async_request(priv, 3, 0xc0, ((unsigned int)reg) << 8, 0, mem_flags); 221 rq = submit_async_request(priv, 3, 0xc0, ((unsigned int)reg) << 8, 0, mem_flags);
219 if (!rq) { 222 if (!rq) {
220 err("get_1284_register(%u) failed", (unsigned int)reg); 223 dev_err(&priv->usbdev->dev, "get_1284_register(%u) failed",
224 (unsigned int)reg);
221 return -EIO; 225 return -EIO;
222 } 226 }
223 if (!val) { 227 if (!val) {
@@ -248,7 +252,8 @@ static int set_1284_register(struct parport *pp, unsigned char reg, unsigned cha
248 priv = pp->private_data; 252 priv = pp->private_data;
249 rq = submit_async_request(priv, 4, 0x40, (((unsigned int)reg) << 8) | val, 0, mem_flags); 253 rq = submit_async_request(priv, 4, 0x40, (((unsigned int)reg) << 8) | val, 0, mem_flags);
250 if (!rq) { 254 if (!rq) {
251 err("set_1284_register(%u,%u) failed", (unsigned int)reg, (unsigned int)val); 255 dev_err(&priv->usbdev->dev, "set_1284_register(%u,%u) failed",
256 (unsigned int)reg, (unsigned int)val);
252 return -EIO; 257 return -EIO;
253 } 258 }
254 kref_put(&rq->ref_count, destroy_async); 259 kref_put(&rq->ref_count, destroy_async);
@@ -690,9 +695,9 @@ static int uss720_probe(struct usb_interface *intf,
690 unsigned char reg; 695 unsigned char reg;
691 int i; 696 int i;
692 697
693 dbg("probe: vendor id 0x%x, device id 0x%x\n", 698 dev_dbg(&intf->dev, "probe: vendor id 0x%x, device id 0x%x\n",
694 le16_to_cpu(usbdev->descriptor.idVendor), 699 le16_to_cpu(usbdev->descriptor.idVendor),
695 le16_to_cpu(usbdev->descriptor.idProduct)); 700 le16_to_cpu(usbdev->descriptor.idProduct));
696 701
697 /* our known interfaces have 3 alternate settings */ 702 /* our known interfaces have 3 alternate settings */
698 if (intf->num_altsetting != 3) { 703 if (intf->num_altsetting != 3) {
@@ -700,7 +705,7 @@ static int uss720_probe(struct usb_interface *intf,
700 return -ENODEV; 705 return -ENODEV;
701 } 706 }
702 i = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2); 707 i = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2);
703 dbg("set inteface result %d", i); 708 dev_dbg(&intf->dev, "set inteface result %d\n", i);
704 709
705 interface = intf->cur_altsetting; 710 interface = intf->cur_altsetting;
706 711
@@ -731,11 +736,13 @@ static int uss720_probe(struct usb_interface *intf,
731 set_1284_register(pp, 2, 0x0c, GFP_KERNEL); 736 set_1284_register(pp, 2, 0x0c, GFP_KERNEL);
732 /* debugging */ 737 /* debugging */
733 get_1284_register(pp, 0, &reg, GFP_KERNEL); 738 get_1284_register(pp, 0, &reg, GFP_KERNEL);
734 dbg("reg: %02x %02x %02x %02x %02x %02x %02x", 739 dev_dbg(&intf->dev, "reg: %02x %02x %02x %02x %02x %02x %02x\n",
735 priv->reg[0], priv->reg[1], priv->reg[2], priv->reg[3], priv->reg[4], priv->reg[5], priv->reg[6]); 740 priv->reg[0], priv->reg[1], priv->reg[2], priv->reg[3],
741 priv->reg[4], priv->reg[5], priv->reg[6]);
736 742
737 endpoint = &interface->endpoint[2]; 743 endpoint = &interface->endpoint[2];
738 dbg("epaddr %d interval %d", endpoint->desc.bEndpointAddress, endpoint->desc.bInterval); 744 dev_dbg(&intf->dev, "epaddr %d interval %d\n",
745 endpoint->desc.bEndpointAddress, endpoint->desc.bInterval);
739 parport_announce_port(pp); 746 parport_announce_port(pp);
740 747
741 usb_set_intfdata(intf, pp); 748 usb_set_intfdata(intf, pp);
@@ -753,20 +760,20 @@ static void uss720_disconnect(struct usb_interface *intf)
753 struct parport_uss720_private *priv; 760 struct parport_uss720_private *priv;
754 struct usb_device *usbdev; 761 struct usb_device *usbdev;
755 762
756 dbg("disconnect"); 763 dev_dbg(&intf->dev, "disconnect\n");
757 usb_set_intfdata(intf, NULL); 764 usb_set_intfdata(intf, NULL);
758 if (pp) { 765 if (pp) {
759 priv = pp->private_data; 766 priv = pp->private_data;
760 usbdev = priv->usbdev; 767 usbdev = priv->usbdev;
761 priv->usbdev = NULL; 768 priv->usbdev = NULL;
762 priv->pp = NULL; 769 priv->pp = NULL;
763 dbg("parport_remove_port"); 770 dev_dbg(&intf->dev, "parport_remove_port\n");
764 parport_remove_port(pp); 771 parport_remove_port(pp);
765 parport_put_port(pp); 772 parport_put_port(pp);
766 kill_all_async_requests_priv(priv); 773 kill_all_async_requests_priv(priv);
767 kref_put(&priv->ref_count, destroy_priv); 774 kref_put(&priv->ref_count, destroy_priv);
768 } 775 }
769 dbg("disconnect done"); 776 dev_dbg(&intf->dev, "disconnect done\n");
770} 777}
771 778
772/* table of cables that work through this driver */ 779/* table of cables that work through this driver */
diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
index 70201462e19c..42ad2e6d86c4 100644
--- a/drivers/usb/misc/yurex.c
+++ b/drivers/usb/misc/yurex.c
@@ -83,7 +83,8 @@ static void yurex_control_callback(struct urb *urb)
83 int status = urb->status; 83 int status = urb->status;
84 84
85 if (status) { 85 if (status) {
86 err("%s - control failed: %d\n", __func__, status); 86 dev_err(&urb->dev->dev, "%s - control failed: %d\n",
87 __func__, status);
87 wake_up_interruptible(&dev->waitq); 88 wake_up_interruptible(&dev->waitq);
88 return; 89 return;
89 } 90 }
@@ -94,7 +95,7 @@ static void yurex_delete(struct kref *kref)
94{ 95{
95 struct usb_yurex *dev = to_yurex_dev(kref); 96 struct usb_yurex *dev = to_yurex_dev(kref);
96 97
97 dbg("yurex_delete"); 98 dev_dbg(&dev->interface->dev, "%s\n", __func__);
98 99
99 usb_put_dev(dev->udev); 100 usb_put_dev(dev->udev);
100 if (dev->cntl_urb) { 101 if (dev->cntl_urb) {
@@ -137,8 +138,9 @@ static void yurex_interrupt(struct urb *urb)
137 case 0: /*success*/ 138 case 0: /*success*/
138 break; 139 break;
139 case -EOVERFLOW: 140 case -EOVERFLOW:
140 err("%s - overflow with length %d, actual length is %d", 141 dev_err(&dev->interface->dev,
141 __func__, YUREX_BUF_SIZE, dev->urb->actual_length); 142 "%s - overflow with length %d, actual length is %d\n",
143 __func__, YUREX_BUF_SIZE, dev->urb->actual_length);
142 case -ECONNRESET: 144 case -ECONNRESET:
143 case -ENOENT: 145 case -ENOENT:
144 case -ESHUTDOWN: 146 case -ESHUTDOWN:
@@ -146,7 +148,8 @@ static void yurex_interrupt(struct urb *urb)
146 /* The device is terminated, clean up */ 148 /* The device is terminated, clean up */
147 return; 149 return;
148 default: 150 default:
149 err("%s - unknown status received: %d", __func__, status); 151 dev_err(&dev->interface->dev,
152 "%s - unknown status received: %d\n", __func__, status);
150 goto exit; 153 goto exit;
151 } 154 }
152 155
@@ -162,16 +165,19 @@ static void yurex_interrupt(struct urb *urb)
162 if (i != 5) 165 if (i != 5)
163 dev->bbu <<= 8; 166 dev->bbu <<= 8;
164 } 167 }
165 dbg("%s count: %lld", __func__, dev->bbu); 168 dev_dbg(&dev->interface->dev, "%s count: %lld\n",
169 __func__, dev->bbu);
166 spin_unlock_irqrestore(&dev->lock, flags); 170 spin_unlock_irqrestore(&dev->lock, flags);
167 171
168 kill_fasync(&dev->async_queue, SIGIO, POLL_IN); 172 kill_fasync(&dev->async_queue, SIGIO, POLL_IN);
169 } 173 }
170 else 174 else
171 dbg("data format error - no EOF"); 175 dev_dbg(&dev->interface->dev,
176 "data format error - no EOF\n");
172 break; 177 break;
173 case CMD_ACK: 178 case CMD_ACK:
174 dbg("%s ack: %c", __func__, buf[1]); 179 dev_dbg(&dev->interface->dev, "%s ack: %c\n",
180 __func__, buf[1]);
175 wake_up_interruptible(&dev->waitq); 181 wake_up_interruptible(&dev->waitq);
176 break; 182 break;
177 } 183 }
@@ -179,7 +185,7 @@ static void yurex_interrupt(struct urb *urb)
179exit: 185exit:
180 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); 186 retval = usb_submit_urb(dev->urb, GFP_ATOMIC);
181 if (retval) { 187 if (retval) {
182 err("%s - usb_submit_urb failed: %d", 188 dev_err(&dev->interface->dev, "%s - usb_submit_urb failed: %d\n",
183 __func__, retval); 189 __func__, retval);
184 } 190 }
185} 191}
@@ -196,7 +202,7 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
196 /* allocate memory for our device state and initialize it */ 202 /* allocate memory for our device state and initialize it */
197 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 203 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
198 if (!dev) { 204 if (!dev) {
199 err("Out of memory"); 205 dev_err(&interface->dev, "Out of memory\n");
200 goto error; 206 goto error;
201 } 207 }
202 kref_init(&dev->kref); 208 kref_init(&dev->kref);
@@ -219,7 +225,7 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
219 } 225 }
220 if (!dev->int_in_endpointAddr) { 226 if (!dev->int_in_endpointAddr) {
221 retval = -ENODEV; 227 retval = -ENODEV;
222 err("Could not find endpoints"); 228 dev_err(&interface->dev, "Could not find endpoints\n");
223 goto error; 229 goto error;
224 } 230 }
225 231
@@ -227,14 +233,14 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
227 /* allocate control URB */ 233 /* allocate control URB */
228 dev->cntl_urb = usb_alloc_urb(0, GFP_KERNEL); 234 dev->cntl_urb = usb_alloc_urb(0, GFP_KERNEL);
229 if (!dev->cntl_urb) { 235 if (!dev->cntl_urb) {
230 err("Could not allocate control URB"); 236 dev_err(&interface->dev, "Could not allocate control URB\n");
231 goto error; 237 goto error;
232 } 238 }
233 239
234 /* allocate buffer for control req */ 240 /* allocate buffer for control req */
235 dev->cntl_req = kmalloc(YUREX_BUF_SIZE, GFP_KERNEL); 241 dev->cntl_req = kmalloc(YUREX_BUF_SIZE, GFP_KERNEL);
236 if (!dev->cntl_req) { 242 if (!dev->cntl_req) {
237 err("Could not allocate cntl_req"); 243 dev_err(&interface->dev, "Could not allocate cntl_req\n");
238 goto error; 244 goto error;
239 } 245 }
240 246
@@ -243,7 +249,7 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
243 GFP_KERNEL, 249 GFP_KERNEL,
244 &dev->cntl_urb->transfer_dma); 250 &dev->cntl_urb->transfer_dma);
245 if (!dev->cntl_buffer) { 251 if (!dev->cntl_buffer) {
246 err("Could not allocate cntl_buffer"); 252 dev_err(&interface->dev, "Could not allocate cntl_buffer\n");
247 goto error; 253 goto error;
248 } 254 }
249 255
@@ -265,7 +271,7 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
265 /* allocate interrupt URB */ 271 /* allocate interrupt URB */
266 dev->urb = usb_alloc_urb(0, GFP_KERNEL); 272 dev->urb = usb_alloc_urb(0, GFP_KERNEL);
267 if (!dev->urb) { 273 if (!dev->urb) {
268 err("Could not allocate URB"); 274 dev_err(&interface->dev, "Could not allocate URB\n");
269 goto error; 275 goto error;
270 } 276 }
271 277
@@ -273,7 +279,7 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
273 dev->int_buffer = usb_alloc_coherent(dev->udev, YUREX_BUF_SIZE, 279 dev->int_buffer = usb_alloc_coherent(dev->udev, YUREX_BUF_SIZE,
274 GFP_KERNEL, &dev->urb->transfer_dma); 280 GFP_KERNEL, &dev->urb->transfer_dma);
275 if (!dev->int_buffer) { 281 if (!dev->int_buffer) {
276 err("Could not allocate int_buffer"); 282 dev_err(&interface->dev, "Could not allocate int_buffer\n");
277 goto error; 283 goto error;
278 } 284 }
279 285
@@ -285,7 +291,7 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
285 dev->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 291 dev->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
286 if (usb_submit_urb(dev->urb, GFP_KERNEL)) { 292 if (usb_submit_urb(dev->urb, GFP_KERNEL)) {
287 retval = -EIO; 293 retval = -EIO;
288 err("Could not submitting URB"); 294 dev_err(&interface->dev, "Could not submitting URB\n");
289 goto error; 295 goto error;
290 } 296 }
291 297
@@ -295,7 +301,8 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
295 /* we can register the device now, as it is ready */ 301 /* we can register the device now, as it is ready */
296 retval = usb_register_dev(interface, &yurex_class); 302 retval = usb_register_dev(interface, &yurex_class);
297 if (retval) { 303 if (retval) {
298 err("Not able to get a minor for this device."); 304 dev_err(&interface->dev,
305 "Not able to get a minor for this device.\n");
299 usb_set_intfdata(interface, NULL); 306 usb_set_intfdata(interface, NULL);
300 goto error; 307 goto error;
301 } 308 }
@@ -368,8 +375,8 @@ static int yurex_open(struct inode *inode, struct file *file)
368 375
369 interface = usb_find_interface(&yurex_driver, subminor); 376 interface = usb_find_interface(&yurex_driver, subminor);
370 if (!interface) { 377 if (!interface) {
371 err("%s - error, can't find device for minor %d", 378 printk(KERN_ERR "%s - error, can't find device for minor %d",
372 __func__, subminor); 379 __func__, subminor);
373 retval = -ENODEV; 380 retval = -ENODEV;
374 goto exit; 381 goto exit;
375 } 382 }
@@ -505,7 +512,8 @@ static ssize_t yurex_write(struct file *file, const char *user_buffer, size_t co
505 512
506 /* send the data as the control msg */ 513 /* send the data as the control msg */
507 prepare_to_wait(&dev->waitq, &wait, TASK_INTERRUPTIBLE); 514 prepare_to_wait(&dev->waitq, &wait, TASK_INTERRUPTIBLE);
508 dbg("%s - submit %c", __func__, dev->cntl_buffer[0]); 515 dev_dbg(&dev->interface->dev, "%s - submit %c\n", __func__,
516 dev->cntl_buffer[0]);
509 retval = usb_submit_urb(dev->cntl_urb, GFP_KERNEL); 517 retval = usb_submit_urb(dev->cntl_urb, GFP_KERNEL);
510 if (retval >= 0) 518 if (retval >= 0)
511 timeout = schedule_timeout(YUREX_WRITE_TIMEOUT); 519 timeout = schedule_timeout(YUREX_WRITE_TIMEOUT);
@@ -514,7 +522,9 @@ static ssize_t yurex_write(struct file *file, const char *user_buffer, size_t co
514 mutex_unlock(&dev->io_mutex); 522 mutex_unlock(&dev->io_mutex);
515 523
516 if (retval < 0) { 524 if (retval < 0) {
517 err("%s - failed to send bulk msg, error %d", __func__, retval); 525 dev_err(&dev->interface->dev,
526 "%s - failed to send bulk msg, error %d\n",
527 __func__, retval);
518 goto error; 528 goto error;
519 } 529 }
520 if (set && timeout) 530 if (set && timeout)
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index f70cab3beeec..ef0c3f9f0947 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -8,6 +8,7 @@ config USB_MUSB_HDRC
8 tristate 'Inventra Highspeed Dual Role Controller (TI, ADI, ...)' 8 tristate 'Inventra Highspeed Dual Role Controller (TI, ADI, ...)'
9 depends on USB && USB_GADGET 9 depends on USB && USB_GADGET
10 select NOP_USB_XCEIV if (ARCH_DAVINCI || MACH_OMAP3EVM || BLACKFIN) 10 select NOP_USB_XCEIV if (ARCH_DAVINCI || MACH_OMAP3EVM || BLACKFIN)
11 select NOP_USB_XCEIV if (SOC_OMAPTI81XX || SOC_OMAPAM33XX)
11 select TWL4030_USB if MACH_OMAP_3430SDP 12 select TWL4030_USB if MACH_OMAP_3430SDP
12 select TWL6030_USB if MACH_OMAP_4430SDP || MACH_OMAP4_PANDA 13 select TWL6030_USB if MACH_OMAP_4430SDP || MACH_OMAP4_PANDA
13 select USB_OTG_UTILS 14 select USB_OTG_UTILS
@@ -54,6 +55,10 @@ config USB_MUSB_AM35X
54 tristate "AM35x" 55 tristate "AM35x"
55 depends on ARCH_OMAP 56 depends on ARCH_OMAP
56 57
58config USB_MUSB_DSPS
59 tristate "TI DSPS platforms"
60 depends on SOC_OMAPTI81XX || SOC_OMAPAM33XX
61
57config USB_MUSB_BLACKFIN 62config USB_MUSB_BLACKFIN
58 tristate "Blackfin" 63 tristate "Blackfin"
59 depends on (BF54x && !BF544) || (BF52x && ! BF522 && !BF523) 64 depends on (BF54x && !BF544) || (BF52x && ! BF522 && !BF523)
@@ -70,7 +75,8 @@ choice
70 default USB_INVENTRA_DMA if USB_MUSB_OMAP2PLUS || USB_MUSB_BLACKFIN 75 default USB_INVENTRA_DMA if USB_MUSB_OMAP2PLUS || USB_MUSB_BLACKFIN
71 default USB_TI_CPPI_DMA if USB_MUSB_DAVINCI 76 default USB_TI_CPPI_DMA if USB_MUSB_DAVINCI
72 default USB_TUSB_OMAP_DMA if USB_MUSB_TUSB6010 77 default USB_TUSB_OMAP_DMA if USB_MUSB_TUSB6010
73 default MUSB_PIO_ONLY if USB_MUSB_TUSB6010 || USB_MUSB_DA8XX || USB_MUSB_AM35X 78 default MUSB_PIO_ONLY if USB_MUSB_TUSB6010 || USB_MUSB_DA8XX || USB_MUSB_AM35X \
79 || USB_MUSB_DSPS
74 help 80 help
75 Unfortunately, only one option can be enabled here. Ideally one 81 Unfortunately, only one option can be enabled here. Ideally one
76 should be able to build all these drivers into one kernel to 82 should be able to build all these drivers into one kernel to
diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile
index 88bfb9dee4bf..3b858715b5ea 100644
--- a/drivers/usb/musb/Makefile
+++ b/drivers/usb/musb/Makefile
@@ -13,6 +13,7 @@ musb_hdrc-$(CONFIG_DEBUG_FS) += musb_debugfs.o
13# Hardware Glue Layer 13# Hardware Glue Layer
14obj-$(CONFIG_USB_MUSB_OMAP2PLUS) += omap2430.o 14obj-$(CONFIG_USB_MUSB_OMAP2PLUS) += omap2430.o
15obj-$(CONFIG_USB_MUSB_AM35X) += am35x.o 15obj-$(CONFIG_USB_MUSB_AM35X) += am35x.o
16obj-$(CONFIG_USB_MUSB_DSPS) += musb_dsps.o
16obj-$(CONFIG_USB_MUSB_TUSB6010) += tusb6010.o 17obj-$(CONFIG_USB_MUSB_TUSB6010) += tusb6010.o
17obj-$(CONFIG_USB_MUSB_DAVINCI) += davinci.o 18obj-$(CONFIG_USB_MUSB_DAVINCI) += davinci.o
18obj-$(CONFIG_USB_MUSB_DA8XX) += da8xx.o 19obj-$(CONFIG_USB_MUSB_DA8XX) += da8xx.o
diff --git a/drivers/usb/musb/cppi_dma.c b/drivers/usb/musb/cppi_dma.c
index 66bc376005d2..8637c1f69fc3 100644
--- a/drivers/usb/musb/cppi_dma.c
+++ b/drivers/usb/musb/cppi_dma.c
@@ -6,6 +6,7 @@
6 * The TUSB6020, using VLYNQ, has CPPI that looks much like DaVinci. 6 * The TUSB6020, using VLYNQ, has CPPI that looks much like DaVinci.
7 */ 7 */
8 8
9#include <linux/module.h>
9#include <linux/platform_device.h> 10#include <linux/platform_device.h>
10#include <linux/slab.h> 11#include <linux/slab.h>
11#include <linux/usb.h> 12#include <linux/usb.h>
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 66aaccf04490..db3dff854b71 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1034,7 +1034,9 @@ static void musb_shutdown(struct platform_device *pdev)
1034 || defined(CONFIG_USB_MUSB_OMAP2PLUS) \ 1034 || defined(CONFIG_USB_MUSB_OMAP2PLUS) \
1035 || defined(CONFIG_USB_MUSB_OMAP2PLUS_MODULE) \ 1035 || defined(CONFIG_USB_MUSB_OMAP2PLUS_MODULE) \
1036 || defined(CONFIG_USB_MUSB_AM35X) \ 1036 || defined(CONFIG_USB_MUSB_AM35X) \
1037 || defined(CONFIG_USB_MUSB_AM35X_MODULE) 1037 || defined(CONFIG_USB_MUSB_AM35X_MODULE) \
1038 || defined(CONFIG_USB_MUSB_DSPS) \
1039 || defined(CONFIG_USB_MUSB_DSPS_MODULE)
1038static ushort __devinitdata fifo_mode = 4; 1040static ushort __devinitdata fifo_mode = 4;
1039#elif defined(CONFIG_USB_MUSB_UX500) \ 1041#elif defined(CONFIG_USB_MUSB_UX500) \
1040 || defined(CONFIG_USB_MUSB_UX500_MODULE) 1042 || defined(CONFIG_USB_MUSB_UX500_MODULE)
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
new file mode 100644
index 000000000000..23db42db761a
--- /dev/null
+++ b/drivers/usb/musb/musb_dsps.c
@@ -0,0 +1,711 @@
1/*
2 * Texas Instruments DSPS platforms "glue layer"
3 *
4 * Copyright (C) 2012, by Texas Instruments
5 *
6 * Based on the am35x "glue layer" code.
7 *
8 * This file is part of the Inventra Controller Driver for Linux.
9 *
10 * The Inventra Controller Driver for Linux is free software; you
11 * can redistribute it and/or modify it under the terms of the GNU
12 * General Public License version 2 as published by the Free Software
13 * Foundation.
14 *
15 * The Inventra Controller Driver for Linux is distributed in
16 * the hope that it will be useful, but WITHOUT ANY WARRANTY;
17 * without even the implied warranty of MERCHANTABILITY or
18 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
19 * License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with The Inventra Controller Driver for Linux ; if not,
23 * write to the Free Software Foundation, Inc., 59 Temple Place,
24 * Suite 330, Boston, MA 02111-1307 USA
25 *
26 * musb_dsps.c will be a common file for all the TI DSPS platforms
27 * such as dm64x, dm36x, dm35x, da8x, am35x and ti81x.
28 * For now only ti81x is using this and in future davinci.c, am35x.c
29 * da8xx.c would be merged to this file after testing.
30 */
31
32#include <linux/init.h>
33#include <linux/io.h>
34#include <linux/platform_device.h>
35#include <linux/dma-mapping.h>
36#include <linux/pm_runtime.h>
37#include <linux/module.h>
38
39#include <linux/of.h>
40#include <linux/of_device.h>
41#include <linux/of_address.h>
42
43#include <plat/usb.h>
44
45#include "musb_core.h"
46
47/**
48 * avoid using musb_readx()/musb_writex() as glue layer should not be
49 * dependent on musb core layer symbols.
50 */
51static inline u8 dsps_readb(const void __iomem *addr, unsigned offset)
52 { return __raw_readb(addr + offset); }
53
54static inline u32 dsps_readl(const void __iomem *addr, unsigned offset)
55 { return __raw_readl(addr + offset); }
56
57static inline void dsps_writeb(void __iomem *addr, unsigned offset, u8 data)
58 { __raw_writeb(data, addr + offset); }
59
60static inline void dsps_writel(void __iomem *addr, unsigned offset, u32 data)
61 { __raw_writel(data, addr + offset); }
62
63/**
64 * DSPS musb wrapper register offset.
65 * FIXME: This should be expanded to have all the wrapper registers from TI DSPS
66 * musb ips.
67 */
68struct dsps_musb_wrapper {
69 u16 revision;
70 u16 control;
71 u16 status;
72 u16 eoi;
73 u16 epintr_set;
74 u16 epintr_clear;
75 u16 epintr_status;
76 u16 coreintr_set;
77 u16 coreintr_clear;
78 u16 coreintr_status;
79 u16 phy_utmi;
80 u16 mode;
81
82 /* bit positions for control */
83 unsigned reset:5;
84
85 /* bit positions for interrupt */
86 unsigned usb_shift:5;
87 u32 usb_mask;
88 u32 usb_bitmap;
89 unsigned drvvbus:5;
90
91 unsigned txep_shift:5;
92 u32 txep_mask;
93 u32 txep_bitmap;
94
95 unsigned rxep_shift:5;
96 u32 rxep_mask;
97 u32 rxep_bitmap;
98
99 /* bit positions for phy_utmi */
100 unsigned otg_disable:5;
101
102 /* bit positions for mode */
103 unsigned iddig:5;
104 /* miscellaneous stuff */
105 u32 musb_core_offset;
106 u8 poll_seconds;
107};
108
109/**
110 * DSPS glue structure.
111 */
112struct dsps_glue {
113 struct device *dev;
114 struct platform_device *musb; /* child musb pdev */
115 const struct dsps_musb_wrapper *wrp; /* wrapper register offsets */
116 struct timer_list timer; /* otg_workaround timer */
117};
118
119/**
120 * dsps_musb_enable - enable interrupts
121 */
122static void dsps_musb_enable(struct musb *musb)
123{
124 struct device *dev = musb->controller;
125 struct platform_device *pdev = to_platform_device(dev->parent);
126 struct dsps_glue *glue = platform_get_drvdata(pdev);
127 const struct dsps_musb_wrapper *wrp = glue->wrp;
128 void __iomem *reg_base = musb->ctrl_base;
129 u32 epmask, coremask;
130
131 /* Workaround: setup IRQs through both register sets. */
132 epmask = ((musb->epmask & wrp->txep_mask) << wrp->txep_shift) |
133 ((musb->epmask & wrp->rxep_mask) << wrp->rxep_shift);
134 coremask = (wrp->usb_bitmap & ~MUSB_INTR_SOF);
135
136 dsps_writel(reg_base, wrp->epintr_set, epmask);
137 dsps_writel(reg_base, wrp->coreintr_set, coremask);
138 /* Force the DRVVBUS IRQ so we can start polling for ID change. */
139 if (is_otg_enabled(musb))
140 dsps_writel(reg_base, wrp->coreintr_set,
141 (1 << wrp->drvvbus) << wrp->usb_shift);
142}
143
144/**
145 * dsps_musb_disable - disable HDRC and flush interrupts
146 */
147static void dsps_musb_disable(struct musb *musb)
148{
149 struct device *dev = musb->controller;
150 struct platform_device *pdev = to_platform_device(dev->parent);
151 struct dsps_glue *glue = platform_get_drvdata(pdev);
152 const struct dsps_musb_wrapper *wrp = glue->wrp;
153 void __iomem *reg_base = musb->ctrl_base;
154
155 dsps_writel(reg_base, wrp->coreintr_clear, wrp->usb_bitmap);
156 dsps_writel(reg_base, wrp->epintr_clear,
157 wrp->txep_bitmap | wrp->rxep_bitmap);
158 dsps_writeb(musb->mregs, MUSB_DEVCTL, 0);
159 dsps_writel(reg_base, wrp->eoi, 0);
160}
161
162static void otg_timer(unsigned long _musb)
163{
164 struct musb *musb = (void *)_musb;
165 void __iomem *mregs = musb->mregs;
166 struct device *dev = musb->controller;
167 struct platform_device *pdev = to_platform_device(dev->parent);
168 struct dsps_glue *glue = platform_get_drvdata(pdev);
169 const struct dsps_musb_wrapper *wrp = glue->wrp;
170 u8 devctl;
171 unsigned long flags;
172
173 /*
174 * We poll because DSPS IP's won't expose several OTG-critical
175 * status change events (from the transceiver) otherwise.
176 */
177 devctl = dsps_readb(mregs, MUSB_DEVCTL);
178 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl,
179 otg_state_string(musb->xceiv->state));
180
181 spin_lock_irqsave(&musb->lock, flags);
182 switch (musb->xceiv->state) {
183 case OTG_STATE_A_WAIT_BCON:
184 devctl &= ~MUSB_DEVCTL_SESSION;
185 dsps_writeb(musb->mregs, MUSB_DEVCTL, devctl);
186
187 devctl = dsps_readb(musb->mregs, MUSB_DEVCTL);
188 if (devctl & MUSB_DEVCTL_BDEVICE) {
189 musb->xceiv->state = OTG_STATE_B_IDLE;
190 MUSB_DEV_MODE(musb);
191 } else {
192 musb->xceiv->state = OTG_STATE_A_IDLE;
193 MUSB_HST_MODE(musb);
194 }
195 break;
196 case OTG_STATE_A_WAIT_VFALL:
197 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
198 dsps_writel(musb->ctrl_base, wrp->coreintr_set,
199 MUSB_INTR_VBUSERROR << wrp->usb_shift);
200 break;
201 case OTG_STATE_B_IDLE:
202 if (!is_peripheral_enabled(musb))
203 break;
204
205 devctl = dsps_readb(mregs, MUSB_DEVCTL);
206 if (devctl & MUSB_DEVCTL_BDEVICE)
207 mod_timer(&glue->timer,
208 jiffies + wrp->poll_seconds * HZ);
209 else
210 musb->xceiv->state = OTG_STATE_A_IDLE;
211 break;
212 default:
213 break;
214 }
215 spin_unlock_irqrestore(&musb->lock, flags);
216}
217
218static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout)
219{
220 struct device *dev = musb->controller;
221 struct platform_device *pdev = to_platform_device(dev->parent);
222 struct dsps_glue *glue = platform_get_drvdata(pdev);
223 static unsigned long last_timer;
224
225 if (!is_otg_enabled(musb))
226 return;
227
228 if (timeout == 0)
229 timeout = jiffies + msecs_to_jiffies(3);
230
231 /* Never idle if active, or when VBUS timeout is not set as host */
232 if (musb->is_active || (musb->a_wait_bcon == 0 &&
233 musb->xceiv->state == OTG_STATE_A_WAIT_BCON)) {
234 dev_dbg(musb->controller, "%s active, deleting timer\n",
235 otg_state_string(musb->xceiv->state));
236 del_timer(&glue->timer);
237 last_timer = jiffies;
238 return;
239 }
240
241 if (time_after(last_timer, timeout) && timer_pending(&glue->timer)) {
242 dev_dbg(musb->controller,
243 "Longer idle timer already pending, ignoring...\n");
244 return;
245 }
246 last_timer = timeout;
247
248 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n",
249 otg_state_string(musb->xceiv->state),
250 jiffies_to_msecs(timeout - jiffies));
251 mod_timer(&glue->timer, timeout);
252}
253
254static irqreturn_t dsps_interrupt(int irq, void *hci)
255{
256 struct musb *musb = hci;
257 void __iomem *reg_base = musb->ctrl_base;
258 struct device *dev = musb->controller;
259 struct platform_device *pdev = to_platform_device(dev->parent);
260 struct dsps_glue *glue = platform_get_drvdata(pdev);
261 const struct dsps_musb_wrapper *wrp = glue->wrp;
262 unsigned long flags;
263 irqreturn_t ret = IRQ_NONE;
264 u32 epintr, usbintr;
265
266 spin_lock_irqsave(&musb->lock, flags);
267
268 /* Get endpoint interrupts */
269 epintr = dsps_readl(reg_base, wrp->epintr_status);
270 musb->int_rx = (epintr & wrp->rxep_bitmap) >> wrp->rxep_shift;
271 musb->int_tx = (epintr & wrp->txep_bitmap) >> wrp->txep_shift;
272
273 if (epintr)
274 dsps_writel(reg_base, wrp->epintr_status, epintr);
275
276 /* Get usb core interrupts */
277 usbintr = dsps_readl(reg_base, wrp->coreintr_status);
278 if (!usbintr && !epintr)
279 goto eoi;
280
281 musb->int_usb = (usbintr & wrp->usb_bitmap) >> wrp->usb_shift;
282 if (usbintr)
283 dsps_writel(reg_base, wrp->coreintr_status, usbintr);
284
285 dev_dbg(musb->controller, "usbintr (%x) epintr(%x)\n",
286 usbintr, epintr);
287 /*
288 * DRVVBUS IRQs are the only proxy we have (a very poor one!) for
289 * DSPS IP's missing ID change IRQ. We need an ID change IRQ to
290 * switch appropriately between halves of the OTG state machine.
291 * Managing DEVCTL.SESSION per Mentor docs requires that we know its
292 * value but DEVCTL.BDEVICE is invalid without DEVCTL.SESSION set.
293 * Also, DRVVBUS pulses for SRP (but not at 5V) ...
294 */
295 if ((usbintr & MUSB_INTR_BABBLE) && is_host_enabled(musb))
296 pr_info("CAUTION: musb: Babble Interrupt Occured\n");
297
298 if (usbintr & ((1 << wrp->drvvbus) << wrp->usb_shift)) {
299 int drvvbus = dsps_readl(reg_base, wrp->status);
300 void __iomem *mregs = musb->mregs;
301 u8 devctl = dsps_readb(mregs, MUSB_DEVCTL);
302 int err;
303
304 err = is_host_enabled(musb) && (musb->int_usb &
305 MUSB_INTR_VBUSERROR);
306 if (err) {
307 /*
308 * The Mentor core doesn't debounce VBUS as needed
309 * to cope with device connect current spikes. This
310 * means it's not uncommon for bus-powered devices
311 * to get VBUS errors during enumeration.
312 *
313 * This is a workaround, but newer RTL from Mentor
314 * seems to allow a better one: "re"-starting sessions
315 * without waiting for VBUS to stop registering in
316 * devctl.
317 */
318 musb->int_usb &= ~MUSB_INTR_VBUSERROR;
319 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
320 mod_timer(&glue->timer,
321 jiffies + wrp->poll_seconds * HZ);
322 WARNING("VBUS error workaround (delay coming)\n");
323 } else if (is_host_enabled(musb) && drvvbus) {
324 musb->is_active = 1;
325 MUSB_HST_MODE(musb);
326 musb->xceiv->otg->default_a = 1;
327 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
328 del_timer(&glue->timer);
329 } else {
330 musb->is_active = 0;
331 MUSB_DEV_MODE(musb);
332 musb->xceiv->otg->default_a = 0;
333 musb->xceiv->state = OTG_STATE_B_IDLE;
334 }
335
336 /* NOTE: this must complete power-on within 100 ms. */
337 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n",
338 drvvbus ? "on" : "off",
339 otg_state_string(musb->xceiv->state),
340 err ? " ERROR" : "",
341 devctl);
342 ret = IRQ_HANDLED;
343 }
344
345 if (musb->int_tx || musb->int_rx || musb->int_usb)
346 ret |= musb_interrupt(musb);
347
348 eoi:
349 /* EOI needs to be written for the IRQ to be re-asserted. */
350 if (ret == IRQ_HANDLED || epintr || usbintr)
351 dsps_writel(reg_base, wrp->eoi, 1);
352
353 /* Poll for ID change */
354 if (is_otg_enabled(musb) && musb->xceiv->state == OTG_STATE_B_IDLE)
355 mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ);
356
357 spin_unlock_irqrestore(&musb->lock, flags);
358
359 return ret;
360}
361
362static int dsps_musb_init(struct musb *musb)
363{
364 struct device *dev = musb->controller;
365 struct musb_hdrc_platform_data *plat = dev->platform_data;
366 struct platform_device *pdev = to_platform_device(dev->parent);
367 struct dsps_glue *glue = platform_get_drvdata(pdev);
368 const struct dsps_musb_wrapper *wrp = glue->wrp;
369 struct omap_musb_board_data *data = plat->board_data;
370 void __iomem *reg_base = musb->ctrl_base;
371 u32 rev, val;
372 int status;
373
374 /* mentor core register starts at offset of 0x400 from musb base */
375 musb->mregs += wrp->musb_core_offset;
376
377 /* NOP driver needs change if supporting dual instance */
378 usb_nop_xceiv_register();
379 musb->xceiv = usb_get_transceiver();
380 if (!musb->xceiv)
381 return -ENODEV;
382
383 /* Returns zero if e.g. not clocked */
384 rev = dsps_readl(reg_base, wrp->revision);
385 if (!rev) {
386 status = -ENODEV;
387 goto err0;
388 }
389
390 if (is_host_enabled(musb))
391 setup_timer(&glue->timer, otg_timer, (unsigned long) musb);
392
393 /* Reset the musb */
394 dsps_writel(reg_base, wrp->control, (1 << wrp->reset));
395
396 /* Start the on-chip PHY and its PLL. */
397 if (data->set_phy_power)
398 data->set_phy_power(1);
399
400 musb->isr = dsps_interrupt;
401
402 /* reset the otgdisable bit, needed for host mode to work */
403 val = dsps_readl(reg_base, wrp->phy_utmi);
404 val &= ~(1 << wrp->otg_disable);
405 dsps_writel(musb->ctrl_base, wrp->phy_utmi, val);
406
407 /* clear level interrupt */
408 dsps_writel(reg_base, wrp->eoi, 0);
409
410 return 0;
411err0:
412 usb_put_transceiver(musb->xceiv);
413 usb_nop_xceiv_unregister();
414 return status;
415}
416
417static int dsps_musb_exit(struct musb *musb)
418{
419 struct device *dev = musb->controller;
420 struct musb_hdrc_platform_data *plat = dev->platform_data;
421 struct omap_musb_board_data *data = plat->board_data;
422 struct platform_device *pdev = to_platform_device(dev->parent);
423 struct dsps_glue *glue = platform_get_drvdata(pdev);
424
425 if (is_host_enabled(musb))
426 del_timer_sync(&glue->timer);
427
428 /* Shutdown the on-chip PHY and its PLL. */
429 if (data->set_phy_power)
430 data->set_phy_power(0);
431
432 /* NOP driver needs change if supporting dual instance */
433 usb_put_transceiver(musb->xceiv);
434 usb_nop_xceiv_unregister();
435
436 return 0;
437}
438
439static struct musb_platform_ops dsps_ops = {
440 .init = dsps_musb_init,
441 .exit = dsps_musb_exit,
442
443 .enable = dsps_musb_enable,
444 .disable = dsps_musb_disable,
445
446 .try_idle = dsps_musb_try_idle,
447};
448
449static u64 musb_dmamask = DMA_BIT_MASK(32);
450
451static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
452{
453 struct device *dev = glue->dev;
454 struct platform_device *pdev = to_platform_device(dev);
455 struct musb_hdrc_platform_data *pdata = dev->platform_data;
456 struct platform_device *musb;
457 struct resource *res;
458 struct resource resources[2];
459 char res_name[10];
460 int ret;
461
462 /* get memory resource */
463 sprintf(res_name, "musb%d", id);
464 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, res_name);
465 if (!res) {
466 dev_err(dev, "%s get mem resource failed\n", res_name);
467 ret = -ENODEV;
468 goto err0;
469 }
470 res->parent = NULL;
471 resources[0] = *res;
472
473 /* get irq resource */
474 sprintf(res_name, "musb%d-irq", id);
475 res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, res_name);
476 if (!res) {
477 dev_err(dev, "%s get irq resource failed\n", res_name);
478 ret = -ENODEV;
479 goto err0;
480 }
481 strcpy((u8 *)res->name, "mc");
482 res->parent = NULL;
483 resources[1] = *res;
484
485 /* allocate the child platform device */
486 musb = platform_device_alloc("musb-hdrc", -1);
487 if (!musb) {
488 dev_err(dev, "failed to allocate musb device\n");
489 ret = -ENOMEM;
490 goto err0;
491 }
492
493 musb->dev.parent = dev;
494 musb->dev.dma_mask = &musb_dmamask;
495 musb->dev.coherent_dma_mask = musb_dmamask;
496
497 glue->musb = musb;
498
499 pdata->platform_ops = &dsps_ops;
500
501 ret = platform_device_add_resources(musb, resources, 2);
502 if (ret) {
503 dev_err(dev, "failed to add resources\n");
504 goto err1;
505 }
506
507 ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
508 if (ret) {
509 dev_err(dev, "failed to add platform_data\n");
510 goto err1;
511 }
512
513 ret = platform_device_add(musb);
514 if (ret) {
515 dev_err(dev, "failed to register musb device\n");
516 goto err1;
517 }
518
519 return 0;
520
521err1:
522 platform_device_put(musb);
523err0:
524 return ret;
525}
526
527static void __devexit dsps_delete_musb_pdev(struct dsps_glue *glue)
528{
529 platform_device_del(glue->musb);
530 platform_device_put(glue->musb);
531}
532
533static int __devinit dsps_probe(struct platform_device *pdev)
534{
535 const struct platform_device_id *id = platform_get_device_id(pdev);
536 const struct dsps_musb_wrapper *wrp =
537 (struct dsps_musb_wrapper *)id->driver_data;
538 struct dsps_glue *glue;
539 struct resource *iomem;
540 int ret;
541
542 /* allocate glue */
543 glue = kzalloc(sizeof(*glue), GFP_KERNEL);
544 if (!glue) {
545 dev_err(&pdev->dev, "unable to allocate glue memory\n");
546 ret = -ENOMEM;
547 goto err0;
548 }
549
550 /* get memory resource */
551 iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
552 if (!iomem) {
553 dev_err(&pdev->dev, "failed to get usbss mem resourse\n");
554 ret = -ENODEV;
555 goto err1;
556 }
557
558 glue->dev = &pdev->dev;
559
560 glue->wrp = kmemdup(wrp, sizeof(*wrp), GFP_KERNEL);
561 if (!glue->wrp) {
562 dev_err(&pdev->dev, "failed to duplicate wrapper struct memory\n");
563 ret = -ENOMEM;
564 goto err1;
565 }
566 platform_set_drvdata(pdev, glue);
567
568 /* create the child platform device for first instances of musb */
569 ret = dsps_create_musb_pdev(glue, 0);
570 if (ret != 0) {
571 dev_err(&pdev->dev, "failed to create child pdev\n");
572 goto err2;
573 }
574
575 /* enable the usbss clocks */
576 pm_runtime_enable(&pdev->dev);
577
578 ret = pm_runtime_get_sync(&pdev->dev);
579 if (ret < 0) {
580 dev_err(&pdev->dev, "pm_runtime_get_sync FAILED");
581 goto err3;
582 }
583
584 return 0;
585
586err3:
587 pm_runtime_disable(&pdev->dev);
588err2:
589 kfree(glue->wrp);
590err1:
591 kfree(glue);
592err0:
593 return ret;
594}
595static int __devexit dsps_remove(struct platform_device *pdev)
596{
597 struct dsps_glue *glue = platform_get_drvdata(pdev);
598
599 /* delete the child platform device */
600 dsps_delete_musb_pdev(glue);
601
602 /* disable usbss clocks */
603 pm_runtime_put(&pdev->dev);
604 pm_runtime_disable(&pdev->dev);
605 kfree(glue->wrp);
606 kfree(glue);
607 return 0;
608}
609
610#ifdef CONFIG_PM_SLEEP
611static int dsps_suspend(struct device *dev)
612{
613 struct musb_hdrc_platform_data *plat = dev->platform_data;
614 struct omap_musb_board_data *data = plat->board_data;
615
616 /* Shutdown the on-chip PHY and its PLL. */
617 if (data->set_phy_power)
618 data->set_phy_power(0);
619
620 return 0;
621}
622
623static int dsps_resume(struct device *dev)
624{
625 struct musb_hdrc_platform_data *plat = dev->platform_data;
626 struct omap_musb_board_data *data = plat->board_data;
627
628 /* Start the on-chip PHY and its PLL. */
629 if (data->set_phy_power)
630 data->set_phy_power(1);
631
632 return 0;
633}
634#endif
635
636static SIMPLE_DEV_PM_OPS(dsps_pm_ops, dsps_suspend, dsps_resume);
637
638static const struct dsps_musb_wrapper ti81xx_driver_data __devinitconst = {
639 .revision = 0x00,
640 .control = 0x14,
641 .status = 0x18,
642 .eoi = 0x24,
643 .epintr_set = 0x38,
644 .epintr_clear = 0x40,
645 .epintr_status = 0x30,
646 .coreintr_set = 0x3c,
647 .coreintr_clear = 0x44,
648 .coreintr_status = 0x34,
649 .phy_utmi = 0xe0,
650 .mode = 0xe8,
651 .reset = 0,
652 .otg_disable = 21,
653 .iddig = 8,
654 .usb_shift = 0,
655 .usb_mask = 0x1ff,
656 .usb_bitmap = (0x1ff << 0),
657 .drvvbus = 8,
658 .txep_shift = 0,
659 .txep_mask = 0xffff,
660 .txep_bitmap = (0xffff << 0),
661 .rxep_shift = 16,
662 .rxep_mask = 0xfffe,
663 .rxep_bitmap = (0xfffe << 16),
664 .musb_core_offset = 0x400,
665 .poll_seconds = 2,
666};
667
668static const struct platform_device_id musb_dsps_id_table[] __devinitconst = {
669 {
670 .name = "musb-ti81xx",
671 .driver_data = (kernel_ulong_t) &ti81xx_driver_data,
672 },
673 { }, /* Terminating Entry */
674};
675MODULE_DEVICE_TABLE(platform, musb_dsps_id_table);
676
677static const struct of_device_id musb_dsps_of_match[] __devinitconst = {
678 { .compatible = "musb-ti81xx", },
679 { .compatible = "ti,ti81xx-musb", },
680 { .compatible = "ti,am335x-musb", },
681 { },
682};
683MODULE_DEVICE_TABLE(of, musb_dsps_of_match);
684
685static struct platform_driver dsps_usbss_driver = {
686 .probe = dsps_probe,
687 .remove = __devexit_p(dsps_remove),
688 .driver = {
689 .name = "musb-dsps",
690 .pm = &dsps_pm_ops,
691 .of_match_table = musb_dsps_of_match,
692 },
693 .id_table = musb_dsps_id_table,
694};
695
696MODULE_DESCRIPTION("TI DSPS MUSB Glue Layer");
697MODULE_AUTHOR("Ravi B <ravibabu@ti.com>");
698MODULE_AUTHOR("Ajay Kumar Gupta <ajay.gupta@ti.com>");
699MODULE_LICENSE("GPL v2");
700
701static int __init dsps_init(void)
702{
703 return platform_driver_register(&dsps_usbss_driver);
704}
705subsys_initcall(dsps_init);
706
707static void __exit dsps_exit(void)
708{
709 platform_driver_unregister(&dsps_usbss_driver);
710}
711module_exit(dsps_exit);
diff --git a/drivers/usb/otg/gpio_vbus.c b/drivers/usb/otg/gpio_vbus.c
index a0a2178974fe..bde6298a9693 100644
--- a/drivers/usb/otg/gpio_vbus.c
+++ b/drivers/usb/otg/gpio_vbus.c
@@ -37,7 +37,9 @@ struct gpio_vbus_data {
37 struct regulator *vbus_draw; 37 struct regulator *vbus_draw;
38 int vbus_draw_enabled; 38 int vbus_draw_enabled;
39 unsigned mA; 39 unsigned mA;
40 struct work_struct work; 40 struct delayed_work work;
41 int vbus;
42 int irq;
41}; 43};
42 44
43 45
@@ -51,8 +53,7 @@ struct gpio_vbus_data {
51 * edges might be workable. 53 * edges might be workable.
52 */ 54 */
53#define VBUS_IRQ_FLAGS \ 55#define VBUS_IRQ_FLAGS \
54 ( IRQF_SAMPLE_RANDOM | IRQF_SHARED \ 56 (IRQF_SHARED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)
55 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING )
56 57
57 58
58/* interface to regulator framework */ 59/* interface to regulator framework */
@@ -94,20 +95,26 @@ static int is_vbus_powered(struct gpio_vbus_mach_info *pdata)
94static void gpio_vbus_work(struct work_struct *work) 95static void gpio_vbus_work(struct work_struct *work)
95{ 96{
96 struct gpio_vbus_data *gpio_vbus = 97 struct gpio_vbus_data *gpio_vbus =
97 container_of(work, struct gpio_vbus_data, work); 98 container_of(work, struct gpio_vbus_data, work.work);
98 struct gpio_vbus_mach_info *pdata = gpio_vbus->dev->platform_data; 99 struct gpio_vbus_mach_info *pdata = gpio_vbus->dev->platform_data;
99 int gpio, status; 100 int gpio, status, vbus;
100 101
101 if (!gpio_vbus->phy.otg->gadget) 102 if (!gpio_vbus->phy.otg->gadget)
102 return; 103 return;
103 104
105 vbus = is_vbus_powered(pdata);
106 if ((vbus ^ gpio_vbus->vbus) == 0)
107 return;
108 gpio_vbus->vbus = vbus;
109
104 /* Peripheral controllers which manage the pullup themselves won't have 110 /* Peripheral controllers which manage the pullup themselves won't have
105 * gpio_pullup configured here. If it's configured here, we'll do what 111 * gpio_pullup configured here. If it's configured here, we'll do what
106 * isp1301_omap::b_peripheral() does and enable the pullup here... although 112 * isp1301_omap::b_peripheral() does and enable the pullup here... although
107 * that may complicate usb_gadget_{,dis}connect() support. 113 * that may complicate usb_gadget_{,dis}connect() support.
108 */ 114 */
109 gpio = pdata->gpio_pullup; 115 gpio = pdata->gpio_pullup;
110 if (is_vbus_powered(pdata)) { 116
117 if (vbus) {
111 status = USB_EVENT_VBUS; 118 status = USB_EVENT_VBUS;
112 gpio_vbus->phy.state = OTG_STATE_B_PERIPHERAL; 119 gpio_vbus->phy.state = OTG_STATE_B_PERIPHERAL;
113 gpio_vbus->phy.last_event = status; 120 gpio_vbus->phy.last_event = status;
@@ -152,7 +159,7 @@ static irqreturn_t gpio_vbus_irq(int irq, void *data)
152 otg->gadget ? otg->gadget->name : "none"); 159 otg->gadget ? otg->gadget->name : "none");
153 160
154 if (otg->gadget) 161 if (otg->gadget)
155 schedule_work(&gpio_vbus->work); 162 schedule_delayed_work(&gpio_vbus->work, msecs_to_jiffies(100));
156 163
157 return IRQ_HANDLED; 164 return IRQ_HANDLED;
158} 165}
@@ -166,12 +173,11 @@ static int gpio_vbus_set_peripheral(struct usb_otg *otg,
166 struct gpio_vbus_data *gpio_vbus; 173 struct gpio_vbus_data *gpio_vbus;
167 struct gpio_vbus_mach_info *pdata; 174 struct gpio_vbus_mach_info *pdata;
168 struct platform_device *pdev; 175 struct platform_device *pdev;
169 int gpio, irq; 176 int gpio;
170 177
171 gpio_vbus = container_of(otg->phy, struct gpio_vbus_data, phy); 178 gpio_vbus = container_of(otg->phy, struct gpio_vbus_data, phy);
172 pdev = to_platform_device(gpio_vbus->dev); 179 pdev = to_platform_device(gpio_vbus->dev);
173 pdata = gpio_vbus->dev->platform_data; 180 pdata = gpio_vbus->dev->platform_data;
174 irq = gpio_to_irq(pdata->gpio_vbus);
175 gpio = pdata->gpio_pullup; 181 gpio = pdata->gpio_pullup;
176 182
177 if (!gadget) { 183 if (!gadget) {
@@ -195,7 +201,8 @@ static int gpio_vbus_set_peripheral(struct usb_otg *otg,
195 dev_dbg(&pdev->dev, "registered gadget '%s'\n", gadget->name); 201 dev_dbg(&pdev->dev, "registered gadget '%s'\n", gadget->name);
196 202
197 /* initialize connection state */ 203 /* initialize connection state */
198 gpio_vbus_irq(irq, pdev); 204 gpio_vbus->vbus = 0; /* start with disconnected */
205 gpio_vbus_irq(gpio_vbus->irq, pdev);
199 return 0; 206 return 0;
200} 207}
201 208
@@ -235,6 +242,7 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
235 struct gpio_vbus_data *gpio_vbus; 242 struct gpio_vbus_data *gpio_vbus;
236 struct resource *res; 243 struct resource *res;
237 int err, gpio, irq; 244 int err, gpio, irq;
245 unsigned long irqflags;
238 246
239 if (!pdata || !gpio_is_valid(pdata->gpio_vbus)) 247 if (!pdata || !gpio_is_valid(pdata->gpio_vbus))
240 return -EINVAL; 248 return -EINVAL;
@@ -271,10 +279,13 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
271 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 279 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
272 if (res) { 280 if (res) {
273 irq = res->start; 281 irq = res->start;
274 res->flags &= IRQF_TRIGGER_MASK; 282 irqflags = (res->flags & IRQF_TRIGGER_MASK) | IRQF_SHARED;
275 res->flags |= IRQF_SAMPLE_RANDOM | IRQF_SHARED; 283 } else {
276 } else
277 irq = gpio_to_irq(gpio); 284 irq = gpio_to_irq(gpio);
285 irqflags = VBUS_IRQ_FLAGS;
286 }
287
288 gpio_vbus->irq = irq;
278 289
279 /* if data line pullup is in use, initialize it to "not pulling up" */ 290 /* if data line pullup is in use, initialize it to "not pulling up" */
280 gpio = pdata->gpio_pullup; 291 gpio = pdata->gpio_pullup;
@@ -290,8 +301,7 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
290 gpio_direction_output(gpio, pdata->gpio_pullup_inverted); 301 gpio_direction_output(gpio, pdata->gpio_pullup_inverted);
291 } 302 }
292 303
293 err = request_irq(irq, gpio_vbus_irq, VBUS_IRQ_FLAGS, 304 err = request_irq(irq, gpio_vbus_irq, irqflags, "vbus_detect", pdev);
294 "vbus_detect", pdev);
295 if (err) { 305 if (err) {
296 dev_err(&pdev->dev, "can't request irq %i, err: %d\n", 306 dev_err(&pdev->dev, "can't request irq %i, err: %d\n",
297 irq, err); 307 irq, err);
@@ -300,7 +310,7 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
300 310
301 ATOMIC_INIT_NOTIFIER_HEAD(&gpio_vbus->phy.notifier); 311 ATOMIC_INIT_NOTIFIER_HEAD(&gpio_vbus->phy.notifier);
302 312
303 INIT_WORK(&gpio_vbus->work, gpio_vbus_work); 313 INIT_DELAYED_WORK(&gpio_vbus->work, gpio_vbus_work);
304 314
305 gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw"); 315 gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
306 if (IS_ERR(gpio_vbus->vbus_draw)) { 316 if (IS_ERR(gpio_vbus->vbus_draw)) {
@@ -317,9 +327,12 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
317 goto err_otg; 327 goto err_otg;
318 } 328 }
319 329
330 device_init_wakeup(&pdev->dev, pdata->wakeup);
331
320 return 0; 332 return 0;
321err_otg: 333err_otg:
322 free_irq(irq, &pdev->dev); 334 regulator_put(gpio_vbus->vbus_draw);
335 free_irq(irq, pdev);
323err_irq: 336err_irq:
324 if (gpio_is_valid(pdata->gpio_pullup)) 337 if (gpio_is_valid(pdata->gpio_pullup))
325 gpio_free(pdata->gpio_pullup); 338 gpio_free(pdata->gpio_pullup);
@@ -337,11 +350,13 @@ static int __exit gpio_vbus_remove(struct platform_device *pdev)
337 struct gpio_vbus_mach_info *pdata = pdev->dev.platform_data; 350 struct gpio_vbus_mach_info *pdata = pdev->dev.platform_data;
338 int gpio = pdata->gpio_vbus; 351 int gpio = pdata->gpio_vbus;
339 352
353 device_init_wakeup(&pdev->dev, 0);
354 cancel_delayed_work_sync(&gpio_vbus->work);
340 regulator_put(gpio_vbus->vbus_draw); 355 regulator_put(gpio_vbus->vbus_draw);
341 356
342 usb_set_transceiver(NULL); 357 usb_set_transceiver(NULL);
343 358
344 free_irq(gpio_to_irq(gpio), &pdev->dev); 359 free_irq(gpio_vbus->irq, pdev);
345 if (gpio_is_valid(pdata->gpio_pullup)) 360 if (gpio_is_valid(pdata->gpio_pullup))
346 gpio_free(pdata->gpio_pullup); 361 gpio_free(pdata->gpio_pullup);
347 gpio_free(gpio); 362 gpio_free(gpio);
@@ -352,6 +367,33 @@ static int __exit gpio_vbus_remove(struct platform_device *pdev)
352 return 0; 367 return 0;
353} 368}
354 369
370#ifdef CONFIG_PM
371static int gpio_vbus_pm_suspend(struct device *dev)
372{
373 struct gpio_vbus_data *gpio_vbus = dev_get_drvdata(dev);
374
375 if (device_may_wakeup(dev))
376 enable_irq_wake(gpio_vbus->irq);
377
378 return 0;
379}
380
381static int gpio_vbus_pm_resume(struct device *dev)
382{
383 struct gpio_vbus_data *gpio_vbus = dev_get_drvdata(dev);
384
385 if (device_may_wakeup(dev))
386 disable_irq_wake(gpio_vbus->irq);
387
388 return 0;
389}
390
391static const struct dev_pm_ops gpio_vbus_dev_pm_ops = {
392 .suspend = gpio_vbus_pm_suspend,
393 .resume = gpio_vbus_pm_resume,
394};
395#endif
396
355/* NOTE: the gpio-vbus device may *NOT* be hotplugged */ 397/* NOTE: the gpio-vbus device may *NOT* be hotplugged */
356 398
357MODULE_ALIAS("platform:gpio-vbus"); 399MODULE_ALIAS("platform:gpio-vbus");
@@ -360,6 +402,9 @@ static struct platform_driver gpio_vbus_driver = {
360 .driver = { 402 .driver = {
361 .name = "gpio-vbus", 403 .name = "gpio-vbus",
362 .owner = THIS_MODULE, 404 .owner = THIS_MODULE,
405#ifdef CONFIG_PM
406 .pm = &gpio_vbus_dev_pm_ops,
407#endif
363 }, 408 },
364 .remove = __exit_p(gpio_vbus_remove), 409 .remove = __exit_p(gpio_vbus_remove),
365}; 410};
diff --git a/drivers/usb/otg/twl6030-usb.c b/drivers/usb/otg/twl6030-usb.c
index e3fa387ca81e..d2a9a8e691b9 100644
--- a/drivers/usb/otg/twl6030-usb.c
+++ b/drivers/usb/otg/twl6030-usb.c
@@ -455,7 +455,7 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
455 455
456 twl->irq_enabled = true; 456 twl->irq_enabled = true;
457 status = request_threaded_irq(twl->irq1, NULL, twl6030_usbotg_irq, 457 status = request_threaded_irq(twl->irq1, NULL, twl6030_usbotg_irq,
458 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, 458 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING | IRQF_ONESHOT,
459 "twl6030_usb", twl); 459 "twl6030_usb", twl);
460 if (status < 0) { 460 if (status < 0) {
461 dev_err(&pdev->dev, "can't get IRQ %d, err %d\n", 461 dev_err(&pdev->dev, "can't get IRQ %d, err %d\n",
@@ -467,7 +467,7 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
467 } 467 }
468 468
469 status = request_threaded_irq(twl->irq2, NULL, twl6030_usb_irq, 469 status = request_threaded_irq(twl->irq2, NULL, twl6030_usb_irq,
470 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, 470 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING | IRQF_ONESHOT,
471 "twl6030_usb", twl); 471 "twl6030_usb", twl);
472 if (status < 0) { 472 if (status < 0) {
473 dev_err(&pdev->dev, "can't get IRQ %d, err %d\n", 473 dev_err(&pdev->dev, "can't get IRQ %d, err %d\n",
diff --git a/drivers/usb/phy/Kconfig b/drivers/usb/phy/Kconfig
new file mode 100644
index 000000000000..3cfabcba7447
--- /dev/null
+++ b/drivers/usb/phy/Kconfig
@@ -0,0 +1,17 @@
1#
2# Physical Layer USB driver configuration
3#
4comment "USB Physical Layer drivers"
5 depends on USB
6
7config USB_ISP1301
8 tristate "NXP ISP1301 USB transceiver support"
9 depends on USB
10 depends on I2C
11 help
12 Say Y here to add support for the NXP ISP1301 USB transceiver driver.
13 This chip is typically used as USB transceiver for USB host, gadget
14 and OTG drivers (to be selected separately).
15
16 To compile this driver as a module, choose M here: the
17 module will be called isp1301.
diff --git a/drivers/usb/phy/Makefile b/drivers/usb/phy/Makefile
new file mode 100644
index 000000000000..eca095b1a890
--- /dev/null
+++ b/drivers/usb/phy/Makefile
@@ -0,0 +1,7 @@
1#
2# Makefile for physical layer USB drivers
3#
4
5ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG
6
7obj-$(CONFIG_USB_ISP1301) += isp1301.o
diff --git a/drivers/usb/phy/isp1301.c b/drivers/usb/phy/isp1301.c
new file mode 100644
index 000000000000..b19f4932a037
--- /dev/null
+++ b/drivers/usb/phy/isp1301.c
@@ -0,0 +1,77 @@
1/*
2 * NXP ISP1301 USB transceiver driver
3 *
4 * Copyright (C) 2012 Roland Stigge
5 *
6 * Author: Roland Stigge <stigge@antcom.de>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/module.h>
14#include <linux/i2c.h>
15
16#define DRV_NAME "isp1301"
17
18#define ISP1301_I2C_ADDR 0x2C
19
20static const unsigned short normal_i2c[] = {
21 ISP1301_I2C_ADDR, ISP1301_I2C_ADDR + 1, I2C_CLIENT_END
22};
23
24static const struct i2c_device_id isp1301_id[] = {
25 { "isp1301", 0 },
26 { }
27};
28
29static struct i2c_client *isp1301_i2c_client;
30
31static int isp1301_probe(struct i2c_client *client,
32 const struct i2c_device_id *i2c_id)
33{
34 isp1301_i2c_client = client;
35 return 0;
36}
37
38static int isp1301_remove(struct i2c_client *client)
39{
40 return 0;
41}
42
43static struct i2c_driver isp1301_driver = {
44 .driver = {
45 .name = DRV_NAME,
46 },
47 .probe = isp1301_probe,
48 .remove = isp1301_remove,
49 .id_table = isp1301_id,
50};
51
52module_i2c_driver(isp1301_driver);
53
54static int match(struct device *dev, void *data)
55{
56 struct device_node *node = (struct device_node *)data;
57 return (dev->of_node == node) &&
58 (dev->driver == &isp1301_driver.driver);
59}
60
61struct i2c_client *isp1301_get_client(struct device_node *node)
62{
63 if (node) { /* reference of ISP1301 I2C node via DT */
64 struct device *dev = bus_find_device(&i2c_bus_type, NULL,
65 node, match);
66 if (!dev)
67 return NULL;
68 return to_i2c_client(dev);
69 } else { /* non-DT: only one ISP1301 chip supported */
70 return isp1301_i2c_client;
71 }
72}
73EXPORT_SYMBOL_GPL(isp1301_get_client);
74
75MODULE_AUTHOR("Roland Stigge <stigge@antcom.de>");
76MODULE_DESCRIPTION("NXP ISP1301 USB transceiver driver");
77MODULE_LICENSE("GPL");
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
index 00bd2a5e0362..28478ce26c34 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -55,6 +55,7 @@ struct usbhsg_gpriv {
55#define USBHSG_STATUS_STARTED (1 << 0) 55#define USBHSG_STATUS_STARTED (1 << 0)
56#define USBHSG_STATUS_REGISTERD (1 << 1) 56#define USBHSG_STATUS_REGISTERD (1 << 1)
57#define USBHSG_STATUS_WEDGE (1 << 2) 57#define USBHSG_STATUS_WEDGE (1 << 2)
58#define USBHSG_STATUS_SELF_POWERED (1 << 3)
58}; 59};
59 60
60struct usbhsg_recip_handle { 61struct usbhsg_recip_handle {
@@ -333,7 +334,10 @@ static int usbhsg_recip_handler_std_get_device(struct usbhs_priv *priv,
333 struct usb_ctrlrequest *ctrl) 334 struct usb_ctrlrequest *ctrl)
334{ 335{
335 struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep); 336 struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
336 unsigned short status = 1 << USB_DEVICE_SELF_POWERED; 337 unsigned short status = 0;
338
339 if (usbhsg_status_has(gpriv, USBHSG_STATUS_SELF_POWERED))
340 status = 1 << USB_DEVICE_SELF_POWERED;
337 341
338 __usbhsg_recip_send_status(gpriv, status); 342 __usbhsg_recip_send_status(gpriv, status);
339 343
@@ -879,8 +883,21 @@ static int usbhsg_get_frame(struct usb_gadget *gadget)
879 return usbhs_frame_get_num(priv); 883 return usbhs_frame_get_num(priv);
880} 884}
881 885
886static int usbhsg_set_selfpowered(struct usb_gadget *gadget, int is_self)
887{
888 struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
889
890 if (is_self)
891 usbhsg_status_set(gpriv, USBHSG_STATUS_SELF_POWERED);
892 else
893 usbhsg_status_clr(gpriv, USBHSG_STATUS_SELF_POWERED);
894
895 return 0;
896}
897
882static struct usb_gadget_ops usbhsg_gadget_ops = { 898static struct usb_gadget_ops usbhsg_gadget_ops = {
883 .get_frame = usbhsg_get_frame, 899 .get_frame = usbhsg_get_frame,
900 .set_selfpowered = usbhsg_set_selfpowered,
884 .udc_start = usbhsg_gadget_start, 901 .udc_start = usbhsg_gadget_start,
885 .udc_stop = usbhsg_gadget_stop, 902 .udc_stop = usbhsg_gadget_stop,
886}; 903};
diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
index 7141d6599060..325d2910f9f9 100644
--- a/drivers/usb/serial/Kconfig
+++ b/drivers/usb/serial/Kconfig
@@ -669,6 +669,15 @@ config USB_SERIAL_SSU100
669 To compile this driver as a module, choose M here: the 669 To compile this driver as a module, choose M here: the
670 module will be called ssu100. 670 module will be called ssu100.
671 671
672config USB_SERIAL_QT2
673 tristate "USB Quatech Serial Driver for USB 2 devices"
674 help
675 Say Y here if you want to use the Quatech USB 2
676 serial adapters.
677
678 To compile this driver as a module, choose M here: the
679 module will be called quatech-serial.
680
672config USB_SERIAL_DEBUG 681config USB_SERIAL_DEBUG
673 tristate "USB Debugging Device" 682 tristate "USB Debugging Device"
674 help 683 help
diff --git a/drivers/usb/serial/Makefile b/drivers/usb/serial/Makefile
index 07f198ee0486..1dc483a8bfc7 100644
--- a/drivers/usb/serial/Makefile
+++ b/drivers/usb/serial/Makefile
@@ -49,6 +49,7 @@ obj-$(CONFIG_USB_SERIAL_OTI6858) += oti6858.o
49obj-$(CONFIG_USB_SERIAL_PL2303) += pl2303.o 49obj-$(CONFIG_USB_SERIAL_PL2303) += pl2303.o
50obj-$(CONFIG_USB_SERIAL_QCAUX) += qcaux.o 50obj-$(CONFIG_USB_SERIAL_QCAUX) += qcaux.o
51obj-$(CONFIG_USB_SERIAL_QUALCOMM) += qcserial.o 51obj-$(CONFIG_USB_SERIAL_QUALCOMM) += qcserial.o
52obj-$(CONFIG_USB_SERIAL_QT2) += quatech2.o
52obj-$(CONFIG_USB_SERIAL_SAFE) += safe_serial.o 53obj-$(CONFIG_USB_SERIAL_SAFE) += safe_serial.o
53obj-$(CONFIG_USB_SERIAL_SIEMENS_MPI) += siemens_mpi.o 54obj-$(CONFIG_USB_SERIAL_SIEMENS_MPI) += siemens_mpi.o
54obj-$(CONFIG_USB_SERIAL_SIERRAWIRELESS) += sierra.o 55obj-$(CONFIG_USB_SERIAL_SIERRAWIRELESS) += sierra.o
diff --git a/drivers/usb/serial/aircable.c b/drivers/usb/serial/aircable.c
index eec4fb9a35c1..d634e6635632 100644
--- a/drivers/usb/serial/aircable.c
+++ b/drivers/usb/serial/aircable.c
@@ -111,13 +111,14 @@ static int aircable_probe(struct usb_serial *serial,
111 for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) { 111 for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
112 endpoint = &iface_desc->endpoint[i].desc; 112 endpoint = &iface_desc->endpoint[i].desc;
113 if (usb_endpoint_is_bulk_out(endpoint)) { 113 if (usb_endpoint_is_bulk_out(endpoint)) {
114 dbg("found bulk out on endpoint %d", i); 114 dev_dbg(&serial->dev->dev,
115 "found bulk out on endpoint %d\n", i);
115 ++num_bulk_out; 116 ++num_bulk_out;
116 } 117 }
117 } 118 }
118 119
119 if (num_bulk_out == 0) { 120 if (num_bulk_out == 0) {
120 dbg("Invalid interface, discarding"); 121 dev_dbg(&serial->dev->dev, "Invalid interface, discarding\n");
121 return -ENODEV; 122 return -ENODEV;
122 } 123 }
123 124
@@ -133,7 +134,7 @@ static int aircable_process_packet(struct tty_struct *tty,
133 packet += HCI_HEADER_LENGTH; 134 packet += HCI_HEADER_LENGTH;
134 } 135 }
135 if (len <= 0) { 136 if (len <= 0) {
136 dbg("%s - malformed packet", __func__); 137 dev_dbg(&port->dev, "%s - malformed packet\n", __func__);
137 return 0; 138 return 0;
138 } 139 }
139 140
@@ -170,13 +171,6 @@ static void aircable_process_read_urb(struct urb *urb)
170 tty_kref_put(tty); 171 tty_kref_put(tty);
171} 172}
172 173
173static struct usb_driver aircable_driver = {
174 .name = "aircable",
175 .probe = usb_serial_probe,
176 .disconnect = usb_serial_disconnect,
177 .id_table = id_table,
178};
179
180static struct usb_serial_driver aircable_device = { 174static struct usb_serial_driver aircable_device = {
181 .driver = { 175 .driver = {
182 .owner = THIS_MODULE, 176 .owner = THIS_MODULE,
@@ -196,7 +190,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
196 &aircable_device, NULL 190 &aircable_device, NULL
197}; 191};
198 192
199module_usb_serial_driver(aircable_driver, serial_drivers); 193module_usb_serial_driver(serial_drivers, id_table);
200 194
201MODULE_AUTHOR(DRIVER_AUTHOR); 195MODULE_AUTHOR(DRIVER_AUTHOR);
202MODULE_DESCRIPTION(DRIVER_DESC); 196MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/ark3116.c b/drivers/usb/serial/ark3116.c
index f99f47100dd8..f8ce97d8b0ad 100644
--- a/drivers/usb/serial/ark3116.c
+++ b/drivers/usb/serial/ark3116.c
@@ -265,7 +265,7 @@ static void ark3116_set_termios(struct tty_struct *tty,
265 hcr = (cflag & CRTSCTS) ? 0x03 : 0x00; 265 hcr = (cflag & CRTSCTS) ? 0x03 : 0x00;
266 266
267 /* calc baudrate */ 267 /* calc baudrate */
268 dbg("%s - setting bps to %d", __func__, bps); 268 dev_dbg(&port->dev, "%s - setting bps to %d\n", __func__, bps);
269 eval = 0; 269 eval = 0;
270 switch (bps) { 270 switch (bps) {
271 case 0: 271 case 0:
@@ -292,8 +292,8 @@ static void ark3116_set_termios(struct tty_struct *tty,
292 /* keep old LCR_SBC bit */ 292 /* keep old LCR_SBC bit */
293 lcr |= (priv->lcr & UART_LCR_SBC); 293 lcr |= (priv->lcr & UART_LCR_SBC);
294 294
295 dbg("%s - setting hcr:0x%02x,lcr:0x%02x,quot:%d", 295 dev_dbg(&port->dev, "%s - setting hcr:0x%02x,lcr:0x%02x,quot:%d\n",
296 __func__, hcr, lcr, quot); 296 __func__, hcr, lcr, quot);
297 297
298 /* handshake control */ 298 /* handshake control */
299 if (priv->hcr != hcr) { 299 if (priv->hcr != hcr) {
@@ -375,8 +375,9 @@ static int ark3116_open(struct tty_struct *tty, struct usb_serial_port *port)
375 375
376 result = usb_serial_generic_open(tty, port); 376 result = usb_serial_generic_open(tty, port);
377 if (result) { 377 if (result) {
378 dbg("%s - usb_serial_generic_open failed: %d", 378 dev_dbg(&port->dev,
379 __func__, result); 379 "%s - usb_serial_generic_open failed: %d\n",
380 __func__, result);
380 goto err_out; 381 goto err_out;
381 } 382 }
382 383
@@ -622,24 +623,26 @@ static void ark3116_read_int_callback(struct urb *urb)
622 case -ENOENT: 623 case -ENOENT:
623 case -ESHUTDOWN: 624 case -ESHUTDOWN:
624 /* this urb is terminated, clean up */ 625 /* this urb is terminated, clean up */
625 dbg("%s - urb shutting down with status: %d", 626 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
626 __func__, status); 627 __func__, status);
627 return; 628 return;
628 default: 629 default:
629 dbg("%s - nonzero urb status received: %d", 630 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
630 __func__, status); 631 __func__, status);
631 break; 632 break;
632 case 0: /* success */ 633 case 0: /* success */
633 /* discovered this by trail and error... */ 634 /* discovered this by trail and error... */
634 if ((urb->actual_length == 4) && (data[0] == 0xe8)) { 635 if ((urb->actual_length == 4) && (data[0] == 0xe8)) {
635 const __u8 id = data[1]&UART_IIR_ID; 636 const __u8 id = data[1]&UART_IIR_ID;
636 dbg("%s: iir=%02x", __func__, data[1]); 637 dev_dbg(&port->dev, "%s: iir=%02x\n", __func__, data[1]);
637 if (id == UART_IIR_MSI) { 638 if (id == UART_IIR_MSI) {
638 dbg("%s: msr=%02x", __func__, data[3]); 639 dev_dbg(&port->dev, "%s: msr=%02x\n",
640 __func__, data[3]);
639 ark3116_update_msr(port, data[3]); 641 ark3116_update_msr(port, data[3]);
640 break; 642 break;
641 } else if (id == UART_IIR_RLSI) { 643 } else if (id == UART_IIR_RLSI) {
642 dbg("%s: lsr=%02x", __func__, data[2]); 644 dev_dbg(&port->dev, "%s: lsr=%02x\n",
645 __func__, data[2]);
643 ark3116_update_lsr(port, data[2]); 646 ark3116_update_lsr(port, data[2]);
644 break; 647 break;
645 } 648 }
@@ -714,13 +717,6 @@ static void ark3116_process_read_urb(struct urb *urb)
714 tty_kref_put(tty); 717 tty_kref_put(tty);
715} 718}
716 719
717static struct usb_driver ark3116_driver = {
718 .name = "ark3116",
719 .probe = usb_serial_probe,
720 .disconnect = usb_serial_disconnect,
721 .id_table = id_table,
722};
723
724static struct usb_serial_driver ark3116_device = { 720static struct usb_serial_driver ark3116_device = {
725 .driver = { 721 .driver = {
726 .owner = THIS_MODULE, 722 .owner = THIS_MODULE,
@@ -747,7 +743,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
747 &ark3116_device, NULL 743 &ark3116_device, NULL
748}; 744};
749 745
750module_usb_serial_driver(ark3116_driver, serial_drivers); 746module_usb_serial_driver(serial_drivers, id_table);
751 747
752MODULE_LICENSE("GPL"); 748MODULE_LICENSE("GPL");
753 749
diff --git a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
index a52e0d2cec31..6b7365632951 100644
--- a/drivers/usb/serial/belkin_sa.c
+++ b/drivers/usb/serial/belkin_sa.c
@@ -2,17 +2,17 @@
2 * Belkin USB Serial Adapter Driver 2 * Belkin USB Serial Adapter Driver
3 * 3 *
4 * Copyright (C) 2000 William Greathouse (wgreathouse@smva.com) 4 * Copyright (C) 2000 William Greathouse (wgreathouse@smva.com)
5 * Copyright (C) 2000-2001 Greg Kroah-Hartman (greg@kroah.com) 5 * Copyright (C) 2000-2001 Greg Kroah-Hartman (greg@kroah.com)
6 * Copyright (C) 2010 Johan Hovold (jhovold@gmail.com) 6 * Copyright (C) 2010 Johan Hovold (jhovold@gmail.com)
7 * 7 *
8 * This program is largely derived from work by the linux-usb group 8 * This program is largely derived from work by the linux-usb group
9 * and associated source files. Please see the usb/serial files for 9 * and associated source files. Please see the usb/serial files for
10 * individual credits and copyrights. 10 * individual credits and copyrights.
11 * 11 *
12 * This program is free software; you can redistribute it and/or modify 12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by 13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or 14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version. 15 * (at your option) any later version.
16 * 16 *
17 * See Documentation/usb/usb-serial.txt for more information on using this 17 * See Documentation/usb/usb-serial.txt for more information on using this
18 * driver 18 * driver
@@ -62,7 +62,7 @@ static int belkin_sa_tiocmset(struct tty_struct *tty,
62 unsigned int set, unsigned int clear); 62 unsigned int set, unsigned int clear);
63 63
64 64
65static const struct usb_device_id id_table_combined[] = { 65static const struct usb_device_id id_table[] = {
66 { USB_DEVICE(BELKIN_SA_VID, BELKIN_SA_PID) }, 66 { USB_DEVICE(BELKIN_SA_VID, BELKIN_SA_PID) },
67 { USB_DEVICE(BELKIN_OLD_VID, BELKIN_OLD_PID) }, 67 { USB_DEVICE(BELKIN_OLD_VID, BELKIN_OLD_PID) },
68 { USB_DEVICE(PERACOM_VID, PERACOM_PID) }, 68 { USB_DEVICE(PERACOM_VID, PERACOM_PID) },
@@ -71,14 +71,7 @@ static const struct usb_device_id id_table_combined[] = {
71 { USB_DEVICE(BELKIN_DOCKSTATION_VID, BELKIN_DOCKSTATION_PID) }, 71 { USB_DEVICE(BELKIN_DOCKSTATION_VID, BELKIN_DOCKSTATION_PID) },
72 { } /* Terminating entry */ 72 { } /* Terminating entry */
73}; 73};
74MODULE_DEVICE_TABLE(usb, id_table_combined); 74MODULE_DEVICE_TABLE(usb, id_table);
75
76static struct usb_driver belkin_driver = {
77 .name = "belkin",
78 .probe = usb_serial_probe,
79 .disconnect = usb_serial_disconnect,
80 .id_table = id_table_combined,
81};
82 75
83/* All of the device info needed for the serial converters */ 76/* All of the device info needed for the serial converters */
84static struct usb_serial_driver belkin_device = { 77static struct usb_serial_driver belkin_device = {
@@ -87,7 +80,7 @@ static struct usb_serial_driver belkin_device = {
87 .name = "belkin", 80 .name = "belkin",
88 }, 81 },
89 .description = "Belkin / Peracom / GoHubs USB Serial Adapter", 82 .description = "Belkin / Peracom / GoHubs USB Serial Adapter",
90 .id_table = id_table_combined, 83 .id_table = id_table,
91 .num_ports = 1, 84 .num_ports = 1,
92 .open = belkin_sa_open, 85 .open = belkin_sa_open,
93 .close = belkin_sa_close, 86 .close = belkin_sa_close,
@@ -159,8 +152,6 @@ static void belkin_sa_release(struct usb_serial *serial)
159{ 152{
160 int i; 153 int i;
161 154
162 dbg("%s", __func__);
163
164 for (i = 0; i < serial->num_ports; ++i) 155 for (i = 0; i < serial->num_ports; ++i)
165 kfree(usb_get_serial_port_data(serial->port[i])); 156 kfree(usb_get_serial_port_data(serial->port[i]));
166} 157}
@@ -170,8 +161,6 @@ static int belkin_sa_open(struct tty_struct *tty,
170{ 161{
171 int retval; 162 int retval;
172 163
173 dbg("%s port %d", __func__, port->number);
174
175 retval = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 164 retval = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
176 if (retval) { 165 if (retval) {
177 dev_err(&port->dev, "usb_submit_urb(read int) failed\n"); 166 dev_err(&port->dev, "usb_submit_urb(read int) failed\n");
@@ -187,8 +176,6 @@ static int belkin_sa_open(struct tty_struct *tty,
187 176
188static void belkin_sa_close(struct usb_serial_port *port) 177static void belkin_sa_close(struct usb_serial_port *port)
189{ 178{
190 dbg("%s port %d", __func__, port->number);
191
192 usb_serial_generic_close(port); 179 usb_serial_generic_close(port);
193 usb_kill_urb(port->interrupt_in_urb); 180 usb_kill_urb(port->interrupt_in_urb);
194} 181}
@@ -210,12 +197,12 @@ static void belkin_sa_read_int_callback(struct urb *urb)
210 case -ENOENT: 197 case -ENOENT:
211 case -ESHUTDOWN: 198 case -ESHUTDOWN:
212 /* this urb is terminated, clean up */ 199 /* this urb is terminated, clean up */
213 dbg("%s - urb shutting down with status: %d", 200 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
214 __func__, status); 201 __func__, status);
215 return; 202 return;
216 default: 203 default:
217 dbg("%s - nonzero urb status received: %d", 204 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
218 __func__, status); 205 __func__, status);
219 goto exit; 206 goto exit;
220 } 207 }
221 208
@@ -403,7 +390,9 @@ static void belkin_sa_set_termios(struct tty_struct *tty,
403 case CS8: 390 case CS8:
404 urb_value = BELKIN_SA_DATA_BITS(8); 391 urb_value = BELKIN_SA_DATA_BITS(8);
405 break; 392 break;
406 default: dbg("CSIZE was not CS5-CS8, using default of 8"); 393 default:
394 dev_dbg(&port->dev,
395 "CSIZE was not CS5-CS8, using default of 8\n");
407 urb_value = BELKIN_SA_DATA_BITS(8); 396 urb_value = BELKIN_SA_DATA_BITS(8);
408 break; 397 break;
409 } 398 }
@@ -463,8 +452,6 @@ static int belkin_sa_tiocmget(struct tty_struct *tty)
463 unsigned long control_state; 452 unsigned long control_state;
464 unsigned long flags; 453 unsigned long flags;
465 454
466 dbg("%s", __func__);
467
468 spin_lock_irqsave(&priv->lock, flags); 455 spin_lock_irqsave(&priv->lock, flags);
469 control_state = priv->control_state; 456 control_state = priv->control_state;
470 spin_unlock_irqrestore(&priv->lock, flags); 457 spin_unlock_irqrestore(&priv->lock, flags);
@@ -484,8 +471,6 @@ static int belkin_sa_tiocmset(struct tty_struct *tty,
484 int rts = 0; 471 int rts = 0;
485 int dtr = 0; 472 int dtr = 0;
486 473
487 dbg("%s", __func__);
488
489 spin_lock_irqsave(&priv->lock, flags); 474 spin_lock_irqsave(&priv->lock, flags);
490 control_state = priv->control_state; 475 control_state = priv->control_state;
491 476
@@ -524,7 +509,7 @@ exit:
524 return retval; 509 return retval;
525} 510}
526 511
527module_usb_serial_driver(belkin_driver, serial_drivers); 512module_usb_serial_driver(serial_drivers, id_table);
528 513
529MODULE_AUTHOR(DRIVER_AUTHOR); 514MODULE_AUTHOR(DRIVER_AUTHOR);
530MODULE_DESCRIPTION(DRIVER_DESC); 515MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
index ed8adb052ca7..f398d1e34474 100644
--- a/drivers/usb/serial/bus.c
+++ b/drivers/usb/serial/bus.c
@@ -124,8 +124,15 @@ static ssize_t store_new_id(struct device_driver *driver,
124 return retval; 124 return retval;
125} 125}
126 126
127static ssize_t show_dynids(struct device_driver *driver, char *buf)
128{
129 struct usb_serial_driver *usb_drv = to_usb_serial_driver(driver);
130
131 return usb_show_dynids(&usb_drv->dynids, buf);
132}
133
127static struct driver_attribute drv_attrs[] = { 134static struct driver_attribute drv_attrs[] = {
128 __ATTR(new_id, S_IWUSR, NULL, store_new_id), 135 __ATTR(new_id, S_IRUGO | S_IWUSR, show_dynids, store_new_id),
129 __ATTR_NULL, 136 __ATTR_NULL,
130}; 137};
131 138
diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index aaab32db31d0..cabd1b15ddce 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -125,8 +125,6 @@ static int ch341_set_baudrate(struct usb_device *dev,
125 unsigned long factor; 125 unsigned long factor;
126 short divisor; 126 short divisor;
127 127
128 dbg("ch341_set_baudrate(%d)", priv->baud_rate);
129
130 if (!priv->baud_rate) 128 if (!priv->baud_rate)
131 return -EINVAL; 129 return -EINVAL;
132 factor = (CH341_BAUDBASE_FACTOR / priv->baud_rate); 130 factor = (CH341_BAUDBASE_FACTOR / priv->baud_rate);
@@ -153,7 +151,6 @@ static int ch341_set_baudrate(struct usb_device *dev,
153 151
154static int ch341_set_handshake(struct usb_device *dev, u8 control) 152static int ch341_set_handshake(struct usb_device *dev, u8 control)
155{ 153{
156 dbg("ch341_set_handshake(0x%02x)", control);
157 return ch341_control_out(dev, 0xa4, ~control, 0); 154 return ch341_control_out(dev, 0xa4, ~control, 0);
158} 155}
159 156
@@ -164,8 +161,6 @@ static int ch341_get_status(struct usb_device *dev, struct ch341_private *priv)
164 const unsigned size = 8; 161 const unsigned size = 8;
165 unsigned long flags; 162 unsigned long flags;
166 163
167 dbg("ch341_get_status()");
168
169 buffer = kmalloc(size, GFP_KERNEL); 164 buffer = kmalloc(size, GFP_KERNEL);
170 if (!buffer) 165 if (!buffer)
171 return -ENOMEM; 166 return -ENOMEM;
@@ -196,8 +191,6 @@ static int ch341_configure(struct usb_device *dev, struct ch341_private *priv)
196 int r; 191 int r;
197 const unsigned size = 8; 192 const unsigned size = 8;
198 193
199 dbg("ch341_configure()");
200
201 buffer = kmalloc(size, GFP_KERNEL); 194 buffer = kmalloc(size, GFP_KERNEL);
202 if (!buffer) 195 if (!buffer)
203 return -ENOMEM; 196 return -ENOMEM;
@@ -254,8 +247,6 @@ static int ch341_attach(struct usb_serial *serial)
254 struct ch341_private *priv; 247 struct ch341_private *priv;
255 int r; 248 int r;
256 249
257 dbg("ch341_attach()");
258
259 /* private data */ 250 /* private data */
260 priv = kzalloc(sizeof(struct ch341_private), GFP_KERNEL); 251 priv = kzalloc(sizeof(struct ch341_private), GFP_KERNEL);
261 if (!priv) 252 if (!priv)
@@ -290,7 +281,6 @@ static void ch341_dtr_rts(struct usb_serial_port *port, int on)
290 struct ch341_private *priv = usb_get_serial_port_data(port); 281 struct ch341_private *priv = usb_get_serial_port_data(port);
291 unsigned long flags; 282 unsigned long flags;
292 283
293 dbg("%s - port %d", __func__, port->number);
294 /* drop DTR and RTS */ 284 /* drop DTR and RTS */
295 spin_lock_irqsave(&priv->lock, flags); 285 spin_lock_irqsave(&priv->lock, flags);
296 if (on) 286 if (on)
@@ -304,8 +294,6 @@ static void ch341_dtr_rts(struct usb_serial_port *port, int on)
304 294
305static void ch341_close(struct usb_serial_port *port) 295static void ch341_close(struct usb_serial_port *port)
306{ 296{
307 dbg("%s - port %d", __func__, port->number);
308
309 usb_serial_generic_close(port); 297 usb_serial_generic_close(port);
310 usb_kill_urb(port->interrupt_in_urb); 298 usb_kill_urb(port->interrupt_in_urb);
311} 299}
@@ -318,8 +306,6 @@ static int ch341_open(struct tty_struct *tty, struct usb_serial_port *port)
318 struct ch341_private *priv = usb_get_serial_port_data(serial->port[0]); 306 struct ch341_private *priv = usb_get_serial_port_data(serial->port[0]);
319 int r; 307 int r;
320 308
321 dbg("ch341_open()");
322
323 priv->baud_rate = DEFAULT_BAUD_RATE; 309 priv->baud_rate = DEFAULT_BAUD_RATE;
324 310
325 r = ch341_configure(serial->dev, priv); 311 r = ch341_configure(serial->dev, priv);
@@ -358,8 +344,6 @@ static void ch341_set_termios(struct tty_struct *tty,
358 unsigned baud_rate; 344 unsigned baud_rate;
359 unsigned long flags; 345 unsigned long flags;
360 346
361 dbg("ch341_set_termios()");
362
363 baud_rate = tty_get_baud_rate(tty); 347 baud_rate = tty_get_baud_rate(tty);
364 348
365 priv->baud_rate = baud_rate; 349 priv->baud_rate = baud_rate;
@@ -393,8 +377,6 @@ static void ch341_break_ctl(struct tty_struct *tty, int break_state)
393 uint16_t reg_contents; 377 uint16_t reg_contents;
394 uint8_t *break_reg; 378 uint8_t *break_reg;
395 379
396 dbg("%s()", __func__);
397
398 break_reg = kmalloc(2, GFP_KERNEL); 380 break_reg = kmalloc(2, GFP_KERNEL);
399 if (!break_reg) { 381 if (!break_reg) {
400 dev_err(&port->dev, "%s - kmalloc failed\n", __func__); 382 dev_err(&port->dev, "%s - kmalloc failed\n", __func__);
@@ -461,8 +443,6 @@ static void ch341_read_int_callback(struct urb *urb)
461 unsigned int actual_length = urb->actual_length; 443 unsigned int actual_length = urb->actual_length;
462 int status; 444 int status;
463 445
464 dbg("%s (%d)", __func__, port->number);
465
466 switch (urb->status) { 446 switch (urb->status) {
467 case 0: 447 case 0:
468 /* success */ 448 /* success */
@@ -580,8 +560,6 @@ static int ch341_tiocmget(struct tty_struct *tty)
580 u8 status; 560 u8 status;
581 unsigned int result; 561 unsigned int result;
582 562
583 dbg("%s (%d)", __func__, port->number);
584
585 spin_lock_irqsave(&priv->lock, flags); 563 spin_lock_irqsave(&priv->lock, flags);
586 mcr = priv->line_control; 564 mcr = priv->line_control;
587 status = priv->line_status; 565 status = priv->line_status;
@@ -599,35 +577,18 @@ static int ch341_tiocmget(struct tty_struct *tty)
599 return result; 577 return result;
600} 578}
601 579
602 580static int ch341_reset_resume(struct usb_serial *serial)
603static int ch341_reset_resume(struct usb_interface *intf)
604{ 581{
605 struct usb_device *dev = interface_to_usbdev(intf);
606 struct usb_serial *serial = NULL;
607 struct ch341_private *priv; 582 struct ch341_private *priv;
608 583
609 serial = usb_get_intfdata(intf);
610 priv = usb_get_serial_port_data(serial->port[0]); 584 priv = usb_get_serial_port_data(serial->port[0]);
611 585
612 /*reconfigure ch341 serial port after bus-reset*/ 586 /* reconfigure ch341 serial port after bus-reset */
613 ch341_configure(dev, priv); 587 ch341_configure(serial->dev, priv);
614
615 usb_serial_resume(intf);
616 588
617 return 0; 589 return 0;
618} 590}
619 591
620static struct usb_driver ch341_driver = {
621 .name = "ch341",
622 .probe = usb_serial_probe,
623 .disconnect = usb_serial_disconnect,
624 .suspend = usb_serial_suspend,
625 .resume = usb_serial_resume,
626 .reset_resume = ch341_reset_resume,
627 .id_table = id_table,
628 .supports_autosuspend = 1,
629};
630
631static struct usb_serial_driver ch341_device = { 592static struct usb_serial_driver ch341_device = {
632 .driver = { 593 .driver = {
633 .owner = THIS_MODULE, 594 .owner = THIS_MODULE,
@@ -646,13 +607,14 @@ static struct usb_serial_driver ch341_device = {
646 .tiocmset = ch341_tiocmset, 607 .tiocmset = ch341_tiocmset,
647 .read_int_callback = ch341_read_int_callback, 608 .read_int_callback = ch341_read_int_callback,
648 .attach = ch341_attach, 609 .attach = ch341_attach,
610 .reset_resume = ch341_reset_resume,
649}; 611};
650 612
651static struct usb_serial_driver * const serial_drivers[] = { 613static struct usb_serial_driver * const serial_drivers[] = {
652 &ch341_device, NULL 614 &ch341_device, NULL
653}; 615};
654 616
655module_usb_serial_driver(ch341_driver, serial_drivers); 617module_usb_serial_driver(serial_drivers, id_table);
656 618
657MODULE_LICENSE("GPL"); 619MODULE_LICENSE("GPL");
658 620
diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
index 1ee6b2ab0f89..b9cca6dcde07 100644
--- a/drivers/usb/serial/console.c
+++ b/drivers/usb/serial/console.c
@@ -113,7 +113,8 @@ static int usb_console_setup(struct console *co, char *options)
113 serial = usb_serial_get_by_index(co->index); 113 serial = usb_serial_get_by_index(co->index);
114 if (serial == NULL) { 114 if (serial == NULL) {
115 /* no device is connected yet, sorry :( */ 115 /* no device is connected yet, sorry :( */
116 err("No USB device connected to ttyUSB%i", co->index); 116 printk(KERN_ERR "No USB device connected to ttyUSB%i\n",
117 co->index);
117 return -ENODEV; 118 return -ENODEV;
118 } 119 }
119 120
@@ -137,7 +138,7 @@ static int usb_console_setup(struct console *co, char *options)
137 tty = kzalloc(sizeof(*tty), GFP_KERNEL); 138 tty = kzalloc(sizeof(*tty), GFP_KERNEL);
138 if (!tty) { 139 if (!tty) {
139 retval = -ENOMEM; 140 retval = -ENOMEM;
140 err("no more memory"); 141 dev_err(&port->dev, "no more memory\n");
141 goto reset_open_count; 142 goto reset_open_count;
142 } 143 }
143 kref_init(&tty->kref); 144 kref_init(&tty->kref);
@@ -146,7 +147,7 @@ static int usb_console_setup(struct console *co, char *options)
146 tty->index = co->index; 147 tty->index = co->index;
147 if (tty_init_termios(tty)) { 148 if (tty_init_termios(tty)) {
148 retval = -ENOMEM; 149 retval = -ENOMEM;
149 err("no more memory"); 150 dev_err(&port->dev, "no more memory\n");
150 goto free_tty; 151 goto free_tty;
151 } 152 }
152 } 153 }
@@ -159,7 +160,7 @@ static int usb_console_setup(struct console *co, char *options)
159 retval = usb_serial_generic_open(NULL, port); 160 retval = usb_serial_generic_open(NULL, port);
160 161
161 if (retval) { 162 if (retval) {
162 err("could not open USB console port"); 163 dev_err(&port->dev, "could not open USB console port\n");
163 goto fail; 164 goto fail;
164 } 165 }
165 166
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index ec30f95ef399..1b1926200ba7 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -156,13 +156,6 @@ struct cp210x_port_private {
156 __u8 bInterfaceNumber; 156 __u8 bInterfaceNumber;
157}; 157};
158 158
159static struct usb_driver cp210x_driver = {
160 .name = "cp210x",
161 .probe = usb_serial_probe,
162 .disconnect = usb_serial_disconnect,
163 .id_table = id_table,
164};
165
166static struct usb_serial_driver cp210x_device = { 159static struct usb_serial_driver cp210x_device = {
167 .driver = { 160 .driver = {
168 .owner = THIS_MODULE, 161 .owner = THIS_MODULE,
@@ -188,8 +181,10 @@ static struct usb_serial_driver * const serial_drivers[] = {
188}; 181};
189 182
190/* Config request types */ 183/* Config request types */
191#define REQTYPE_HOST_TO_DEVICE 0x41 184#define REQTYPE_HOST_TO_INTERFACE 0x41
192#define REQTYPE_DEVICE_TO_HOST 0xc1 185#define REQTYPE_INTERFACE_TO_HOST 0xc1
186#define REQTYPE_HOST_TO_DEVICE 0x40
187#define REQTYPE_DEVICE_TO_HOST 0xc0
193 188
194/* Config request codes */ 189/* Config request codes */
195#define CP210X_IFC_ENABLE 0x00 190#define CP210X_IFC_ENABLE 0x00
@@ -286,7 +281,7 @@ static int cp210x_get_config(struct usb_serial_port *port, u8 request,
286 281
287 /* Issue the request, attempting to read 'size' bytes */ 282 /* Issue the request, attempting to read 'size' bytes */
288 result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 283 result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
289 request, REQTYPE_DEVICE_TO_HOST, 0x0000, 284 request, REQTYPE_INTERFACE_TO_HOST, 0x0000,
290 port_priv->bInterfaceNumber, buf, size, 285 port_priv->bInterfaceNumber, buf, size,
291 USB_CTRL_GET_TIMEOUT); 286 USB_CTRL_GET_TIMEOUT);
292 287
@@ -340,13 +335,13 @@ static int cp210x_set_config(struct usb_serial_port *port, u8 request,
340 if (size > 2) { 335 if (size > 2) {
341 result = usb_control_msg(serial->dev, 336 result = usb_control_msg(serial->dev,
342 usb_sndctrlpipe(serial->dev, 0), 337 usb_sndctrlpipe(serial->dev, 0),
343 request, REQTYPE_HOST_TO_DEVICE, 0x0000, 338 request, REQTYPE_HOST_TO_INTERFACE, 0x0000,
344 port_priv->bInterfaceNumber, buf, size, 339 port_priv->bInterfaceNumber, buf, size,
345 USB_CTRL_SET_TIMEOUT); 340 USB_CTRL_SET_TIMEOUT);
346 } else { 341 } else {
347 result = usb_control_msg(serial->dev, 342 result = usb_control_msg(serial->dev,
348 usb_sndctrlpipe(serial->dev, 0), 343 usb_sndctrlpipe(serial->dev, 0),
349 request, REQTYPE_HOST_TO_DEVICE, data[0], 344 request, REQTYPE_HOST_TO_INTERFACE, data[0],
350 port_priv->bInterfaceNumber, NULL, 0, 345 port_priv->bInterfaceNumber, NULL, 0,
351 USB_CTRL_SET_TIMEOUT); 346 USB_CTRL_SET_TIMEOUT);
352 } 347 }
@@ -422,8 +417,6 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port)
422{ 417{
423 int result; 418 int result;
424 419
425 dbg("%s - port %d", __func__, port->number);
426
427 result = cp210x_set_config_single(port, CP210X_IFC_ENABLE, 420 result = cp210x_set_config_single(port, CP210X_IFC_ENABLE,
428 UART_ENABLE); 421 UART_ENABLE);
429 if (result) { 422 if (result) {
@@ -443,8 +436,6 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port)
443 436
444static void cp210x_close(struct usb_serial_port *port) 437static void cp210x_close(struct usb_serial_port *port)
445{ 438{
446 dbg("%s - port %d", __func__, port->number);
447
448 usb_serial_generic_close(port); 439 usb_serial_generic_close(port);
449 440
450 mutex_lock(&port->serial->disc_mutex); 441 mutex_lock(&port->serial->disc_mutex);
@@ -488,8 +479,6 @@ static void cp210x_get_termios_port(struct usb_serial_port *port,
488 unsigned int baud; 479 unsigned int baud;
489 unsigned int bits; 480 unsigned int bits;
490 481
491 dbg("%s - port %d", __func__, port->number);
492
493 cp210x_get_config(port, CP210X_GET_BAUDRATE, &baud, 4); 482 cp210x_get_config(port, CP210X_GET_BAUDRATE, &baud, 4);
494 483
495 dbg("%s - baud rate = %d", __func__, baud); 484 dbg("%s - baud rate = %d", __func__, baud);
@@ -787,8 +776,6 @@ static int cp210x_tiocmset_port(struct usb_serial_port *port,
787{ 776{
788 unsigned int control = 0; 777 unsigned int control = 0;
789 778
790 dbg("%s - port %d", __func__, port->number);
791
792 if (set & TIOCM_RTS) { 779 if (set & TIOCM_RTS) {
793 control |= CONTROL_RTS; 780 control |= CONTROL_RTS;
794 control |= CONTROL_WRITE_RTS; 781 control |= CONTROL_WRITE_RTS;
@@ -825,8 +812,6 @@ static int cp210x_tiocmget (struct tty_struct *tty)
825 unsigned int control; 812 unsigned int control;
826 int result; 813 int result;
827 814
828 dbg("%s - port %d", __func__, port->number);
829
830 cp210x_get_config(port, CP210X_GET_MDMSTS, &control, 1); 815 cp210x_get_config(port, CP210X_GET_MDMSTS, &control, 1);
831 816
832 result = ((control & CONTROL_DTR) ? TIOCM_DTR : 0) 817 result = ((control & CONTROL_DTR) ? TIOCM_DTR : 0)
@@ -846,7 +831,6 @@ static void cp210x_break_ctl (struct tty_struct *tty, int break_state)
846 struct usb_serial_port *port = tty->driver_data; 831 struct usb_serial_port *port = tty->driver_data;
847 unsigned int state; 832 unsigned int state;
848 833
849 dbg("%s - port %d", __func__, port->number);
850 if (break_state == 0) 834 if (break_state == 0)
851 state = BREAK_OFF; 835 state = BREAK_OFF;
852 else 836 else
@@ -891,7 +875,7 @@ static void cp210x_release(struct usb_serial *serial)
891 } 875 }
892} 876}
893 877
894module_usb_serial_driver(cp210x_driver, serial_drivers); 878module_usb_serial_driver(serial_drivers, id_table);
895 879
896MODULE_DESCRIPTION(DRIVER_DESC); 880MODULE_DESCRIPTION(DRIVER_DESC);
897MODULE_VERSION(DRIVER_VERSION); 881MODULE_VERSION(DRIVER_VERSION);
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
index d39b9418f2fb..3aa0b530f68e 100644
--- a/drivers/usb/serial/cyberjack.c
+++ b/drivers/usb/serial/cyberjack.c
@@ -77,13 +77,6 @@ static const struct usb_device_id id_table[] = {
77 77
78MODULE_DEVICE_TABLE(usb, id_table); 78MODULE_DEVICE_TABLE(usb, id_table);
79 79
80static struct usb_driver cyberjack_driver = {
81 .name = "cyberjack",
82 .probe = usb_serial_probe,
83 .disconnect = usb_serial_disconnect,
84 .id_table = id_table,
85};
86
87static struct usb_serial_driver cyberjack_device = { 80static struct usb_serial_driver cyberjack_device = {
88 .driver = { 81 .driver = {
89 .owner = THIS_MODULE, 82 .owner = THIS_MODULE,
@@ -122,8 +115,6 @@ static int cyberjack_startup(struct usb_serial *serial)
122 struct cyberjack_private *priv; 115 struct cyberjack_private *priv;
123 int i; 116 int i;
124 117
125 dbg("%s", __func__);
126
127 /* allocate the private data structure */ 118 /* allocate the private data structure */
128 priv = kmalloc(sizeof(struct cyberjack_private), GFP_KERNEL); 119 priv = kmalloc(sizeof(struct cyberjack_private), GFP_KERNEL);
129 if (!priv) 120 if (!priv)
@@ -155,8 +146,6 @@ static void cyberjack_disconnect(struct usb_serial *serial)
155{ 146{
156 int i; 147 int i;
157 148
158 dbg("%s", __func__);
159
160 for (i = 0; i < serial->num_ports; ++i) 149 for (i = 0; i < serial->num_ports; ++i)
161 usb_kill_urb(serial->port[i]->interrupt_in_urb); 150 usb_kill_urb(serial->port[i]->interrupt_in_urb);
162} 151}
@@ -165,8 +154,6 @@ static void cyberjack_release(struct usb_serial *serial)
165{ 154{
166 int i; 155 int i;
167 156
168 dbg("%s", __func__);
169
170 for (i = 0; i < serial->num_ports; ++i) { 157 for (i = 0; i < serial->num_ports; ++i) {
171 /* My special items, the standard routines free my urbs */ 158 /* My special items, the standard routines free my urbs */
172 kfree(usb_get_serial_port_data(serial->port[i])); 159 kfree(usb_get_serial_port_data(serial->port[i]));
@@ -180,8 +167,6 @@ static int cyberjack_open(struct tty_struct *tty,
180 unsigned long flags; 167 unsigned long flags;
181 int result = 0; 168 int result = 0;
182 169
183 dbg("%s - port %d", __func__, port->number);
184
185 dbg("%s - usb_clear_halt", __func__); 170 dbg("%s - usb_clear_halt", __func__);
186 usb_clear_halt(port->serial->dev, port->write_urb->pipe); 171 usb_clear_halt(port->serial->dev, port->write_urb->pipe);
187 172
@@ -197,8 +182,6 @@ static int cyberjack_open(struct tty_struct *tty,
197 182
198static void cyberjack_close(struct usb_serial_port *port) 183static void cyberjack_close(struct usb_serial_port *port)
199{ 184{
200 dbg("%s - port %d", __func__, port->number);
201
202 if (port->serial->dev) { 185 if (port->serial->dev) {
203 /* shutdown any bulk reads that might be going on */ 186 /* shutdown any bulk reads that might be going on */
204 usb_kill_urb(port->write_urb); 187 usb_kill_urb(port->write_urb);
@@ -214,8 +197,6 @@ static int cyberjack_write(struct tty_struct *tty,
214 int result; 197 int result;
215 int wrexpected; 198 int wrexpected;
216 199
217 dbg("%s - port %d", __func__, port->number);
218
219 if (count == 0) { 200 if (count == 0) {
220 dbg("%s - write request of 0 bytes", __func__); 201 dbg("%s - write request of 0 bytes", __func__);
221 return 0; 202 return 0;
@@ -307,8 +288,6 @@ static void cyberjack_read_int_callback(struct urb *urb)
307 int status = urb->status; 288 int status = urb->status;
308 int result; 289 int result;
309 290
310 dbg("%s - port %d", __func__, port->number);
311
312 /* the urb might have been killed. */ 291 /* the urb might have been killed. */
313 if (status) 292 if (status)
314 return; 293 return;
@@ -367,8 +346,6 @@ static void cyberjack_read_bulk_callback(struct urb *urb)
367 int result; 346 int result;
368 int status = urb->status; 347 int status = urb->status;
369 348
370 dbg("%s - port %d", __func__, port->number);
371
372 usb_serial_debug_data(debug, &port->dev, __func__, 349 usb_serial_debug_data(debug, &port->dev, __func__,
373 urb->actual_length, data); 350 urb->actual_length, data);
374 if (status) { 351 if (status) {
@@ -417,8 +394,6 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
417 struct cyberjack_private *priv = usb_get_serial_port_data(port); 394 struct cyberjack_private *priv = usb_get_serial_port_data(port);
418 int status = urb->status; 395 int status = urb->status;
419 396
420 dbg("%s - port %d", __func__, port->number);
421
422 set_bit(0, &port->write_urbs_free); 397 set_bit(0, &port->write_urbs_free);
423 if (status) { 398 if (status) {
424 dbg("%s - nonzero write bulk status received: %d", 399 dbg("%s - nonzero write bulk status received: %d",
@@ -475,7 +450,7 @@ exit:
475 usb_serial_port_softint(port); 450 usb_serial_port_softint(port);
476} 451}
477 452
478module_usb_serial_driver(cyberjack_driver, serial_drivers); 453module_usb_serial_driver(serial_drivers, id_table);
479 454
480MODULE_AUTHOR(DRIVER_AUTHOR); 455MODULE_AUTHOR(DRIVER_AUTHOR);
481MODULE_DESCRIPTION(DRIVER_DESC); 456MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
index afc886c75d2f..b78c34eb5d3f 100644
--- a/drivers/usb/serial/cypress_m8.c
+++ b/drivers/usb/serial/cypress_m8.c
@@ -89,13 +89,6 @@ static const struct usb_device_id id_table_combined[] = {
89 89
90MODULE_DEVICE_TABLE(usb, id_table_combined); 90MODULE_DEVICE_TABLE(usb, id_table_combined);
91 91
92static struct usb_driver cypress_driver = {
93 .name = "cypress",
94 .probe = usb_serial_probe,
95 .disconnect = usb_serial_disconnect,
96 .id_table = id_table_combined,
97};
98
99enum packet_format { 92enum packet_format {
100 packet_format_1, /* b0:status, b1:payload count */ 93 packet_format_1, /* b0:status, b1:payload count */
101 packet_format_2 /* b0[7:3]:status, b0[2:0]:payload count */ 94 packet_format_2 /* b0[7:3]:status, b0[2:0]:payload count */
@@ -305,8 +298,6 @@ static int cypress_serial_control(struct tty_struct *tty,
305 const unsigned int feature_len = 5; 298 const unsigned int feature_len = 5;
306 unsigned long flags; 299 unsigned long flags;
307 300
308 dbg("%s", __func__);
309
310 priv = usb_get_serial_port_data(port); 301 priv = usb_get_serial_port_data(port);
311 302
312 if (!priv->comm_is_ok) 303 if (!priv->comm_is_ok)
@@ -451,8 +442,6 @@ static int generic_startup(struct usb_serial *serial)
451 struct cypress_private *priv; 442 struct cypress_private *priv;
452 struct usb_serial_port *port = serial->port[0]; 443 struct usb_serial_port *port = serial->port[0];
453 444
454 dbg("%s - port %d", __func__, port->number);
455
456 priv = kzalloc(sizeof(struct cypress_private), GFP_KERNEL); 445 priv = kzalloc(sizeof(struct cypress_private), GFP_KERNEL);
457 if (!priv) 446 if (!priv)
458 return -ENOMEM; 447 return -ENOMEM;
@@ -505,8 +494,6 @@ static int cypress_earthmate_startup(struct usb_serial *serial)
505 struct cypress_private *priv; 494 struct cypress_private *priv;
506 struct usb_serial_port *port = serial->port[0]; 495 struct usb_serial_port *port = serial->port[0];
507 496
508 dbg("%s", __func__);
509
510 if (generic_startup(serial)) { 497 if (generic_startup(serial)) {
511 dbg("%s - Failed setting up port %d", __func__, 498 dbg("%s - Failed setting up port %d", __func__,
512 port->number); 499 port->number);
@@ -537,8 +524,6 @@ static int cypress_hidcom_startup(struct usb_serial *serial)
537{ 524{
538 struct cypress_private *priv; 525 struct cypress_private *priv;
539 526
540 dbg("%s", __func__);
541
542 if (generic_startup(serial)) { 527 if (generic_startup(serial)) {
543 dbg("%s - Failed setting up port %d", __func__, 528 dbg("%s - Failed setting up port %d", __func__,
544 serial->port[0]->number); 529 serial->port[0]->number);
@@ -556,8 +541,6 @@ static int cypress_ca42v2_startup(struct usb_serial *serial)
556{ 541{
557 struct cypress_private *priv; 542 struct cypress_private *priv;
558 543
559 dbg("%s", __func__);
560
561 if (generic_startup(serial)) { 544 if (generic_startup(serial)) {
562 dbg("%s - Failed setting up port %d", __func__, 545 dbg("%s - Failed setting up port %d", __func__,
563 serial->port[0]->number); 546 serial->port[0]->number);
@@ -575,10 +558,7 @@ static void cypress_release(struct usb_serial *serial)
575{ 558{
576 struct cypress_private *priv; 559 struct cypress_private *priv;
577 560
578 dbg("%s - port %d", __func__, serial->port[0]->number);
579
580 /* all open ports are closed at this point */ 561 /* all open ports are closed at this point */
581
582 priv = usb_get_serial_port_data(serial->port[0]); 562 priv = usb_get_serial_port_data(serial->port[0]);
583 563
584 if (priv) { 564 if (priv) {
@@ -595,8 +575,6 @@ static int cypress_open(struct tty_struct *tty, struct usb_serial_port *port)
595 unsigned long flags; 575 unsigned long flags;
596 int result = 0; 576 int result = 0;
597 577
598 dbg("%s - port %d", __func__, port->number);
599
600 if (!priv->comm_is_ok) 578 if (!priv->comm_is_ok)
601 return -EIO; 579 return -EIO;
602 580
@@ -661,8 +639,6 @@ static void cypress_close(struct usb_serial_port *port)
661 struct cypress_private *priv = usb_get_serial_port_data(port); 639 struct cypress_private *priv = usb_get_serial_port_data(port);
662 unsigned long flags; 640 unsigned long flags;
663 641
664 dbg("%s - port %d", __func__, port->number);
665
666 /* writing is potentially harmful, lock must be taken */ 642 /* writing is potentially harmful, lock must be taken */
667 mutex_lock(&port->serial->disc_mutex); 643 mutex_lock(&port->serial->disc_mutex);
668 if (port->serial->disconnected) { 644 if (port->serial->disconnected) {
@@ -720,7 +696,6 @@ static void cypress_send(struct usb_serial_port *port)
720 if (!priv->comm_is_ok) 696 if (!priv->comm_is_ok)
721 return; 697 return;
722 698
723 dbg("%s - port %d", __func__, port->number);
724 dbg("%s - interrupt out size is %d", __func__, 699 dbg("%s - interrupt out size is %d", __func__,
725 port->interrupt_out_size); 700 port->interrupt_out_size);
726 701
@@ -828,8 +803,6 @@ static int cypress_write_room(struct tty_struct *tty)
828 int room = 0; 803 int room = 0;
829 unsigned long flags; 804 unsigned long flags;
830 805
831 dbg("%s - port %d", __func__, port->number);
832
833 spin_lock_irqsave(&priv->lock, flags); 806 spin_lock_irqsave(&priv->lock, flags);
834 room = kfifo_avail(&priv->write_fifo); 807 room = kfifo_avail(&priv->write_fifo);
835 spin_unlock_irqrestore(&priv->lock, flags); 808 spin_unlock_irqrestore(&priv->lock, flags);
@@ -847,8 +820,6 @@ static int cypress_tiocmget(struct tty_struct *tty)
847 unsigned int result = 0; 820 unsigned int result = 0;
848 unsigned long flags; 821 unsigned long flags;
849 822
850 dbg("%s - port %d", __func__, port->number);
851
852 spin_lock_irqsave(&priv->lock, flags); 823 spin_lock_irqsave(&priv->lock, flags);
853 control = priv->line_control; 824 control = priv->line_control;
854 status = priv->current_status; 825 status = priv->current_status;
@@ -874,8 +845,6 @@ static int cypress_tiocmset(struct tty_struct *tty,
874 struct cypress_private *priv = usb_get_serial_port_data(port); 845 struct cypress_private *priv = usb_get_serial_port_data(port);
875 unsigned long flags; 846 unsigned long flags;
876 847
877 dbg("%s - port %d", __func__, port->number);
878
879 spin_lock_irqsave(&priv->lock, flags); 848 spin_lock_irqsave(&priv->lock, flags);
880 if (set & TIOCM_RTS) 849 if (set & TIOCM_RTS)
881 priv->line_control |= CONTROL_RTS; 850 priv->line_control |= CONTROL_RTS;
@@ -948,8 +917,6 @@ static void cypress_set_termios(struct tty_struct *tty,
948 __u8 oldlines; 917 __u8 oldlines;
949 int linechange = 0; 918 int linechange = 0;
950 919
951 dbg("%s - port %d", __func__, port->number);
952
953 spin_lock_irqsave(&priv->lock, flags); 920 spin_lock_irqsave(&priv->lock, flags);
954 /* We can't clean this one up as we don't know the device type 921 /* We can't clean this one up as we don't know the device type
955 early enough */ 922 early enough */
@@ -1096,8 +1063,6 @@ static int cypress_chars_in_buffer(struct tty_struct *tty)
1096 int chars = 0; 1063 int chars = 0;
1097 unsigned long flags; 1064 unsigned long flags;
1098 1065
1099 dbg("%s - port %d", __func__, port->number);
1100
1101 spin_lock_irqsave(&priv->lock, flags); 1066 spin_lock_irqsave(&priv->lock, flags);
1102 chars = kfifo_len(&priv->write_fifo); 1067 chars = kfifo_len(&priv->write_fifo);
1103 spin_unlock_irqrestore(&priv->lock, flags); 1068 spin_unlock_irqrestore(&priv->lock, flags);
@@ -1112,8 +1077,6 @@ static void cypress_throttle(struct tty_struct *tty)
1112 struct usb_serial_port *port = tty->driver_data; 1077 struct usb_serial_port *port = tty->driver_data;
1113 struct cypress_private *priv = usb_get_serial_port_data(port); 1078 struct cypress_private *priv = usb_get_serial_port_data(port);
1114 1079
1115 dbg("%s - port %d", __func__, port->number);
1116
1117 spin_lock_irq(&priv->lock); 1080 spin_lock_irq(&priv->lock);
1118 priv->rx_flags = THROTTLED; 1081 priv->rx_flags = THROTTLED;
1119 spin_unlock_irq(&priv->lock); 1082 spin_unlock_irq(&priv->lock);
@@ -1126,8 +1089,6 @@ static void cypress_unthrottle(struct tty_struct *tty)
1126 struct cypress_private *priv = usb_get_serial_port_data(port); 1089 struct cypress_private *priv = usb_get_serial_port_data(port);
1127 int actually_throttled, result; 1090 int actually_throttled, result;
1128 1091
1129 dbg("%s - port %d", __func__, port->number);
1130
1131 spin_lock_irq(&priv->lock); 1092 spin_lock_irq(&priv->lock);
1132 actually_throttled = priv->rx_flags & ACTUALLY_THROTTLED; 1093 actually_throttled = priv->rx_flags & ACTUALLY_THROTTLED;
1133 priv->rx_flags = 0; 1094 priv->rx_flags = 0;
@@ -1161,8 +1122,6 @@ static void cypress_read_int_callback(struct urb *urb)
1161 int i = 0; 1122 int i = 0;
1162 int status = urb->status; 1123 int status = urb->status;
1163 1124
1164 dbg("%s - port %d", __func__, port->number);
1165
1166 switch (status) { 1125 switch (status) {
1167 case 0: /* success */ 1126 case 0: /* success */
1168 break; 1127 break;
@@ -1303,8 +1262,6 @@ static void cypress_write_int_callback(struct urb *urb)
1303 int result; 1262 int result;
1304 int status = urb->status; 1263 int status = urb->status;
1305 1264
1306 dbg("%s - port %d", __func__, port->number);
1307
1308 switch (status) { 1265 switch (status) {
1309 case 0: 1266 case 0:
1310 /* success */ 1267 /* success */
@@ -1346,7 +1303,7 @@ static void cypress_write_int_callback(struct urb *urb)
1346 cypress_send(port); 1303 cypress_send(port);
1347} 1304}
1348 1305
1349module_usb_serial_driver(cypress_driver, serial_drivers); 1306module_usb_serial_driver(serial_drivers, id_table_combined);
1350 1307
1351MODULE_AUTHOR(DRIVER_AUTHOR); 1308MODULE_AUTHOR(DRIVER_AUTHOR);
1352MODULE_DESCRIPTION(DRIVER_DESC); 1309MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
index 999f91bf70de..b5cd838093ef 100644
--- a/drivers/usb/serial/digi_acceleport.c
+++ b/drivers/usb/serial/digi_acceleport.c
@@ -271,14 +271,6 @@ static const struct usb_device_id id_table_4[] = {
271 271
272MODULE_DEVICE_TABLE(usb, id_table_combined); 272MODULE_DEVICE_TABLE(usb, id_table_combined);
273 273
274static struct usb_driver digi_driver = {
275 .name = "digi_acceleport",
276 .probe = usb_serial_probe,
277 .disconnect = usb_serial_disconnect,
278 .id_table = id_table_combined,
279};
280
281
282/* device info needed for the Digi serial converter */ 274/* device info needed for the Digi serial converter */
283 275
284static struct usb_serial_driver digi_acceleport_2_device = { 276static struct usb_serial_driver digi_acceleport_2_device = {
@@ -657,9 +649,6 @@ static void digi_rx_throttle(struct tty_struct *tty)
657 struct usb_serial_port *port = tty->driver_data; 649 struct usb_serial_port *port = tty->driver_data;
658 struct digi_port *priv = usb_get_serial_port_data(port); 650 struct digi_port *priv = usb_get_serial_port_data(port);
659 651
660
661 dbg("digi_rx_throttle: TOP: port=%d", priv->dp_port_num);
662
663 /* stop receiving characters by not resubmitting the read urb */ 652 /* stop receiving characters by not resubmitting the read urb */
664 spin_lock_irqsave(&priv->dp_port_lock, flags); 653 spin_lock_irqsave(&priv->dp_port_lock, flags);
665 priv->dp_throttled = 1; 654 priv->dp_throttled = 1;
@@ -675,8 +664,6 @@ static void digi_rx_unthrottle(struct tty_struct *tty)
675 struct usb_serial_port *port = tty->driver_data; 664 struct usb_serial_port *port = tty->driver_data;
676 struct digi_port *priv = usb_get_serial_port_data(port); 665 struct digi_port *priv = usb_get_serial_port_data(port);
677 666
678 dbg("digi_rx_unthrottle: TOP: port=%d", priv->dp_port_num);
679
680 spin_lock_irqsave(&priv->dp_port_lock, flags); 667 spin_lock_irqsave(&priv->dp_port_lock, flags);
681 668
682 /* restart read chain */ 669 /* restart read chain */
@@ -904,8 +891,6 @@ static int digi_tiocmget(struct tty_struct *tty)
904 unsigned int val; 891 unsigned int val;
905 unsigned long flags; 892 unsigned long flags;
906 893
907 dbg("%s: TOP: port=%d", __func__, priv->dp_port_num);
908
909 spin_lock_irqsave(&priv->dp_port_lock, flags); 894 spin_lock_irqsave(&priv->dp_port_lock, flags);
910 val = priv->dp_modem_signals; 895 val = priv->dp_modem_signals;
911 spin_unlock_irqrestore(&priv->dp_port_lock, flags); 896 spin_unlock_irqrestore(&priv->dp_port_lock, flags);
@@ -921,8 +906,6 @@ static int digi_tiocmset(struct tty_struct *tty,
921 unsigned int val; 906 unsigned int val;
922 unsigned long flags; 907 unsigned long flags;
923 908
924 dbg("%s: TOP: port=%d", __func__, priv->dp_port_num);
925
926 spin_lock_irqsave(&priv->dp_port_lock, flags); 909 spin_lock_irqsave(&priv->dp_port_lock, flags);
927 val = (priv->dp_modem_signals & ~clear) | set; 910 val = (priv->dp_modem_signals & ~clear) | set;
928 spin_unlock_irqrestore(&priv->dp_port_lock, flags); 911 spin_unlock_irqrestore(&priv->dp_port_lock, flags);
@@ -1013,8 +996,6 @@ static void digi_write_bulk_callback(struct urb *urb)
1013 int ret = 0; 996 int ret = 0;
1014 int status = urb->status; 997 int status = urb->status;
1015 998
1016 dbg("digi_write_bulk_callback: TOP, status=%d", status);
1017
1018 /* port and serial sanity check */ 999 /* port and serial sanity check */
1019 if (port == NULL || (priv = usb_get_serial_port_data(port)) == NULL) { 1000 if (port == NULL || (priv = usb_get_serial_port_data(port)) == NULL) {
1020 pr_err("%s: port or port->private is NULL, status=%d\n", 1001 pr_err("%s: port or port->private is NULL, status=%d\n",
@@ -1121,8 +1102,6 @@ static int digi_open(struct tty_struct *tty, struct usb_serial_port *port)
1121 struct digi_port *priv = usb_get_serial_port_data(port); 1102 struct digi_port *priv = usb_get_serial_port_data(port);
1122 struct ktermios not_termios; 1103 struct ktermios not_termios;
1123 1104
1124 dbg("digi_open: TOP: port=%d", priv->dp_port_num);
1125
1126 /* be sure the device is started up */ 1105 /* be sure the device is started up */
1127 if (digi_startup_device(port->serial) != 0) 1106 if (digi_startup_device(port->serial) != 0)
1128 return -ENXIO; 1107 return -ENXIO;
@@ -1160,8 +1139,6 @@ static void digi_close(struct usb_serial_port *port)
1160 unsigned char buf[32]; 1139 unsigned char buf[32];
1161 struct digi_port *priv = usb_get_serial_port_data(port); 1140 struct digi_port *priv = usb_get_serial_port_data(port);
1162 1141
1163 dbg("digi_close: TOP: port=%d", priv->dp_port_num);
1164
1165 mutex_lock(&port->serial->disc_mutex); 1142 mutex_lock(&port->serial->disc_mutex);
1166 /* if disconnected, just clear flags */ 1143 /* if disconnected, just clear flags */
1167 if (port->serial->disconnected) 1144 if (port->serial->disconnected)
@@ -1220,7 +1197,6 @@ exit:
1220 wake_up_interruptible(&priv->dp_close_wait); 1197 wake_up_interruptible(&priv->dp_close_wait);
1221 spin_unlock_irq(&priv->dp_port_lock); 1198 spin_unlock_irq(&priv->dp_port_lock);
1222 mutex_unlock(&port->serial->disc_mutex); 1199 mutex_unlock(&port->serial->disc_mutex);
1223 dbg("digi_close: done");
1224} 1200}
1225 1201
1226 1202
@@ -1269,8 +1245,6 @@ static int digi_startup(struct usb_serial *serial)
1269 struct digi_port *priv; 1245 struct digi_port *priv;
1270 struct digi_serial *serial_priv; 1246 struct digi_serial *serial_priv;
1271 1247
1272 dbg("digi_startup: TOP");
1273
1274 /* allocate the private data structures for all ports */ 1248 /* allocate the private data structures for all ports */
1275 /* number of regular ports + 1 for the out-of-band port */ 1249 /* number of regular ports + 1 for the out-of-band port */
1276 for (i = 0; i < serial->type->num_ports + 1; i++) { 1250 for (i = 0; i < serial->type->num_ports + 1; i++) {
@@ -1325,7 +1299,6 @@ static int digi_startup(struct usb_serial *serial)
1325static void digi_disconnect(struct usb_serial *serial) 1299static void digi_disconnect(struct usb_serial *serial)
1326{ 1300{
1327 int i; 1301 int i;
1328 dbg("digi_disconnect: TOP, in_interrupt()=%ld", in_interrupt());
1329 1302
1330 /* stop reads and writes on all ports */ 1303 /* stop reads and writes on all ports */
1331 for (i = 0; i < serial->type->num_ports + 1; i++) { 1304 for (i = 0; i < serial->type->num_ports + 1; i++) {
@@ -1338,7 +1311,6 @@ static void digi_disconnect(struct usb_serial *serial)
1338static void digi_release(struct usb_serial *serial) 1311static void digi_release(struct usb_serial *serial)
1339{ 1312{
1340 int i; 1313 int i;
1341 dbg("digi_release: TOP, in_interrupt()=%ld", in_interrupt());
1342 1314
1343 /* free the private data structures for all ports */ 1315 /* free the private data structures for all ports */
1344 /* number of regular ports + 1 for the out-of-band port */ 1316 /* number of regular ports + 1 for the out-of-band port */
@@ -1356,8 +1328,6 @@ static void digi_read_bulk_callback(struct urb *urb)
1356 int ret; 1328 int ret;
1357 int status = urb->status; 1329 int status = urb->status;
1358 1330
1359 dbg("digi_read_bulk_callback: TOP");
1360
1361 /* port sanity check, do not resubmit if port is not valid */ 1331 /* port sanity check, do not resubmit if port is not valid */
1362 if (port == NULL) 1332 if (port == NULL)
1363 return; 1333 return;
@@ -1507,9 +1477,6 @@ static int digi_read_oob_callback(struct urb *urb)
1507 int i; 1477 int i;
1508 unsigned int rts; 1478 unsigned int rts;
1509 1479
1510 dbg("digi_read_oob_callback: port=%d, len=%d",
1511 priv->dp_port_num, urb->actual_length);
1512
1513 /* handle each oob command */ 1480 /* handle each oob command */
1514 for (i = 0; i < urb->actual_length - 3;) { 1481 for (i = 0; i < urb->actual_length - 3;) {
1515 opcode = ((unsigned char *)urb->transfer_buffer)[i++]; 1482 opcode = ((unsigned char *)urb->transfer_buffer)[i++];
@@ -1580,7 +1547,7 @@ static int digi_read_oob_callback(struct urb *urb)
1580 1547
1581} 1548}
1582 1549
1583module_usb_serial_driver(digi_driver, serial_drivers); 1550module_usb_serial_driver(serial_drivers, id_table_combined);
1584 1551
1585MODULE_AUTHOR(DRIVER_AUTHOR); 1552MODULE_AUTHOR(DRIVER_AUTHOR);
1586MODULE_DESCRIPTION(DRIVER_DESC); 1553MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
index 5b99fc09e327..cdf61dd07318 100644
--- a/drivers/usb/serial/empeg.c
+++ b/drivers/usb/serial/empeg.c
@@ -51,13 +51,6 @@ static const struct usb_device_id id_table[] = {
51 51
52MODULE_DEVICE_TABLE(usb, id_table); 52MODULE_DEVICE_TABLE(usb, id_table);
53 53
54static struct usb_driver empeg_driver = {
55 .name = "empeg",
56 .probe = usb_serial_probe,
57 .disconnect = usb_serial_disconnect,
58 .id_table = id_table,
59};
60
61static struct usb_serial_driver empeg_device = { 54static struct usb_serial_driver empeg_device = {
62 .driver = { 55 .driver = {
63 .owner = THIS_MODULE, 56 .owner = THIS_MODULE,
@@ -80,14 +73,12 @@ static int empeg_startup(struct usb_serial *serial)
80{ 73{
81 int r; 74 int r;
82 75
83 dbg("%s", __func__);
84
85 if (serial->dev->actconfig->desc.bConfigurationValue != 1) { 76 if (serial->dev->actconfig->desc.bConfigurationValue != 1) {
86 dev_err(&serial->dev->dev, "active config #%d != 1 ??\n", 77 dev_err(&serial->dev->dev, "active config #%d != 1 ??\n",
87 serial->dev->actconfig->desc.bConfigurationValue); 78 serial->dev->actconfig->desc.bConfigurationValue);
88 return -ENODEV; 79 return -ENODEV;
89 } 80 }
90 dbg("%s - reset config", __func__); 81
91 r = usb_reset_configuration(serial->dev); 82 r = usb_reset_configuration(serial->dev);
92 83
93 /* continue on with initialization */ 84 /* continue on with initialization */
@@ -138,7 +129,7 @@ static void empeg_init_termios(struct tty_struct *tty)
138 tty_encode_baud_rate(tty, 115200, 115200); 129 tty_encode_baud_rate(tty, 115200, 115200);
139} 130}
140 131
141module_usb_serial_driver(empeg_driver, serial_drivers); 132module_usb_serial_driver(serial_drivers, id_table);
142 133
143MODULE_AUTHOR(DRIVER_AUTHOR); 134MODULE_AUTHOR(DRIVER_AUTHOR);
144MODULE_DESCRIPTION(DRIVER_DESC); 135MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/ezusb.c b/drivers/usb/serial/ezusb.c
index 3cfc762f5056..800e8eb60003 100644
--- a/drivers/usb/serial/ezusb.c
+++ b/drivers/usb/serial/ezusb.c
@@ -26,7 +26,6 @@ int ezusb_writememory(struct usb_serial *serial, int address,
26 int result; 26 int result;
27 unsigned char *transfer_buffer; 27 unsigned char *transfer_buffer;
28 28
29 /* dbg("ezusb_writememory %x, %d", address, length); */
30 if (!serial->dev) { 29 if (!serial->dev) {
31 printk(KERN_ERR "ezusb: %s - no physical device present, " 30 printk(KERN_ERR "ezusb: %s - no physical device present, "
32 "failing.\n", __func__); 31 "failing.\n", __func__);
@@ -50,7 +49,6 @@ int ezusb_set_reset(struct usb_serial *serial, unsigned char reset_bit)
50{ 49{
51 int response; 50 int response;
52 51
53 /* dbg("%s - %d", __func__, reset_bit); */
54 response = ezusb_writememory(serial, CPUCS_REG, &reset_bit, 1, 0xa0); 52 response = ezusb_writememory(serial, CPUCS_REG, &reset_bit, 1, 0xa0);
55 if (response < 0) 53 if (response < 0)
56 dev_err(&serial->dev->dev, "%s- %d failed\n", 54 dev_err(&serial->dev->dev, "%s- %d failed\n",
diff --git a/drivers/usb/serial/f81232.c b/drivers/usb/serial/f81232.c
index 88c0b1963920..499b15fd82f1 100644
--- a/drivers/usb/serial/f81232.c
+++ b/drivers/usb/serial/f81232.c
@@ -68,8 +68,6 @@ static void f81232_read_int_callback(struct urb *urb)
68 int status = urb->status; 68 int status = urb->status;
69 int retval; 69 int retval;
70 70
71 dbg("%s (%d)", __func__, port->number);
72
73 switch (status) { 71 switch (status) {
74 case 0: 72 case 0:
75 /* success */ 73 /* success */
@@ -78,12 +76,12 @@ static void f81232_read_int_callback(struct urb *urb)
78 case -ENOENT: 76 case -ENOENT:
79 case -ESHUTDOWN: 77 case -ESHUTDOWN:
80 /* this urb is terminated, clean up */ 78 /* this urb is terminated, clean up */
81 dbg("%s - urb shutting down with status: %d", __func__, 79 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
82 status); 80 __func__, status);
83 return; 81 return;
84 default: 82 default:
85 dbg("%s - nonzero urb status received: %d", __func__, 83 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
86 status); 84 __func__, status);
87 goto exit; 85 goto exit;
88 } 86 }
89 87
@@ -133,7 +131,7 @@ static void f81232_process_read_urb(struct urb *urb)
133 tty_flag = TTY_PARITY; 131 tty_flag = TTY_PARITY;
134 else if (line_status & UART_FRAME_ERROR) 132 else if (line_status & UART_FRAME_ERROR)
135 tty_flag = TTY_FRAME; 133 tty_flag = TTY_FRAME;
136 dbg("%s - tty_flag = %d", __func__, tty_flag); 134 dev_dbg(&port->dev, "%s - tty_flag = %d\n", __func__, tty_flag);
137 135
138 /* overrun is special, not associated with a char */ 136 /* overrun is special, not associated with a char */
139 if (line_status & UART_OVERRUN_ERROR) 137 if (line_status & UART_OVERRUN_ERROR)
@@ -203,7 +201,6 @@ static int f81232_open(struct tty_struct *tty, struct usb_serial_port *port)
203 if (tty) 201 if (tty)
204 f81232_set_termios(tty, port, &tmp_termios); 202 f81232_set_termios(tty, port, &tmp_termios);
205 203
206 dbg("%s - submitting interrupt urb", __func__);
207 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 204 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
208 if (result) { 205 if (result) {
209 dev_err(&port->dev, "%s - failed submitting interrupt urb," 206 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
@@ -293,7 +290,9 @@ static int f81232_ioctl(struct tty_struct *tty,
293{ 290{
294 struct serial_struct ser; 291 struct serial_struct ser;
295 struct usb_serial_port *port = tty->driver_data; 292 struct usb_serial_port *port = tty->driver_data;
296 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd); 293
294 dev_dbg(&port->dev, "%s (%d) cmd = 0x%04x\n", __func__,
295 port->number, cmd);
297 296
298 switch (cmd) { 297 switch (cmd) {
299 case TIOCGSERIAL: 298 case TIOCGSERIAL:
@@ -309,10 +308,12 @@ static int f81232_ioctl(struct tty_struct *tty,
309 return 0; 308 return 0;
310 309
311 case TIOCMIWAIT: 310 case TIOCMIWAIT:
312 dbg("%s (%d) TIOCMIWAIT", __func__, port->number); 311 dev_dbg(&port->dev, "%s (%d) TIOCMIWAIT\n", __func__,
312 port->number);
313 return wait_modem_info(port, arg); 313 return wait_modem_info(port, arg);
314 default: 314 default:
315 dbg("%s not supported = 0x%04x", __func__, cmd); 315 dev_dbg(&port->dev, "%s not supported = 0x%04x\n",
316 __func__, cmd);
316 break; 317 break;
317 } 318 }
318 return -ENOIOCTLCMD; 319 return -ENOIOCTLCMD;
@@ -353,24 +354,12 @@ static void f81232_release(struct usb_serial *serial)
353 } 354 }
354} 355}
355 356
356static struct usb_driver f81232_driver = {
357 .name = "f81232",
358 .probe = usb_serial_probe,
359 .disconnect = usb_serial_disconnect,
360 .id_table = id_table,
361 .suspend = usb_serial_suspend,
362 .resume = usb_serial_resume,
363 .no_dynamic_id = 1,
364 .supports_autosuspend = 1,
365};
366
367static struct usb_serial_driver f81232_device = { 357static struct usb_serial_driver f81232_device = {
368 .driver = { 358 .driver = {
369 .owner = THIS_MODULE, 359 .owner = THIS_MODULE,
370 .name = "f81232", 360 .name = "f81232",
371 }, 361 },
372 .id_table = id_table, 362 .id_table = id_table,
373 .usb_driver = &f81232_driver,
374 .num_ports = 1, 363 .num_ports = 1,
375 .bulk_in_size = 256, 364 .bulk_in_size = 256,
376 .bulk_out_size = 256, 365 .bulk_out_size = 256,
@@ -394,7 +383,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
394 NULL, 383 NULL,
395}; 384};
396 385
397module_usb_serial_driver(f81232_driver, serial_drivers); 386module_usb_serial_driver(serial_drivers, id_table);
398 387
399MODULE_DESCRIPTION("Fintek F81232 USB to serial adaptor driver"); 388MODULE_DESCRIPTION("Fintek F81232 USB to serial adaptor driver");
400MODULE_AUTHOR("Greg Kroah-Hartman <gregkh@linuxfoundation.org"); 389MODULE_AUTHOR("Greg Kroah-Hartman <gregkh@linuxfoundation.org");
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 02e7f2d32d52..8c084ea34e26 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -809,6 +809,7 @@ static struct usb_device_id id_table_combined [] = {
809 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, 809 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
810 { USB_DEVICE(LARSENBRUSGAARD_VID, LB_ALTITRACK_PID) }, 810 { USB_DEVICE(LARSENBRUSGAARD_VID, LB_ALTITRACK_PID) },
811 { USB_DEVICE(GN_OTOMETRICS_VID, AURICAL_USB_PID) }, 811 { USB_DEVICE(GN_OTOMETRICS_VID, AURICAL_USB_PID) },
812 { USB_DEVICE(PI_VID, PI_E861_PID) },
812 { USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) }, 813 { USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) },
813 { USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID), 814 { USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID),
814 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, 815 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
@@ -861,13 +862,6 @@ static struct usb_device_id id_table_combined [] = {
861 862
862MODULE_DEVICE_TABLE(usb, id_table_combined); 863MODULE_DEVICE_TABLE(usb, id_table_combined);
863 864
864static struct usb_driver ftdi_driver = {
865 .name = "ftdi_sio",
866 .probe = usb_serial_probe,
867 .disconnect = usb_serial_disconnect,
868 .id_table = id_table_combined,
869};
870
871static const char *ftdi_chip_name[] = { 865static const char *ftdi_chip_name[] = {
872 [SIO] = "SIO", /* the serial part of FT8U100AX */ 866 [SIO] = "SIO", /* the serial part of FT8U100AX */
873 [FT8U232AM] = "FT8U232AM", 867 [FT8U232AM] = "FT8U232AM",
@@ -1285,8 +1279,6 @@ static int read_latency_timer(struct usb_serial_port *port)
1285 unsigned char *buf; 1279 unsigned char *buf;
1286 int rv; 1280 int rv;
1287 1281
1288 dbg("%s", __func__);
1289
1290 buf = kmalloc(1, GFP_KERNEL); 1282 buf = kmalloc(1, GFP_KERNEL);
1291 if (!buf) 1283 if (!buf)
1292 return -ENOMEM; 1284 return -ENOMEM;
@@ -1593,8 +1585,6 @@ static int create_sysfs_attrs(struct usb_serial_port *port)
1593 struct ftdi_private *priv = usb_get_serial_port_data(port); 1585 struct ftdi_private *priv = usb_get_serial_port_data(port);
1594 int retval = 0; 1586 int retval = 0;
1595 1587
1596 dbg("%s", __func__);
1597
1598 /* XXX I've no idea if the original SIO supports the event_char 1588 /* XXX I've no idea if the original SIO supports the event_char
1599 * sysfs parameter, so I'm playing it safe. */ 1589 * sysfs parameter, so I'm playing it safe. */
1600 if (priv->chip_type != SIO) { 1590 if (priv->chip_type != SIO) {
@@ -1619,8 +1609,6 @@ static void remove_sysfs_attrs(struct usb_serial_port *port)
1619{ 1609{
1620 struct ftdi_private *priv = usb_get_serial_port_data(port); 1610 struct ftdi_private *priv = usb_get_serial_port_data(port);
1621 1611
1622 dbg("%s", __func__);
1623
1624 /* XXX see create_sysfs_attrs */ 1612 /* XXX see create_sysfs_attrs */
1625 if (priv->chip_type != SIO) { 1613 if (priv->chip_type != SIO) {
1626 device_remove_file(&port->dev, &dev_attr_event_char); 1614 device_remove_file(&port->dev, &dev_attr_event_char);
@@ -1667,8 +1655,6 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)
1667 struct ftdi_sio_quirk *quirk = usb_get_serial_data(port->serial); 1655 struct ftdi_sio_quirk *quirk = usb_get_serial_data(port->serial);
1668 1656
1669 1657
1670 dbg("%s", __func__);
1671
1672 priv = kzalloc(sizeof(struct ftdi_private), GFP_KERNEL); 1658 priv = kzalloc(sizeof(struct ftdi_private), GFP_KERNEL);
1673 if (!priv) { 1659 if (!priv) {
1674 dev_err(&port->dev, "%s- kmalloc(%Zd) failed.\n", __func__, 1660 dev_err(&port->dev, "%s- kmalloc(%Zd) failed.\n", __func__,
@@ -1704,8 +1690,6 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)
1704/* Called from usbserial:serial_probe */ 1690/* Called from usbserial:serial_probe */
1705static void ftdi_USB_UIRT_setup(struct ftdi_private *priv) 1691static void ftdi_USB_UIRT_setup(struct ftdi_private *priv)
1706{ 1692{
1707 dbg("%s", __func__);
1708
1709 priv->flags |= ASYNC_SPD_CUST; 1693 priv->flags |= ASYNC_SPD_CUST;
1710 priv->custom_divisor = 77; 1694 priv->custom_divisor = 77;
1711 priv->force_baud = 38400; 1695 priv->force_baud = 38400;
@@ -1716,8 +1700,6 @@ static void ftdi_USB_UIRT_setup(struct ftdi_private *priv)
1716 1700
1717static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv) 1701static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv)
1718{ 1702{
1719 dbg("%s", __func__);
1720
1721 priv->flags |= ASYNC_SPD_CUST; 1703 priv->flags |= ASYNC_SPD_CUST;
1722 priv->custom_divisor = 240; 1704 priv->custom_divisor = 240;
1723 priv->force_baud = 38400; 1705 priv->force_baud = 38400;
@@ -1767,8 +1749,6 @@ static int ftdi_jtag_probe(struct usb_serial *serial)
1767 struct usb_device *udev = serial->dev; 1749 struct usb_device *udev = serial->dev;
1768 struct usb_interface *interface = serial->interface; 1750 struct usb_interface *interface = serial->interface;
1769 1751
1770 dbg("%s", __func__);
1771
1772 if (interface == udev->actconfig->interface[0]) { 1752 if (interface == udev->actconfig->interface[0]) {
1773 dev_info(&udev->dev, 1753 dev_info(&udev->dev,
1774 "Ignoring serial port reserved for JTAG\n"); 1754 "Ignoring serial port reserved for JTAG\n");
@@ -1782,8 +1762,6 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial)
1782{ 1762{
1783 struct usb_device *udev = serial->dev; 1763 struct usb_device *udev = serial->dev;
1784 1764
1785 dbg("%s", __func__);
1786
1787 if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) || 1765 if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) ||
1788 (udev->product && !strcmp(udev->product, "BeagleBone/XDS100"))) 1766 (udev->product && !strcmp(udev->product, "BeagleBone/XDS100")))
1789 return ftdi_jtag_probe(serial); 1767 return ftdi_jtag_probe(serial);
@@ -1800,8 +1778,6 @@ static int ftdi_stmclite_probe(struct usb_serial *serial)
1800 struct usb_device *udev = serial->dev; 1778 struct usb_device *udev = serial->dev;
1801 struct usb_interface *interface = serial->interface; 1779 struct usb_interface *interface = serial->interface;
1802 1780
1803 dbg("%s", __func__);
1804
1805 if (interface == udev->actconfig->interface[2]) 1781 if (interface == udev->actconfig->interface[2])
1806 return 0; 1782 return 0;
1807 1783
@@ -1839,8 +1815,6 @@ static int ftdi_sio_port_remove(struct usb_serial_port *port)
1839{ 1815{
1840 struct ftdi_private *priv = usb_get_serial_port_data(port); 1816 struct ftdi_private *priv = usb_get_serial_port_data(port);
1841 1817
1842 dbg("%s", __func__);
1843
1844 priv->dev_gone = true; 1818 priv->dev_gone = true;
1845 wake_up_interruptible_all(&priv->delta_msr_wait); 1819 wake_up_interruptible_all(&priv->delta_msr_wait);
1846 1820
@@ -1858,8 +1832,6 @@ static int ftdi_open(struct tty_struct *tty, struct usb_serial_port *port)
1858 struct ftdi_private *priv = usb_get_serial_port_data(port); 1832 struct ftdi_private *priv = usb_get_serial_port_data(port);
1859 int result; 1833 int result;
1860 1834
1861 dbg("%s", __func__);
1862
1863 /* No error checking for this (will get errors later anyway) */ 1835 /* No error checking for this (will get errors later anyway) */
1864 /* See ftdi_sio.h for description of what is reset */ 1836 /* See ftdi_sio.h for description of what is reset */
1865 usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 1837 usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
@@ -1918,8 +1890,6 @@ static void ftdi_close(struct usb_serial_port *port)
1918{ 1890{
1919 struct ftdi_private *priv = usb_get_serial_port_data(port); 1891 struct ftdi_private *priv = usb_get_serial_port_data(port);
1920 1892
1921 dbg("%s", __func__);
1922
1923 usb_serial_generic_close(port); 1893 usb_serial_generic_close(port);
1924 kref_put(&priv->kref, ftdi_sio_priv_release); 1894 kref_put(&priv->kref, ftdi_sio_priv_release);
1925} 1895}
@@ -1976,8 +1946,6 @@ static int ftdi_process_packet(struct tty_struct *tty,
1976 char flag; 1946 char flag;
1977 char *ch; 1947 char *ch;
1978 1948
1979 dbg("%s - port %d", __func__, port->number);
1980
1981 if (len < 2) { 1949 if (len < 2) {
1982 dbg("malformed packet"); 1950 dbg("malformed packet");
1983 return 0; 1951 return 0;
@@ -2121,8 +2089,6 @@ static void ftdi_set_termios(struct tty_struct *tty,
2121 unsigned char vstop; 2089 unsigned char vstop;
2122 unsigned char vstart; 2090 unsigned char vstart;
2123 2091
2124 dbg("%s", __func__);
2125
2126 /* Force baud rate if this device requires it, unless it is set to 2092 /* Force baud rate if this device requires it, unless it is set to
2127 B0. */ 2093 B0. */
2128 if (priv->force_baud && ((termios->c_cflag & CBAUD) != B0)) { 2094 if (priv->force_baud && ((termios->c_cflag & CBAUD) != B0)) {
@@ -2295,8 +2261,6 @@ static int ftdi_tiocmget(struct tty_struct *tty)
2295 int len; 2261 int len;
2296 int ret; 2262 int ret;
2297 2263
2298 dbg("%s TIOCMGET", __func__);
2299
2300 buf = kmalloc(2, GFP_KERNEL); 2264 buf = kmalloc(2, GFP_KERNEL);
2301 if (!buf) 2265 if (!buf)
2302 return -ENOMEM; 2266 return -ENOMEM;
@@ -2346,7 +2310,7 @@ static int ftdi_tiocmset(struct tty_struct *tty,
2346 unsigned int set, unsigned int clear) 2310 unsigned int set, unsigned int clear)
2347{ 2311{
2348 struct usb_serial_port *port = tty->driver_data; 2312 struct usb_serial_port *port = tty->driver_data;
2349 dbg("%s TIOCMSET", __func__); 2313
2350 return update_mctrl(port, set, clear); 2314 return update_mctrl(port, set, clear);
2351} 2315}
2352 2316
@@ -2435,7 +2399,6 @@ static int __init ftdi_init(void)
2435{ 2399{
2436 int retval; 2400 int retval;
2437 2401
2438 dbg("%s", __func__);
2439 if (vendor > 0 && product > 0) { 2402 if (vendor > 0 && product > 0) {
2440 /* Add user specified VID/PID to reserved element of table. */ 2403 /* Add user specified VID/PID to reserved element of table. */
2441 int i; 2404 int i;
@@ -2445,7 +2408,7 @@ static int __init ftdi_init(void)
2445 id_table_combined[i].idVendor = vendor; 2408 id_table_combined[i].idVendor = vendor;
2446 id_table_combined[i].idProduct = product; 2409 id_table_combined[i].idProduct = product;
2447 } 2410 }
2448 retval = usb_serial_register_drivers(&ftdi_driver, serial_drivers); 2411 retval = usb_serial_register_drivers(serial_drivers, KBUILD_MODNAME, id_table_combined);
2449 if (retval == 0) 2412 if (retval == 0)
2450 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" 2413 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
2451 DRIVER_DESC "\n"); 2414 DRIVER_DESC "\n");
@@ -2454,9 +2417,7 @@ static int __init ftdi_init(void)
2454 2417
2455static void __exit ftdi_exit(void) 2418static void __exit ftdi_exit(void)
2456{ 2419{
2457 dbg("%s", __func__); 2420 usb_serial_deregister_drivers(serial_drivers);
2458
2459 usb_serial_deregister_drivers(&ftdi_driver, serial_drivers);
2460} 2421}
2461 2422
2462 2423
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
index 0838baf892f3..f3c7c78ede33 100644
--- a/drivers/usb/serial/ftdi_sio_ids.h
+++ b/drivers/usb/serial/ftdi_sio_ids.h
@@ -785,6 +785,14 @@
785#define RTSYSTEMS_SERIAL_VX7_PID 0x9e52 /* Serial converter for VX-7 Radios using FT232RL */ 785#define RTSYSTEMS_SERIAL_VX7_PID 0x9e52 /* Serial converter for VX-7 Radios using FT232RL */
786#define RTSYSTEMS_CT29B_PID 0x9e54 /* CT29B Radio Cable */ 786#define RTSYSTEMS_CT29B_PID 0x9e54 /* CT29B Radio Cable */
787 787
788
789/*
790 * Physik Instrumente
791 * http://www.physikinstrumente.com/en/products/
792 */
793#define PI_VID 0x1a72 /* Vendor ID */
794#define PI_E861_PID 0x1008 /* E-861 piezo controller USB connection */
795
788/* 796/*
789 * Bayer Ascensia Contour blood glucose meter USB-converter cable. 797 * Bayer Ascensia Contour blood glucose meter USB-converter cable.
790 * http://winglucofacts.com/cables/ 798 * http://winglucofacts.com/cables/
diff --git a/drivers/usb/serial/funsoft.c b/drivers/usb/serial/funsoft.c
index 4577b3607922..235707961ca3 100644
--- a/drivers/usb/serial/funsoft.c
+++ b/drivers/usb/serial/funsoft.c
@@ -24,13 +24,6 @@ static const struct usb_device_id id_table[] = {
24}; 24};
25MODULE_DEVICE_TABLE(usb, id_table); 25MODULE_DEVICE_TABLE(usb, id_table);
26 26
27static struct usb_driver funsoft_driver = {
28 .name = "funsoft",
29 .probe = usb_serial_probe,
30 .disconnect = usb_serial_disconnect,
31 .id_table = id_table,
32};
33
34static struct usb_serial_driver funsoft_device = { 27static struct usb_serial_driver funsoft_device = {
35 .driver = { 28 .driver = {
36 .owner = THIS_MODULE, 29 .owner = THIS_MODULE,
@@ -44,7 +37,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
44 &funsoft_device, NULL 37 &funsoft_device, NULL
45}; 38};
46 39
47module_usb_serial_driver(funsoft_driver, serial_drivers); 40module_usb_serial_driver(serial_drivers, id_table);
48 41
49MODULE_LICENSE("GPL"); 42MODULE_LICENSE("GPL");
50 43
diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
index e8eb6347bf3a..346c15a51066 100644
--- a/drivers/usb/serial/garmin_gps.c
+++ b/drivers/usb/serial/garmin_gps.c
@@ -216,16 +216,8 @@ static const struct usb_device_id id_table[] = {
216 { USB_DEVICE(GARMIN_VENDOR_ID, 3) }, 216 { USB_DEVICE(GARMIN_VENDOR_ID, 3) },
217 { } /* Terminating entry */ 217 { } /* Terminating entry */
218}; 218};
219
220MODULE_DEVICE_TABLE(usb, id_table); 219MODULE_DEVICE_TABLE(usb, id_table);
221 220
222static struct usb_driver garmin_driver = {
223 .name = "garmin_gps",
224 .probe = usb_serial_probe,
225 .disconnect = usb_serial_disconnect,
226 .id_table = id_table,
227};
228
229 221
230static inline int getLayerId(const __u8 *usbPacket) 222static inline int getLayerId(const __u8 *usbPacket)
231{ 223{
@@ -345,8 +337,6 @@ static void pkt_clear(struct garmin_data *garmin_data_p)
345 unsigned long flags; 337 unsigned long flags;
346 struct garmin_packet *result = NULL; 338 struct garmin_packet *result = NULL;
347 339
348 dbg("%s", __func__);
349
350 spin_lock_irqsave(&garmin_data_p->lock, flags); 340 spin_lock_irqsave(&garmin_data_p->lock, flags);
351 while (!list_empty(&garmin_data_p->pktlist)) { 341 while (!list_empty(&garmin_data_p->pktlist)) {
352 result = (struct garmin_packet *)garmin_data_p->pktlist.next; 342 result = (struct garmin_packet *)garmin_data_p->pktlist.next;
@@ -939,8 +929,6 @@ static int garmin_open(struct tty_struct *tty, struct usb_serial_port *port)
939 int status = 0; 929 int status = 0;
940 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); 930 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
941 931
942 dbg("%s - port %d", __func__, port->number);
943
944 spin_lock_irqsave(&garmin_data_p->lock, flags); 932 spin_lock_irqsave(&garmin_data_p->lock, flags);
945 garmin_data_p->mode = initial_mode; 933 garmin_data_p->mode = initial_mode;
946 garmin_data_p->count = 0; 934 garmin_data_p->count = 0;
@@ -996,8 +984,6 @@ static void garmin_write_bulk_callback(struct urb *urb)
996 struct garmin_data *garmin_data_p = 984 struct garmin_data *garmin_data_p =
997 usb_get_serial_port_data(port); 985 usb_get_serial_port_data(port);
998 986
999 dbg("%s - port %d", __func__, port->number);
1000
1001 if (GARMIN_LAYERID_APPL == getLayerId(urb->transfer_buffer)) { 987 if (GARMIN_LAYERID_APPL == getLayerId(urb->transfer_buffer)) {
1002 988
1003 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { 989 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) {
@@ -1027,9 +1013,6 @@ static int garmin_write_bulk(struct usb_serial_port *port,
1027 unsigned char *buffer; 1013 unsigned char *buffer;
1028 int status; 1014 int status;
1029 1015
1030 dbg("%s - port %d, state %d", __func__, port->number,
1031 garmin_data_p->state);
1032
1033 spin_lock_irqsave(&garmin_data_p->lock, flags); 1016 spin_lock_irqsave(&garmin_data_p->lock, flags);
1034 garmin_data_p->flags &= ~FLAGS_DROP_DATA; 1017 garmin_data_p->flags &= ~FLAGS_DROP_DATA;
1035 spin_unlock_irqrestore(&garmin_data_p->lock, flags); 1018 spin_unlock_irqrestore(&garmin_data_p->lock, flags);
@@ -1224,8 +1207,6 @@ static void garmin_read_bulk_callback(struct urb *urb)
1224 int status = urb->status; 1207 int status = urb->status;
1225 int retval; 1208 int retval;
1226 1209
1227 dbg("%s - port %d", __func__, port->number);
1228
1229 if (!serial) { 1210 if (!serial) {
1230 dbg("%s - bad serial pointer, exiting", __func__); 1211 dbg("%s - bad serial pointer, exiting", __func__);
1231 return; 1212 return;
@@ -1384,7 +1365,6 @@ static void garmin_throttle(struct tty_struct *tty)
1384 struct usb_serial_port *port = tty->driver_data; 1365 struct usb_serial_port *port = tty->driver_data;
1385 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); 1366 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
1386 1367
1387 dbg("%s - port %d", __func__, port->number);
1388 /* set flag, data received will be put into a queue 1368 /* set flag, data received will be put into a queue
1389 for later processing */ 1369 for later processing */
1390 spin_lock_irq(&garmin_data_p->lock); 1370 spin_lock_irq(&garmin_data_p->lock);
@@ -1399,7 +1379,6 @@ static void garmin_unthrottle(struct tty_struct *tty)
1399 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); 1379 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
1400 int status; 1380 int status;
1401 1381
1402 dbg("%s - port %d", __func__, port->number);
1403 spin_lock_irq(&garmin_data_p->lock); 1382 spin_lock_irq(&garmin_data_p->lock);
1404 garmin_data_p->flags &= ~FLAGS_THROTTLED; 1383 garmin_data_p->flags &= ~FLAGS_THROTTLED;
1405 spin_unlock_irq(&garmin_data_p->lock); 1384 spin_unlock_irq(&garmin_data_p->lock);
@@ -1441,8 +1420,6 @@ static int garmin_attach(struct usb_serial *serial)
1441 struct usb_serial_port *port = serial->port[0]; 1420 struct usb_serial_port *port = serial->port[0];
1442 struct garmin_data *garmin_data_p = NULL; 1421 struct garmin_data *garmin_data_p = NULL;
1443 1422
1444 dbg("%s", __func__);
1445
1446 garmin_data_p = kzalloc(sizeof(struct garmin_data), GFP_KERNEL); 1423 garmin_data_p = kzalloc(sizeof(struct garmin_data), GFP_KERNEL);
1447 if (garmin_data_p == NULL) { 1424 if (garmin_data_p == NULL) {
1448 dev_err(&port->dev, "%s - Out of memory\n", __func__); 1425 dev_err(&port->dev, "%s - Out of memory\n", __func__);
@@ -1471,8 +1448,6 @@ static void garmin_disconnect(struct usb_serial *serial)
1471 struct usb_serial_port *port = serial->port[0]; 1448 struct usb_serial_port *port = serial->port[0];
1472 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); 1449 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
1473 1450
1474 dbg("%s", __func__);
1475
1476 usb_kill_urb(port->interrupt_in_urb); 1451 usb_kill_urb(port->interrupt_in_urb);
1477 del_timer_sync(&garmin_data_p->timer); 1452 del_timer_sync(&garmin_data_p->timer);
1478} 1453}
@@ -1483,8 +1458,6 @@ static void garmin_release(struct usb_serial *serial)
1483 struct usb_serial_port *port = serial->port[0]; 1458 struct usb_serial_port *port = serial->port[0];
1484 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); 1459 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
1485 1460
1486 dbg("%s", __func__);
1487
1488 kfree(garmin_data_p); 1461 kfree(garmin_data_p);
1489} 1462}
1490 1463
@@ -1516,7 +1489,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
1516 &garmin_device, NULL 1489 &garmin_device, NULL
1517}; 1490};
1518 1491
1519module_usb_serial_driver(garmin_driver, serial_drivers); 1492module_usb_serial_driver(serial_drivers, id_table);
1520 1493
1521MODULE_AUTHOR(DRIVER_AUTHOR); 1494MODULE_AUTHOR(DRIVER_AUTHOR);
1522MODULE_DESCRIPTION(DRIVER_DESC); 1495MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
index 664deb63807c..105a6d898ca4 100644
--- a/drivers/usb/serial/generic.c
+++ b/drivers/usb/serial/generic.c
@@ -28,9 +28,6 @@ static int debug;
28 28
29#ifdef CONFIG_USB_SERIAL_GENERIC 29#ifdef CONFIG_USB_SERIAL_GENERIC
30 30
31static int generic_probe(struct usb_interface *interface,
32 const struct usb_device_id *id);
33
34static __u16 vendor = 0x05f9; 31static __u16 vendor = 0x05f9;
35static __u16 product = 0xffff; 32static __u16 product = 0xffff;
36 33
@@ -49,13 +46,6 @@ static const struct usb_device_id generic_serial_ids[] = {
49 {} 46 {}
50}; 47};
51 48
52static struct usb_driver generic_driver = {
53 .name = "usbserial_generic",
54 .probe = generic_probe,
55 .disconnect = usb_serial_disconnect,
56 .id_table = generic_serial_ids,
57};
58
59/* All of the device info needed for the Generic Serial Converter */ 49/* All of the device info needed for the Generic Serial Converter */
60struct usb_serial_driver usb_serial_generic_device = { 50struct usb_serial_driver usb_serial_generic_device = {
61 .driver = { 51 .driver = {
@@ -75,16 +65,6 @@ static struct usb_serial_driver * const serial_drivers[] = {
75 &usb_serial_generic_device, NULL 65 &usb_serial_generic_device, NULL
76}; 66};
77 67
78static int generic_probe(struct usb_interface *interface,
79 const struct usb_device_id *id)
80{
81 const struct usb_device_id *id_pattern;
82
83 id_pattern = usb_match_id(interface, generic_device_ids);
84 if (id_pattern != NULL)
85 return usb_serial_probe(interface, id);
86 return -ENODEV;
87}
88#endif 68#endif
89 69
90int usb_serial_generic_register(int _debug) 70int usb_serial_generic_register(int _debug)
@@ -99,7 +79,7 @@ int usb_serial_generic_register(int _debug)
99 USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT; 79 USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT;
100 80
101 /* register our generic driver with ourselves */ 81 /* register our generic driver with ourselves */
102 retval = usb_serial_register_drivers(&generic_driver, serial_drivers); 82 retval = usb_serial_register_drivers(serial_drivers, "usbserial_generic", generic_serial_ids);
103#endif 83#endif
104 return retval; 84 return retval;
105} 85}
@@ -108,7 +88,7 @@ void usb_serial_generic_deregister(void)
108{ 88{
109#ifdef CONFIG_USB_SERIAL_GENERIC 89#ifdef CONFIG_USB_SERIAL_GENERIC
110 /* remove our generic driver */ 90 /* remove our generic driver */
111 usb_serial_deregister_drivers(&generic_driver, serial_drivers); 91 usb_serial_deregister_drivers(serial_drivers);
112#endif 92#endif
113} 93}
114 94
@@ -117,8 +97,6 @@ int usb_serial_generic_open(struct tty_struct *tty, struct usb_serial_port *port
117 int result = 0; 97 int result = 0;
118 unsigned long flags; 98 unsigned long flags;
119 99
120 dbg("%s - port %d", __func__, port->number);
121
122 /* clear the throttle flags */ 100 /* clear the throttle flags */
123 spin_lock_irqsave(&port->lock, flags); 101 spin_lock_irqsave(&port->lock, flags);
124 port->throttled = 0; 102 port->throttled = 0;
@@ -139,12 +117,9 @@ static void generic_cleanup(struct usb_serial_port *port)
139 unsigned long flags; 117 unsigned long flags;
140 int i; 118 int i;
141 119
142 dbg("%s - port %d", __func__, port->number);
143
144 if (serial->dev) { 120 if (serial->dev) {
145 /* shutdown any bulk transfers that might be going on */ 121 /* shutdown any bulk transfers that might be going on */
146 if (port->bulk_out_size) { 122 if (port->bulk_out_size) {
147 usb_kill_urb(port->write_urb);
148 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) 123 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
149 usb_kill_urb(port->write_urbs[i]); 124 usb_kill_urb(port->write_urbs[i]);
150 125
@@ -161,7 +136,6 @@ static void generic_cleanup(struct usb_serial_port *port)
161 136
162void usb_serial_generic_close(struct usb_serial_port *port) 137void usb_serial_generic_close(struct usb_serial_port *port)
163{ 138{
164 dbg("%s - port %d", __func__, port->number);
165 generic_cleanup(port); 139 generic_cleanup(port);
166} 140}
167EXPORT_SYMBOL_GPL(usb_serial_generic_close); 141EXPORT_SYMBOL_GPL(usb_serial_generic_close);
@@ -249,8 +223,6 @@ int usb_serial_generic_write(struct tty_struct *tty,
249{ 223{
250 int result; 224 int result;
251 225
252 dbg("%s - port %d", __func__, port->number);
253
254 /* only do something if we have a bulk out endpoint */ 226 /* only do something if we have a bulk out endpoint */
255 if (!port->bulk_out_size) 227 if (!port->bulk_out_size)
256 return -ENODEV; 228 return -ENODEV;
@@ -273,8 +245,6 @@ int usb_serial_generic_write_room(struct tty_struct *tty)
273 unsigned long flags; 245 unsigned long flags;
274 int room; 246 int room;
275 247
276 dbg("%s - port %d", __func__, port->number);
277
278 if (!port->bulk_out_size) 248 if (!port->bulk_out_size)
279 return 0; 249 return 0;
280 250
@@ -282,7 +252,7 @@ int usb_serial_generic_write_room(struct tty_struct *tty)
282 room = kfifo_avail(&port->write_fifo); 252 room = kfifo_avail(&port->write_fifo);
283 spin_unlock_irqrestore(&port->lock, flags); 253 spin_unlock_irqrestore(&port->lock, flags);
284 254
285 dbg("%s - returns %d", __func__, room); 255 dev_dbg(&port->dev, "%s - returns %d\n", __func__, room);
286 return room; 256 return room;
287} 257}
288 258
@@ -292,8 +262,6 @@ int usb_serial_generic_chars_in_buffer(struct tty_struct *tty)
292 unsigned long flags; 262 unsigned long flags;
293 int chars; 263 int chars;
294 264
295 dbg("%s - port %d", __func__, port->number);
296
297 if (!port->bulk_out_size) 265 if (!port->bulk_out_size)
298 return 0; 266 return 0;
299 267
@@ -301,7 +269,7 @@ int usb_serial_generic_chars_in_buffer(struct tty_struct *tty)
301 chars = kfifo_len(&port->write_fifo) + port->tx_bytes; 269 chars = kfifo_len(&port->write_fifo) + port->tx_bytes;
302 spin_unlock_irqrestore(&port->lock, flags); 270 spin_unlock_irqrestore(&port->lock, flags);
303 271
304 dbg("%s - returns %d", __func__, chars); 272 dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
305 return chars; 273 return chars;
306} 274}
307 275
@@ -313,7 +281,8 @@ static int usb_serial_generic_submit_read_urb(struct usb_serial_port *port,
313 if (!test_and_clear_bit(index, &port->read_urbs_free)) 281 if (!test_and_clear_bit(index, &port->read_urbs_free))
314 return 0; 282 return 0;
315 283
316 dbg("%s - port %d, urb %d\n", __func__, port->number, index); 284 dev_dbg(&port->dev, "%s - port %d, urb %d\n", __func__,
285 port->number, index);
317 286
318 res = usb_submit_urb(port->read_urbs[index], mem_flags); 287 res = usb_submit_urb(port->read_urbs[index], mem_flags);
319 if (res) { 288 if (res) {
@@ -335,8 +304,6 @@ int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port,
335 int res; 304 int res;
336 int i; 305 int i;
337 306
338 dbg("%s - port %d", __func__, port->number);
339
340 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) { 307 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) {
341 res = usb_serial_generic_submit_read_urb(port, i, mem_flags); 308 res = usb_serial_generic_submit_read_urb(port, i, mem_flags);
342 if (res) 309 if (res)
@@ -395,10 +362,12 @@ void usb_serial_generic_read_bulk_callback(struct urb *urb)
395 } 362 }
396 set_bit(i, &port->read_urbs_free); 363 set_bit(i, &port->read_urbs_free);
397 364
398 dbg("%s - port %d, urb %d, len %d\n", __func__, port->number, i, 365 dev_dbg(&port->dev, "%s - port %d, urb %d, len %d\n",
399 urb->actual_length); 366 __func__, port->number, i, urb->actual_length);
367
400 if (urb->status) { 368 if (urb->status) {
401 dbg("%s - non-zero urb status: %d\n", __func__, urb->status); 369 dev_dbg(&port->dev, "%s - non-zero urb status: %d\n",
370 __func__, urb->status);
402 return; 371 return;
403 } 372 }
404 373
@@ -424,8 +393,6 @@ void usb_serial_generic_write_bulk_callback(struct urb *urb)
424 int status = urb->status; 393 int status = urb->status;
425 int i; 394 int i;
426 395
427 dbg("%s - port %d", __func__, port->number);
428
429 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) 396 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
430 if (port->write_urbs[i] == urb) 397 if (port->write_urbs[i] == urb)
431 break; 398 break;
@@ -436,7 +403,8 @@ void usb_serial_generic_write_bulk_callback(struct urb *urb)
436 spin_unlock_irqrestore(&port->lock, flags); 403 spin_unlock_irqrestore(&port->lock, flags);
437 404
438 if (status) { 405 if (status) {
439 dbg("%s - non-zero urb status: %d", __func__, status); 406 dev_dbg(&port->dev, "%s - non-zero urb status: %d\n",
407 __func__, status);
440 408
441 spin_lock_irqsave(&port->lock, flags); 409 spin_lock_irqsave(&port->lock, flags);
442 kfifo_reset_out(&port->write_fifo); 410 kfifo_reset_out(&port->write_fifo);
@@ -454,8 +422,6 @@ void usb_serial_generic_throttle(struct tty_struct *tty)
454 struct usb_serial_port *port = tty->driver_data; 422 struct usb_serial_port *port = tty->driver_data;
455 unsigned long flags; 423 unsigned long flags;
456 424
457 dbg("%s - port %d", __func__, port->number);
458
459 /* Set the throttle request flag. It will be picked up 425 /* Set the throttle request flag. It will be picked up
460 * by usb_serial_generic_read_bulk_callback(). */ 426 * by usb_serial_generic_read_bulk_callback(). */
461 spin_lock_irqsave(&port->lock, flags); 427 spin_lock_irqsave(&port->lock, flags);
@@ -469,8 +435,6 @@ void usb_serial_generic_unthrottle(struct tty_struct *tty)
469 struct usb_serial_port *port = tty->driver_data; 435 struct usb_serial_port *port = tty->driver_data;
470 int was_throttled; 436 int was_throttled;
471 437
472 dbg("%s - port %d", __func__, port->number);
473
474 /* Clear the throttle flags */ 438 /* Clear the throttle flags */
475 spin_lock_irq(&port->lock); 439 spin_lock_irq(&port->lock);
476 was_throttled = port->throttled; 440 was_throttled = port->throttled;
@@ -525,7 +489,8 @@ void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
525{ 489{
526 struct tty_port *port = &usb_port->port; 490 struct tty_port *port = &usb_port->port;
527 491
528 dbg("%s - port %d, status %d", __func__, usb_port->number, status); 492 dev_dbg(&usb_port->dev, "%s - port %d, status %d\n", __func__,
493 usb_port->number, status);
529 494
530 if (status) 495 if (status)
531 wake_up_interruptible(&port->open_wait); 496 wake_up_interruptible(&port->open_wait);
@@ -566,8 +531,6 @@ void usb_serial_generic_disconnect(struct usb_serial *serial)
566{ 531{
567 int i; 532 int i;
568 533
569 dbg("%s", __func__);
570
571 /* stop reads and writes on all ports */ 534 /* stop reads and writes on all ports */
572 for (i = 0; i < serial->num_ports; ++i) 535 for (i = 0; i < serial->num_ports; ++i)
573 generic_cleanup(serial->port[i]); 536 generic_cleanup(serial->port[i]);
@@ -576,5 +539,4 @@ EXPORT_SYMBOL_GPL(usb_serial_generic_disconnect);
576 539
577void usb_serial_generic_release(struct usb_serial *serial) 540void usb_serial_generic_release(struct usb_serial *serial)
578{ 541{
579 dbg("%s", __func__);
580} 542}
diff --git a/drivers/usb/serial/hp4x.c b/drivers/usb/serial/hp4x.c
index 2563e788c9b3..0bbaf21a9d1e 100644
--- a/drivers/usb/serial/hp4x.c
+++ b/drivers/usb/serial/hp4x.c
@@ -36,13 +36,6 @@ static const struct usb_device_id id_table[] = {
36 36
37MODULE_DEVICE_TABLE(usb, id_table); 37MODULE_DEVICE_TABLE(usb, id_table);
38 38
39static struct usb_driver hp49gp_driver = {
40 .name = "hp4X",
41 .probe = usb_serial_probe,
42 .disconnect = usb_serial_disconnect,
43 .id_table = id_table,
44};
45
46static struct usb_serial_driver hp49gp_device = { 39static struct usb_serial_driver hp49gp_device = {
47 .driver = { 40 .driver = {
48 .owner = THIS_MODULE, 41 .owner = THIS_MODULE,
@@ -56,7 +49,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
56 &hp49gp_device, NULL 49 &hp49gp_device, NULL
57}; 50};
58 51
59module_usb_serial_driver(hp49gp_driver, serial_drivers); 52module_usb_serial_driver(serial_drivers, id_table);
60 53
61MODULE_DESCRIPTION(DRIVER_DESC); 54MODULE_DESCRIPTION(DRIVER_DESC);
62MODULE_VERSION(DRIVER_VERSION); 55MODULE_VERSION(DRIVER_VERSION);
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index 323e87235711..e1f5ccd1e8f8 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -3181,7 +3181,7 @@ static void edge_release(struct usb_serial *serial)
3181 kfree(edge_serial); 3181 kfree(edge_serial);
3182} 3182}
3183 3183
3184module_usb_serial_driver(io_driver, serial_drivers); 3184module_usb_serial_driver(serial_drivers, id_table_combined);
3185 3185
3186MODULE_AUTHOR(DRIVER_AUTHOR); 3186MODULE_AUTHOR(DRIVER_AUTHOR);
3187MODULE_DESCRIPTION(DRIVER_DESC); 3187MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/io_tables.h b/drivers/usb/serial/io_tables.h
index d0e7c9affb6f..350afddb55ba 100644
--- a/drivers/usb/serial/io_tables.h
+++ b/drivers/usb/serial/io_tables.h
@@ -95,13 +95,6 @@ static const struct usb_device_id id_table_combined[] = {
95 95
96MODULE_DEVICE_TABLE(usb, id_table_combined); 96MODULE_DEVICE_TABLE(usb, id_table_combined);
97 97
98static struct usb_driver io_driver = {
99 .name = "io_edgeport",
100 .probe = usb_serial_probe,
101 .disconnect = usb_serial_disconnect,
102 .id_table = id_table_combined,
103};
104
105static struct usb_serial_driver edgeport_2port_device = { 98static struct usb_serial_driver edgeport_2port_device = {
106 .driver = { 99 .driver = {
107 .owner = THIS_MODULE, 100 .owner = THIS_MODULE,
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index 40a95a7fe383..3936904c6419 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -197,14 +197,6 @@ static const struct usb_device_id id_table_combined[] = {
197 197
198MODULE_DEVICE_TABLE(usb, id_table_combined); 198MODULE_DEVICE_TABLE(usb, id_table_combined);
199 199
200static struct usb_driver io_driver = {
201 .name = "io_ti",
202 .probe = usb_serial_probe,
203 .disconnect = usb_serial_disconnect,
204 .id_table = id_table_combined,
205};
206
207
208static unsigned char OperationalMajorVersion; 200static unsigned char OperationalMajorVersion;
209static unsigned char OperationalMinorVersion; 201static unsigned char OperationalMinorVersion;
210static unsigned short OperationalBuildNumber; 202static unsigned short OperationalBuildNumber;
@@ -547,6 +539,7 @@ static void chase_port(struct edgeport_port *port, unsigned long timeout,
547{ 539{
548 int baud_rate; 540 int baud_rate;
549 struct tty_struct *tty = tty_port_tty_get(&port->port->port); 541 struct tty_struct *tty = tty_port_tty_get(&port->port->port);
542 struct usb_serial *serial = port->port->serial;
550 wait_queue_t wait; 543 wait_queue_t wait;
551 unsigned long flags; 544 unsigned long flags;
552 545
@@ -561,7 +554,7 @@ static void chase_port(struct edgeport_port *port, unsigned long timeout,
561 set_current_state(TASK_INTERRUPTIBLE); 554 set_current_state(TASK_INTERRUPTIBLE);
562 if (kfifo_len(&port->write_fifo) == 0 555 if (kfifo_len(&port->write_fifo) == 0
563 || timeout == 0 || signal_pending(current) 556 || timeout == 0 || signal_pending(current)
564 || !usb_get_intfdata(port->port->serial->interface)) 557 || serial->disconnected)
565 /* disconnect */ 558 /* disconnect */
566 break; 559 break;
567 spin_unlock_irqrestore(&port->ep_lock, flags); 560 spin_unlock_irqrestore(&port->ep_lock, flags);
@@ -578,7 +571,7 @@ static void chase_port(struct edgeport_port *port, unsigned long timeout,
578 /* wait for data to drain from the device */ 571 /* wait for data to drain from the device */
579 timeout += jiffies; 572 timeout += jiffies;
580 while ((long)(jiffies - timeout) < 0 && !signal_pending(current) 573 while ((long)(jiffies - timeout) < 0 && !signal_pending(current)
581 && usb_get_intfdata(port->port->serial->interface)) { 574 && !serial->disconnected) {
582 /* not disconnected */ 575 /* not disconnected */
583 if (!tx_active(port)) 576 if (!tx_active(port))
584 break; 577 break;
@@ -586,7 +579,7 @@ static void chase_port(struct edgeport_port *port, unsigned long timeout,
586 } 579 }
587 580
588 /* disconnected */ 581 /* disconnected */
589 if (!usb_get_intfdata(port->port->serial->interface)) 582 if (serial->disconnected)
590 return; 583 return;
591 584
592 /* wait one more character time, based on baud rate */ 585 /* wait one more character time, based on baud rate */
@@ -2003,8 +1996,8 @@ static void edge_close(struct usb_serial_port *port)
2003{ 1996{
2004 struct edgeport_serial *edge_serial; 1997 struct edgeport_serial *edge_serial;
2005 struct edgeport_port *edge_port; 1998 struct edgeport_port *edge_port;
1999 struct usb_serial *serial = port->serial;
2006 int port_number; 2000 int port_number;
2007 int status;
2008 2001
2009 dbg("%s - port %d", __func__, port->number); 2002 dbg("%s - port %d", __func__, port->number);
2010 2003
@@ -2028,12 +2021,18 @@ static void edge_close(struct usb_serial_port *port)
2028 * send a close port command to it */ 2021 * send a close port command to it */
2029 dbg("%s - send umpc_close_port", __func__); 2022 dbg("%s - send umpc_close_port", __func__);
2030 port_number = port->number - port->serial->minor; 2023 port_number = port->number - port->serial->minor;
2031 status = send_cmd(port->serial->dev, 2024
2025 mutex_lock(&serial->disc_mutex);
2026 if (!serial->disconnected) {
2027 send_cmd(serial->dev,
2032 UMPC_CLOSE_PORT, 2028 UMPC_CLOSE_PORT,
2033 (__u8)(UMPM_UART1_PORT + port_number), 2029 (__u8)(UMPM_UART1_PORT + port_number),
2034 0, 2030 0,
2035 NULL, 2031 NULL,
2036 0); 2032 0);
2033 }
2034 mutex_unlock(&serial->disc_mutex);
2035
2037 mutex_lock(&edge_serial->es_lock); 2036 mutex_lock(&edge_serial->es_lock);
2038 --edge_port->edge_serial->num_ports_open; 2037 --edge_port->edge_serial->num_ports_open;
2039 if (edge_port->edge_serial->num_ports_open <= 0) { 2038 if (edge_port->edge_serial->num_ports_open <= 0) {
@@ -2783,7 +2782,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
2783 &edgeport_1port_device, &edgeport_2port_device, NULL 2782 &edgeport_1port_device, &edgeport_2port_device, NULL
2784}; 2783};
2785 2784
2786module_usb_serial_driver(io_driver, serial_drivers); 2785module_usb_serial_driver(serial_drivers, id_table_combined);
2787 2786
2788MODULE_AUTHOR(DRIVER_AUTHOR); 2787MODULE_AUTHOR(DRIVER_AUTHOR);
2789MODULE_DESCRIPTION(DRIVER_DESC); 2788MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index 10c02b8b5664..c85a7eb87d4e 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -33,7 +33,6 @@
33#define DRIVER_AUTHOR "Ganesh Varadarajan <ganesh@veritas.com>" 33#define DRIVER_AUTHOR "Ganesh Varadarajan <ganesh@veritas.com>"
34#define DRIVER_DESC "USB PocketPC PDA driver" 34#define DRIVER_DESC "USB PocketPC PDA driver"
35 35
36static __u16 product, vendor;
37static bool debug; 36static bool debug;
38static int connect_retries = KP_RETRIES; 37static int connect_retries = KP_RETRIES;
39static int initial_wait; 38static int initial_wait;
@@ -45,8 +44,6 @@ static int ipaq_calc_num_ports(struct usb_serial *serial);
45static int ipaq_startup(struct usb_serial *serial); 44static int ipaq_startup(struct usb_serial *serial);
46 45
47static struct usb_device_id ipaq_id_table [] = { 46static struct usb_device_id ipaq_id_table [] = {
48 /* The first entry is a placeholder for the insmod-specified device */
49 { USB_DEVICE(0x049F, 0x0003) },
50 { USB_DEVICE(0x0104, 0x00BE) }, /* Socket USB Sync */ 47 { USB_DEVICE(0x0104, 0x00BE) }, /* Socket USB Sync */
51 { USB_DEVICE(0x03F0, 0x1016) }, /* HP USB Sync */ 48 { USB_DEVICE(0x03F0, 0x1016) }, /* HP USB Sync */
52 { USB_DEVICE(0x03F0, 0x1116) }, /* HP USB Sync 1611 */ 49 { USB_DEVICE(0x03F0, 0x1116) }, /* HP USB Sync 1611 */
@@ -505,13 +502,6 @@ static struct usb_device_id ipaq_id_table [] = {
505 502
506MODULE_DEVICE_TABLE(usb, ipaq_id_table); 503MODULE_DEVICE_TABLE(usb, ipaq_id_table);
507 504
508static struct usb_driver ipaq_driver = {
509 .name = "ipaq",
510 .probe = usb_serial_probe,
511 .disconnect = usb_serial_disconnect,
512 .id_table = ipaq_id_table,
513};
514
515 505
516/* All of the device info needed for the Compaq iPAQ */ 506/* All of the device info needed for the Compaq iPAQ */
517static struct usb_serial_driver ipaq_device = { 507static struct usb_serial_driver ipaq_device = {
@@ -539,8 +529,6 @@ static int ipaq_open(struct tty_struct *tty,
539 int result = 0; 529 int result = 0;
540 int retries = connect_retries; 530 int retries = connect_retries;
541 531
542 dbg("%s - port %d", __func__, port->number);
543
544 msleep(1000*initial_wait); 532 msleep(1000*initial_wait);
545 533
546 /* 534 /*
@@ -577,7 +565,7 @@ static int ipaq_calc_num_ports(struct usb_serial *serial)
577 */ 565 */
578 int ipaq_num_ports = 1; 566 int ipaq_num_ports = 1;
579 567
580 dbg("%s - numberofendpoints: %d", __FUNCTION__, 568 dev_dbg(&serial->dev->dev, "%s - numberofendpoints: %d\n", __func__,
581 (int)serial->interface->cur_altsetting->desc.bNumEndpoints); 569 (int)serial->interface->cur_altsetting->desc.bNumEndpoints);
582 570
583 /* 571 /*
@@ -596,8 +584,6 @@ static int ipaq_calc_num_ports(struct usb_serial *serial)
596 584
597static int ipaq_startup(struct usb_serial *serial) 585static int ipaq_startup(struct usb_serial *serial)
598{ 586{
599 dbg("%s", __func__);
600
601 /* Some of the devices in ipaq_id_table[] are composite, and we 587 /* Some of the devices in ipaq_id_table[] are composite, and we
602 * shouldn't bind to all the interfaces. This test will rule out 588 * shouldn't bind to all the interfaces. This test will rule out
603 * some obviously invalid possibilities. 589 * some obviously invalid possibilities.
@@ -617,36 +603,14 @@ static int ipaq_startup(struct usb_serial *serial)
617 return -ENODEV; 603 return -ENODEV;
618 } 604 }
619 605
620 dbg("%s - iPAQ module configured for %d ports", 606 dev_dbg(&serial->dev->dev,
621 __FUNCTION__, serial->num_ports); 607 "%s - iPAQ module configured for %d ports\n", __func__,
608 serial->num_ports);
622 609
623 return usb_reset_configuration(serial->dev); 610 return usb_reset_configuration(serial->dev);
624} 611}
625 612
626static int __init ipaq_init(void) 613module_usb_serial_driver(serial_drivers, ipaq_id_table);
627{
628 int retval;
629
630 if (vendor) {
631 ipaq_id_table[0].idVendor = vendor;
632 ipaq_id_table[0].idProduct = product;
633 }
634
635 retval = usb_serial_register_drivers(&ipaq_driver, serial_drivers);
636 if (retval == 0)
637 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
638 DRIVER_DESC "\n");
639 return retval;
640}
641
642static void __exit ipaq_exit(void)
643{
644 usb_serial_deregister_drivers(&ipaq_driver, serial_drivers);
645}
646
647
648module_init(ipaq_init);
649module_exit(ipaq_exit);
650 614
651MODULE_AUTHOR(DRIVER_AUTHOR); 615MODULE_AUTHOR(DRIVER_AUTHOR);
652MODULE_DESCRIPTION(DRIVER_DESC); 616MODULE_DESCRIPTION(DRIVER_DESC);
@@ -655,12 +619,6 @@ MODULE_LICENSE("GPL");
655module_param(debug, bool, S_IRUGO | S_IWUSR); 619module_param(debug, bool, S_IRUGO | S_IWUSR);
656MODULE_PARM_DESC(debug, "Debug enabled or not"); 620MODULE_PARM_DESC(debug, "Debug enabled or not");
657 621
658module_param(vendor, ushort, 0);
659MODULE_PARM_DESC(vendor, "User specified USB idVendor");
660
661module_param(product, ushort, 0);
662MODULE_PARM_DESC(product, "User specified USB idProduct");
663
664module_param(connect_retries, int, S_IRUGO|S_IWUSR); 622module_param(connect_retries, int, S_IRUGO|S_IWUSR);
665MODULE_PARM_DESC(connect_retries, 623MODULE_PARM_DESC(connect_retries,
666 "Maximum number of connect retries (one second each)"); 624 "Maximum number of connect retries (one second each)");
diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c
index 76a06406e26a..5811d34b6c6b 100644
--- a/drivers/usb/serial/ipw.c
+++ b/drivers/usb/serial/ipw.c
@@ -132,19 +132,11 @@ enum {
132 132
133#define IPW_WANTS_TO_SEND 0x30 133#define IPW_WANTS_TO_SEND 0x30
134 134
135static const struct usb_device_id usb_ipw_ids[] = { 135static const struct usb_device_id id_table[] = {
136 { USB_DEVICE(IPW_VID, IPW_PID) }, 136 { USB_DEVICE(IPW_VID, IPW_PID) },
137 { }, 137 { },
138}; 138};
139 139MODULE_DEVICE_TABLE(usb, id_table);
140MODULE_DEVICE_TABLE(usb, usb_ipw_ids);
141
142static struct usb_driver usb_ipw_driver = {
143 .name = "ipwtty",
144 .probe = usb_serial_probe,
145 .disconnect = usb_serial_disconnect,
146 .id_table = usb_ipw_ids,
147};
148 140
149static bool debug; 141static bool debug;
150 142
@@ -155,8 +147,6 @@ static int ipw_open(struct tty_struct *tty, struct usb_serial_port *port)
155 u8 *buf_flow_init; 147 u8 *buf_flow_init;
156 int result; 148 int result;
157 149
158 dbg("%s", __func__);
159
160 buf_flow_init = kmemdup(buf_flow_static, 16, GFP_KERNEL); 150 buf_flow_init = kmemdup(buf_flow_static, 16, GFP_KERNEL);
161 if (!buf_flow_init) 151 if (!buf_flow_init)
162 return -ENOMEM; 152 return -ENOMEM;
@@ -317,7 +307,7 @@ static struct usb_serial_driver ipw_device = {
317 .name = "ipw", 307 .name = "ipw",
318 }, 308 },
319 .description = "IPWireless converter", 309 .description = "IPWireless converter",
320 .id_table = usb_ipw_ids, 310 .id_table = id_table,
321 .num_ports = 1, 311 .num_ports = 1,
322 .disconnect = usb_wwan_disconnect, 312 .disconnect = usb_wwan_disconnect,
323 .open = ipw_open, 313 .open = ipw_open,
@@ -333,7 +323,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
333 &ipw_device, NULL 323 &ipw_device, NULL
334}; 324};
335 325
336module_usb_serial_driver(usb_ipw_driver, serial_drivers); 326module_usb_serial_driver(serial_drivers, id_table);
337 327
338/* Module information */ 328/* Module information */
339MODULE_AUTHOR(DRIVER_AUTHOR); 329MODULE_AUTHOR(DRIVER_AUTHOR);
diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
index 84965cd65c76..fc09414c960f 100644
--- a/drivers/usb/serial/ir-usb.c
+++ b/drivers/usb/serial/ir-usb.c
@@ -77,13 +77,6 @@ static const struct usb_device_id ir_id_table[] = {
77 77
78MODULE_DEVICE_TABLE(usb, ir_id_table); 78MODULE_DEVICE_TABLE(usb, ir_id_table);
79 79
80static struct usb_driver ir_driver = {
81 .name = "ir-usb",
82 .probe = usb_serial_probe,
83 .disconnect = usb_serial_disconnect,
84 .id_table = ir_id_table,
85};
86
87static struct usb_serial_driver ir_device = { 80static struct usb_serial_driver ir_device = {
88 .driver = { 81 .driver = {
89 .owner = THIS_MODULE, 82 .owner = THIS_MODULE,
@@ -103,18 +96,21 @@ static struct usb_serial_driver * const serial_drivers[] = {
103 &ir_device, NULL 96 &ir_device, NULL
104}; 97};
105 98
106static inline void irda_usb_dump_class_desc(struct usb_irda_cs_descriptor *desc) 99static inline void irda_usb_dump_class_desc(struct usb_serial *serial,
100 struct usb_irda_cs_descriptor *desc)
107{ 101{
108 dbg("bLength=%x", desc->bLength); 102 struct device *dev = &serial->dev->dev;
109 dbg("bDescriptorType=%x", desc->bDescriptorType); 103
110 dbg("bcdSpecRevision=%x", __le16_to_cpu(desc->bcdSpecRevision)); 104 dev_dbg(dev, "bLength=%x\n", desc->bLength);
111 dbg("bmDataSize=%x", desc->bmDataSize); 105 dev_dbg(dev, "bDescriptorType=%x\n", desc->bDescriptorType);
112 dbg("bmWindowSize=%x", desc->bmWindowSize); 106 dev_dbg(dev, "bcdSpecRevision=%x\n", __le16_to_cpu(desc->bcdSpecRevision));
113 dbg("bmMinTurnaroundTime=%d", desc->bmMinTurnaroundTime); 107 dev_dbg(dev, "bmDataSize=%x\n", desc->bmDataSize);
114 dbg("wBaudRate=%x", __le16_to_cpu(desc->wBaudRate)); 108 dev_dbg(dev, "bmWindowSize=%x\n", desc->bmWindowSize);
115 dbg("bmAdditionalBOFs=%x", desc->bmAdditionalBOFs); 109 dev_dbg(dev, "bmMinTurnaroundTime=%d\n", desc->bmMinTurnaroundTime);
116 dbg("bIrdaRateSniff=%x", desc->bIrdaRateSniff); 110 dev_dbg(dev, "wBaudRate=%x\n", __le16_to_cpu(desc->wBaudRate));
117 dbg("bMaxUnicastList=%x", desc->bMaxUnicastList); 111 dev_dbg(dev, "bmAdditionalBOFs=%x\n", desc->bmAdditionalBOFs);
112 dev_dbg(dev, "bIrdaRateSniff=%x\n", desc->bIrdaRateSniff);
113 dev_dbg(dev, "bMaxUnicastList=%x\n", desc->bMaxUnicastList);
118} 114}
119 115
120/*------------------------------------------------------------------*/ 116/*------------------------------------------------------------------*/
@@ -130,8 +126,9 @@ static inline void irda_usb_dump_class_desc(struct usb_irda_cs_descriptor *desc)
130 * Based on the same function in drivers/net/irda/irda-usb.c 126 * Based on the same function in drivers/net/irda/irda-usb.c
131 */ 127 */
132static struct usb_irda_cs_descriptor * 128static struct usb_irda_cs_descriptor *
133irda_usb_find_class_desc(struct usb_device *dev, unsigned int ifnum) 129irda_usb_find_class_desc(struct usb_serial *serial, unsigned int ifnum)
134{ 130{
131 struct usb_device *dev = serial->dev;
135 struct usb_irda_cs_descriptor *desc; 132 struct usb_irda_cs_descriptor *desc;
136 int ret; 133 int ret;
137 134
@@ -144,20 +141,20 @@ irda_usb_find_class_desc(struct usb_device *dev, unsigned int ifnum)
144 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 141 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
145 0, ifnum, desc, sizeof(*desc), 1000); 142 0, ifnum, desc, sizeof(*desc), 1000);
146 143
147 dbg("%s - ret=%d", __func__, ret); 144 dev_dbg(&serial->dev->dev, "%s - ret=%d\n", __func__, ret);
148 if (ret < sizeof(*desc)) { 145 if (ret < sizeof(*desc)) {
149 dbg("%s - class descriptor read %s (%d)", 146 dev_dbg(&serial->dev->dev,
150 __func__, 147 "%s - class descriptor read %s (%d)\n", __func__,
151 (ret < 0) ? "failed" : "too short", 148 (ret < 0) ? "failed" : "too short", ret);
152 ret);
153 goto error; 149 goto error;
154 } 150 }
155 if (desc->bDescriptorType != USB_DT_CS_IRDA) { 151 if (desc->bDescriptorType != USB_DT_CS_IRDA) {
156 dbg("%s - bad class descriptor type", __func__); 152 dev_dbg(&serial->dev->dev, "%s - bad class descriptor type\n",
153 __func__);
157 goto error; 154 goto error;
158 } 155 }
159 156
160 irda_usb_dump_class_desc(desc); 157 irda_usb_dump_class_desc(serial, desc);
161 return desc; 158 return desc;
162 159
163error: 160error:
@@ -207,14 +204,15 @@ static int ir_startup(struct usb_serial *serial)
207{ 204{
208 struct usb_irda_cs_descriptor *irda_desc; 205 struct usb_irda_cs_descriptor *irda_desc;
209 206
210 irda_desc = irda_usb_find_class_desc(serial->dev, 0); 207 irda_desc = irda_usb_find_class_desc(serial, 0);
211 if (!irda_desc) { 208 if (!irda_desc) {
212 dev_err(&serial->dev->dev, 209 dev_err(&serial->dev->dev,
213 "IRDA class descriptor not found, device not bound\n"); 210 "IRDA class descriptor not found, device not bound\n");
214 return -ENODEV; 211 return -ENODEV;
215 } 212 }
216 213
217 dbg("%s - Baud rates supported:%s%s%s%s%s%s%s%s%s", 214 dev_dbg(&serial->dev->dev,
215 "%s - Baud rates supported:%s%s%s%s%s%s%s%s%s\n",
218 __func__, 216 __func__,
219 (irda_desc->wBaudRate & USB_IRDA_BR_2400) ? " 2400" : "", 217 (irda_desc->wBaudRate & USB_IRDA_BR_2400) ? " 2400" : "",
220 (irda_desc->wBaudRate & USB_IRDA_BR_9600) ? " 9600" : "", 218 (irda_desc->wBaudRate & USB_IRDA_BR_9600) ? " 9600" : "",
@@ -264,8 +262,6 @@ static int ir_open(struct tty_struct *tty, struct usb_serial_port *port)
264{ 262{
265 int i; 263 int i;
266 264
267 dbg("%s - port %d", __func__, port->number);
268
269 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) 265 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
270 port->write_urbs[i]->transfer_flags = URB_ZERO_PACKET; 266 port->write_urbs[i]->transfer_flags = URB_ZERO_PACKET;
271 267
@@ -322,15 +318,11 @@ static void ir_process_read_urb(struct urb *urb)
322 318
323static void ir_set_termios_callback(struct urb *urb) 319static void ir_set_termios_callback(struct urb *urb)
324{ 320{
325 struct usb_serial_port *port = urb->context;
326 int status = urb->status;
327
328 dbg("%s - port %d", __func__, port->number);
329
330 kfree(urb->transfer_buffer); 321 kfree(urb->transfer_buffer);
331 322
332 if (status) 323 if (urb->status)
333 dbg("%s - non-zero urb status: %d", __func__, status); 324 dev_dbg(&urb->dev->dev, "%s - non-zero urb status: %d\n",
325 __func__, urb->status);
334} 326}
335 327
336static void ir_set_termios(struct tty_struct *tty, 328static void ir_set_termios(struct tty_struct *tty,
@@ -342,8 +334,6 @@ static void ir_set_termios(struct tty_struct *tty,
342 speed_t baud; 334 speed_t baud;
343 int ir_baud; 335 int ir_baud;
344 336
345 dbg("%s - port %d", __func__, port->number);
346
347 baud = tty_get_baud_rate(tty); 337 baud = tty_get_baud_rate(tty);
348 338
349 /* 339 /*
@@ -447,7 +437,7 @@ static int __init ir_init(void)
447 ir_device.bulk_out_size = buffer_size; 437 ir_device.bulk_out_size = buffer_size;
448 } 438 }
449 439
450 retval = usb_serial_register_drivers(&ir_driver, serial_drivers); 440 retval = usb_serial_register_drivers(serial_drivers, KBUILD_MODNAME, ir_id_table);
451 if (retval == 0) 441 if (retval == 0)
452 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" 442 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
453 DRIVER_DESC "\n"); 443 DRIVER_DESC "\n");
@@ -456,7 +446,7 @@ static int __init ir_init(void)
456 446
457static void __exit ir_exit(void) 447static void __exit ir_exit(void)
458{ 448{
459 usb_serial_deregister_drivers(&ir_driver, serial_drivers); 449 usb_serial_deregister_drivers(serial_drivers);
460} 450}
461 451
462 452
diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
index f2192d527db0..22b1eb5040b7 100644
--- a/drivers/usb/serial/iuu_phoenix.c
+++ b/drivers/usb/serial/iuu_phoenix.c
@@ -51,13 +51,6 @@ static const struct usb_device_id id_table[] = {
51}; 51};
52MODULE_DEVICE_TABLE(usb, id_table); 52MODULE_DEVICE_TABLE(usb, id_table);
53 53
54static struct usb_driver iuu_driver = {
55 .name = "iuu_phoenix",
56 .probe = usb_serial_probe,
57 .disconnect = usb_serial_disconnect,
58 .id_table = id_table,
59};
60
61/* turbo parameter */ 54/* turbo parameter */
62static int boost = 100; 55static int boost = 100;
63static int clockmode = 1; 56static int clockmode = 1;
@@ -135,8 +128,6 @@ static void iuu_release(struct usb_serial *serial)
135 if (!port) 128 if (!port)
136 return; 129 return;
137 130
138 dbg("%s", __func__);
139
140 if (priv) { 131 if (priv) {
141 iuu_free_buf(priv); 132 iuu_free_buf(priv);
142 dbg("%s - I will free all", __func__); 133 dbg("%s - I will free all", __func__);
@@ -198,8 +189,6 @@ static void iuu_rxcmd(struct urb *urb)
198 int result; 189 int result;
199 int status = urb->status; 190 int status = urb->status;
200 191
201 dbg("%s - enter", __func__);
202
203 if (status) { 192 if (status) {
204 dbg("%s - status = %d", __func__, status); 193 dbg("%s - status = %d", __func__, status);
205 /* error stop all */ 194 /* error stop all */
@@ -221,7 +210,6 @@ static int iuu_reset(struct usb_serial_port *port, u8 wt)
221 struct iuu_private *priv = usb_get_serial_port_data(port); 210 struct iuu_private *priv = usb_get_serial_port_data(port);
222 int result; 211 int result;
223 char *buf_ptr = port->write_urb->transfer_buffer; 212 char *buf_ptr = port->write_urb->transfer_buffer;
224 dbg("%s - enter", __func__);
225 213
226 /* Prepare the reset sequence */ 214 /* Prepare the reset sequence */
227 215
@@ -255,8 +243,6 @@ static void iuu_update_status_callback(struct urb *urb)
255 u8 *st; 243 u8 *st;
256 int status = urb->status; 244 int status = urb->status;
257 245
258 dbg("%s - enter", __func__);
259
260 if (status) { 246 if (status) {
261 dbg("%s - status = %d", __func__, status); 247 dbg("%s - status = %d", __func__, status);
262 /* error stop all */ 248 /* error stop all */
@@ -299,8 +285,6 @@ static int iuu_status(struct usb_serial_port *port)
299{ 285{
300 int result; 286 int result;
301 287
302 dbg("%s - enter", __func__);
303
304 memset(port->write_urb->transfer_buffer, IUU_GET_STATE_REGISTER, 1); 288 memset(port->write_urb->transfer_buffer, IUU_GET_STATE_REGISTER, 1);
305 usb_fill_bulk_urb(port->write_urb, port->serial->dev, 289 usb_fill_bulk_urb(port->write_urb, port->serial->dev,
306 usb_sndbulkpipe(port->serial->dev, 290 usb_sndbulkpipe(port->serial->dev,
@@ -318,8 +302,6 @@ static int bulk_immediate(struct usb_serial_port *port, u8 *buf, u8 count)
318 struct usb_serial *serial = port->serial; 302 struct usb_serial *serial = port->serial;
319 int actual = 0; 303 int actual = 0;
320 304
321 dbg("%s - enter", __func__);
322
323 /* send the data out the bulk port */ 305 /* send the data out the bulk port */
324 306
325 status = 307 status =
@@ -341,10 +323,7 @@ static int read_immediate(struct usb_serial_port *port, u8 *buf, u8 count)
341 struct usb_serial *serial = port->serial; 323 struct usb_serial *serial = port->serial;
342 int actual = 0; 324 int actual = 0;
343 325
344 dbg("%s - enter", __func__);
345
346 /* send the data out the bulk port */ 326 /* send the data out the bulk port */
347
348 status = 327 status =
349 usb_bulk_msg(serial->dev, 328 usb_bulk_msg(serial->dev,
350 usb_rcvbulkpipe(serial->dev, 329 usb_rcvbulkpipe(serial->dev,
@@ -367,8 +346,6 @@ static int iuu_led(struct usb_serial_port *port, unsigned int R,
367 if (!buf) 346 if (!buf)
368 return -ENOMEM; 347 return -ENOMEM;
369 348
370 dbg("%s - enter", __func__);
371
372 buf[0] = IUU_SET_LED; 349 buf[0] = IUU_SET_LED;
373 buf[1] = R & 0xFF; 350 buf[1] = R & 0xFF;
374 buf[2] = (R >> 8) & 0xFF; 351 buf[2] = (R >> 8) & 0xFF;
@@ -460,8 +437,6 @@ static int iuu_clk(struct usb_serial_port *port, int dwFrq)
460 unsigned int P2 = 0; 437 unsigned int P2 = 0;
461 int frq = (int)dwFrq; 438 int frq = (int)dwFrq;
462 439
463 dbg("%s - enter", __func__);
464
465 if (frq == 0) { 440 if (frq == 0) {
466 priv->buf[Count++] = IUU_UART_WRITE_I2C; 441 priv->buf[Count++] = IUU_UART_WRITE_I2C;
467 priv->buf[Count++] = FrqGenAdr << 1; 442 priv->buf[Count++] = FrqGenAdr << 1;
@@ -590,8 +565,6 @@ static int iuu_uart_flush(struct usb_serial_port *port)
590 u8 rxcmd = IUU_UART_RX; 565 u8 rxcmd = IUU_UART_RX;
591 struct iuu_private *priv = usb_get_serial_port_data(port); 566 struct iuu_private *priv = usb_get_serial_port_data(port);
592 567
593 dbg("%s - enter", __func__);
594
595 if (iuu_led(port, 0xF000, 0, 0, 0xFF) < 0) 568 if (iuu_led(port, 0xF000, 0, 0, 0xFF) < 0)
596 return -EIO; 569 return -EIO;
597 570
@@ -630,8 +603,6 @@ static void read_buf_callback(struct urb *urb)
630 struct tty_struct *tty; 603 struct tty_struct *tty;
631 int status = urb->status; 604 int status = urb->status;
632 605
633 dbg("%s - status = %d", __func__, status);
634
635 if (status) { 606 if (status) {
636 if (status == -EPROTO) { 607 if (status == -EPROTO) {
637 /* reschedule needed */ 608 /* reschedule needed */
@@ -659,7 +630,6 @@ static int iuu_bulk_write(struct usb_serial_port *port)
659 int i; 630 int i;
660 int buf_len; 631 int buf_len;
661 char *buf_ptr = port->write_urb->transfer_buffer; 632 char *buf_ptr = port->write_urb->transfer_buffer;
662 dbg("%s - enter", __func__);
663 633
664 spin_lock_irqsave(&priv->lock, flags); 634 spin_lock_irqsave(&priv->lock, flags);
665 *buf_ptr++ = IUU_UART_ESC; 635 *buf_ptr++ = IUU_UART_ESC;
@@ -691,7 +661,6 @@ static int iuu_bulk_write(struct usb_serial_port *port)
691static int iuu_read_buf(struct usb_serial_port *port, int len) 661static int iuu_read_buf(struct usb_serial_port *port, int len)
692{ 662{
693 int result; 663 int result;
694 dbg("%s - enter", __func__);
695 664
696 usb_fill_bulk_urb(port->read_urb, port->serial->dev, 665 usb_fill_bulk_urb(port->read_urb, port->serial->dev,
697 usb_rcvbulkpipe(port->serial->dev, 666 usb_rcvbulkpipe(port->serial->dev,
@@ -713,8 +682,6 @@ static void iuu_uart_read_callback(struct urb *urb)
713 unsigned char *data = urb->transfer_buffer; 682 unsigned char *data = urb->transfer_buffer;
714 priv->poll++; 683 priv->poll++;
715 684
716 dbg("%s - enter", __func__);
717
718 if (status) { 685 if (status) {
719 dbg("%s - status = %d", __func__, status); 686 dbg("%s - status = %d", __func__, status);
720 /* error stop all */ 687 /* error stop all */
@@ -771,7 +738,6 @@ static int iuu_uart_write(struct tty_struct *tty, struct usb_serial_port *port,
771{ 738{
772 struct iuu_private *priv = usb_get_serial_port_data(port); 739 struct iuu_private *priv = usb_get_serial_port_data(port);
773 unsigned long flags; 740 unsigned long flags;
774 dbg("%s - enter", __func__);
775 741
776 if (count > 256) 742 if (count > 256)
777 return -ENOMEM; 743 return -ENOMEM;
@@ -792,8 +758,6 @@ static void read_rxcmd_callback(struct urb *urb)
792 int result; 758 int result;
793 int status = urb->status; 759 int status = urb->status;
794 760
795 dbg("%s - status = %d", __func__, status);
796
797 if (status) { 761 if (status) {
798 /* error stop all */ 762 /* error stop all */
799 return; 763 return;
@@ -1015,8 +979,6 @@ static void iuu_close(struct usb_serial_port *port)
1015 if (!serial) 979 if (!serial)
1016 return; 980 return;
1017 981
1018 dbg("%s - port %d", __func__, port->number);
1019
1020 iuu_uart_off(port); 982 iuu_uart_off(port);
1021 if (serial->dev) { 983 if (serial->dev) {
1022 /* free writebuf */ 984 /* free writebuf */
@@ -1031,7 +993,6 @@ static void iuu_close(struct usb_serial_port *port)
1031 993
1032static void iuu_init_termios(struct tty_struct *tty) 994static void iuu_init_termios(struct tty_struct *tty)
1033{ 995{
1034 dbg("%s - enter", __func__);
1035 *(tty->termios) = tty_std_termios; 996 *(tty->termios) = tty_std_termios;
1036 tty->termios->c_cflag = CLOCAL | CREAD | CS8 | B9600 997 tty->termios->c_cflag = CLOCAL | CREAD | CS8 | B9600
1037 | TIOCM_CTS | CSTOPB | PARENB; 998 | TIOCM_CTS | CSTOPB | PARENB;
@@ -1188,8 +1149,6 @@ static int iuu_vcc_set(struct usb_serial_port *port, unsigned int vcc)
1188 if (!buf) 1149 if (!buf)
1189 return -ENOMEM; 1150 return -ENOMEM;
1190 1151
1191 dbg("%s - enter", __func__);
1192
1193 buf[0] = IUU_SET_VCC; 1152 buf[0] = IUU_SET_VCC;
1194 buf[1] = vcc & 0xFF; 1153 buf[1] = vcc & 0xFF;
1195 buf[2] = (vcc >> 8) & 0xFF; 1154 buf[2] = (vcc >> 8) & 0xFF;
@@ -1250,15 +1209,11 @@ static DEVICE_ATTR(vcc_mode, S_IRUSR | S_IWUSR, show_vcc_mode,
1250 1209
1251static int iuu_create_sysfs_attrs(struct usb_serial_port *port) 1210static int iuu_create_sysfs_attrs(struct usb_serial_port *port)
1252{ 1211{
1253 dbg("%s", __func__);
1254
1255 return device_create_file(&port->dev, &dev_attr_vcc_mode); 1212 return device_create_file(&port->dev, &dev_attr_vcc_mode);
1256} 1213}
1257 1214
1258static int iuu_remove_sysfs_attrs(struct usb_serial_port *port) 1215static int iuu_remove_sysfs_attrs(struct usb_serial_port *port)
1259{ 1216{
1260 dbg("%s", __func__);
1261
1262 device_remove_file(&port->dev, &dev_attr_vcc_mode); 1217 device_remove_file(&port->dev, &dev_attr_vcc_mode);
1263 return 0; 1218 return 0;
1264} 1219}
@@ -1294,7 +1249,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
1294 &iuu_device, NULL 1249 &iuu_device, NULL
1295}; 1250};
1296 1251
1297module_usb_serial_driver(iuu_driver, serial_drivers); 1252module_usb_serial_driver(serial_drivers, id_table);
1298 1253
1299MODULE_AUTHOR("Alain Degreffe eczema@ecze.com"); 1254MODULE_AUTHOR("Alain Degreffe eczema@ecze.com");
1300 1255
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index a39ddd1b0dca..a1b99243dac9 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -130,15 +130,13 @@ struct keyspan_port_private {
130#include "keyspan_usa67msg.h" 130#include "keyspan_usa67msg.h"
131 131
132 132
133module_usb_serial_driver(keyspan_driver, serial_drivers); 133module_usb_serial_driver(serial_drivers, keyspan_ids_combined);
134 134
135static void keyspan_break_ctl(struct tty_struct *tty, int break_state) 135static void keyspan_break_ctl(struct tty_struct *tty, int break_state)
136{ 136{
137 struct usb_serial_port *port = tty->driver_data; 137 struct usb_serial_port *port = tty->driver_data;
138 struct keyspan_port_private *p_priv; 138 struct keyspan_port_private *p_priv;
139 139
140 dbg("%s", __func__);
141
142 p_priv = usb_get_serial_port_data(port); 140 p_priv = usb_get_serial_port_data(port);
143 141
144 if (break_state == -1) 142 if (break_state == -1)
@@ -158,8 +156,6 @@ static void keyspan_set_termios(struct tty_struct *tty,
158 const struct keyspan_device_details *d_details; 156 const struct keyspan_device_details *d_details;
159 unsigned int cflag; 157 unsigned int cflag;
160 158
161 dbg("%s", __func__);
162
163 p_priv = usb_get_serial_port_data(port); 159 p_priv = usb_get_serial_port_data(port);
164 d_details = p_priv->device_details; 160 d_details = p_priv->device_details;
165 cflag = tty->termios->c_cflag; 161 cflag = tty->termios->c_cflag;
@@ -306,8 +302,6 @@ static void usa26_indat_callback(struct urb *urb)
306 unsigned char *data = urb->transfer_buffer; 302 unsigned char *data = urb->transfer_buffer;
307 int status = urb->status; 303 int status = urb->status;
308 304
309 dbg("%s", __func__);
310
311 endpoint = usb_pipeendpoint(urb->pipe); 305 endpoint = usb_pipeendpoint(urb->pipe);
312 306
313 if (status) { 307 if (status) {
@@ -369,8 +363,6 @@ static void usa2x_outdat_callback(struct urb *urb)
369 363
370static void usa26_inack_callback(struct urb *urb) 364static void usa26_inack_callback(struct urb *urb)
371{ 365{
372 dbg("%s", __func__);
373
374} 366}
375 367
376static void usa26_outcont_callback(struct urb *urb) 368static void usa26_outcont_callback(struct urb *urb)
@@ -452,7 +444,6 @@ exit: ;
452 444
453static void usa26_glocont_callback(struct urb *urb) 445static void usa26_glocont_callback(struct urb *urb)
454{ 446{
455 dbg("%s", __func__);
456} 447}
457 448
458 449
@@ -465,8 +456,6 @@ static void usa28_indat_callback(struct urb *urb)
465 struct keyspan_port_private *p_priv; 456 struct keyspan_port_private *p_priv;
466 int status = urb->status; 457 int status = urb->status;
467 458
468 dbg("%s", __func__);
469
470 port = urb->context; 459 port = urb->context;
471 p_priv = usb_get_serial_port_data(port); 460 p_priv = usb_get_serial_port_data(port);
472 data = urb->transfer_buffer; 461 data = urb->transfer_buffer;
@@ -505,7 +494,6 @@ static void usa28_indat_callback(struct urb *urb)
505 494
506static void usa28_inack_callback(struct urb *urb) 495static void usa28_inack_callback(struct urb *urb)
507{ 496{
508 dbg("%s", __func__);
509} 497}
510 498
511static void usa28_outcont_callback(struct urb *urb) 499static void usa28_outcont_callback(struct urb *urb)
@@ -585,7 +573,6 @@ exit: ;
585 573
586static void usa28_glocont_callback(struct urb *urb) 574static void usa28_glocont_callback(struct urb *urb)
587{ 575{
588 dbg("%s", __func__);
589} 576}
590 577
591 578
@@ -596,8 +583,6 @@ static void usa49_glocont_callback(struct urb *urb)
596 struct keyspan_port_private *p_priv; 583 struct keyspan_port_private *p_priv;
597 int i; 584 int i;
598 585
599 dbg("%s", __func__);
600
601 serial = urb->context; 586 serial = urb->context;
602 for (i = 0; i < serial->num_ports; ++i) { 587 for (i = 0; i < serial->num_ports; ++i) {
603 port = serial->port[i]; 588 port = serial->port[i];
@@ -625,8 +610,6 @@ static void usa49_instat_callback(struct urb *urb)
625 int old_dcd_state; 610 int old_dcd_state;
626 int status = urb->status; 611 int status = urb->status;
627 612
628 dbg("%s", __func__);
629
630 serial = urb->context; 613 serial = urb->context;
631 614
632 if (status) { 615 if (status) {
@@ -679,7 +662,6 @@ exit: ;
679 662
680static void usa49_inack_callback(struct urb *urb) 663static void usa49_inack_callback(struct urb *urb)
681{ 664{
682 dbg("%s", __func__);
683} 665}
684 666
685static void usa49_indat_callback(struct urb *urb) 667static void usa49_indat_callback(struct urb *urb)
@@ -691,8 +673,6 @@ static void usa49_indat_callback(struct urb *urb)
691 unsigned char *data = urb->transfer_buffer; 673 unsigned char *data = urb->transfer_buffer;
692 int status = urb->status; 674 int status = urb->status;
693 675
694 dbg("%s", __func__);
695
696 endpoint = usb_pipeendpoint(urb->pipe); 676 endpoint = usb_pipeendpoint(urb->pipe);
697 677
698 if (status) { 678 if (status) {
@@ -742,8 +722,6 @@ static void usa49wg_indat_callback(struct urb *urb)
742 unsigned char *data = urb->transfer_buffer; 722 unsigned char *data = urb->transfer_buffer;
743 int status = urb->status; 723 int status = urb->status;
744 724
745 dbg("%s", __func__);
746
747 serial = urb->context; 725 serial = urb->context;
748 726
749 if (status) { 727 if (status) {
@@ -806,7 +784,6 @@ static void usa49wg_indat_callback(struct urb *urb)
806/* not used, usa-49 doesn't have per-port control endpoints */ 784/* not used, usa-49 doesn't have per-port control endpoints */
807static void usa49_outcont_callback(struct urb *urb) 785static void usa49_outcont_callback(struct urb *urb)
808{ 786{
809 dbg("%s", __func__);
810} 787}
811 788
812static void usa90_indat_callback(struct urb *urb) 789static void usa90_indat_callback(struct urb *urb)
@@ -819,8 +796,6 @@ static void usa90_indat_callback(struct urb *urb)
819 unsigned char *data = urb->transfer_buffer; 796 unsigned char *data = urb->transfer_buffer;
820 int status = urb->status; 797 int status = urb->status;
821 798
822 dbg("%s", __func__);
823
824 endpoint = usb_pipeendpoint(urb->pipe); 799 endpoint = usb_pipeendpoint(urb->pipe);
825 800
826 if (status) { 801 if (status) {
@@ -957,8 +932,6 @@ static void usa67_instat_callback(struct urb *urb)
957 int old_dcd_state; 932 int old_dcd_state;
958 int status = urb->status; 933 int status = urb->status;
959 934
960 dbg("%s", __func__);
961
962 serial = urb->context; 935 serial = urb->context;
963 936
964 if (status) { 937 if (status) {
@@ -1010,8 +983,6 @@ static void usa67_glocont_callback(struct urb *urb)
1010 struct keyspan_port_private *p_priv; 983 struct keyspan_port_private *p_priv;
1011 int i; 984 int i;
1012 985
1013 dbg("%s", __func__);
1014
1015 serial = urb->context; 986 serial = urb->context;
1016 for (i = 0; i < serial->num_ports; ++i) { 987 for (i = 0; i < serial->num_ports; ++i) {
1017 port = serial->port[i]; 988 port = serial->port[i];
@@ -1035,7 +1006,6 @@ static int keyspan_write_room(struct tty_struct *tty)
1035 int data_len; 1006 int data_len;
1036 struct urb *this_urb; 1007 struct urb *this_urb;
1037 1008
1038 dbg("%s", __func__);
1039 p_priv = usb_get_serial_port_data(port); 1009 p_priv = usb_get_serial_port_data(port);
1040 d_details = p_priv->device_details; 1010 d_details = p_priv->device_details;
1041 1011
@@ -1078,8 +1048,6 @@ static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port)
1078 p_priv = usb_get_serial_port_data(port); 1048 p_priv = usb_get_serial_port_data(port);
1079 d_details = p_priv->device_details; 1049 d_details = p_priv->device_details;
1080 1050
1081 dbg("%s - port%d.", __func__, port->number);
1082
1083 /* Set some sane defaults */ 1051 /* Set some sane defaults */
1084 p_priv->rts_state = 1; 1052 p_priv->rts_state = 1;
1085 p_priv->dtr_state = 1; 1053 p_priv->dtr_state = 1;
@@ -1165,7 +1133,6 @@ static void keyspan_close(struct usb_serial_port *port)
1165 struct keyspan_serial_private *s_priv; 1133 struct keyspan_serial_private *s_priv;
1166 struct keyspan_port_private *p_priv; 1134 struct keyspan_port_private *p_priv;
1167 1135
1168 dbg("%s", __func__);
1169 s_priv = usb_get_serial_data(serial); 1136 s_priv = usb_get_serial_data(serial);
1170 p_priv = usb_get_serial_port_data(port); 1137 p_priv = usb_get_serial_port_data(port);
1171 1138
@@ -1438,8 +1405,6 @@ static void keyspan_setup_urbs(struct usb_serial *serial)
1438 struct callbacks *cback; 1405 struct callbacks *cback;
1439 int endp; 1406 int endp;
1440 1407
1441 dbg("%s", __func__);
1442
1443 s_priv = usb_get_serial_data(serial); 1408 s_priv = usb_get_serial_data(serial);
1444 d_details = s_priv->device_details; 1409 d_details = s_priv->device_details;
1445 1410
@@ -1853,8 +1818,6 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
1853 struct urb *this_urb; 1818 struct urb *this_urb;
1854 int device_port, err; 1819 int device_port, err;
1855 1820
1856 dbg("%s", __func__);
1857
1858 s_priv = usb_get_serial_data(serial); 1821 s_priv = usb_get_serial_data(serial);
1859 p_priv = usb_get_serial_port_data(port); 1822 p_priv = usb_get_serial_port_data(port);
1860 d_details = s_priv->device_details; 1823 d_details = s_priv->device_details;
@@ -1980,8 +1943,6 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
1980 struct urb *this_urb; 1943 struct urb *this_urb;
1981 int err, device_port; 1944 int err, device_port;
1982 1945
1983 dbg("%s", __func__);
1984
1985 s_priv = usb_get_serial_data(serial); 1946 s_priv = usb_get_serial_data(serial);
1986 p_priv = usb_get_serial_port_data(port); 1947 p_priv = usb_get_serial_port_data(port);
1987 d_details = s_priv->device_details; 1948 d_details = s_priv->device_details;
@@ -2168,8 +2129,6 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2168 int err; 2129 int err;
2169 u8 prescaler; 2130 u8 prescaler;
2170 2131
2171 dbg("%s", __func__);
2172
2173 s_priv = usb_get_serial_data(serial); 2132 s_priv = usb_get_serial_data(serial);
2174 p_priv = usb_get_serial_port_data(port); 2133 p_priv = usb_get_serial_port_data(port);
2175 d_details = s_priv->device_details; 2134 d_details = s_priv->device_details;
@@ -2300,8 +2259,6 @@ static int keyspan_usa67_send_setup(struct usb_serial *serial,
2300 struct urb *this_urb; 2259 struct urb *this_urb;
2301 int err, device_port; 2260 int err, device_port;
2302 2261
2303 dbg("%s", __func__);
2304
2305 s_priv = usb_get_serial_data(serial); 2262 s_priv = usb_get_serial_data(serial);
2306 p_priv = usb_get_serial_port_data(port); 2263 p_priv = usb_get_serial_port_data(port);
2307 d_details = s_priv->device_details; 2264 d_details = s_priv->device_details;
@@ -2442,8 +2399,6 @@ static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2442 struct keyspan_serial_private *s_priv; 2399 struct keyspan_serial_private *s_priv;
2443 const struct keyspan_device_details *d_details; 2400 const struct keyspan_device_details *d_details;
2444 2401
2445 dbg("%s", __func__);
2446
2447 s_priv = usb_get_serial_data(serial); 2402 s_priv = usb_get_serial_data(serial);
2448 d_details = s_priv->device_details; 2403 d_details = s_priv->device_details;
2449 2404
@@ -2477,8 +2432,6 @@ static int keyspan_startup(struct usb_serial *serial)
2477 struct keyspan_port_private *p_priv; 2432 struct keyspan_port_private *p_priv;
2478 const struct keyspan_device_details *d_details; 2433 const struct keyspan_device_details *d_details;
2479 2434
2480 dbg("%s", __func__);
2481
2482 for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i) 2435 for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i)
2483 if (d_details->product_id == 2436 if (d_details->product_id ==
2484 le16_to_cpu(serial->dev->descriptor.idProduct)) 2437 le16_to_cpu(serial->dev->descriptor.idProduct))
@@ -2538,8 +2491,6 @@ static void keyspan_disconnect(struct usb_serial *serial)
2538 struct keyspan_serial_private *s_priv; 2491 struct keyspan_serial_private *s_priv;
2539 struct keyspan_port_private *p_priv; 2492 struct keyspan_port_private *p_priv;
2540 2493
2541 dbg("%s", __func__);
2542
2543 s_priv = usb_get_serial_data(serial); 2494 s_priv = usb_get_serial_data(serial);
2544 2495
2545 /* Stop reading/writing urbs */ 2496 /* Stop reading/writing urbs */
@@ -2579,8 +2530,6 @@ static void keyspan_release(struct usb_serial *serial)
2579 struct usb_serial_port *port; 2530 struct usb_serial_port *port;
2580 struct keyspan_serial_private *s_priv; 2531 struct keyspan_serial_private *s_priv;
2581 2532
2582 dbg("%s", __func__);
2583
2584 s_priv = usb_get_serial_data(serial); 2533 s_priv = usb_get_serial_data(serial);
2585 2534
2586 /* dbg("Freeing serial->private."); */ 2535 /* dbg("Freeing serial->private."); */
diff --git a/drivers/usb/serial/keyspan.h b/drivers/usb/serial/keyspan.h
index 622853c9e384..fe1c5d91692c 100644
--- a/drivers/usb/serial/keyspan.h
+++ b/drivers/usb/serial/keyspan.h
@@ -487,13 +487,6 @@ static const struct usb_device_id keyspan_ids_combined[] = {
487 487
488MODULE_DEVICE_TABLE(usb, keyspan_ids_combined); 488MODULE_DEVICE_TABLE(usb, keyspan_ids_combined);
489 489
490static struct usb_driver keyspan_driver = {
491 .name = "keyspan",
492 .probe = usb_serial_probe,
493 .disconnect = usb_serial_disconnect,
494 .id_table = keyspan_ids_combined,
495};
496
497/* usb_device_id table for the pre-firmware download keyspan devices */ 490/* usb_device_id table for the pre-firmware download keyspan devices */
498static const struct usb_device_id keyspan_pre_ids[] = { 491static const struct usb_device_id keyspan_pre_ids[] = {
499 { USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_usa18x_pre_product_id) }, 492 { USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_usa18x_pre_product_id) },
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index 693bcdfcb3d5..a4ac3cfeffc4 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -86,13 +86,6 @@ static const struct usb_device_id id_table_combined[] = {
86 86
87MODULE_DEVICE_TABLE(usb, id_table_combined); 87MODULE_DEVICE_TABLE(usb, id_table_combined);
88 88
89static struct usb_driver keyspan_pda_driver = {
90 .name = "keyspan_pda",
91 .probe = usb_serial_probe,
92 .disconnect = usb_serial_disconnect,
93 .id_table = id_table_combined,
94};
95
96static const struct usb_device_id id_table_std[] = { 89static const struct usb_device_id id_table_std[] = {
97 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) }, 90 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
98 { } /* Terminating entry */ 91 { } /* Terminating entry */
@@ -131,7 +124,6 @@ static void keyspan_pda_request_unthrottle(struct work_struct *work)
131 struct usb_serial *serial = priv->serial; 124 struct usb_serial *serial = priv->serial;
132 int result; 125 int result;
133 126
134 dbg(" request_unthrottle");
135 /* ask the device to tell us when the tx buffer becomes 127 /* ask the device to tell us when the tx buffer becomes
136 sufficiently empty */ 128 sufficiently empty */
137 result = usb_control_msg(serial->dev, 129 result = usb_control_msg(serial->dev,
@@ -226,7 +218,7 @@ static void keyspan_pda_rx_throttle(struct tty_struct *tty)
226 send an XOFF, although it might make sense to foist that off 218 send an XOFF, although it might make sense to foist that off
227 upon the device too. */ 219 upon the device too. */
228 struct usb_serial_port *port = tty->driver_data; 220 struct usb_serial_port *port = tty->driver_data;
229 dbg("keyspan_pda_rx_throttle port %d", port->number); 221
230 usb_kill_urb(port->interrupt_in_urb); 222 usb_kill_urb(port->interrupt_in_urb);
231} 223}
232 224
@@ -235,7 +227,7 @@ static void keyspan_pda_rx_unthrottle(struct tty_struct *tty)
235{ 227{
236 struct usb_serial_port *port = tty->driver_data; 228 struct usb_serial_port *port = tty->driver_data;
237 /* just restart the receive interrupt URB */ 229 /* just restart the receive interrupt URB */
238 dbg("keyspan_pda_rx_unthrottle port %d", port->number); 230
239 if (usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL)) 231 if (usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL))
240 dbg(" usb_submit_urb(read urb) failed"); 232 dbg(" usb_submit_urb(read urb) failed");
241} 233}
@@ -466,7 +458,6 @@ static int keyspan_pda_write(struct tty_struct *tty,
466 select() or poll() too) until we receive that unthrottle interrupt. 458 select() or poll() too) until we receive that unthrottle interrupt.
467 Block if we can't write anything at all, otherwise write as much as 459 Block if we can't write anything at all, otherwise write as much as
468 we can. */ 460 we can. */
469 dbg("keyspan_pda_write(%d)", count);
470 if (count == 0) { 461 if (count == 0) {
471 dbg(" write request of 0 bytes"); 462 dbg(" write request of 0 bytes");
472 return 0; 463 return 0;
@@ -766,8 +757,6 @@ static int keyspan_pda_startup(struct usb_serial *serial)
766 757
767static void keyspan_pda_release(struct usb_serial *serial) 758static void keyspan_pda_release(struct usb_serial *serial)
768{ 759{
769 dbg("%s", __func__);
770
771 kfree(usb_get_serial_port_data(serial->port[0])); 760 kfree(usb_get_serial_port_data(serial->port[0]));
772} 761}
773 762
@@ -834,7 +823,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
834 NULL 823 NULL
835}; 824};
836 825
837module_usb_serial_driver(keyspan_pda_driver, serial_drivers); 826module_usb_serial_driver(serial_drivers, id_table_combined);
838 827
839MODULE_AUTHOR(DRIVER_AUTHOR); 828MODULE_AUTHOR(DRIVER_AUTHOR);
840MODULE_DESCRIPTION(DRIVER_DESC); 829MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
index 10f05407e535..5bed59cd5776 100644
--- a/drivers/usb/serial/kl5kusb105.c
+++ b/drivers/usb/serial/kl5kusb105.c
@@ -86,13 +86,6 @@ static const struct usb_device_id id_table[] = {
86 86
87MODULE_DEVICE_TABLE(usb, id_table); 87MODULE_DEVICE_TABLE(usb, id_table);
88 88
89static struct usb_driver kl5kusb105d_driver = {
90 .name = "kl5kusb105d",
91 .probe = usb_serial_probe,
92 .disconnect = usb_serial_disconnect,
93 .id_table = id_table,
94};
95
96static struct usb_serial_driver kl5kusb105d_device = { 89static struct usb_serial_driver kl5kusb105d_device = {
97 .driver = { 90 .driver = {
98 .owner = THIS_MODULE, 91 .owner = THIS_MODULE,
@@ -282,8 +275,6 @@ static void klsi_105_release(struct usb_serial *serial)
282{ 275{
283 int i; 276 int i;
284 277
285 dbg("%s", __func__);
286
287 for (i = 0; i < serial->num_ports; ++i) 278 for (i = 0; i < serial->num_ports; ++i)
288 kfree(usb_get_serial_port_data(serial->port[i])); 279 kfree(usb_get_serial_port_data(serial->port[i]));
289} 280}
@@ -298,8 +289,6 @@ static int klsi_105_open(struct tty_struct *tty, struct usb_serial_port *port)
298 struct klsi_105_port_settings *cfg; 289 struct klsi_105_port_settings *cfg;
299 unsigned long flags; 290 unsigned long flags;
300 291
301 dbg("%s port %d", __func__, port->number);
302
303 /* Do a defined restart: 292 /* Do a defined restart:
304 * Set up sane default baud rate and send the 'READ_ON' 293 * Set up sane default baud rate and send the 'READ_ON'
305 * vendor command. 294 * vendor command.
@@ -376,8 +365,6 @@ static void klsi_105_close(struct usb_serial_port *port)
376{ 365{
377 int rc; 366 int rc;
378 367
379 dbg("%s port %d", __func__, port->number);
380
381 mutex_lock(&port->serial->disc_mutex); 368 mutex_lock(&port->serial->disc_mutex);
382 if (!port->serial->disconnected) { 369 if (!port->serial->disconnected) {
383 /* send READ_OFF */ 370 /* send READ_OFF */
@@ -646,7 +633,6 @@ static int klsi_105_tiocmget(struct tty_struct *tty)
646 unsigned long flags; 633 unsigned long flags;
647 int rc; 634 int rc;
648 unsigned long line_state; 635 unsigned long line_state;
649 dbg("%s - request, just guessing", __func__);
650 636
651 rc = klsi_105_get_line_state(port, &line_state); 637 rc = klsi_105_get_line_state(port, &line_state);
652 if (rc < 0) { 638 if (rc < 0) {
@@ -668,8 +654,6 @@ static int klsi_105_tiocmset(struct tty_struct *tty,
668{ 654{
669 int retval = -EINVAL; 655 int retval = -EINVAL;
670 656
671 dbg("%s", __func__);
672
673/* if this ever gets implemented, it should be done something like this: 657/* if this ever gets implemented, it should be done something like this:
674 struct usb_serial *serial = port->serial; 658 struct usb_serial *serial = port->serial;
675 struct klsi_105_private *priv = usb_get_serial_port_data(port); 659 struct klsi_105_private *priv = usb_get_serial_port_data(port);
@@ -692,7 +676,7 @@ static int klsi_105_tiocmset(struct tty_struct *tty,
692 return retval; 676 return retval;
693} 677}
694 678
695module_usb_serial_driver(kl5kusb105d_driver, serial_drivers); 679module_usb_serial_driver(serial_drivers, id_table);
696 680
697MODULE_AUTHOR(DRIVER_AUTHOR); 681MODULE_AUTHOR(DRIVER_AUTHOR);
698MODULE_DESCRIPTION(DRIVER_DESC); 682MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
index 4a9a75eb9b95..fafeabb64c55 100644
--- a/drivers/usb/serial/kobil_sct.c
+++ b/drivers/usb/serial/kobil_sct.c
@@ -81,18 +81,8 @@ static const struct usb_device_id id_table[] = {
81 { USB_DEVICE(KOBIL_VENDOR_ID, KOBIL_KAAN_SIM_PRODUCT_ID) }, 81 { USB_DEVICE(KOBIL_VENDOR_ID, KOBIL_KAAN_SIM_PRODUCT_ID) },
82 { } /* Terminating entry */ 82 { } /* Terminating entry */
83}; 83};
84
85
86MODULE_DEVICE_TABLE(usb, id_table); 84MODULE_DEVICE_TABLE(usb, id_table);
87 85
88static struct usb_driver kobil_driver = {
89 .name = "kobil",
90 .probe = usb_serial_probe,
91 .disconnect = usb_serial_disconnect,
92 .id_table = id_table,
93};
94
95
96static struct usb_serial_driver kobil_device = { 86static struct usb_serial_driver kobil_device = {
97 .driver = { 87 .driver = {
98 .owner = THIS_MODULE, 88 .owner = THIS_MODULE,
@@ -193,7 +183,6 @@ static int kobil_startup(struct usb_serial *serial)
193static void kobil_release(struct usb_serial *serial) 183static void kobil_release(struct usb_serial *serial)
194{ 184{
195 int i; 185 int i;
196 dbg("%s - port %d", __func__, serial->port[0]->number);
197 186
198 for (i = 0; i < serial->num_ports; ++i) 187 for (i = 0; i < serial->num_ports; ++i)
199 kfree(usb_get_serial_port_data(serial->port[i])); 188 kfree(usb_get_serial_port_data(serial->port[i]));
@@ -217,7 +206,6 @@ static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
217 int transfer_buffer_length = 8; 206 int transfer_buffer_length = 8;
218 int write_urb_transfer_buffer_length = 8; 207 int write_urb_transfer_buffer_length = 8;
219 208
220 dbg("%s - port %d", __func__, port->number);
221 priv = usb_get_serial_port_data(port); 209 priv = usb_get_serial_port_data(port);
222 210
223 /* allocate memory for transfer buffer */ 211 /* allocate memory for transfer buffer */
@@ -327,8 +315,6 @@ static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
327 315
328static void kobil_close(struct usb_serial_port *port) 316static void kobil_close(struct usb_serial_port *port)
329{ 317{
330 dbg("%s - port %d", __func__, port->number);
331
332 /* FIXME: Add rts/dtr methods */ 318 /* FIXME: Add rts/dtr methods */
333 if (port->write_urb) { 319 if (port->write_urb) {
334 usb_poison_urb(port->write_urb); 320 usb_poison_urb(port->write_urb);
@@ -349,8 +335,6 @@ static void kobil_read_int_callback(struct urb *urb)
349 int status = urb->status; 335 int status = urb->status;
350/* char *dbg_data; */ 336/* char *dbg_data; */
351 337
352 dbg("%s - port %d", __func__, port->number);
353
354 if (status) { 338 if (status) {
355 dbg("%s - port %d Read int status not zero: %d", 339 dbg("%s - port %d Read int status not zero: %d",
356 __func__, port->number, status); 340 __func__, port->number, status);
@@ -474,7 +458,6 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
474 458
475static int kobil_write_room(struct tty_struct *tty) 459static int kobil_write_room(struct tty_struct *tty)
476{ 460{
477 /* dbg("%s - port %d", __func__, port->number); */
478 /* FIXME */ 461 /* FIXME */
479 return 8; 462 return 8;
480} 463}
@@ -683,7 +666,7 @@ static int kobil_ioctl(struct tty_struct *tty,
683 } 666 }
684} 667}
685 668
686module_usb_serial_driver(kobil_driver, serial_drivers); 669module_usb_serial_driver(serial_drivers, id_table);
687 670
688MODULE_AUTHOR(DRIVER_AUTHOR); 671MODULE_AUTHOR(DRIVER_AUTHOR);
689MODULE_DESCRIPTION(DRIVER_DESC); 672MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
index 6edd26130e25..d0ec1aa52719 100644
--- a/drivers/usb/serial/mct_u232.c
+++ b/drivers/usb/serial/mct_u232.c
@@ -73,22 +73,14 @@ static void mct_u232_unthrottle(struct tty_struct *tty);
73/* 73/*
74 * All of the device info needed for the MCT USB-RS232 converter. 74 * All of the device info needed for the MCT USB-RS232 converter.
75 */ 75 */
76static const struct usb_device_id id_table_combined[] = { 76static const struct usb_device_id id_table[] = {
77 { USB_DEVICE(MCT_U232_VID, MCT_U232_PID) }, 77 { USB_DEVICE(MCT_U232_VID, MCT_U232_PID) },
78 { USB_DEVICE(MCT_U232_VID, MCT_U232_SITECOM_PID) }, 78 { USB_DEVICE(MCT_U232_VID, MCT_U232_SITECOM_PID) },
79 { USB_DEVICE(MCT_U232_VID, MCT_U232_DU_H3SP_PID) }, 79 { USB_DEVICE(MCT_U232_VID, MCT_U232_DU_H3SP_PID) },
80 { USB_DEVICE(MCT_U232_BELKIN_F5U109_VID, MCT_U232_BELKIN_F5U109_PID) }, 80 { USB_DEVICE(MCT_U232_BELKIN_F5U109_VID, MCT_U232_BELKIN_F5U109_PID) },
81 { } /* Terminating entry */ 81 { } /* Terminating entry */
82}; 82};
83 83MODULE_DEVICE_TABLE(usb, id_table);
84MODULE_DEVICE_TABLE(usb, id_table_combined);
85
86static struct usb_driver mct_u232_driver = {
87 .name = "mct_u232",
88 .probe = usb_serial_probe,
89 .disconnect = usb_serial_disconnect,
90 .id_table = id_table_combined,
91};
92 84
93static struct usb_serial_driver mct_u232_device = { 85static struct usb_serial_driver mct_u232_device = {
94 .driver = { 86 .driver = {
@@ -96,7 +88,7 @@ static struct usb_serial_driver mct_u232_device = {
96 .name = "mct_u232", 88 .name = "mct_u232",
97 }, 89 },
98 .description = "MCT U232", 90 .description = "MCT U232",
99 .id_table = id_table_combined, 91 .id_table = id_table,
100 .num_ports = 1, 92 .num_ports = 1,
101 .open = mct_u232_open, 93 .open = mct_u232_open,
102 .close = mct_u232_close, 94 .close = mct_u232_close,
@@ -427,8 +419,6 @@ static void mct_u232_release(struct usb_serial *serial)
427 struct mct_u232_private *priv; 419 struct mct_u232_private *priv;
428 int i; 420 int i;
429 421
430 dbg("%s", __func__);
431
432 for (i = 0; i < serial->num_ports; ++i) { 422 for (i = 0; i < serial->num_ports; ++i) {
433 /* My special items, the standard routines free my urbs */ 423 /* My special items, the standard routines free my urbs */
434 priv = usb_get_serial_port_data(serial->port[i]); 424 priv = usb_get_serial_port_data(serial->port[i]);
@@ -446,8 +436,6 @@ static int mct_u232_open(struct tty_struct *tty, struct usb_serial_port *port)
446 unsigned char last_lcr; 436 unsigned char last_lcr;
447 unsigned char last_msr; 437 unsigned char last_msr;
448 438
449 dbg("%s port %d", __func__, port->number);
450
451 /* Compensate for a hardware bug: although the Sitecom U232-P25 439 /* Compensate for a hardware bug: although the Sitecom U232-P25
452 * device reports a maximum output packet size of 32 bytes, 440 * device reports a maximum output packet size of 32 bytes,
453 * it seems to be able to accept only 16 bytes (and that's what 441 * it seems to be able to accept only 16 bytes (and that's what
@@ -528,8 +516,6 @@ static void mct_u232_dtr_rts(struct usb_serial_port *port, int on)
528 516
529static void mct_u232_close(struct usb_serial_port *port) 517static void mct_u232_close(struct usb_serial_port *port)
530{ 518{
531 dbg("%s port %d", __func__, port->number);
532
533 if (port->serial->dev) { 519 if (port->serial->dev) {
534 /* shutdown our urbs */ 520 /* shutdown our urbs */
535 usb_kill_urb(port->write_urb); 521 usb_kill_urb(port->write_urb);
@@ -572,7 +558,6 @@ static void mct_u232_read_int_callback(struct urb *urb)
572 return; 558 return;
573 } 559 }
574 560
575 dbg("%s - port %d", __func__, port->number);
576 usb_serial_debug_data(debug, &port->dev, __func__, 561 usb_serial_debug_data(debug, &port->dev, __func__,
577 urb->actual_length, data); 562 urb->actual_length, data);
578 563
@@ -733,8 +718,6 @@ static void mct_u232_break_ctl(struct tty_struct *tty, int break_state)
733 unsigned char lcr; 718 unsigned char lcr;
734 unsigned long flags; 719 unsigned long flags;
735 720
736 dbg("%sstate=%d", __func__, break_state);
737
738 spin_lock_irqsave(&priv->lock, flags); 721 spin_lock_irqsave(&priv->lock, flags);
739 lcr = priv->last_lcr; 722 lcr = priv->last_lcr;
740 723
@@ -753,8 +736,6 @@ static int mct_u232_tiocmget(struct tty_struct *tty)
753 unsigned int control_state; 736 unsigned int control_state;
754 unsigned long flags; 737 unsigned long flags;
755 738
756 dbg("%s", __func__);
757
758 spin_lock_irqsave(&priv->lock, flags); 739 spin_lock_irqsave(&priv->lock, flags);
759 control_state = priv->control_state; 740 control_state = priv->control_state;
760 spin_unlock_irqrestore(&priv->lock, flags); 741 spin_unlock_irqrestore(&priv->lock, flags);
@@ -771,8 +752,6 @@ static int mct_u232_tiocmset(struct tty_struct *tty,
771 unsigned int control_state; 752 unsigned int control_state;
772 unsigned long flags; 753 unsigned long flags;
773 754
774 dbg("%s", __func__);
775
776 spin_lock_irqsave(&priv->lock, flags); 755 spin_lock_irqsave(&priv->lock, flags);
777 control_state = priv->control_state; 756 control_state = priv->control_state;
778 757
@@ -796,8 +775,6 @@ static void mct_u232_throttle(struct tty_struct *tty)
796 struct mct_u232_private *priv = usb_get_serial_port_data(port); 775 struct mct_u232_private *priv = usb_get_serial_port_data(port);
797 unsigned int control_state; 776 unsigned int control_state;
798 777
799 dbg("%s - port %d", __func__, port->number);
800
801 spin_lock_irq(&priv->lock); 778 spin_lock_irq(&priv->lock);
802 priv->rx_flags |= THROTTLED; 779 priv->rx_flags |= THROTTLED;
803 if (C_CRTSCTS(tty)) { 780 if (C_CRTSCTS(tty)) {
@@ -816,8 +793,6 @@ static void mct_u232_unthrottle(struct tty_struct *tty)
816 struct mct_u232_private *priv = usb_get_serial_port_data(port); 793 struct mct_u232_private *priv = usb_get_serial_port_data(port);
817 unsigned int control_state; 794 unsigned int control_state;
818 795
819 dbg("%s - port %d", __func__, port->number);
820
821 spin_lock_irq(&priv->lock); 796 spin_lock_irq(&priv->lock);
822 if ((priv->rx_flags & THROTTLED) && C_CRTSCTS(tty)) { 797 if ((priv->rx_flags & THROTTLED) && C_CRTSCTS(tty)) {
823 priv->rx_flags &= ~THROTTLED; 798 priv->rx_flags &= ~THROTTLED;
@@ -906,7 +881,7 @@ static int mct_u232_get_icount(struct tty_struct *tty,
906 return 0; 881 return 0;
907} 882}
908 883
909module_usb_serial_driver(mct_u232_driver, serial_drivers); 884module_usb_serial_driver(serial_drivers, id_table);
910 885
911MODULE_AUTHOR(DRIVER_AUTHOR); 886MODULE_AUTHOR(DRIVER_AUTHOR);
912MODULE_DESCRIPTION(DRIVER_DESC); 887MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/metro-usb.c b/drivers/usb/serial/metro-usb.c
index 08d16e8c002d..81423f7361db 100644
--- a/drivers/usb/serial/metro-usb.c
+++ b/drivers/usb/serial/metro-usb.c
@@ -17,7 +17,6 @@
17#include <linux/tty_flip.h> 17#include <linux/tty_flip.h>
18#include <linux/moduleparam.h> 18#include <linux/moduleparam.h>
19#include <linux/spinlock.h> 19#include <linux/spinlock.h>
20#include <linux/errno.h>
21#include <linux/uaccess.h> 20#include <linux/uaccess.h>
22#include <linux/usb/serial.h> 21#include <linux/usb/serial.h>
23 22
@@ -56,6 +55,47 @@ MODULE_DEVICE_TABLE(usb, id_table);
56/* Input parameter constants. */ 55/* Input parameter constants. */
57static bool debug; 56static bool debug;
58 57
58/* UNI-Directional mode commands for device configure */
59#define UNI_CMD_OPEN 0x80
60#define UNI_CMD_CLOSE 0xFF
61
62inline int metrousb_is_unidirectional_mode(struct usb_serial_port *port)
63{
64 __u16 product_id = le16_to_cpu(
65 port->serial->dev->descriptor.idProduct);
66
67 return product_id == FOCUS_PRODUCT_ID_UNI;
68}
69
70static int metrousb_send_unidirectional_cmd(u8 cmd, struct usb_serial_port *port)
71{
72 int ret;
73 int actual_len;
74 u8 *buffer_cmd = NULL;
75
76 if (!metrousb_is_unidirectional_mode(port))
77 return 0;
78
79 buffer_cmd = kzalloc(sizeof(cmd), GFP_KERNEL);
80 if (!buffer_cmd)
81 return -ENOMEM;
82
83 *buffer_cmd = cmd;
84
85 ret = usb_interrupt_msg(port->serial->dev,
86 usb_sndintpipe(port->serial->dev, port->interrupt_out_endpointAddress),
87 buffer_cmd, sizeof(cmd),
88 &actual_len, USB_CTRL_SET_TIMEOUT);
89
90 kfree(buffer_cmd);
91
92 if (ret < 0)
93 return ret;
94 else if (actual_len != sizeof(cmd))
95 return -EIO;
96 return 0;
97}
98
59static void metrousb_read_int_callback(struct urb *urb) 99static void metrousb_read_int_callback(struct urb *urb)
60{ 100{
61 struct usb_serial_port *port = urb->context; 101 struct usb_serial_port *port = urb->context;
@@ -78,12 +118,12 @@ static void metrousb_read_int_callback(struct urb *urb)
78 /* urb has been terminated. */ 118 /* urb has been terminated. */
79 dev_dbg(&port->dev, 119 dev_dbg(&port->dev,
80 "%s - urb shutting down, error code=%d\n", 120 "%s - urb shutting down, error code=%d\n",
81 __func__, result); 121 __func__, urb->status);
82 return; 122 return;
83 default: 123 default:
84 dev_dbg(&port->dev, 124 dev_dbg(&port->dev,
85 "%s - non-zero urb received, error code=%d\n", 125 "%s - non-zero urb received, error code=%d\n",
86 __func__, result); 126 __func__, urb->status);
87 goto exit; 127 goto exit;
88 } 128 }
89 129
@@ -91,7 +131,7 @@ static void metrousb_read_int_callback(struct urb *urb)
91 /* Set the data read from the usb port into the serial port buffer. */ 131 /* Set the data read from the usb port into the serial port buffer. */
92 tty = tty_port_tty_get(&port->port); 132 tty = tty_port_tty_get(&port->port);
93 if (!tty) { 133 if (!tty) {
94 dev_dbg(&port->dev, "%s - bad tty pointer - exiting\n", 134 dev_err(&port->dev, "%s - bad tty pointer - exiting\n",
95 __func__); 135 __func__);
96 return; 136 return;
97 } 137 }
@@ -121,7 +161,7 @@ static void metrousb_read_int_callback(struct urb *urb)
121 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); 161 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
122 162
123 if (result) 163 if (result)
124 dev_dbg(&port->dev, 164 dev_err(&port->dev,
125 "%s - failed submitting interrupt in urb, error code=%d\n", 165 "%s - failed submitting interrupt in urb, error code=%d\n",
126 __func__, result); 166 __func__, result);
127 } 167 }
@@ -131,11 +171,19 @@ exit:
131 /* Try to resubmit the urb. */ 171 /* Try to resubmit the urb. */
132 result = usb_submit_urb(urb, GFP_ATOMIC); 172 result = usb_submit_urb(urb, GFP_ATOMIC);
133 if (result) 173 if (result)
134 dev_dbg(&port->dev, 174 dev_err(&port->dev,
135 "%s - failed submitting interrupt in urb, error code=%d\n", 175 "%s - failed submitting interrupt in urb, error code=%d\n",
136 __func__, result); 176 __func__, result);
137} 177}
138 178
179static void metrousb_write_int_callback(struct urb *urb)
180{
181 struct usb_serial_port *port = urb->context;
182
183 dev_warn(&port->dev, "%s not implemented yet.\n",
184 __func__);
185}
186
139static void metrousb_cleanup(struct usb_serial_port *port) 187static void metrousb_cleanup(struct usb_serial_port *port)
140{ 188{
141 dev_dbg(&port->dev, "%s\n", __func__); 189 dev_dbg(&port->dev, "%s\n", __func__);
@@ -146,6 +194,9 @@ static void metrousb_cleanup(struct usb_serial_port *port)
146 usb_unlink_urb(port->interrupt_in_urb); 194 usb_unlink_urb(port->interrupt_in_urb);
147 usb_kill_urb(port->interrupt_in_urb); 195 usb_kill_urb(port->interrupt_in_urb);
148 } 196 }
197
198 /* Send deactivate cmd to device */
199 metrousb_send_unidirectional_cmd(UNI_CMD_CLOSE, port);
149 } 200 }
150} 201}
151 202
@@ -160,7 +211,7 @@ static int metrousb_open(struct tty_struct *tty, struct usb_serial_port *port)
160 211
161 /* Make sure the urb is initialized. */ 212 /* Make sure the urb is initialized. */
162 if (!port->interrupt_in_urb) { 213 if (!port->interrupt_in_urb) {
163 dev_dbg(&port->dev, "%s - interrupt urb not initialized\n", 214 dev_err(&port->dev, "%s - interrupt urb not initialized\n",
164 __func__); 215 __func__);
165 return -ENODEV; 216 return -ENODEV;
166 } 217 }
@@ -191,12 +242,21 @@ static int metrousb_open(struct tty_struct *tty, struct usb_serial_port *port)
191 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 242 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
192 243
193 if (result) { 244 if (result) {
194 dev_dbg(&port->dev, 245 dev_err(&port->dev,
195 "%s - failed submitting interrupt in urb, error code=%d\n", 246 "%s - failed submitting interrupt in urb, error code=%d\n",
196 __func__, result); 247 __func__, result);
197 goto exit; 248 goto exit;
198 } 249 }
199 250
251 /* Send activate cmd to device */
252 result = metrousb_send_unidirectional_cmd(UNI_CMD_OPEN, port);
253 if (result) {
254 dev_err(&port->dev,
255 "%s - failed to configure device for port number=%d, error code=%d\n",
256 __func__, port->number, result);
257 goto exit;
258 }
259
200 dev_dbg(&port->dev, "%s - port open\n", __func__); 260 dev_dbg(&port->dev, "%s - port open\n", __func__);
201exit: 261exit:
202 return result; 262 return result;
@@ -221,7 +281,7 @@ static int metrousb_set_modem_ctrl(struct usb_serial *serial, unsigned int contr
221 METROUSB_SET_REQUEST_TYPE, METROUSB_SET_MODEM_CTRL_REQUEST, 281 METROUSB_SET_REQUEST_TYPE, METROUSB_SET_MODEM_CTRL_REQUEST,
222 control_state, 0, NULL, 0, WDR_TIMEOUT); 282 control_state, 0, NULL, 0, WDR_TIMEOUT);
223 if (retval < 0) 283 if (retval < 0)
224 dev_dbg(&serial->dev->dev, 284 dev_err(&serial->dev->dev,
225 "%s - set modem ctrl=0x%x failed, error code=%d\n", 285 "%s - set modem ctrl=0x%x failed, error code=%d\n",
226 __func__, mcr, retval); 286 __func__, mcr, retval);
227 287
@@ -354,29 +414,23 @@ static void metrousb_unthrottle(struct tty_struct *tty)
354 port->interrupt_in_urb->dev = port->serial->dev; 414 port->interrupt_in_urb->dev = port->serial->dev;
355 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); 415 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
356 if (result) 416 if (result)
357 dev_dbg(tty->dev, 417 dev_err(tty->dev,
358 "failed submitting interrupt in urb error code=%d\n", 418 "failed submitting interrupt in urb error code=%d\n",
359 result); 419 result);
360} 420}
361 421
362static struct usb_driver metrousb_driver = {
363 .name = "metro-usb",
364 .probe = usb_serial_probe,
365 .disconnect = usb_serial_disconnect,
366 .id_table = id_table
367};
368
369static struct usb_serial_driver metrousb_device = { 422static struct usb_serial_driver metrousb_device = {
370 .driver = { 423 .driver = {
371 .owner = THIS_MODULE, 424 .owner = THIS_MODULE,
372 .name = "metro-usb", 425 .name = "metro-usb",
373 }, 426 },
374 .description = "Metrologic USB to serial converter.", 427 .description = "Metrologic USB to Serial",
375 .id_table = id_table, 428 .id_table = id_table,
376 .num_ports = 1, 429 .num_ports = 1,
377 .open = metrousb_open, 430 .open = metrousb_open,
378 .close = metrousb_cleanup, 431 .close = metrousb_cleanup,
379 .read_int_callback = metrousb_read_int_callback, 432 .read_int_callback = metrousb_read_int_callback,
433 .write_int_callback = metrousb_write_int_callback,
380 .attach = metrousb_startup, 434 .attach = metrousb_startup,
381 .release = metrousb_shutdown, 435 .release = metrousb_shutdown,
382 .throttle = metrousb_throttle, 436 .throttle = metrousb_throttle,
@@ -390,7 +444,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
390 NULL, 444 NULL,
391}; 445};
392 446
393module_usb_serial_driver(metrousb_driver, serial_drivers); 447module_usb_serial_driver(serial_drivers, id_table);
394 448
395MODULE_LICENSE("GPL"); 449MODULE_LICENSE("GPL");
396MODULE_AUTHOR("Philip Nicastro"); 450MODULE_AUTHOR("Philip Nicastro");
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
index bdce82034122..a07dd3c8cfef 100644
--- a/drivers/usb/serial/mos7720.c
+++ b/drivers/usb/serial/mos7720.c
@@ -79,12 +79,12 @@ static struct usb_serial_driver moschip7720_2port_driver;
79#define MOSCHIP_DEVICE_ID_7720 0x7720 79#define MOSCHIP_DEVICE_ID_7720 0x7720
80#define MOSCHIP_DEVICE_ID_7715 0x7715 80#define MOSCHIP_DEVICE_ID_7715 0x7715
81 81
82static const struct usb_device_id moschip_port_id_table[] = { 82static const struct usb_device_id id_table[] = {
83 { USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7720) }, 83 { USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7720) },
84 { USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7715) }, 84 { USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7715) },
85 { } /* terminating entry */ 85 { } /* terminating entry */
86}; 86};
87MODULE_DEVICE_TABLE(usb, moschip_port_id_table); 87MODULE_DEVICE_TABLE(usb, id_table);
88 88
89#ifdef CONFIG_USB_SERIAL_MOS7715_PARPORT 89#ifdef CONFIG_USB_SERIAL_MOS7715_PARPORT
90 90
@@ -257,7 +257,6 @@ static void destroy_mos_parport(struct kref *kref)
257 struct mos7715_parport *mos_parport = 257 struct mos7715_parport *mos_parport =
258 container_of(kref, struct mos7715_parport, ref_count); 258 container_of(kref, struct mos7715_parport, ref_count);
259 259
260 dbg("%s called", __func__);
261 kfree(mos_parport); 260 kfree(mos_parport);
262} 261}
263 262
@@ -266,7 +265,7 @@ static void destroy_urbtracker(struct kref *kref)
266 struct urbtracker *urbtrack = 265 struct urbtracker *urbtrack =
267 container_of(kref, struct urbtracker, ref_count); 266 container_of(kref, struct urbtracker, ref_count);
268 struct mos7715_parport *mos_parport = urbtrack->mos_parport; 267 struct mos7715_parport *mos_parport = urbtrack->mos_parport;
269 dbg("%s called", __func__); 268
270 usb_free_urb(urbtrack->urb); 269 usb_free_urb(urbtrack->urb);
271 kfree(urbtrack); 270 kfree(urbtrack);
272 kref_put(&mos_parport->ref_count, destroy_mos_parport); 271 kref_put(&mos_parport->ref_count, destroy_mos_parport);
@@ -285,8 +284,6 @@ static void send_deferred_urbs(unsigned long _mos_parport)
285 struct urbtracker *urbtrack; 284 struct urbtracker *urbtrack;
286 struct list_head *cursor, *next; 285 struct list_head *cursor, *next;
287 286
288 dbg("%s called", __func__);
289
290 /* if release function ran, game over */ 287 /* if release function ran, game over */
291 if (unlikely(mos_parport->serial == NULL)) 288 if (unlikely(mos_parport->serial == NULL))
292 return; 289 return;
@@ -335,7 +332,7 @@ static void async_complete(struct urb *urb)
335{ 332{
336 struct urbtracker *urbtrack = urb->context; 333 struct urbtracker *urbtrack = urb->context;
337 int status = urb->status; 334 int status = urb->status;
338 dbg("%s called", __func__); 335
339 if (unlikely(status)) 336 if (unlikely(status))
340 dbg("%s - nonzero urb status received: %d", __func__, status); 337 dbg("%s - nonzero urb status received: %d", __func__, status);
341 338
@@ -355,7 +352,6 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
355 struct usb_ctrlrequest setup; 352 struct usb_ctrlrequest setup;
356 struct usb_serial *serial = mos_parport->serial; 353 struct usb_serial *serial = mos_parport->serial;
357 struct usb_device *usbdev = serial->dev; 354 struct usb_device *usbdev = serial->dev;
358 dbg("%s called", __func__);
359 355
360 /* create and initialize the control urb and containing urbtracker */ 356 /* create and initialize the control urb and containing urbtracker */
361 urbtrack = kmalloc(sizeof(struct urbtracker), GFP_ATOMIC); 357 urbtrack = kmalloc(sizeof(struct urbtracker), GFP_ATOMIC);
@@ -476,7 +472,7 @@ static inline void parport_epilogue(struct parport *pp)
476static void parport_mos7715_write_data(struct parport *pp, unsigned char d) 472static void parport_mos7715_write_data(struct parport *pp, unsigned char d)
477{ 473{
478 struct mos7715_parport *mos_parport = pp->private_data; 474 struct mos7715_parport *mos_parport = pp->private_data;
479 dbg("%s called: %2.2x", __func__, d); 475
480 if (parport_prologue(pp) < 0) 476 if (parport_prologue(pp) < 0)
481 return; 477 return;
482 mos7715_change_mode(mos_parport, SPP); 478 mos7715_change_mode(mos_parport, SPP);
@@ -488,7 +484,7 @@ static unsigned char parport_mos7715_read_data(struct parport *pp)
488{ 484{
489 struct mos7715_parport *mos_parport = pp->private_data; 485 struct mos7715_parport *mos_parport = pp->private_data;
490 unsigned char d; 486 unsigned char d;
491 dbg("%s called", __func__); 487
492 if (parport_prologue(pp) < 0) 488 if (parport_prologue(pp) < 0)
493 return 0; 489 return 0;
494 read_mos_reg(mos_parport->serial, dummy, DPR, &d); 490 read_mos_reg(mos_parport->serial, dummy, DPR, &d);
@@ -500,7 +496,7 @@ static void parport_mos7715_write_control(struct parport *pp, unsigned char d)
500{ 496{
501 struct mos7715_parport *mos_parport = pp->private_data; 497 struct mos7715_parport *mos_parport = pp->private_data;
502 __u8 data; 498 __u8 data;
503 dbg("%s called: %2.2x", __func__, d); 499
504 if (parport_prologue(pp) < 0) 500 if (parport_prologue(pp) < 0)
505 return; 501 return;
506 data = ((__u8)d & 0x0f) | (mos_parport->shadowDCR & 0xf0); 502 data = ((__u8)d & 0x0f) | (mos_parport->shadowDCR & 0xf0);
@@ -513,7 +509,7 @@ static unsigned char parport_mos7715_read_control(struct parport *pp)
513{ 509{
514 struct mos7715_parport *mos_parport = pp->private_data; 510 struct mos7715_parport *mos_parport = pp->private_data;
515 __u8 dcr; 511 __u8 dcr;
516 dbg("%s called", __func__); 512
517 spin_lock(&release_lock); 513 spin_lock(&release_lock);
518 mos_parport = pp->private_data; 514 mos_parport = pp->private_data;
519 if (unlikely(mos_parport == NULL)) { 515 if (unlikely(mos_parport == NULL)) {
@@ -531,7 +527,7 @@ static unsigned char parport_mos7715_frob_control(struct parport *pp,
531{ 527{
532 struct mos7715_parport *mos_parport = pp->private_data; 528 struct mos7715_parport *mos_parport = pp->private_data;
533 __u8 dcr; 529 __u8 dcr;
534 dbg("%s called", __func__); 530
535 mask &= 0x0f; 531 mask &= 0x0f;
536 val &= 0x0f; 532 val &= 0x0f;
537 if (parport_prologue(pp) < 0) 533 if (parport_prologue(pp) < 0)
@@ -547,7 +543,7 @@ static unsigned char parport_mos7715_read_status(struct parport *pp)
547{ 543{
548 unsigned char status; 544 unsigned char status;
549 struct mos7715_parport *mos_parport = pp->private_data; 545 struct mos7715_parport *mos_parport = pp->private_data;
550 dbg("%s called", __func__); 546
551 spin_lock(&release_lock); 547 spin_lock(&release_lock);
552 mos_parport = pp->private_data; 548 mos_parport = pp->private_data;
553 if (unlikely(mos_parport == NULL)) { /* release called */ 549 if (unlikely(mos_parport == NULL)) { /* release called */
@@ -561,17 +557,16 @@ static unsigned char parport_mos7715_read_status(struct parport *pp)
561 557
562static void parport_mos7715_enable_irq(struct parport *pp) 558static void parport_mos7715_enable_irq(struct parport *pp)
563{ 559{
564 dbg("%s called", __func__);
565} 560}
561
566static void parport_mos7715_disable_irq(struct parport *pp) 562static void parport_mos7715_disable_irq(struct parport *pp)
567{ 563{
568 dbg("%s called", __func__);
569} 564}
570 565
571static void parport_mos7715_data_forward(struct parport *pp) 566static void parport_mos7715_data_forward(struct parport *pp)
572{ 567{
573 struct mos7715_parport *mos_parport = pp->private_data; 568 struct mos7715_parport *mos_parport = pp->private_data;
574 dbg("%s called", __func__); 569
575 if (parport_prologue(pp) < 0) 570 if (parport_prologue(pp) < 0)
576 return; 571 return;
577 mos7715_change_mode(mos_parport, PS2); 572 mos7715_change_mode(mos_parport, PS2);
@@ -583,7 +578,7 @@ static void parport_mos7715_data_forward(struct parport *pp)
583static void parport_mos7715_data_reverse(struct parport *pp) 578static void parport_mos7715_data_reverse(struct parport *pp)
584{ 579{
585 struct mos7715_parport *mos_parport = pp->private_data; 580 struct mos7715_parport *mos_parport = pp->private_data;
586 dbg("%s called", __func__); 581
587 if (parport_prologue(pp) < 0) 582 if (parport_prologue(pp) < 0)
588 return; 583 return;
589 mos7715_change_mode(mos_parport, PS2); 584 mos7715_change_mode(mos_parport, PS2);
@@ -595,7 +590,6 @@ static void parport_mos7715_data_reverse(struct parport *pp)
595static void parport_mos7715_init_state(struct pardevice *dev, 590static void parport_mos7715_init_state(struct pardevice *dev,
596 struct parport_state *s) 591 struct parport_state *s)
597{ 592{
598 dbg("%s called", __func__);
599 s->u.pc.ctr = DCR_INIT_VAL; 593 s->u.pc.ctr = DCR_INIT_VAL;
600 s->u.pc.ecr = ECR_INIT_VAL; 594 s->u.pc.ecr = ECR_INIT_VAL;
601} 595}
@@ -605,7 +599,7 @@ static void parport_mos7715_save_state(struct parport *pp,
605 struct parport_state *s) 599 struct parport_state *s)
606{ 600{
607 struct mos7715_parport *mos_parport; 601 struct mos7715_parport *mos_parport;
608 dbg("%s called", __func__); 602
609 spin_lock(&release_lock); 603 spin_lock(&release_lock);
610 mos_parport = pp->private_data; 604 mos_parport = pp->private_data;
611 if (unlikely(mos_parport == NULL)) { /* release called */ 605 if (unlikely(mos_parport == NULL)) { /* release called */
@@ -622,7 +616,7 @@ static void parport_mos7715_restore_state(struct parport *pp,
622 struct parport_state *s) 616 struct parport_state *s)
623{ 617{
624 struct mos7715_parport *mos_parport; 618 struct mos7715_parport *mos_parport;
625 dbg("%s called", __func__); 619
626 spin_lock(&release_lock); 620 spin_lock(&release_lock);
627 mos_parport = pp->private_data; 621 mos_parport = pp->private_data;
628 if (unlikely(mos_parport == NULL)) { /* release called */ 622 if (unlikely(mos_parport == NULL)) { /* release called */
@@ -641,7 +635,7 @@ static size_t parport_mos7715_write_compat(struct parport *pp,
641 int retval; 635 int retval;
642 struct mos7715_parport *mos_parport = pp->private_data; 636 struct mos7715_parport *mos_parport = pp->private_data;
643 int actual_len; 637 int actual_len;
644 dbg("%s called: %u chars", __func__, (unsigned int)len); 638
645 if (parport_prologue(pp) < 0) 639 if (parport_prologue(pp) < 0)
646 return 0; 640 return 0;
647 mos7715_change_mode(mos_parport, PPF); 641 mos7715_change_mode(mos_parport, PPF);
@@ -2164,20 +2158,13 @@ static void mos7720_release(struct usb_serial *serial)
2164 kfree(usb_get_serial_port_data(serial->port[i])); 2158 kfree(usb_get_serial_port_data(serial->port[i]));
2165} 2159}
2166 2160
2167static struct usb_driver usb_driver = {
2168 .name = "moschip7720",
2169 .probe = usb_serial_probe,
2170 .disconnect = usb_serial_disconnect,
2171 .id_table = moschip_port_id_table,
2172};
2173
2174static struct usb_serial_driver moschip7720_2port_driver = { 2161static struct usb_serial_driver moschip7720_2port_driver = {
2175 .driver = { 2162 .driver = {
2176 .owner = THIS_MODULE, 2163 .owner = THIS_MODULE,
2177 .name = "moschip7720", 2164 .name = "moschip7720",
2178 }, 2165 },
2179 .description = "Moschip 2 port adapter", 2166 .description = "Moschip 2 port adapter",
2180 .id_table = moschip_port_id_table, 2167 .id_table = id_table,
2181 .calc_num_ports = mos77xx_calc_num_ports, 2168 .calc_num_ports = mos77xx_calc_num_ports,
2182 .open = mos7720_open, 2169 .open = mos7720_open,
2183 .close = mos7720_close, 2170 .close = mos7720_close,
@@ -2203,7 +2190,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
2203 &moschip7720_2port_driver, NULL 2190 &moschip7720_2port_driver, NULL
2204}; 2191};
2205 2192
2206module_usb_serial_driver(usb_driver, serial_drivers); 2193module_usb_serial_driver(serial_drivers, id_table);
2207 2194
2208MODULE_AUTHOR(DRIVER_AUTHOR); 2195MODULE_AUTHOR(DRIVER_AUTHOR);
2209MODULE_DESCRIPTION(DRIVER_DESC); 2196MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
index c526550694a0..29160f8b5101 100644
--- a/drivers/usb/serial/mos7840.c
+++ b/drivers/usb/serial/mos7840.c
@@ -114,10 +114,10 @@
114#define USB_VENDOR_ID_MOSCHIP 0x9710 114#define USB_VENDOR_ID_MOSCHIP 0x9710
115#define MOSCHIP_DEVICE_ID_7840 0x7840 115#define MOSCHIP_DEVICE_ID_7840 0x7840
116#define MOSCHIP_DEVICE_ID_7820 0x7820 116#define MOSCHIP_DEVICE_ID_7820 0x7820
117#define MOSCHIP_DEVICE_ID_7810 0x7810
117/* The native component can have its vendor/device id's overridden 118/* The native component can have its vendor/device id's overridden
118 * in vendor-specific implementations. Such devices can be handled 119 * in vendor-specific implementations. Such devices can be handled
119 * by making a change here, in moschip_port_id_table, and in 120 * by making a change here, in id_table.
120 * moschip_id_table_combined
121 */ 121 */
122#define USB_VENDOR_ID_BANDB 0x0856 122#define USB_VENDOR_ID_BANDB 0x0856
123#define BANDB_DEVICE_ID_USO9ML2_2 0xAC22 123#define BANDB_DEVICE_ID_USO9ML2_2 0xAC22
@@ -184,31 +184,16 @@
184#define NUM_URBS 16 /* URB Count */ 184#define NUM_URBS 16 /* URB Count */
185#define URB_TRANSFER_BUFFER_SIZE 32 /* URB Size */ 185#define URB_TRANSFER_BUFFER_SIZE 32 /* URB Size */
186 186
187/* LED on/off milliseconds*/
188#define LED_ON_MS 500
189#define LED_OFF_MS 500
187 190
188static const struct usb_device_id moschip_port_id_table[] = { 191static int device_type;
189 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)},
190 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
191 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)},
192 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2P)},
193 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)},
194 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4P)},
195 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)},
196 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)},
197 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)},
198 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)},
199 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)},
200 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2P)},
201 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)},
202 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4P)},
203 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL2_4)},
204 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)},
205 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)},
206 {} /* terminating entry */
207};
208 192
209static const struct usb_device_id moschip_id_table_combined[] __devinitconst = { 193static const struct usb_device_id id_table[] __devinitconst = {
210 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)}, 194 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)},
211 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, 195 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
196 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7810)},
212 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)}, 197 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)},
213 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2P)}, 198 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2P)},
214 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)}, 199 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)},
@@ -226,8 +211,7 @@ static const struct usb_device_id moschip_id_table_combined[] __devinitconst = {
226 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)}, 211 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)},
227 {} /* terminating entry */ 212 {} /* terminating entry */
228}; 213};
229 214MODULE_DEVICE_TABLE(usb, id_table);
230MODULE_DEVICE_TABLE(usb, moschip_id_table_combined);
231 215
232/* This structure holds all of the local port information */ 216/* This structure holds all of the local port information */
233 217
@@ -261,8 +245,13 @@ struct moschip_port {
261 struct urb *write_urb_pool[NUM_URBS]; 245 struct urb *write_urb_pool[NUM_URBS];
262 char busy[NUM_URBS]; 246 char busy[NUM_URBS];
263 bool read_urb_busy; 247 bool read_urb_busy;
264};
265 248
249 /* For device(s) with LED indicator */
250 bool has_led;
251 bool led_flag;
252 struct timer_list led_timer1; /* Timer for LED on */
253 struct timer_list led_timer2; /* Timer for LED off */
254};
266 255
267static bool debug; 256static bool debug;
268 257
@@ -572,6 +561,69 @@ static int mos7840_get_reg(struct moschip_port *mcs, __u16 Wval, __u16 reg,
572 return ret; 561 return ret;
573} 562}
574 563
564static void mos7840_set_led_callback(struct urb *urb)
565{
566 switch (urb->status) {
567 case 0:
568 /* Success */
569 break;
570 case -ECONNRESET:
571 case -ENOENT:
572 case -ESHUTDOWN:
573 /* This urb is terminated, clean up */
574 dbg("%s - urb shutting down with status: %d", __func__,
575 urb->status);
576 break;
577 default:
578 dbg("%s - nonzero urb status received: %d", __func__,
579 urb->status);
580 }
581}
582
583static void mos7840_set_led_async(struct moschip_port *mcs, __u16 wval,
584 __u16 reg)
585{
586 struct usb_device *dev = mcs->port->serial->dev;
587 struct usb_ctrlrequest *dr = mcs->dr;
588
589 dr->bRequestType = MCS_WR_RTYPE;
590 dr->bRequest = MCS_WRREQ;
591 dr->wValue = cpu_to_le16(wval);
592 dr->wIndex = cpu_to_le16(reg);
593 dr->wLength = cpu_to_le16(0);
594
595 usb_fill_control_urb(mcs->control_urb, dev, usb_sndctrlpipe(dev, 0),
596 (unsigned char *)dr, NULL, 0, mos7840_set_led_callback, NULL);
597
598 usb_submit_urb(mcs->control_urb, GFP_ATOMIC);
599}
600
601static void mos7840_set_led_sync(struct usb_serial_port *port, __u16 reg,
602 __u16 val)
603{
604 struct usb_device *dev = port->serial->dev;
605
606 usb_control_msg(dev, usb_sndctrlpipe(dev, 0), MCS_WRREQ, MCS_WR_RTYPE,
607 val, reg, NULL, 0, MOS_WDR_TIMEOUT);
608}
609
610static void mos7840_led_off(unsigned long arg)
611{
612 struct moschip_port *mcs = (struct moschip_port *) arg;
613
614 /* Turn off LED */
615 mos7840_set_led_async(mcs, 0x0300, MODEM_CONTROL_REGISTER);
616 mod_timer(&mcs->led_timer2,
617 jiffies + msecs_to_jiffies(LED_OFF_MS));
618}
619
620static void mos7840_led_flag_off(unsigned long arg)
621{
622 struct moschip_port *mcs = (struct moschip_port *) arg;
623
624 mcs->led_flag = false;
625}
626
575/***************************************************************************** 627/*****************************************************************************
576 * mos7840_interrupt_callback 628 * mos7840_interrupt_callback
577 * this is the callback function for when we have received data on the 629 * this is the callback function for when we have received data on the
@@ -591,8 +643,6 @@ static void mos7840_interrupt_callback(struct urb *urb)
591 __u16 wval, wreg = 0; 643 __u16 wval, wreg = 0;
592 int status = urb->status; 644 int status = urb->status;
593 645
594 dbg("%s", " : Entering");
595
596 switch (status) { 646 switch (status) {
597 case 0: 647 case 0:
598 /* success */ 648 /* success */
@@ -766,12 +816,8 @@ static void mos7840_bulk_in_callback(struct urb *urb)
766 return; 816 return;
767 } 817 }
768 818
769 dbg("%s", "Entering... ");
770
771 data = urb->transfer_buffer; 819 data = urb->transfer_buffer;
772 820
773 dbg("%s", "Entering ...........");
774
775 if (urb->actual_length) { 821 if (urb->actual_length) {
776 tty = tty_port_tty_get(&mos7840_port->port->port); 822 tty = tty_port_tty_get(&mos7840_port->port->port);
777 if (tty) { 823 if (tty) {
@@ -792,6 +838,14 @@ static void mos7840_bulk_in_callback(struct urb *urb)
792 return; 838 return;
793 } 839 }
794 840
841 /* Turn on LED */
842 if (mos7840_port->has_led && !mos7840_port->led_flag) {
843 mos7840_port->led_flag = true;
844 mos7840_set_led_async(mos7840_port, 0x0301,
845 MODEM_CONTROL_REGISTER);
846 mod_timer(&mos7840_port->led_timer1,
847 jiffies + msecs_to_jiffies(LED_ON_MS));
848 }
795 849
796 mos7840_port->read_urb_busy = true; 850 mos7840_port->read_urb_busy = true;
797 retval = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC); 851 retval = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC);
@@ -835,8 +889,6 @@ static void mos7840_bulk_out_data_callback(struct urb *urb)
835 return; 889 return;
836 } 890 }
837 891
838 dbg("%s", "Entering .........");
839
840 tty = tty_port_tty_get(&mos7840_port->port->port); 892 tty = tty_port_tty_get(&mos7840_port->port->port);
841 if (tty && mos7840_port->open) 893 if (tty && mos7840_port->open)
842 tty_wakeup(tty); 894 tty_wakeup(tty);
@@ -878,8 +930,6 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
878 struct moschip_port *mos7840_port; 930 struct moschip_port *mos7840_port;
879 struct moschip_port *port0; 931 struct moschip_port *port0;
880 932
881 dbg ("%s enter", __func__);
882
883 if (mos7840_port_paranoia_check(port, __func__)) { 933 if (mos7840_port_paranoia_check(port, __func__)) {
884 dbg("%s", "Port Paranoia failed"); 934 dbg("%s", "Port Paranoia failed");
885 return -ENODEV; 935 return -ENODEV;
@@ -1151,10 +1201,7 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
1151 dbg("usb_serial serial:%p mos7840_port:%p\n usb_serial_port port:%p", 1201 dbg("usb_serial serial:%p mos7840_port:%p\n usb_serial_port port:%p",
1152 serial, mos7840_port, port); 1202 serial, mos7840_port, port);
1153 1203
1154 dbg ("%s leave", __func__);
1155
1156 return 0; 1204 return 0;
1157
1158} 1205}
1159 1206
1160/***************************************************************************** 1207/*****************************************************************************
@@ -1175,18 +1222,14 @@ static int mos7840_chars_in_buffer(struct tty_struct *tty)
1175 unsigned long flags; 1222 unsigned long flags;
1176 struct moschip_port *mos7840_port; 1223 struct moschip_port *mos7840_port;
1177 1224
1178 dbg("%s", " mos7840_chars_in_buffer:entering ...........");
1179
1180 if (mos7840_port_paranoia_check(port, __func__)) { 1225 if (mos7840_port_paranoia_check(port, __func__)) {
1181 dbg("%s", "Invalid port"); 1226 dbg("%s", "Invalid port");
1182 return 0; 1227 return 0;
1183 } 1228 }
1184 1229
1185 mos7840_port = mos7840_get_port_private(port); 1230 mos7840_port = mos7840_get_port_private(port);
1186 if (mos7840_port == NULL) { 1231 if (mos7840_port == NULL)
1187 dbg("%s", "mos7840_break:leaving ...........");
1188 return 0; 1232 return 0;
1189 }
1190 1233
1191 spin_lock_irqsave(&mos7840_port->pool_lock, flags); 1234 spin_lock_irqsave(&mos7840_port->pool_lock, flags);
1192 for (i = 0; i < NUM_URBS; ++i) 1235 for (i = 0; i < NUM_URBS; ++i)
@@ -1211,8 +1254,6 @@ static void mos7840_close(struct usb_serial_port *port)
1211 int j; 1254 int j;
1212 __u16 Data; 1255 __u16 Data;
1213 1256
1214 dbg("%s", "mos7840_close:entering...");
1215
1216 if (mos7840_port_paranoia_check(port, __func__)) { 1257 if (mos7840_port_paranoia_check(port, __func__)) {
1217 dbg("%s", "Port Paranoia failed"); 1258 dbg("%s", "Port Paranoia failed");
1218 return; 1259 return;
@@ -1287,8 +1328,6 @@ static void mos7840_close(struct usb_serial_port *port)
1287 mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); 1328 mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data);
1288 1329
1289 mos7840_port->open = 0; 1330 mos7840_port->open = 0;
1290
1291 dbg("%s", "Leaving ............");
1292} 1331}
1293 1332
1294/************************************************************************ 1333/************************************************************************
@@ -1343,9 +1382,6 @@ static void mos7840_break(struct tty_struct *tty, int break_state)
1343 struct usb_serial *serial; 1382 struct usb_serial *serial;
1344 struct moschip_port *mos7840_port; 1383 struct moschip_port *mos7840_port;
1345 1384
1346 dbg("%s", "Entering ...........");
1347 dbg("mos7840_break: Start");
1348
1349 if (mos7840_port_paranoia_check(port, __func__)) { 1385 if (mos7840_port_paranoia_check(port, __func__)) {
1350 dbg("%s", "Port Paranoia failed"); 1386 dbg("%s", "Port Paranoia failed");
1351 return; 1387 return;
@@ -1395,8 +1431,6 @@ static int mos7840_write_room(struct tty_struct *tty)
1395 unsigned long flags; 1431 unsigned long flags;
1396 struct moschip_port *mos7840_port; 1432 struct moschip_port *mos7840_port;
1397 1433
1398 dbg("%s", " mos7840_write_room:entering ...........");
1399
1400 if (mos7840_port_paranoia_check(port, __func__)) { 1434 if (mos7840_port_paranoia_check(port, __func__)) {
1401 dbg("%s", "Invalid port"); 1435 dbg("%s", "Invalid port");
1402 dbg("%s", " mos7840_write_room:leaving ..........."); 1436 dbg("%s", " mos7840_write_room:leaving ...........");
@@ -1445,9 +1479,6 @@ static int mos7840_write(struct tty_struct *tty, struct usb_serial_port *port,
1445 /* __u16 Data; */ 1479 /* __u16 Data; */
1446 const unsigned char *current_position = data; 1480 const unsigned char *current_position = data;
1447 unsigned char *data1; 1481 unsigned char *data1;
1448 dbg("%s", "entering ...........");
1449 /* dbg("mos7840_write: mos7840_port->shadowLCR is %x",
1450 mos7840_port->shadowLCR); */
1451 1482
1452#ifdef NOTMOS7840 1483#ifdef NOTMOS7840
1453 Data = 0x00; 1484 Data = 0x00;
@@ -1554,6 +1585,14 @@ static int mos7840_write(struct tty_struct *tty, struct usb_serial_port *port,
1554 data1 = urb->transfer_buffer; 1585 data1 = urb->transfer_buffer;
1555 dbg("bulkout endpoint is %d", port->bulk_out_endpointAddress); 1586 dbg("bulkout endpoint is %d", port->bulk_out_endpointAddress);
1556 1587
1588 /* Turn on LED */
1589 if (mos7840_port->has_led && !mos7840_port->led_flag) {
1590 mos7840_port->led_flag = true;
1591 mos7840_set_led_sync(port, MODEM_CONTROL_REGISTER, 0x0301);
1592 mod_timer(&mos7840_port->led_timer1,
1593 jiffies + msecs_to_jiffies(LED_ON_MS));
1594 }
1595
1557 /* send it down the pipe */ 1596 /* send it down the pipe */
1558 status = usb_submit_urb(urb, GFP_ATOMIC); 1597 status = usb_submit_urb(urb, GFP_ATOMIC);
1559 1598
@@ -1602,8 +1641,6 @@ static void mos7840_throttle(struct tty_struct *tty)
1602 return; 1641 return;
1603 } 1642 }
1604 1643
1605 dbg("%s", "Entering ..........");
1606
1607 /* if we are implementing XON/XOFF, send the stop character */ 1644 /* if we are implementing XON/XOFF, send the stop character */
1608 if (I_IXOFF(tty)) { 1645 if (I_IXOFF(tty)) {
1609 unsigned char stop_char = STOP_CHAR(tty); 1646 unsigned char stop_char = STOP_CHAR(tty);
@@ -1646,8 +1683,6 @@ static void mos7840_unthrottle(struct tty_struct *tty)
1646 return; 1683 return;
1647 } 1684 }
1648 1685
1649 dbg("%s", "Entering ..........");
1650
1651 /* if we are implementing XON/XOFF, send the start character */ 1686 /* if we are implementing XON/XOFF, send the start character */
1652 if (I_IXOFF(tty)) { 1687 if (I_IXOFF(tty)) {
1653 unsigned char start_char = START_CHAR(tty); 1688 unsigned char start_char = START_CHAR(tty);
@@ -1676,8 +1711,6 @@ static int mos7840_tiocmget(struct tty_struct *tty)
1676 int status; 1711 int status;
1677 mos7840_port = mos7840_get_port_private(port); 1712 mos7840_port = mos7840_get_port_private(port);
1678 1713
1679 dbg("%s - port %d", __func__, port->number);
1680
1681 if (mos7840_port == NULL) 1714 if (mos7840_port == NULL)
1682 return -ENODEV; 1715 return -ENODEV;
1683 1716
@@ -1704,8 +1737,6 @@ static int mos7840_tiocmset(struct tty_struct *tty,
1704 unsigned int mcr; 1737 unsigned int mcr;
1705 int status; 1738 int status;
1706 1739
1707 dbg("%s - port %d", __func__, port->number);
1708
1709 mos7840_port = mos7840_get_port_private(port); 1740 mos7840_port = mos7840_get_port_private(port);
1710 1741
1711 if (mos7840_port == NULL) 1742 if (mos7840_port == NULL)
@@ -1746,7 +1777,6 @@ static int mos7840_tiocmset(struct tty_struct *tty,
1746static int mos7840_calc_baud_rate_divisor(int baudRate, int *divisor, 1777static int mos7840_calc_baud_rate_divisor(int baudRate, int *divisor,
1747 __u16 *clk_sel_val) 1778 __u16 *clk_sel_val)
1748{ 1779{
1749
1750 dbg("%s - %d", __func__, baudRate); 1780 dbg("%s - %d", __func__, baudRate);
1751 1781
1752 if (baudRate <= 115200) { 1782 if (baudRate <= 115200) {
@@ -1839,8 +1869,6 @@ static int mos7840_send_cmd_write_baud_rate(struct moschip_port *mos7840_port,
1839 return -1; 1869 return -1;
1840 } 1870 }
1841 1871
1842 dbg("%s", "Entering ..........");
1843
1844 number = mos7840_port->port->number - mos7840_port->port->serial->minor; 1872 number = mos7840_port->port->number - mos7840_port->port->serial->minor;
1845 1873
1846 dbg("%s - port = %d, baud = %d", __func__, 1874 dbg("%s - port = %d, baud = %d", __func__,
@@ -1966,8 +1994,6 @@ static void mos7840_change_port_settings(struct tty_struct *tty,
1966 return; 1994 return;
1967 } 1995 }
1968 1996
1969 dbg("%s", "Entering ..........");
1970
1971 lData = LCR_BITS_8; 1997 lData = LCR_BITS_8;
1972 lStop = LCR_STOP_1; 1998 lStop = LCR_STOP_1;
1973 lParity = LCR_PAR_NONE; 1999 lParity = LCR_PAR_NONE;
@@ -2108,7 +2134,7 @@ static void mos7840_set_termios(struct tty_struct *tty,
2108 unsigned int cflag; 2134 unsigned int cflag;
2109 struct usb_serial *serial; 2135 struct usb_serial *serial;
2110 struct moschip_port *mos7840_port; 2136 struct moschip_port *mos7840_port;
2111 dbg("mos7840_set_termios: START"); 2137
2112 if (mos7840_port_paranoia_check(port, __func__)) { 2138 if (mos7840_port_paranoia_check(port, __func__)) {
2113 dbg("%s", "Invalid port"); 2139 dbg("%s", "Invalid port");
2114 return; 2140 return;
@@ -2327,28 +2353,74 @@ static int mos7840_ioctl(struct tty_struct *tty,
2327 return -ENOIOCTLCMD; 2353 return -ENOIOCTLCMD;
2328} 2354}
2329 2355
2356static int mos7810_check(struct usb_serial *serial)
2357{
2358 int i, pass_count = 0;
2359 __u16 data = 0, mcr_data = 0;
2360 __u16 test_pattern = 0x55AA;
2361
2362 /* Store MCR setting */
2363 usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
2364 MCS_RDREQ, MCS_RD_RTYPE, 0x0300, MODEM_CONTROL_REGISTER,
2365 &mcr_data, VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2366
2367 for (i = 0; i < 16; i++) {
2368 /* Send the 1-bit test pattern out to MCS7810 test pin */
2369 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
2370 MCS_WRREQ, MCS_WR_RTYPE,
2371 (0x0300 | (((test_pattern >> i) & 0x0001) << 1)),
2372 MODEM_CONTROL_REGISTER, NULL, 0, MOS_WDR_TIMEOUT);
2373
2374 /* Read the test pattern back */
2375 usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
2376 MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &data,
2377 VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2378
2379 /* If this is a MCS7810 device, both test patterns must match */
2380 if (((test_pattern >> i) ^ (~data >> 1)) & 0x0001)
2381 break;
2382
2383 pass_count++;
2384 }
2385
2386 /* Restore MCR setting */
2387 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), MCS_WRREQ,
2388 MCS_WR_RTYPE, 0x0300 | mcr_data, MODEM_CONTROL_REGISTER, NULL,
2389 0, MOS_WDR_TIMEOUT);
2390
2391 if (pass_count == 16)
2392 return 1;
2393
2394 return 0;
2395}
2396
2330static int mos7840_calc_num_ports(struct usb_serial *serial) 2397static int mos7840_calc_num_ports(struct usb_serial *serial)
2331{ 2398{
2332 __u16 Data = 0x00; 2399 __u16 data = 0x00;
2333 int ret = 0;
2334 int mos7840_num_ports; 2400 int mos7840_num_ports;
2335 2401
2336 ret = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 2402 usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
2337 MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &Data, 2403 MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &data,
2338 VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); 2404 VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT);
2339 2405
2340 if ((Data & 0x01) == 0) { 2406 if (serial->dev->descriptor.idProduct == MOSCHIP_DEVICE_ID_7810 ||
2341 mos7840_num_ports = 2; 2407 serial->dev->descriptor.idProduct == MOSCHIP_DEVICE_ID_7820) {
2342 serial->num_bulk_in = 2; 2408 device_type = serial->dev->descriptor.idProduct;
2343 serial->num_bulk_out = 2;
2344 serial->num_ports = 2;
2345 } else { 2409 } else {
2346 mos7840_num_ports = 4; 2410 /* For a MCS7840 device GPIO0 must be set to 1 */
2347 serial->num_bulk_in = 4; 2411 if ((data & 0x01) == 1)
2348 serial->num_bulk_out = 4; 2412 device_type = MOSCHIP_DEVICE_ID_7840;
2349 serial->num_ports = 4; 2413 else if (mos7810_check(serial))
2414 device_type = MOSCHIP_DEVICE_ID_7810;
2415 else
2416 device_type = MOSCHIP_DEVICE_ID_7820;
2350 } 2417 }
2351 2418
2419 mos7840_num_ports = (device_type >> 4) & 0x000F;
2420 serial->num_bulk_in = mos7840_num_ports;
2421 serial->num_bulk_out = mos7840_num_ports;
2422 serial->num_ports = mos7840_num_ports;
2423
2352 return mos7840_num_ports; 2424 return mos7840_num_ports;
2353} 2425}
2354 2426
@@ -2361,9 +2433,7 @@ static int mos7840_startup(struct usb_serial *serial)
2361 struct moschip_port *mos7840_port; 2433 struct moschip_port *mos7840_port;
2362 struct usb_device *dev; 2434 struct usb_device *dev;
2363 int i, status; 2435 int i, status;
2364
2365 __u16 Data; 2436 __u16 Data;
2366 dbg("%s", "mos7840_startup :Entering..........");
2367 2437
2368 if (!serial) { 2438 if (!serial) {
2369 dbg("%s", "Invalid Handler"); 2439 dbg("%s", "Invalid Handler");
@@ -2372,9 +2442,6 @@ static int mos7840_startup(struct usb_serial *serial)
2372 2442
2373 dev = serial->dev; 2443 dev = serial->dev;
2374 2444
2375 dbg("%s", "Entering...");
2376 dbg ("mos7840_startup: serial = %p", serial);
2377
2378 /* we set up the pointers to the endpoints in the mos7840_open * 2445 /* we set up the pointers to the endpoints in the mos7840_open *
2379 * function, as the structures aren't created yet. */ 2446 * function, as the structures aren't created yet. */
2380 2447
@@ -2563,6 +2630,34 @@ static int mos7840_startup(struct usb_serial *serial)
2563 status = -ENOMEM; 2630 status = -ENOMEM;
2564 goto error; 2631 goto error;
2565 } 2632 }
2633
2634 mos7840_port->has_led = false;
2635
2636 /* Initialize LED timers */
2637 if (device_type == MOSCHIP_DEVICE_ID_7810) {
2638 mos7840_port->has_led = true;
2639
2640 init_timer(&mos7840_port->led_timer1);
2641 mos7840_port->led_timer1.function = mos7840_led_off;
2642 mos7840_port->led_timer1.expires =
2643 jiffies + msecs_to_jiffies(LED_ON_MS);
2644 mos7840_port->led_timer1.data =
2645 (unsigned long)mos7840_port;
2646
2647 init_timer(&mos7840_port->led_timer2);
2648 mos7840_port->led_timer2.function =
2649 mos7840_led_flag_off;
2650 mos7840_port->led_timer2.expires =
2651 jiffies + msecs_to_jiffies(LED_OFF_MS);
2652 mos7840_port->led_timer2.data =
2653 (unsigned long)mos7840_port;
2654
2655 mos7840_port->led_flag = false;
2656
2657 /* Turn off LED */
2658 mos7840_set_led_sync(serial->port[i],
2659 MODEM_CONTROL_REGISTER, 0x0300);
2660 }
2566 } 2661 }
2567 dbg ("mos7840_startup: all ports configured..........."); 2662 dbg ("mos7840_startup: all ports configured...........");
2568 2663
@@ -2602,7 +2697,6 @@ static void mos7840_disconnect(struct usb_serial *serial)
2602 int i; 2697 int i;
2603 unsigned long flags; 2698 unsigned long flags;
2604 struct moschip_port *mos7840_port; 2699 struct moschip_port *mos7840_port;
2605 dbg("%s", " disconnect :entering..........");
2606 2700
2607 if (!serial) { 2701 if (!serial) {
2608 dbg("%s", "Invalid Handler"); 2702 dbg("%s", "Invalid Handler");
@@ -2624,9 +2718,6 @@ static void mos7840_disconnect(struct usb_serial *serial)
2624 usb_kill_urb(mos7840_port->control_urb); 2718 usb_kill_urb(mos7840_port->control_urb);
2625 } 2719 }
2626 } 2720 }
2627
2628 dbg("%s", "Thank u :: ");
2629
2630} 2721}
2631 2722
2632/**************************************************************************** 2723/****************************************************************************
@@ -2638,7 +2729,6 @@ static void mos7840_release(struct usb_serial *serial)
2638{ 2729{
2639 int i; 2730 int i;
2640 struct moschip_port *mos7840_port; 2731 struct moschip_port *mos7840_port;
2641 dbg("%s", " release :entering..........");
2642 2732
2643 if (!serial) { 2733 if (!serial) {
2644 dbg("%s", "Invalid Handler"); 2734 dbg("%s", "Invalid Handler");
@@ -2654,30 +2744,28 @@ static void mos7840_release(struct usb_serial *serial)
2654 mos7840_port = mos7840_get_port_private(serial->port[i]); 2744 mos7840_port = mos7840_get_port_private(serial->port[i]);
2655 dbg("mos7840_port %d = %p", i, mos7840_port); 2745 dbg("mos7840_port %d = %p", i, mos7840_port);
2656 if (mos7840_port) { 2746 if (mos7840_port) {
2747 if (mos7840_port->has_led) {
2748 /* Turn off LED */
2749 mos7840_set_led_sync(mos7840_port->port,
2750 MODEM_CONTROL_REGISTER, 0x0300);
2751
2752 del_timer_sync(&mos7840_port->led_timer1);
2753 del_timer_sync(&mos7840_port->led_timer2);
2754 }
2657 kfree(mos7840_port->ctrl_buf); 2755 kfree(mos7840_port->ctrl_buf);
2658 kfree(mos7840_port->dr); 2756 kfree(mos7840_port->dr);
2659 kfree(mos7840_port); 2757 kfree(mos7840_port);
2660 } 2758 }
2661 } 2759 }
2662
2663 dbg("%s", "Thank u :: ");
2664
2665} 2760}
2666 2761
2667static struct usb_driver io_driver = {
2668 .name = "mos7840",
2669 .probe = usb_serial_probe,
2670 .disconnect = usb_serial_disconnect,
2671 .id_table = moschip_id_table_combined,
2672};
2673
2674static struct usb_serial_driver moschip7840_4port_device = { 2762static struct usb_serial_driver moschip7840_4port_device = {
2675 .driver = { 2763 .driver = {
2676 .owner = THIS_MODULE, 2764 .owner = THIS_MODULE,
2677 .name = "mos7840", 2765 .name = "mos7840",
2678 }, 2766 },
2679 .description = DRIVER_DESC, 2767 .description = DRIVER_DESC,
2680 .id_table = moschip_port_id_table, 2768 .id_table = id_table,
2681 .num_ports = 4, 2769 .num_ports = 4,
2682 .open = mos7840_open, 2770 .open = mos7840_open,
2683 .close = mos7840_close, 2771 .close = mos7840_close,
@@ -2707,7 +2795,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
2707 &moschip7840_4port_device, NULL 2795 &moschip7840_4port_device, NULL
2708}; 2796};
2709 2797
2710module_usb_serial_driver(io_driver, serial_drivers); 2798module_usb_serial_driver(serial_drivers, id_table);
2711 2799
2712MODULE_DESCRIPTION(DRIVER_DESC); 2800MODULE_DESCRIPTION(DRIVER_DESC);
2713MODULE_LICENSE("GPL"); 2801MODULE_LICENSE("GPL");
diff --git a/drivers/usb/serial/moto_modem.c b/drivers/usb/serial/moto_modem.c
index 3ab6214b4bbf..c5ff6c7795a6 100644
--- a/drivers/usb/serial/moto_modem.c
+++ b/drivers/usb/serial/moto_modem.c
@@ -31,13 +31,6 @@ static const struct usb_device_id id_table[] = {
31}; 31};
32MODULE_DEVICE_TABLE(usb, id_table); 32MODULE_DEVICE_TABLE(usb, id_table);
33 33
34static struct usb_driver moto_driver = {
35 .name = "moto-modem",
36 .probe = usb_serial_probe,
37 .disconnect = usb_serial_disconnect,
38 .id_table = id_table,
39};
40
41static struct usb_serial_driver moto_device = { 34static struct usb_serial_driver moto_device = {
42 .driver = { 35 .driver = {
43 .owner = THIS_MODULE, 36 .owner = THIS_MODULE,
@@ -51,5 +44,5 @@ static struct usb_serial_driver * const serial_drivers[] = {
51 &moto_device, NULL 44 &moto_device, NULL
52}; 45};
53 46
54module_usb_serial_driver(moto_driver, serial_drivers); 47module_usb_serial_driver(serial_drivers, id_table);
55MODULE_LICENSE("GPL"); 48MODULE_LICENSE("GPL");
diff --git a/drivers/usb/serial/navman.c b/drivers/usb/serial/navman.c
index 29ab6eb5b536..d95452cc076d 100644
--- a/drivers/usb/serial/navman.c
+++ b/drivers/usb/serial/navman.c
@@ -30,13 +30,6 @@ static const struct usb_device_id id_table[] = {
30}; 30};
31MODULE_DEVICE_TABLE(usb, id_table); 31MODULE_DEVICE_TABLE(usb, id_table);
32 32
33static struct usb_driver navman_driver = {
34 .name = "navman",
35 .probe = usb_serial_probe,
36 .disconnect = usb_serial_disconnect,
37 .id_table = id_table,
38};
39
40static void navman_read_int_callback(struct urb *urb) 33static void navman_read_int_callback(struct urb *urb)
41{ 34{
42 struct usb_serial_port *port = urb->context; 35 struct usb_serial_port *port = urb->context;
@@ -53,12 +46,12 @@ static void navman_read_int_callback(struct urb *urb)
53 case -ENOENT: 46 case -ENOENT:
54 case -ESHUTDOWN: 47 case -ESHUTDOWN:
55 /* this urb is terminated, clean up */ 48 /* this urb is terminated, clean up */
56 dbg("%s - urb shutting down with status: %d", 49 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
57 __func__, status); 50 __func__, status);
58 return; 51 return;
59 default: 52 default:
60 dbg("%s - nonzero urb status received: %d", 53 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
61 __func__, status); 54 __func__, status);
62 goto exit; 55 goto exit;
63 } 56 }
64 57
@@ -84,10 +77,9 @@ static int navman_open(struct tty_struct *tty, struct usb_serial_port *port)
84{ 77{
85 int result = 0; 78 int result = 0;
86 79
87 dbg("%s - port %d", __func__, port->number);
88
89 if (port->interrupt_in_urb) { 80 if (port->interrupt_in_urb) {
90 dbg("%s - adding interrupt input for treo", __func__); 81 dev_dbg(&port->dev, "%s - adding interrupt input for treo\n",
82 __func__);
91 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 83 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
92 if (result) 84 if (result)
93 dev_err(&port->dev, 85 dev_err(&port->dev,
@@ -99,16 +91,12 @@ static int navman_open(struct tty_struct *tty, struct usb_serial_port *port)
99 91
100static void navman_close(struct usb_serial_port *port) 92static void navman_close(struct usb_serial_port *port)
101{ 93{
102 dbg("%s - port %d", __func__, port->number);
103
104 usb_kill_urb(port->interrupt_in_urb); 94 usb_kill_urb(port->interrupt_in_urb);
105} 95}
106 96
107static int navman_write(struct tty_struct *tty, struct usb_serial_port *port, 97static int navman_write(struct tty_struct *tty, struct usb_serial_port *port,
108 const unsigned char *buf, int count) 98 const unsigned char *buf, int count)
109{ 99{
110 dbg("%s - port %d", __func__, port->number);
111
112 /* 100 /*
113 * This device can't write any data, only read from the device 101 * This device can't write any data, only read from the device
114 */ 102 */
@@ -132,7 +120,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
132 &navman_device, NULL 120 &navman_device, NULL
133}; 121};
134 122
135module_usb_serial_driver(navman_driver, serial_drivers); 123module_usb_serial_driver(serial_drivers, id_table);
136 124
137MODULE_LICENSE("GPL"); 125MODULE_LICENSE("GPL");
138 126
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
index 88dc785bb298..6f3d7051c7f4 100644
--- a/drivers/usb/serial/omninet.c
+++ b/drivers/usb/serial/omninet.c
@@ -54,17 +54,8 @@ static const struct usb_device_id id_table[] = {
54 { USB_DEVICE(ZYXEL_VENDOR_ID, BT_IGNITIONPRO_ID) }, 54 { USB_DEVICE(ZYXEL_VENDOR_ID, BT_IGNITIONPRO_ID) },
55 { } /* Terminating entry */ 55 { } /* Terminating entry */
56}; 56};
57
58MODULE_DEVICE_TABLE(usb, id_table); 57MODULE_DEVICE_TABLE(usb, id_table);
59 58
60static struct usb_driver omninet_driver = {
61 .name = "omninet",
62 .probe = usb_serial_probe,
63 .disconnect = usb_serial_disconnect,
64 .id_table = id_table,
65};
66
67
68static struct usb_serial_driver zyxel_omninet_device = { 59static struct usb_serial_driver zyxel_omninet_device = {
69 .driver = { 60 .driver = {
70 .owner = THIS_MODULE, 61 .owner = THIS_MODULE,
@@ -144,8 +135,6 @@ static int omninet_open(struct tty_struct *tty, struct usb_serial_port *port)
144 struct usb_serial_port *wport; 135 struct usb_serial_port *wport;
145 int result = 0; 136 int result = 0;
146 137
147 dbg("%s - port %d", __func__, port->number);
148
149 wport = serial->port[1]; 138 wport = serial->port[1];
150 tty_port_tty_set(&wport->port, tty); 139 tty_port_tty_set(&wport->port, tty);
151 140
@@ -160,7 +149,6 @@ static int omninet_open(struct tty_struct *tty, struct usb_serial_port *port)
160 149
161static void omninet_close(struct usb_serial_port *port) 150static void omninet_close(struct usb_serial_port *port)
162{ 151{
163 dbg("%s - port %d", __func__, port->number);
164 usb_kill_urb(port->read_urb); 152 usb_kill_urb(port->read_urb);
165} 153}
166 154
@@ -178,8 +166,6 @@ static void omninet_read_bulk_callback(struct urb *urb)
178 int result; 166 int result;
179 int i; 167 int i;
180 168
181 dbg("%s - port %d", __func__, port->number);
182
183 if (status) { 169 if (status) {
184 dbg("%s - nonzero read bulk status received: %d", 170 dbg("%s - nonzero read bulk status received: %d",
185 __func__, status); 171 __func__, status);
@@ -225,8 +211,6 @@ static int omninet_write(struct tty_struct *tty, struct usb_serial_port *port,
225 211
226 int result; 212 int result;
227 213
228 dbg("%s - port %d", __func__, port->number);
229
230 if (count == 0) { 214 if (count == 0) {
231 dbg("%s - write request of 0 bytes", __func__); 215 dbg("%s - write request of 0 bytes", __func__);
232 return 0; 216 return 0;
@@ -289,8 +273,6 @@ static void omninet_write_bulk_callback(struct urb *urb)
289 struct usb_serial_port *port = urb->context; 273 struct usb_serial_port *port = urb->context;
290 int status = urb->status; 274 int status = urb->status;
291 275
292 dbg("%s - port %0x", __func__, port->number);
293
294 set_bit(0, &port->write_urbs_free); 276 set_bit(0, &port->write_urbs_free);
295 if (status) { 277 if (status) {
296 dbg("%s - nonzero write bulk status received: %d", 278 dbg("%s - nonzero write bulk status received: %d",
@@ -306,8 +288,6 @@ static void omninet_disconnect(struct usb_serial *serial)
306{ 288{
307 struct usb_serial_port *wport = serial->port[1]; 289 struct usb_serial_port *wport = serial->port[1];
308 290
309 dbg("%s", __func__);
310
311 usb_kill_urb(wport->write_urb); 291 usb_kill_urb(wport->write_urb);
312} 292}
313 293
@@ -316,12 +296,10 @@ static void omninet_release(struct usb_serial *serial)
316{ 296{
317 struct usb_serial_port *port = serial->port[0]; 297 struct usb_serial_port *port = serial->port[0];
318 298
319 dbg("%s", __func__);
320
321 kfree(usb_get_serial_port_data(port)); 299 kfree(usb_get_serial_port_data(port));
322} 300}
323 301
324module_usb_serial_driver(omninet_driver, serial_drivers); 302module_usb_serial_driver(serial_drivers, id_table);
325 303
326MODULE_AUTHOR(DRIVER_AUTHOR); 304MODULE_AUTHOR(DRIVER_AUTHOR);
327MODULE_DESCRIPTION(DRIVER_DESC); 305MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c
index 82cc9d202b83..02cb1b7f6559 100644
--- a/drivers/usb/serial/opticon.c
+++ b/drivers/usb/serial/opticon.c
@@ -70,8 +70,6 @@ static void opticon_read_bulk_callback(struct urb *urb)
70 int data_length; 70 int data_length;
71 unsigned long flags; 71 unsigned long flags;
72 72
73 dbg("%s - port %d", __func__, port->number);
74
75 switch (status) { 73 switch (status) {
76 case 0: 74 case 0:
77 /* success */ 75 /* success */
@@ -179,8 +177,6 @@ static int opticon_open(struct tty_struct *tty, struct usb_serial_port *port)
179 unsigned long flags; 177 unsigned long flags;
180 int result = 0; 178 int result = 0;
181 179
182 dbg("%s - port %d", __func__, port->number);
183
184 spin_lock_irqsave(&priv->lock, flags); 180 spin_lock_irqsave(&priv->lock, flags);
185 priv->throttled = false; 181 priv->throttled = false;
186 priv->actually_throttled = false; 182 priv->actually_throttled = false;
@@ -216,8 +212,6 @@ static void opticon_close(struct usb_serial_port *port)
216{ 212{
217 struct opticon_private *priv = usb_get_serial_data(port->serial); 213 struct opticon_private *priv = usb_get_serial_data(port->serial);
218 214
219 dbg("%s - port %d", __func__, port->number);
220
221 /* shutdown our urbs */ 215 /* shutdown our urbs */
222 usb_kill_urb(priv->bulk_read_urb); 216 usb_kill_urb(priv->bulk_read_urb);
223} 217}
@@ -256,8 +250,6 @@ static int opticon_write(struct tty_struct *tty, struct usb_serial_port *port,
256 int status; 250 int status;
257 struct usb_ctrlrequest *dr; 251 struct usb_ctrlrequest *dr;
258 252
259 dbg("%s - port %d", __func__, port->number);
260
261 spin_lock_irqsave(&priv->lock, flags); 253 spin_lock_irqsave(&priv->lock, flags);
262 if (priv->outstanding_urbs > URB_UPPER_LIMIT) { 254 if (priv->outstanding_urbs > URB_UPPER_LIMIT) {
263 spin_unlock_irqrestore(&priv->lock, flags); 255 spin_unlock_irqrestore(&priv->lock, flags);
@@ -338,8 +330,6 @@ static int opticon_write_room(struct tty_struct *tty)
338 struct opticon_private *priv = usb_get_serial_data(port->serial); 330 struct opticon_private *priv = usb_get_serial_data(port->serial);
339 unsigned long flags; 331 unsigned long flags;
340 332
341 dbg("%s - port %d", __func__, port->number);
342
343 /* 333 /*
344 * We really can take almost anything the user throws at us 334 * We really can take almost anything the user throws at us
345 * but let's pick a nice big number to tell the tty 335 * but let's pick a nice big number to tell the tty
@@ -362,7 +352,6 @@ static void opticon_throttle(struct tty_struct *tty)
362 struct opticon_private *priv = usb_get_serial_data(port->serial); 352 struct opticon_private *priv = usb_get_serial_data(port->serial);
363 unsigned long flags; 353 unsigned long flags;
364 354
365 dbg("%s - port %d", __func__, port->number);
366 spin_lock_irqsave(&priv->lock, flags); 355 spin_lock_irqsave(&priv->lock, flags);
367 priv->throttled = true; 356 priv->throttled = true;
368 spin_unlock_irqrestore(&priv->lock, flags); 357 spin_unlock_irqrestore(&priv->lock, flags);
@@ -376,8 +365,6 @@ static void opticon_unthrottle(struct tty_struct *tty)
376 unsigned long flags; 365 unsigned long flags;
377 int result, was_throttled; 366 int result, was_throttled;
378 367
379 dbg("%s - port %d", __func__, port->number);
380
381 spin_lock_irqsave(&priv->lock, flags); 368 spin_lock_irqsave(&priv->lock, flags);
382 priv->throttled = false; 369 priv->throttled = false;
383 was_throttled = priv->actually_throttled; 370 was_throttled = priv->actually_throttled;
@@ -400,10 +387,6 @@ static int opticon_tiocmget(struct tty_struct *tty)
400 unsigned long flags; 387 unsigned long flags;
401 int result = 0; 388 int result = 0;
402 389
403 dbg("%s - port %d", __func__, port->number);
404 if (!usb_get_intfdata(port->serial->interface))
405 return -ENODEV;
406
407 spin_lock_irqsave(&priv->lock, flags); 390 spin_lock_irqsave(&priv->lock, flags);
408 if (priv->rts) 391 if (priv->rts)
409 result |= TIOCM_RTS; 392 result |= TIOCM_RTS;
@@ -419,13 +402,13 @@ static int opticon_tiocmset(struct tty_struct *tty,
419 unsigned int set, unsigned int clear) 402 unsigned int set, unsigned int clear)
420{ 403{
421 struct usb_serial_port *port = tty->driver_data; 404 struct usb_serial_port *port = tty->driver_data;
405 struct usb_serial *serial = port->serial;
422 struct opticon_private *priv = usb_get_serial_data(port->serial); 406 struct opticon_private *priv = usb_get_serial_data(port->serial);
423 unsigned long flags; 407 unsigned long flags;
424 bool rts; 408 bool rts;
425 bool changed = false; 409 bool changed = false;
410 int ret;
426 411
427 if (!usb_get_intfdata(port->serial->interface))
428 return -ENODEV;
429 /* We only support RTS so we only handle that */ 412 /* We only support RTS so we only handle that */
430 spin_lock_irqsave(&priv->lock, flags); 413 spin_lock_irqsave(&priv->lock, flags);
431 414
@@ -441,7 +424,14 @@ static int opticon_tiocmset(struct tty_struct *tty,
441 return 0; 424 return 0;
442 425
443 /* Send the new RTS state to the connected device */ 426 /* Send the new RTS state to the connected device */
444 return send_control_msg(port, CONTROL_RTS, !rts); 427 mutex_lock(&serial->disc_mutex);
428 if (!serial->disconnected)
429 ret = send_control_msg(port, CONTROL_RTS, !rts);
430 else
431 ret = -ENODEV;
432 mutex_unlock(&serial->disc_mutex);
433
434 return ret;
445} 435}
446 436
447static int get_serial_info(struct opticon_private *priv, 437static int get_serial_info(struct opticon_private *priv,
@@ -555,8 +545,6 @@ static void opticon_disconnect(struct usb_serial *serial)
555{ 545{
556 struct opticon_private *priv = usb_get_serial_data(serial); 546 struct opticon_private *priv = usb_get_serial_data(serial);
557 547
558 dbg("%s", __func__);
559
560 usb_kill_urb(priv->bulk_read_urb); 548 usb_kill_urb(priv->bulk_read_urb);
561 usb_free_urb(priv->bulk_read_urb); 549 usb_free_urb(priv->bulk_read_urb);
562} 550}
@@ -565,24 +553,20 @@ static void opticon_release(struct usb_serial *serial)
565{ 553{
566 struct opticon_private *priv = usb_get_serial_data(serial); 554 struct opticon_private *priv = usb_get_serial_data(serial);
567 555
568 dbg("%s", __func__);
569
570 kfree(priv->bulk_in_buffer); 556 kfree(priv->bulk_in_buffer);
571 kfree(priv); 557 kfree(priv);
572} 558}
573 559
574static int opticon_suspend(struct usb_interface *intf, pm_message_t message) 560static int opticon_suspend(struct usb_serial *serial, pm_message_t message)
575{ 561{
576 struct usb_serial *serial = usb_get_intfdata(intf);
577 struct opticon_private *priv = usb_get_serial_data(serial); 562 struct opticon_private *priv = usb_get_serial_data(serial);
578 563
579 usb_kill_urb(priv->bulk_read_urb); 564 usb_kill_urb(priv->bulk_read_urb);
580 return 0; 565 return 0;
581} 566}
582 567
583static int opticon_resume(struct usb_interface *intf) 568static int opticon_resume(struct usb_serial *serial)
584{ 569{
585 struct usb_serial *serial = usb_get_intfdata(intf);
586 struct opticon_private *priv = usb_get_serial_data(serial); 570 struct opticon_private *priv = usb_get_serial_data(serial);
587 struct usb_serial_port *port = serial->port[0]; 571 struct usb_serial_port *port = serial->port[0];
588 int result; 572 int result;
@@ -597,15 +581,6 @@ static int opticon_resume(struct usb_interface *intf)
597 return result; 581 return result;
598} 582}
599 583
600static struct usb_driver opticon_driver = {
601 .name = "opticon",
602 .probe = usb_serial_probe,
603 .disconnect = usb_serial_disconnect,
604 .suspend = opticon_suspend,
605 .resume = opticon_resume,
606 .id_table = id_table,
607};
608
609static struct usb_serial_driver opticon_device = { 584static struct usb_serial_driver opticon_device = {
610 .driver = { 585 .driver = {
611 .owner = THIS_MODULE, 586 .owner = THIS_MODULE,
@@ -625,13 +600,15 @@ static struct usb_serial_driver opticon_device = {
625 .ioctl = opticon_ioctl, 600 .ioctl = opticon_ioctl,
626 .tiocmget = opticon_tiocmget, 601 .tiocmget = opticon_tiocmget,
627 .tiocmset = opticon_tiocmset, 602 .tiocmset = opticon_tiocmset,
603 .suspend = opticon_suspend,
604 .resume = opticon_resume,
628}; 605};
629 606
630static struct usb_serial_driver * const serial_drivers[] = { 607static struct usb_serial_driver * const serial_drivers[] = {
631 &opticon_device, NULL 608 &opticon_device, NULL
632}; 609};
633 610
634module_usb_serial_driver(opticon_driver, serial_drivers); 611module_usb_serial_driver(serial_drivers, id_table);
635 612
636MODULE_DESCRIPTION(DRIVER_DESC); 613MODULE_DESCRIPTION(DRIVER_DESC);
637MODULE_LICENSE("GPL"); 614MODULE_LICENSE("GPL");
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index f4465ccddc35..1aae9028cd0b 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1220,18 +1220,6 @@ static const struct usb_device_id option_ids[] = {
1220}; 1220};
1221MODULE_DEVICE_TABLE(usb, option_ids); 1221MODULE_DEVICE_TABLE(usb, option_ids);
1222 1222
1223static struct usb_driver option_driver = {
1224 .name = "option",
1225 .probe = usb_serial_probe,
1226 .disconnect = usb_serial_disconnect,
1227#ifdef CONFIG_PM
1228 .suspend = usb_serial_suspend,
1229 .resume = usb_serial_resume,
1230 .supports_autosuspend = 1,
1231#endif
1232 .id_table = option_ids,
1233};
1234
1235/* The card has three separate interfaces, which the serial driver 1223/* The card has three separate interfaces, which the serial driver
1236 * recognizes separately, thus num_port=1. 1224 * recognizes separately, thus num_port=1.
1237 */ 1225 */
@@ -1300,7 +1288,7 @@ struct option_port_private {
1300 unsigned long tx_start_time[N_OUT_URB]; 1288 unsigned long tx_start_time[N_OUT_URB];
1301}; 1289};
1302 1290
1303module_usb_serial_driver(option_driver, serial_drivers); 1291module_usb_serial_driver(serial_drivers, option_ids);
1304 1292
1305static bool is_blacklisted(const u8 ifnum, enum option_blacklist_reason reason, 1293static bool is_blacklisted(const u8 ifnum, enum option_blacklist_reason reason,
1306 const struct option_blacklist_info *blacklist) 1294 const struct option_blacklist_info *blacklist)
@@ -1375,7 +1363,6 @@ static void option_instat_callback(struct urb *urb)
1375 struct usb_serial_port *port = urb->context; 1363 struct usb_serial_port *port = urb->context;
1376 struct option_port_private *portdata = usb_get_serial_port_data(port); 1364 struct option_port_private *portdata = usb_get_serial_port_data(port);
1377 1365
1378 dbg("%s", __func__);
1379 dbg("%s: urb %p port %p has data %p", __func__, urb, port, portdata); 1366 dbg("%s: urb %p port %p has data %p", __func__, urb, port, portdata);
1380 1367
1381 if (status == 0) { 1368 if (status == 0) {
@@ -1413,7 +1400,7 @@ static void option_instat_callback(struct urb *urb)
1413 req_pkt->bRequestType, req_pkt->bRequest); 1400 req_pkt->bRequestType, req_pkt->bRequest);
1414 } 1401 }
1415 } else 1402 } else
1416 err("%s: error %d", __func__, status); 1403 dev_err(&port->dev, "%s: error %d\n", __func__, status);
1417 1404
1418 /* Resubmit urb so we continue receiving IRQ data */ 1405 /* Resubmit urb so we continue receiving IRQ data */
1419 if (status != -ESHUTDOWN && status != -ENOENT) { 1406 if (status != -ESHUTDOWN && status != -ENOENT) {
@@ -1437,7 +1424,6 @@ static int option_send_setup(struct usb_serial_port *port)
1437 struct option_port_private *portdata; 1424 struct option_port_private *portdata;
1438 int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber; 1425 int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
1439 int val = 0; 1426 int val = 0;
1440 dbg("%s", __func__);
1441 1427
1442 if (is_blacklisted(ifNum, OPTION_BLACKLIST_SENDSETUP, 1428 if (is_blacklisted(ifNum, OPTION_BLACKLIST_SENDSETUP,
1443 (struct option_blacklist_info *) intfdata->private)) { 1429 (struct option_blacklist_info *) intfdata->private)) {
diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c
index 5fdc33c6a3c0..5976b65ab6ee 100644
--- a/drivers/usb/serial/oti6858.c
+++ b/drivers/usb/serial/oti6858.c
@@ -66,13 +66,6 @@ static const struct usb_device_id id_table[] = {
66 66
67MODULE_DEVICE_TABLE(usb, id_table); 67MODULE_DEVICE_TABLE(usb, id_table);
68 68
69static struct usb_driver oti6858_driver = {
70 .name = "oti6858",
71 .probe = usb_serial_probe,
72 .disconnect = usb_serial_disconnect,
73 .id_table = id_table,
74};
75
76static bool debug; 69static bool debug;
77 70
78/* requests */ 71/* requests */
@@ -211,8 +204,6 @@ static void setup_line(struct work_struct *work)
211 unsigned long flags; 204 unsigned long flags;
212 int result; 205 int result;
213 206
214 dbg("%s(port = %d)", __func__, port->number);
215
216 new_setup = kmalloc(OTI6858_CTRL_PKT_SIZE, GFP_KERNEL); 207 new_setup = kmalloc(OTI6858_CTRL_PKT_SIZE, GFP_KERNEL);
217 if (new_setup == NULL) { 208 if (new_setup == NULL) {
218 dev_err(&port->dev, "%s(): out of memory!\n", __func__); 209 dev_err(&port->dev, "%s(): out of memory!\n", __func__);
@@ -282,8 +273,6 @@ static void send_data(struct work_struct *work)
282 unsigned long flags; 273 unsigned long flags;
283 u8 *allow; 274 u8 *allow;
284 275
285 dbg("%s(port = %d)", __func__, port->number);
286
287 spin_lock_irqsave(&priv->lock, flags); 276 spin_lock_irqsave(&priv->lock, flags);
288 if (priv->flags.write_urb_in_use) { 277 if (priv->flags.write_urb_in_use) {
289 spin_unlock_irqrestore(&priv->lock, flags); 278 spin_unlock_irqrestore(&priv->lock, flags);
@@ -379,8 +368,6 @@ static int oti6858_startup(struct usb_serial *serial)
379static int oti6858_write(struct tty_struct *tty, struct usb_serial_port *port, 368static int oti6858_write(struct tty_struct *tty, struct usb_serial_port *port,
380 const unsigned char *buf, int count) 369 const unsigned char *buf, int count)
381{ 370{
382 dbg("%s(port = %d, count = %d)", __func__, port->number, count);
383
384 if (!count) 371 if (!count)
385 return count; 372 return count;
386 373
@@ -395,8 +382,6 @@ static int oti6858_write_room(struct tty_struct *tty)
395 int room = 0; 382 int room = 0;
396 unsigned long flags; 383 unsigned long flags;
397 384
398 dbg("%s(port = %d)", __func__, port->number);
399
400 spin_lock_irqsave(&port->lock, flags); 385 spin_lock_irqsave(&port->lock, flags);
401 room = kfifo_avail(&port->write_fifo); 386 room = kfifo_avail(&port->write_fifo);
402 spin_unlock_irqrestore(&port->lock, flags); 387 spin_unlock_irqrestore(&port->lock, flags);
@@ -410,8 +395,6 @@ static int oti6858_chars_in_buffer(struct tty_struct *tty)
410 int chars = 0; 395 int chars = 0;
411 unsigned long flags; 396 unsigned long flags;
412 397
413 dbg("%s(port = %d)", __func__, port->number);
414
415 spin_lock_irqsave(&port->lock, flags); 398 spin_lock_irqsave(&port->lock, flags);
416 chars = kfifo_len(&port->write_fifo); 399 chars = kfifo_len(&port->write_fifo);
417 spin_unlock_irqrestore(&port->lock, flags); 400 spin_unlock_irqrestore(&port->lock, flags);
@@ -437,8 +420,6 @@ static void oti6858_set_termios(struct tty_struct *tty,
437 __le16 divisor; 420 __le16 divisor;
438 int br; 421 int br;
439 422
440 dbg("%s(port = %d)", __func__, port->number);
441
442 if (!tty) { 423 if (!tty) {
443 dbg("%s(): no tty structures", __func__); 424 dbg("%s(): no tty structures", __func__);
444 return; 425 return;
@@ -545,8 +526,6 @@ static int oti6858_open(struct tty_struct *tty, struct usb_serial_port *port)
545 unsigned long flags; 526 unsigned long flags;
546 int result; 527 int result;
547 528
548 dbg("%s(port = %d)", __func__, port->number);
549
550 usb_clear_halt(serial->dev, port->write_urb->pipe); 529 usb_clear_halt(serial->dev, port->write_urb->pipe);
551 usb_clear_halt(serial->dev, port->read_urb->pipe); 530 usb_clear_halt(serial->dev, port->read_urb->pipe);
552 531
@@ -602,8 +581,6 @@ static void oti6858_close(struct usb_serial_port *port)
602 struct oti6858_private *priv = usb_get_serial_port_data(port); 581 struct oti6858_private *priv = usb_get_serial_port_data(port);
603 unsigned long flags; 582 unsigned long flags;
604 583
605 dbg("%s(port = %d)", __func__, port->number);
606
607 spin_lock_irqsave(&port->lock, flags); 584 spin_lock_irqsave(&port->lock, flags);
608 /* clear out any remaining data in the buffer */ 585 /* clear out any remaining data in the buffer */
609 kfifo_reset_out(&port->write_fifo); 586 kfifo_reset_out(&port->write_fifo);
@@ -633,9 +610,6 @@ static int oti6858_tiocmset(struct tty_struct *tty,
633 dbg("%s(port = %d, set = 0x%08x, clear = 0x%08x)", 610 dbg("%s(port = %d, set = 0x%08x, clear = 0x%08x)",
634 __func__, port->number, set, clear); 611 __func__, port->number, set, clear);
635 612
636 if (!usb_get_intfdata(port->serial->interface))
637 return -ENODEV;
638
639 /* FIXME: check if this is correct (active high/low) */ 613 /* FIXME: check if this is correct (active high/low) */
640 spin_lock_irqsave(&priv->lock, flags); 614 spin_lock_irqsave(&priv->lock, flags);
641 control = priv->pending_setup.control; 615 control = priv->pending_setup.control;
@@ -663,11 +637,6 @@ static int oti6858_tiocmget(struct tty_struct *tty)
663 unsigned pin_state; 637 unsigned pin_state;
664 unsigned result = 0; 638 unsigned result = 0;
665 639
666 dbg("%s(port = %d)", __func__, port->number);
667
668 if (!usb_get_intfdata(port->serial->interface))
669 return -ENODEV;
670
671 spin_lock_irqsave(&priv->lock, flags); 640 spin_lock_irqsave(&priv->lock, flags);
672 pin_state = priv->status.pin_state & PIN_MASK; 641 pin_state = priv->status.pin_state & PIN_MASK;
673 spin_unlock_irqrestore(&priv->lock, flags); 642 spin_unlock_irqrestore(&priv->lock, flags);
@@ -750,8 +719,6 @@ static void oti6858_release(struct usb_serial *serial)
750{ 719{
751 int i; 720 int i;
752 721
753 dbg("%s()", __func__);
754
755 for (i = 0; i < serial->num_ports; ++i) 722 for (i = 0; i < serial->num_ports; ++i)
756 kfree(usb_get_serial_port_data(serial->port[i])); 723 kfree(usb_get_serial_port_data(serial->port[i]));
757} 724}
@@ -763,9 +730,6 @@ static void oti6858_read_int_callback(struct urb *urb)
763 int transient = 0, can_recv = 0, resubmit = 1; 730 int transient = 0, can_recv = 0, resubmit = 1;
764 int status = urb->status; 731 int status = urb->status;
765 732
766 dbg("%s(port = %d, status = %d)",
767 __func__, port->number, status);
768
769 switch (status) { 733 switch (status) {
770 case 0: 734 case 0:
771 /* success */ 735 /* success */
@@ -882,9 +846,6 @@ static void oti6858_read_bulk_callback(struct urb *urb)
882 int status = urb->status; 846 int status = urb->status;
883 int result; 847 int result;
884 848
885 dbg("%s(port = %d, status = %d)",
886 __func__, port->number, status);
887
888 spin_lock_irqsave(&priv->lock, flags); 849 spin_lock_irqsave(&priv->lock, flags);
889 priv->flags.read_urb_in_use = 0; 850 priv->flags.read_urb_in_use = 0;
890 spin_unlock_irqrestore(&priv->lock, flags); 851 spin_unlock_irqrestore(&priv->lock, flags);
@@ -916,9 +877,6 @@ static void oti6858_write_bulk_callback(struct urb *urb)
916 int status = urb->status; 877 int status = urb->status;
917 int result; 878 int result;
918 879
919 dbg("%s(port = %d, status = %d)",
920 __func__, port->number, status);
921
922 switch (status) { 880 switch (status) {
923 case 0: 881 case 0:
924 /* success */ 882 /* success */
@@ -958,7 +916,7 @@ static void oti6858_write_bulk_callback(struct urb *urb)
958 } 916 }
959} 917}
960 918
961module_usb_serial_driver(oti6858_driver, serial_drivers); 919module_usb_serial_driver(serial_drivers, id_table);
962 920
963MODULE_DESCRIPTION(OTI6858_DESCRIPTION); 921MODULE_DESCRIPTION(OTI6858_DESCRIPTION);
964MODULE_AUTHOR(OTI6858_AUTHOR); 922MODULE_AUTHOR(OTI6858_AUTHOR);
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index a1a9062954c4..13b8dd6481f5 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -38,8 +38,6 @@
38 38
39static bool debug; 39static bool debug;
40 40
41#define PL2303_CLOSING_WAIT (30*HZ)
42
43static const struct usb_device_id id_table[] = { 41static const struct usb_device_id id_table[] = {
44 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) }, 42 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) },
45 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) }, 43 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
@@ -97,16 +95,6 @@ static const struct usb_device_id id_table[] = {
97 95
98MODULE_DEVICE_TABLE(usb, id_table); 96MODULE_DEVICE_TABLE(usb, id_table);
99 97
100static struct usb_driver pl2303_driver = {
101 .name = "pl2303",
102 .probe = usb_serial_probe,
103 .disconnect = usb_serial_disconnect,
104 .id_table = id_table,
105 .suspend = usb_serial_suspend,
106 .resume = usb_serial_resume,
107 .supports_autosuspend = 1,
108};
109
110#define SET_LINE_REQUEST_TYPE 0x21 98#define SET_LINE_REQUEST_TYPE 0x21
111#define SET_LINE_REQUEST 0x20 99#define SET_LINE_REQUEST 0x20
112 100
@@ -161,8 +149,9 @@ static int pl2303_vendor_read(__u16 value, __u16 index,
161 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 149 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
162 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE, 150 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
163 value, index, buf, 1, 100); 151 value, index, buf, 1, 100);
164 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE, 152 dev_dbg(&serial->dev->dev, "0x%x:0x%x:0x%x:0x%x %d - %x\n",
165 VENDOR_READ_REQUEST, value, index, res, buf[0]); 153 VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, value, index,
154 res, buf[0]);
166 return res; 155 return res;
167} 156}
168 157
@@ -172,8 +161,9 @@ static int pl2303_vendor_write(__u16 value, __u16 index,
172 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 161 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
173 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE, 162 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
174 value, index, NULL, 0, 100); 163 value, index, NULL, 0, 100);
175 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE, 164 dev_dbg(&serial->dev->dev, "0x%x:0x%x:0x%x:0x%x %d\n",
176 VENDOR_WRITE_REQUEST, value, index, res); 165 VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, value, index,
166 res);
177 return res; 167 return res;
178} 168}
179 169
@@ -196,7 +186,7 @@ static int pl2303_startup(struct usb_serial *serial)
196 type = type_1; 186 type = type_1;
197 else if (serial->dev->descriptor.bDeviceClass == 0xFF) 187 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
198 type = type_1; 188 type = type_1;
199 dbg("device type: %d", type); 189 dev_dbg(&serial->interface->dev, "device type: %d\n", type);
200 190
201 for (i = 0; i < serial->num_ports; ++i) { 191 for (i = 0; i < serial->num_ports; ++i) {
202 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL); 192 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
@@ -243,7 +233,8 @@ static int set_control_lines(struct usb_device *dev, u8 value)
243 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 233 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
244 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE, 234 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
245 value, 0, NULL, 0, 100); 235 value, 0, NULL, 0, 100);
246 dbg("%s - value = %d, retval = %d", __func__, value, retval); 236 dev_dbg(&dev->dev, "%s - value = %d, retval = %d\n", __func__,
237 value, retval);
247 return retval; 238 return retval;
248} 239}
249 240
@@ -265,8 +256,6 @@ static void pl2303_set_termios(struct tty_struct *tty,
265 int baud_floor, baud_ceil; 256 int baud_floor, baud_ceil;
266 int k; 257 int k;
267 258
268 dbg("%s - port %d", __func__, port->number);
269
270 /* The PL2303 is reported to lose bytes if you change 259 /* The PL2303 is reported to lose bytes if you change
271 serial settings even to the same values as before. Thus 260 serial settings even to the same values as before. Thus
272 we actually need to filter in this specific case */ 261 we actually need to filter in this specific case */
@@ -287,7 +276,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
287 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 276 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
288 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE, 277 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
289 0, 0, buf, 7, 100); 278 0, 0, buf, 7, 100);
290 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i, 279 dev_dbg(&port->dev, "0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x\n", i,
291 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]); 280 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
292 281
293 if (cflag & CSIZE) { 282 if (cflag & CSIZE) {
@@ -306,7 +295,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
306 buf[6] = 8; 295 buf[6] = 8;
307 break; 296 break;
308 } 297 }
309 dbg("%s - data bits = %d", __func__, buf[6]); 298 dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
310 } 299 }
311 300
312 /* For reference buf[0]:buf[3] baud rate value */ 301 /* For reference buf[0]:buf[3] baud rate value */
@@ -315,7 +304,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
315 * 9600 baud (at least my PL2303X always does) 304 * 9600 baud (at least my PL2303X always does)
316 */ 305 */
317 baud = tty_get_baud_rate(tty); 306 baud = tty_get_baud_rate(tty);
318 dbg("%s - baud requested = %d", __func__, baud); 307 dev_dbg(&port->dev, "baud requested = %d\n", baud);
319 if (baud) { 308 if (baud) {
320 /* Set baudrate to nearest supported value */ 309 /* Set baudrate to nearest supported value */
321 for (k=0; k<ARRAY_SIZE(baud_sup); k++) { 310 for (k=0; k<ARRAY_SIZE(baud_sup); k++) {
@@ -341,7 +330,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
341 else if (baud > 6000000) 330 else if (baud > 6000000)
342 baud = 6000000; 331 baud = 6000000;
343 } 332 }
344 dbg("%s - baud set = %d", __func__, baud); 333 dev_dbg(&port->dev, "baud set = %d\n", baud);
345 if (baud <= 115200) { 334 if (baud <= 115200) {
346 buf[0] = baud & 0xff; 335 buf[0] = baud & 0xff;
347 buf[1] = (baud >> 8) & 0xff; 336 buf[1] = (baud >> 8) & 0xff;
@@ -372,14 +361,14 @@ static void pl2303_set_termios(struct tty_struct *tty,
372 */ 361 */
373 if ((cflag & CSIZE) == CS5) { 362 if ((cflag & CSIZE) == CS5) {
374 buf[4] = 1; 363 buf[4] = 1;
375 dbg("%s - stop bits = 1.5", __func__); 364 dev_dbg(&port->dev, "stop bits = 1.5\n");
376 } else { 365 } else {
377 buf[4] = 2; 366 buf[4] = 2;
378 dbg("%s - stop bits = 2", __func__); 367 dev_dbg(&port->dev, "stop bits = 2\n");
379 } 368 }
380 } else { 369 } else {
381 buf[4] = 0; 370 buf[4] = 0;
382 dbg("%s - stop bits = 1", __func__); 371 dev_dbg(&port->dev, "stop bits = 1\n");
383 } 372 }
384 373
385 if (cflag & PARENB) { 374 if (cflag & PARENB) {
@@ -391,29 +380,29 @@ static void pl2303_set_termios(struct tty_struct *tty,
391 if (cflag & PARODD) { 380 if (cflag & PARODD) {
392 if (cflag & CMSPAR) { 381 if (cflag & CMSPAR) {
393 buf[5] = 3; 382 buf[5] = 3;
394 dbg("%s - parity = mark", __func__); 383 dev_dbg(&port->dev, "parity = mark\n");
395 } else { 384 } else {
396 buf[5] = 1; 385 buf[5] = 1;
397 dbg("%s - parity = odd", __func__); 386 dev_dbg(&port->dev, "parity = odd\n");
398 } 387 }
399 } else { 388 } else {
400 if (cflag & CMSPAR) { 389 if (cflag & CMSPAR) {
401 buf[5] = 4; 390 buf[5] = 4;
402 dbg("%s - parity = space", __func__); 391 dev_dbg(&port->dev, "parity = space\n");
403 } else { 392 } else {
404 buf[5] = 2; 393 buf[5] = 2;
405 dbg("%s - parity = even", __func__); 394 dev_dbg(&port->dev, "parity = even\n");
406 } 395 }
407 } 396 }
408 } else { 397 } else {
409 buf[5] = 0; 398 buf[5] = 0;
410 dbg("%s - parity = none", __func__); 399 dev_dbg(&port->dev, "parity = none\n");
411 } 400 }
412 401
413 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 402 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
414 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE, 403 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
415 0, 0, buf, 7, 100); 404 0, 0, buf, 7, 100);
416 dbg("0x21:0x20:0:0 %d", i); 405 dev_dbg(&port->dev, "0x21:0x20:0:0 %d\n", i);
417 406
418 /* change control lines if we are switching to or from B0 */ 407 /* change control lines if we are switching to or from B0 */
419 spin_lock_irqsave(&priv->lock, flags); 408 spin_lock_irqsave(&priv->lock, flags);
@@ -435,7 +424,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
435 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 424 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
436 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE, 425 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
437 0, 0, buf, 7, 100); 426 0, 0, buf, 7, 100);
438 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i, 427 dev_dbg(&port->dev, "0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x\n", i,
439 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]); 428 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
440 429
441 if (cflag & CRTSCTS) { 430 if (cflag & CRTSCTS) {
@@ -473,8 +462,6 @@ static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
473 462
474static void pl2303_close(struct usb_serial_port *port) 463static void pl2303_close(struct usb_serial_port *port)
475{ 464{
476 dbg("%s - port %d", __func__, port->number);
477
478 usb_serial_generic_close(port); 465 usb_serial_generic_close(port);
479 usb_kill_urb(port->interrupt_in_urb); 466 usb_kill_urb(port->interrupt_in_urb);
480} 467}
@@ -486,8 +473,6 @@ static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
486 struct pl2303_private *priv = usb_get_serial_port_data(port); 473 struct pl2303_private *priv = usb_get_serial_port_data(port);
487 int result; 474 int result;
488 475
489 dbg("%s - port %d", __func__, port->number);
490
491 if (priv->type != HX) { 476 if (priv->type != HX) {
492 usb_clear_halt(serial->dev, port->write_urb->pipe); 477 usb_clear_halt(serial->dev, port->write_urb->pipe);
493 usb_clear_halt(serial->dev, port->read_urb->pipe); 478 usb_clear_halt(serial->dev, port->read_urb->pipe);
@@ -501,7 +486,6 @@ static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
501 if (tty) 486 if (tty)
502 pl2303_set_termios(tty, port, &tmp_termios); 487 pl2303_set_termios(tty, port, &tmp_termios);
503 488
504 dbg("%s - submitting interrupt urb", __func__);
505 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 489 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
506 if (result) { 490 if (result) {
507 dev_err(&port->dev, "%s - failed submitting interrupt urb," 491 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
@@ -523,12 +507,11 @@ static int pl2303_tiocmset(struct tty_struct *tty,
523 unsigned int set, unsigned int clear) 507 unsigned int set, unsigned int clear)
524{ 508{
525 struct usb_serial_port *port = tty->driver_data; 509 struct usb_serial_port *port = tty->driver_data;
510 struct usb_serial *serial = port->serial;
526 struct pl2303_private *priv = usb_get_serial_port_data(port); 511 struct pl2303_private *priv = usb_get_serial_port_data(port);
527 unsigned long flags; 512 unsigned long flags;
528 u8 control; 513 u8 control;
529 514 int ret;
530 if (!usb_get_intfdata(port->serial->interface))
531 return -ENODEV;
532 515
533 spin_lock_irqsave(&priv->lock, flags); 516 spin_lock_irqsave(&priv->lock, flags);
534 if (set & TIOCM_RTS) 517 if (set & TIOCM_RTS)
@@ -542,7 +525,14 @@ static int pl2303_tiocmset(struct tty_struct *tty,
542 control = priv->line_control; 525 control = priv->line_control;
543 spin_unlock_irqrestore(&priv->lock, flags); 526 spin_unlock_irqrestore(&priv->lock, flags);
544 527
545 return set_control_lines(port->serial->dev, control); 528 mutex_lock(&serial->disc_mutex);
529 if (!serial->disconnected)
530 ret = set_control_lines(serial->dev, control);
531 else
532 ret = -ENODEV;
533 mutex_unlock(&serial->disc_mutex);
534
535 return ret;
546} 536}
547 537
548static int pl2303_tiocmget(struct tty_struct *tty) 538static int pl2303_tiocmget(struct tty_struct *tty)
@@ -554,11 +544,6 @@ static int pl2303_tiocmget(struct tty_struct *tty)
554 unsigned int status; 544 unsigned int status;
555 unsigned int result; 545 unsigned int result;
556 546
557 dbg("%s (%d)", __func__, port->number);
558
559 if (!usb_get_intfdata(port->serial->interface))
560 return -ENODEV;
561
562 spin_lock_irqsave(&priv->lock, flags); 547 spin_lock_irqsave(&priv->lock, flags);
563 mcr = priv->line_control; 548 mcr = priv->line_control;
564 status = priv->line_status; 549 status = priv->line_status;
@@ -571,7 +556,7 @@ static int pl2303_tiocmget(struct tty_struct *tty)
571 | ((status & UART_RING) ? TIOCM_RI : 0) 556 | ((status & UART_RING) ? TIOCM_RI : 0)
572 | ((status & UART_DCD) ? TIOCM_CD : 0); 557 | ((status & UART_DCD) ? TIOCM_CD : 0);
573 558
574 dbg("%s - result = %x", __func__, result); 559 dev_dbg(&port->dev, "%s - result = %x\n", __func__, result);
575 560
576 return result; 561 return result;
577} 562}
@@ -625,7 +610,8 @@ static int pl2303_ioctl(struct tty_struct *tty,
625{ 610{
626 struct serial_struct ser; 611 struct serial_struct ser;
627 struct usb_serial_port *port = tty->driver_data; 612 struct usb_serial_port *port = tty->driver_data;
628 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd); 613
614 dev_dbg(&port->dev, "%s cmd = 0x%04x\n", __func__, cmd);
629 615
630 switch (cmd) { 616 switch (cmd) {
631 case TIOCGSERIAL: 617 case TIOCGSERIAL:
@@ -641,10 +627,10 @@ static int pl2303_ioctl(struct tty_struct *tty,
641 return 0; 627 return 0;
642 628
643 case TIOCMIWAIT: 629 case TIOCMIWAIT:
644 dbg("%s (%d) TIOCMIWAIT", __func__, port->number); 630 dev_dbg(&port->dev, "%s TIOCMIWAIT\n", __func__);
645 return wait_modem_info(port, arg); 631 return wait_modem_info(port, arg);
646 default: 632 default:
647 dbg("%s not supported = 0x%04x", __func__, cmd); 633 dev_dbg(&port->dev, "%s not supported = 0x%04x\n", __func__, cmd);
648 break; 634 break;
649 } 635 }
650 return -ENOIOCTLCMD; 636 return -ENOIOCTLCMD;
@@ -657,20 +643,18 @@ static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
657 u16 state; 643 u16 state;
658 int result; 644 int result;
659 645
660 dbg("%s - port %d", __func__, port->number);
661
662 if (break_state == 0) 646 if (break_state == 0)
663 state = BREAK_OFF; 647 state = BREAK_OFF;
664 else 648 else
665 state = BREAK_ON; 649 state = BREAK_ON;
666 dbg("%s - turning break %s", __func__, 650 dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
667 state == BREAK_OFF ? "off" : "on"); 651 state == BREAK_OFF ? "off" : "on");
668 652
669 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 653 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
670 BREAK_REQUEST, BREAK_REQUEST_TYPE, state, 654 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
671 0, NULL, 0, 100); 655 0, NULL, 0, 100);
672 if (result) 656 if (result)
673 dbg("%s - error sending break = %d", __func__, result); 657 dev_err(&port->dev, "error sending break = %d\n", result);
674} 658}
675 659
676static void pl2303_release(struct usb_serial *serial) 660static void pl2303_release(struct usb_serial *serial)
@@ -678,8 +662,6 @@ static void pl2303_release(struct usb_serial *serial)
678 int i; 662 int i;
679 struct pl2303_private *priv; 663 struct pl2303_private *priv;
680 664
681 dbg("%s", __func__);
682
683 for (i = 0; i < serial->num_ports; ++i) { 665 for (i = 0; i < serial->num_ports; ++i) {
684 priv = usb_get_serial_port_data(serial->port[i]); 666 priv = usb_get_serial_port_data(serial->port[i]);
685 kfree(priv); 667 kfree(priv);
@@ -742,8 +724,6 @@ static void pl2303_read_int_callback(struct urb *urb)
742 int status = urb->status; 724 int status = urb->status;
743 int retval; 725 int retval;
744 726
745 dbg("%s (%d)", __func__, port->number);
746
747 switch (status) { 727 switch (status) {
748 case 0: 728 case 0:
749 /* success */ 729 /* success */
@@ -752,12 +732,12 @@ static void pl2303_read_int_callback(struct urb *urb)
752 case -ENOENT: 732 case -ENOENT:
753 case -ESHUTDOWN: 733 case -ESHUTDOWN:
754 /* this urb is terminated, clean up */ 734 /* this urb is terminated, clean up */
755 dbg("%s - urb shutting down with status: %d", __func__, 735 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
756 status); 736 __func__, status);
757 return; 737 return;
758 default: 738 default:
759 dbg("%s - nonzero urb status received: %d", __func__, 739 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
760 status); 740 __func__, status);
761 goto exit; 741 goto exit;
762 } 742 }
763 743
@@ -769,7 +749,7 @@ static void pl2303_read_int_callback(struct urb *urb)
769exit: 749exit:
770 retval = usb_submit_urb(urb, GFP_ATOMIC); 750 retval = usb_submit_urb(urb, GFP_ATOMIC);
771 if (retval) 751 if (retval)
772 dev_err(&urb->dev->dev, 752 dev_err(&port->dev,
773 "%s - usb_submit_urb failed with result %d\n", 753 "%s - usb_submit_urb failed with result %d\n",
774 __func__, retval); 754 __func__, retval);
775} 755}
@@ -807,7 +787,7 @@ static void pl2303_process_read_urb(struct urb *urb)
807 tty_flag = TTY_PARITY; 787 tty_flag = TTY_PARITY;
808 else if (line_status & UART_FRAME_ERROR) 788 else if (line_status & UART_FRAME_ERROR)
809 tty_flag = TTY_FRAME; 789 tty_flag = TTY_FRAME;
810 dbg("%s - tty_flag = %d", __func__, tty_flag); 790 dev_dbg(&port->dev, "%s - tty_flag = %d\n", __func__, tty_flag);
811 791
812 /* overrun is special, not associated with a char */ 792 /* overrun is special, not associated with a char */
813 if (line_status & UART_OVERRUN_ERROR) 793 if (line_status & UART_OVERRUN_ERROR)
@@ -855,7 +835,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
855 &pl2303_device, NULL 835 &pl2303_device, NULL
856}; 836};
857 837
858module_usb_serial_driver(pl2303_driver, serial_drivers); 838module_usb_serial_driver(serial_drivers, id_table);
859 839
860MODULE_DESCRIPTION(DRIVER_DESC); 840MODULE_DESCRIPTION(DRIVER_DESC);
861MODULE_LICENSE("GPL"); 841MODULE_LICENSE("GPL");
diff --git a/drivers/usb/serial/qcaux.c b/drivers/usb/serial/qcaux.c
index 966245680f55..a4edc7ee9c8a 100644
--- a/drivers/usb/serial/qcaux.c
+++ b/drivers/usb/serial/qcaux.c
@@ -77,13 +77,6 @@ static struct usb_device_id id_table[] = {
77}; 77};
78MODULE_DEVICE_TABLE(usb, id_table); 78MODULE_DEVICE_TABLE(usb, id_table);
79 79
80static struct usb_driver qcaux_driver = {
81 .name = "qcaux",
82 .probe = usb_serial_probe,
83 .disconnect = usb_serial_disconnect,
84 .id_table = id_table,
85};
86
87static struct usb_serial_driver qcaux_device = { 80static struct usb_serial_driver qcaux_device = {
88 .driver = { 81 .driver = {
89 .owner = THIS_MODULE, 82 .owner = THIS_MODULE,
@@ -97,5 +90,5 @@ static struct usb_serial_driver * const serial_drivers[] = {
97 &qcaux_device, NULL 90 &qcaux_device, NULL
98}; 91};
99 92
100module_usb_serial_driver(qcaux_driver, serial_drivers); 93module_usb_serial_driver(serial_drivers, id_table);
101MODULE_LICENSE("GPL"); 94MODULE_LICENSE("GPL");
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
index 0206b10c9e6e..0d5fe59ebb9e 100644
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -112,32 +112,22 @@ static const struct usb_device_id id_table[] = {
112}; 112};
113MODULE_DEVICE_TABLE(usb, id_table); 113MODULE_DEVICE_TABLE(usb, id_table);
114 114
115static struct usb_driver qcdriver = {
116 .name = "qcserial",
117 .probe = usb_serial_probe,
118 .disconnect = usb_serial_disconnect,
119 .id_table = id_table,
120 .suspend = usb_serial_suspend,
121 .resume = usb_serial_resume,
122 .supports_autosuspend = true,
123};
124
125static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) 115static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
126{ 116{
127 struct usb_wwan_intf_private *data; 117 struct usb_wwan_intf_private *data;
128 struct usb_host_interface *intf = serial->interface->cur_altsetting; 118 struct usb_host_interface *intf = serial->interface->cur_altsetting;
119 struct device *dev = &serial->dev->dev;
129 int retval = -ENODEV; 120 int retval = -ENODEV;
130 __u8 nintf; 121 __u8 nintf;
131 __u8 ifnum; 122 __u8 ifnum;
132 bool is_gobi1k = id->driver_info ? true : false; 123 bool is_gobi1k = id->driver_info ? true : false;
133 124
134 dbg("%s", __func__); 125 dev_dbg(dev, "Is Gobi 1000 = %d\n", is_gobi1k);
135 dbg("Is Gobi 1000 = %d", is_gobi1k);
136 126
137 nintf = serial->dev->actconfig->desc.bNumInterfaces; 127 nintf = serial->dev->actconfig->desc.bNumInterfaces;
138 dbg("Num Interfaces = %d", nintf); 128 dev_dbg(dev, "Num Interfaces = %d\n", nintf);
139 ifnum = intf->desc.bInterfaceNumber; 129 ifnum = intf->desc.bInterfaceNumber;
140 dbg("This Interface = %d", ifnum); 130 dev_dbg(dev, "This Interface = %d\n", ifnum);
141 131
142 data = kzalloc(sizeof(struct usb_wwan_intf_private), 132 data = kzalloc(sizeof(struct usb_wwan_intf_private),
143 GFP_KERNEL); 133 GFP_KERNEL);
@@ -158,7 +148,7 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
158 if (intf->desc.bNumEndpoints == 2 && 148 if (intf->desc.bNumEndpoints == 2 &&
159 usb_endpoint_is_bulk_in(&intf->endpoint[0].desc) && 149 usb_endpoint_is_bulk_in(&intf->endpoint[0].desc) &&
160 usb_endpoint_is_bulk_out(&intf->endpoint[1].desc)) { 150 usb_endpoint_is_bulk_out(&intf->endpoint[1].desc)) {
161 dbg("QDL port found"); 151 dev_dbg(dev, "QDL port found\n");
162 152
163 if (serial->interface->num_altsetting == 1) { 153 if (serial->interface->num_altsetting == 1) {
164 retval = 0; /* Success */ 154 retval = 0; /* Success */
@@ -167,7 +157,7 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
167 157
168 retval = usb_set_interface(serial->dev, ifnum, 1); 158 retval = usb_set_interface(serial->dev, ifnum, 1);
169 if (retval < 0) { 159 if (retval < 0) {
170 dev_err(&serial->dev->dev, 160 dev_err(dev,
171 "Could not set interface, error %d\n", 161 "Could not set interface, error %d\n",
172 retval); 162 retval);
173 retval = -ENODEV; 163 retval = -ENODEV;
@@ -196,20 +186,20 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
196 */ 186 */
197 187
198 if (ifnum == 1 && !is_gobi1k) { 188 if (ifnum == 1 && !is_gobi1k) {
199 dbg("Gobi 2K+ DM/DIAG interface found"); 189 dev_dbg(dev, "Gobi 2K+ DM/DIAG interface found\n");
200 retval = usb_set_interface(serial->dev, ifnum, 0); 190 retval = usb_set_interface(serial->dev, ifnum, 0);
201 if (retval < 0) { 191 if (retval < 0) {
202 dev_err(&serial->dev->dev, 192 dev_err(dev,
203 "Could not set interface, error %d\n", 193 "Could not set interface, error %d\n",
204 retval); 194 retval);
205 retval = -ENODEV; 195 retval = -ENODEV;
206 kfree(data); 196 kfree(data);
207 } 197 }
208 } else if (ifnum == 2) { 198 } else if (ifnum == 2) {
209 dbg("Modem port found"); 199 dev_dbg(dev, "Modem port found\n");
210 retval = usb_set_interface(serial->dev, ifnum, 0); 200 retval = usb_set_interface(serial->dev, ifnum, 0);
211 if (retval < 0) { 201 if (retval < 0) {
212 dev_err(&serial->dev->dev, 202 dev_err(dev,
213 "Could not set interface, error %d\n", 203 "Could not set interface, error %d\n",
214 retval); 204 retval);
215 retval = -ENODEV; 205 retval = -ENODEV;
@@ -221,10 +211,10 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
221 * # echo "\$GPS_START" > /dev/ttyUSBx 211 * # echo "\$GPS_START" > /dev/ttyUSBx
222 * # echo "\$GPS_STOP" > /dev/ttyUSBx 212 * # echo "\$GPS_STOP" > /dev/ttyUSBx
223 */ 213 */
224 dbg("Gobi 2K+ NMEA GPS interface found"); 214 dev_dbg(dev, "Gobi 2K+ NMEA GPS interface found\n");
225 retval = usb_set_interface(serial->dev, ifnum, 0); 215 retval = usb_set_interface(serial->dev, ifnum, 0);
226 if (retval < 0) { 216 if (retval < 0) {
227 dev_err(&serial->dev->dev, 217 dev_err(dev,
228 "Could not set interface, error %d\n", 218 "Could not set interface, error %d\n",
229 retval); 219 retval);
230 retval = -ENODEV; 220 retval = -ENODEV;
@@ -234,8 +224,7 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
234 break; 224 break;
235 225
236 default: 226 default:
237 dev_err(&serial->dev->dev, 227 dev_err(dev, "unknown number of interfaces: %d\n", nintf);
238 "unknown number of interfaces: %d\n", nintf);
239 kfree(data); 228 kfree(data);
240 retval = -ENODEV; 229 retval = -ENODEV;
241 } 230 }
@@ -250,8 +239,6 @@ static void qc_release(struct usb_serial *serial)
250{ 239{
251 struct usb_wwan_intf_private *priv = usb_get_serial_data(serial); 240 struct usb_wwan_intf_private *priv = usb_get_serial_data(serial);
252 241
253 dbg("%s", __func__);
254
255 /* Call usb_wwan release & free the private data allocated in qcprobe */ 242 /* Call usb_wwan release & free the private data allocated in qcprobe */
256 usb_wwan_release(serial); 243 usb_wwan_release(serial);
257 usb_set_serial_data(serial, NULL); 244 usb_set_serial_data(serial, NULL);
@@ -285,7 +272,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
285 &qcdevice, NULL 272 &qcdevice, NULL
286}; 273};
287 274
288module_usb_serial_driver(qcdriver, serial_drivers); 275module_usb_serial_driver(serial_drivers, id_table);
289 276
290MODULE_AUTHOR(DRIVER_AUTHOR); 277MODULE_AUTHOR(DRIVER_AUTHOR);
291MODULE_DESCRIPTION(DRIVER_DESC); 278MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/quatech2.c b/drivers/usb/serial/quatech2.c
new file mode 100644
index 000000000000..8dd88ebe9863
--- /dev/null
+++ b/drivers/usb/serial/quatech2.c
@@ -0,0 +1,1155 @@
1/*
2 * usb-serial driver for Quatech USB 2 devices
3 *
4 * Copyright (C) 2012 Bill Pemberton (wfp5p@virginia.edu)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License version 2
8 * as published by the Free Software Foundation.
9 *
10 *
11 * These devices all have only 1 bulk in and 1 bulk out that is shared
12 * for all serial ports.
13 *
14 */
15
16#include <asm/unaligned.h>
17#include <linux/errno.h>
18#include <linux/init.h>
19#include <linux/slab.h>
20#include <linux/tty.h>
21#include <linux/tty_driver.h>
22#include <linux/tty_flip.h>
23#include <linux/module.h>
24#include <linux/serial.h>
25#include <linux/usb.h>
26#include <linux/usb/serial.h>
27#include <linux/serial_reg.h>
28#include <linux/uaccess.h>
29
30static bool debug;
31
32/* default urb timeout for usb operations */
33#define QT2_USB_TIMEOUT USB_CTRL_SET_TIMEOUT
34
35#define QT_OPEN_CLOSE_CHANNEL 0xca
36#define QT_SET_GET_DEVICE 0xc2
37#define QT_SET_GET_REGISTER 0xc0
38#define QT_GET_SET_PREBUF_TRIG_LVL 0xcc
39#define QT_SET_ATF 0xcd
40#define QT_TRANSFER_IN 0xc0
41#define QT_HW_FLOW_CONTROL_MASK 0xc5
42#define QT_SW_FLOW_CONTROL_MASK 0xc6
43#define QT2_BREAK_CONTROL 0xc8
44#define QT2_GET_SET_UART 0xc1
45#define QT2_FLUSH_DEVICE 0xc4
46#define QT2_GET_SET_QMCR 0xe1
47#define QT2_QMCR_RS232 0x40
48#define QT2_QMCR_RS422 0x10
49
50#define SERIAL_CRTSCTS ((UART_MCR_RTS << 8) | UART_MSR_CTS)
51
52#define SERIAL_EVEN_PARITY (UART_LCR_PARITY | UART_LCR_EPAR)
53
54/* status bytes for the device */
55#define QT2_CONTROL_BYTE 0x1b
56#define QT2_LINE_STATUS 0x00 /* following 1 byte is line status */
57#define QT2_MODEM_STATUS 0x01 /* following 1 byte is modem status */
58#define QT2_XMIT_HOLD 0x02 /* following 2 bytes are ?? */
59#define QT2_CHANGE_PORT 0x03 /* following 1 byte is port to change to */
60#define QT2_REC_FLUSH 0x04 /* no following info */
61#define QT2_XMIT_FLUSH 0x05 /* no following info */
62#define QT2_CONTROL_ESCAPE 0xff /* pass through previous 2 control bytes */
63
64#define MAX_BAUD_RATE 921600
65#define DEFAULT_BAUD_RATE 9600
66
67#define QT2_WRITE_BUFFER_SIZE 512 /* size of write buffer */
68#define QT2_WRITE_CONTROL_SIZE 5 /* control bytes used for a write */
69
70/* Version Information */
71#define DRIVER_VERSION "v0.1"
72#define DRIVER_DESC "Quatech 2nd gen USB to Serial Driver"
73
74#define USB_VENDOR_ID_QUATECH 0x061d
75#define QUATECH_SSU2_100 0xC120 /* RS232 single port */
76#define QUATECH_DSU2_100 0xC140 /* RS232 dual port */
77#define QUATECH_DSU2_400 0xC150 /* RS232/422/485 dual port */
78#define QUATECH_QSU2_100 0xC160 /* RS232 four port */
79#define QUATECH_QSU2_400 0xC170 /* RS232/422/485 four port */
80#define QUATECH_ESU2_100 0xC1A0 /* RS232 eight port */
81#define QUATECH_ESU2_400 0xC180 /* RS232/422/485 eight port */
82
83struct qt2_device_detail {
84 int product_id;
85 int num_ports;
86};
87
88#define QT_DETAILS(prod, ports) \
89 .product_id = (prod), \
90 .num_ports = (ports)
91
92static const struct qt2_device_detail qt2_device_details[] = {
93 {QT_DETAILS(QUATECH_SSU2_100, 1)},
94 {QT_DETAILS(QUATECH_DSU2_400, 2)},
95 {QT_DETAILS(QUATECH_DSU2_100, 2)},
96 {QT_DETAILS(QUATECH_QSU2_400, 4)},
97 {QT_DETAILS(QUATECH_QSU2_100, 4)},
98 {QT_DETAILS(QUATECH_ESU2_400, 8)},
99 {QT_DETAILS(QUATECH_ESU2_100, 8)},
100 {QT_DETAILS(0, 0)} /* Terminating entry */
101};
102
103static const struct usb_device_id id_table[] = {
104 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU2_100)},
105 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_100)},
106 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_400)},
107 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU2_100)},
108 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU2_400)},
109 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_100)},
110 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_400)},
111 {} /* Terminating entry */
112};
113MODULE_DEVICE_TABLE(usb, id_table);
114
115struct qt2_serial_private {
116 unsigned char current_port; /* current port for incoming data */
117
118 struct urb *read_urb; /* shared among all ports */
119 char read_buffer[512];
120};
121
122struct qt2_port_private {
123 bool is_open;
124 u8 device_port;
125
126 spinlock_t urb_lock;
127 bool urb_in_use;
128 struct urb *write_urb;
129 char write_buffer[QT2_WRITE_BUFFER_SIZE];
130
131 spinlock_t lock;
132 u8 shadowLSR;
133 u8 shadowMSR;
134
135 wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */
136 struct async_icount icount;
137
138 struct usb_serial_port *port;
139};
140
141static void qt2_update_lsr(struct usb_serial_port *port, unsigned char *ch);
142static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch);
143static void qt2_write_bulk_callback(struct urb *urb);
144static void qt2_read_bulk_callback(struct urb *urb);
145
146static void qt2_release(struct usb_serial *serial)
147{
148 int i;
149
150 kfree(usb_get_serial_data(serial));
151
152 for (i = 0; i < serial->num_ports; i++)
153 kfree(usb_get_serial_port_data(serial->port[i]));
154}
155
156static inline int calc_baud_divisor(int baudrate)
157{
158 int divisor, rem;
159
160 divisor = MAX_BAUD_RATE / baudrate;
161 rem = MAX_BAUD_RATE % baudrate;
162 /* Round to nearest divisor */
163 if (((rem * 2) >= baudrate) && (baudrate != 110))
164 divisor++;
165
166 return divisor;
167}
168
169static inline int qt2_set_port_config(struct usb_device *dev,
170 unsigned char port_number,
171 u16 baudrate, u16 lcr)
172{
173 int divisor = calc_baud_divisor(baudrate);
174 u16 index = ((u16) (lcr << 8) | (u16) (port_number));
175
176 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
177 QT2_GET_SET_UART, 0x40,
178 divisor, index, NULL, 0, QT2_USB_TIMEOUT);
179}
180
181static inline int qt2_control_msg(struct usb_device *dev,
182 u8 request, u16 data, u16 index)
183{
184 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
185 request, 0x40, data, index,
186 NULL, 0, QT2_USB_TIMEOUT);
187}
188
189static inline int qt2_setdevice(struct usb_device *dev, u8 *data)
190{
191 u16 x = ((u16) (data[1] << 8) | (u16) (data[0]));
192
193 return qt2_control_msg(dev, QT_SET_GET_DEVICE, x, 0);
194}
195
196
197static inline int qt2_getdevice(struct usb_device *dev, u8 *data)
198{
199 return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
200 QT_SET_GET_DEVICE, 0xc0, 0, 0,
201 data, 3, QT2_USB_TIMEOUT);
202}
203
204static inline int qt2_getregister(struct usb_device *dev,
205 u8 uart,
206 u8 reg,
207 u8 *data)
208{
209 return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
210 QT_SET_GET_REGISTER, 0xc0, reg,
211 uart, data, sizeof(*data), QT2_USB_TIMEOUT);
212
213}
214
215static inline int qt2_setregister(struct usb_device *dev,
216 u8 uart, u8 reg, u16 data)
217{
218 u16 value = (data << 8) | reg;
219
220 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
221 QT_SET_GET_REGISTER, 0x40, value, uart,
222 NULL, 0, QT2_USB_TIMEOUT);
223}
224
225static inline int update_mctrl(struct qt2_port_private *port_priv,
226 unsigned int set, unsigned int clear)
227{
228 struct usb_serial_port *port = port_priv->port;
229 struct usb_device *dev = port->serial->dev;
230 unsigned urb_value;
231 int status;
232
233 if (((set | clear) & (TIOCM_DTR | TIOCM_RTS)) == 0) {
234 dev_dbg(&port->dev,
235 "update_mctrl - DTR|RTS not being set|cleared\n");
236 return 0; /* no change */
237 }
238
239 clear &= ~set; /* 'set' takes precedence over 'clear' */
240 urb_value = 0;
241 if (set & TIOCM_DTR)
242 urb_value |= UART_MCR_DTR;
243 if (set & TIOCM_RTS)
244 urb_value |= UART_MCR_RTS;
245
246 status = qt2_setregister(dev, port_priv->device_port, UART_MCR,
247 urb_value);
248 if (status < 0)
249 dev_err(&port->dev,
250 "update_mctrl - Error from MODEM_CTRL urb: %i\n",
251 status);
252 return status;
253}
254
255static int qt2_calc_num_ports(struct usb_serial *serial)
256{
257 struct qt2_device_detail d;
258 int i;
259
260 for (i = 0; d = qt2_device_details[i], d.product_id != 0; i++) {
261 if (d.product_id == le16_to_cpu(serial->dev->descriptor.idProduct))
262 return d.num_ports;
263 }
264
265 /* we didn't recognize the device */
266 dev_err(&serial->dev->dev,
267 "don't know the number of ports, assuming 1\n");
268
269 return 1;
270}
271
272static void qt2_set_termios(struct tty_struct *tty,
273 struct usb_serial_port *port,
274 struct ktermios *old_termios)
275{
276 struct usb_device *dev = port->serial->dev;
277 struct qt2_port_private *port_priv;
278 struct ktermios *termios = tty->termios;
279 u16 baud;
280 unsigned int cflag = termios->c_cflag;
281 u16 new_lcr = 0;
282 int status;
283
284 port_priv = usb_get_serial_port_data(port);
285
286 if (cflag & PARENB) {
287 if (cflag & PARODD)
288 new_lcr |= UART_LCR_PARITY;
289 else
290 new_lcr |= SERIAL_EVEN_PARITY;
291 }
292
293 switch (cflag & CSIZE) {
294 case CS5:
295 new_lcr |= UART_LCR_WLEN5;
296 break;
297 case CS6:
298 new_lcr |= UART_LCR_WLEN6;
299 break;
300 case CS7:
301 new_lcr |= UART_LCR_WLEN7;
302 break;
303 default:
304 case CS8:
305 new_lcr |= UART_LCR_WLEN8;
306 break;
307 }
308
309 baud = tty_get_baud_rate(tty);
310 if (!baud)
311 baud = 9600;
312
313 status = qt2_set_port_config(dev, port_priv->device_port, baud,
314 new_lcr);
315 if (status < 0)
316 dev_err(&port->dev, "%s - qt2_set_port_config failed: %i\n",
317 __func__, status);
318
319 if (cflag & CRTSCTS)
320 status = qt2_control_msg(dev, QT_HW_FLOW_CONTROL_MASK,
321 SERIAL_CRTSCTS,
322 port_priv->device_port);
323 else
324 status = qt2_control_msg(dev, QT_HW_FLOW_CONTROL_MASK,
325 0, port_priv->device_port);
326 if (status < 0)
327 dev_err(&port->dev, "%s - set HW flow control failed: %i\n",
328 __func__, status);
329
330 if (I_IXOFF(tty) || I_IXON(tty)) {
331 u16 x = ((u16) (START_CHAR(tty) << 8) | (u16) (STOP_CHAR(tty)));
332
333 status = qt2_control_msg(dev, QT_SW_FLOW_CONTROL_MASK,
334 x, port_priv->device_port);
335 } else
336 status = qt2_control_msg(dev, QT_SW_FLOW_CONTROL_MASK,
337 0, port_priv->device_port);
338
339 if (status < 0)
340 dev_err(&port->dev, "%s - set SW flow control failed: %i\n",
341 __func__, status);
342
343}
344
345static int qt2_open(struct tty_struct *tty, struct usb_serial_port *port)
346{
347 struct usb_serial *serial;
348 struct qt2_serial_private *serial_priv;
349 struct qt2_port_private *port_priv;
350 u8 *data;
351 u16 device_port;
352 int status;
353 unsigned long flags;
354
355 device_port = (u16) (port->number - port->serial->minor);
356
357 serial = port->serial;
358
359 port_priv = usb_get_serial_port_data(port);
360 serial_priv = usb_get_serial_data(serial);
361
362 /* set the port to RS232 mode */
363 status = qt2_control_msg(serial->dev, QT2_GET_SET_QMCR,
364 QT2_QMCR_RS232, device_port);
365 if (status < 0) {
366 dev_err(&port->dev,
367 "%s failed to set RS232 mode for port %i error %i\n",
368 __func__, device_port, status);
369 return status;
370 }
371
372 data = kzalloc(2, GFP_KERNEL);
373 if (!data)
374 return -ENOMEM;
375
376 /* open the port */
377 status = usb_control_msg(serial->dev,
378 usb_rcvctrlpipe(serial->dev, 0),
379 QT_OPEN_CLOSE_CHANNEL,
380 0xc0, 0,
381 device_port, data, 2, QT2_USB_TIMEOUT);
382
383 if (status < 0) {
384 dev_err(&port->dev, "%s - open port failed %i", __func__,
385 status);
386 kfree(data);
387 return status;
388 }
389
390 spin_lock_irqsave(&port_priv->lock, flags);
391 port_priv->shadowLSR = data[0];
392 port_priv->shadowMSR = data[1];
393 spin_unlock_irqrestore(&port_priv->lock, flags);
394
395 kfree(data);
396
397 /* set to default speed and 8bit word size */
398 status = qt2_set_port_config(serial->dev, device_port,
399 DEFAULT_BAUD_RATE, UART_LCR_WLEN8);
400 if (status < 0) {
401 dev_err(&port->dev,
402 "%s - initial setup failed for port %i (%i)\n",
403 __func__, port->number, device_port);
404 return status;
405 }
406
407 port_priv->is_open = true;
408 port_priv->device_port = (u8) device_port;
409
410 if (tty)
411 qt2_set_termios(tty, port, tty->termios);
412
413 return 0;
414
415}
416
417static void qt2_close(struct usb_serial_port *port)
418{
419 struct usb_serial *serial;
420 struct qt2_serial_private *serial_priv;
421 struct qt2_port_private *port_priv;
422 unsigned long flags;
423 int i;
424
425 serial = port->serial;
426 serial_priv = usb_get_serial_data(serial);
427 port_priv = usb_get_serial_port_data(port);
428
429 port_priv->is_open = false;
430
431 spin_lock_irqsave(&port_priv->urb_lock, flags);
432 if (port_priv->write_urb->status == -EINPROGRESS)
433 usb_kill_urb(port_priv->write_urb);
434 port_priv->urb_in_use = false;
435 spin_unlock_irqrestore(&port_priv->urb_lock, flags);
436
437 /* flush the port transmit buffer */
438 i = usb_control_msg(serial->dev,
439 usb_rcvctrlpipe(serial->dev, 0),
440 QT2_FLUSH_DEVICE, 0x40, 1,
441 port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
442
443 if (i < 0)
444 dev_err(&port->dev, "%s - transmit buffer flush failed: %i\n",
445 __func__, i);
446
447 /* flush the port receive buffer */
448 i = usb_control_msg(serial->dev,
449 usb_rcvctrlpipe(serial->dev, 0),
450 QT2_FLUSH_DEVICE, 0x40, 0,
451 port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
452
453 if (i < 0)
454 dev_err(&port->dev, "%s - receive buffer flush failed: %i\n",
455 __func__, i);
456
457 /* close the port */
458 i = usb_control_msg(serial->dev,
459 usb_sndctrlpipe(serial->dev, 0),
460 QT_OPEN_CLOSE_CHANNEL,
461 0x40, 0,
462 port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
463
464 if (i < 0)
465 dev_err(&port->dev, "%s - close port failed %i\n",
466 __func__, i);
467
468}
469
470static void qt2_disconnect(struct usb_serial *serial)
471{
472 struct qt2_serial_private *serial_priv = usb_get_serial_data(serial);
473 struct qt2_port_private *port_priv;
474 int i;
475
476 if (serial_priv->read_urb->status == -EINPROGRESS)
477 usb_kill_urb(serial_priv->read_urb);
478
479 usb_free_urb(serial_priv->read_urb);
480
481 for (i = 0; i < serial->num_ports; i++) {
482 port_priv = usb_get_serial_port_data(serial->port[i]);
483
484 if (port_priv->write_urb->status == -EINPROGRESS)
485 usb_kill_urb(port_priv->write_urb);
486 usb_free_urb(port_priv->write_urb);
487 }
488}
489
490static int get_serial_info(struct usb_serial_port *port,
491 struct serial_struct __user *retinfo)
492{
493 struct serial_struct tmp;
494
495 if (!retinfo)
496 return -EFAULT;
497
498 memset(&tmp, 0, sizeof(tmp));
499 tmp.line = port->serial->minor;
500 tmp.port = 0;
501 tmp.irq = 0;
502 tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
503 tmp.xmit_fifo_size = port->bulk_out_size;
504 tmp.baud_base = 9600;
505 tmp.close_delay = 5*HZ;
506 tmp.closing_wait = 30*HZ;
507
508 if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
509 return -EFAULT;
510 return 0;
511}
512
513static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
514{
515 struct qt2_port_private *priv = usb_get_serial_port_data(port);
516 struct async_icount prev, cur;
517 unsigned long flags;
518
519 spin_lock_irqsave(&priv->lock, flags);
520 prev = priv->icount;
521 spin_unlock_irqrestore(&priv->lock, flags);
522
523 while (1) {
524 wait_event_interruptible(priv->delta_msr_wait,
525 ((priv->icount.rng != prev.rng) ||
526 (priv->icount.dsr != prev.dsr) ||
527 (priv->icount.dcd != prev.dcd) ||
528 (priv->icount.cts != prev.cts)));
529
530 if (signal_pending(current))
531 return -ERESTARTSYS;
532
533 spin_lock_irqsave(&priv->lock, flags);
534 cur = priv->icount;
535 spin_unlock_irqrestore(&priv->lock, flags);
536
537 if ((prev.rng == cur.rng) &&
538 (prev.dsr == cur.dsr) &&
539 (prev.dcd == cur.dcd) &&
540 (prev.cts == cur.cts))
541 return -EIO;
542
543 if ((arg & TIOCM_RNG && (prev.rng != cur.rng)) ||
544 (arg & TIOCM_DSR && (prev.dsr != cur.dsr)) ||
545 (arg & TIOCM_CD && (prev.dcd != cur.dcd)) ||
546 (arg & TIOCM_CTS && (prev.cts != cur.cts)))
547 return 0;
548 }
549 return 0;
550}
551
552static int qt2_get_icount(struct tty_struct *tty,
553 struct serial_icounter_struct *icount)
554{
555 struct usb_serial_port *port = tty->driver_data;
556 struct qt2_port_private *priv = usb_get_serial_port_data(port);
557 struct async_icount cnow = priv->icount;
558
559 icount->cts = cnow.cts;
560 icount->dsr = cnow.dsr;
561 icount->rng = cnow.rng;
562 icount->dcd = cnow.dcd;
563 icount->rx = cnow.rx;
564 icount->tx = cnow.tx;
565 icount->frame = cnow.frame;
566 icount->overrun = cnow.overrun;
567 icount->parity = cnow.parity;
568 icount->brk = cnow.brk;
569 icount->buf_overrun = cnow.buf_overrun;
570
571 return 0;
572}
573
574static int qt2_ioctl(struct tty_struct *tty,
575 unsigned int cmd, unsigned long arg)
576{
577 struct usb_serial_port *port = tty->driver_data;
578
579 switch (cmd) {
580 case TIOCGSERIAL:
581 return get_serial_info(port,
582 (struct serial_struct __user *)arg);
583
584 case TIOCMIWAIT:
585 return wait_modem_info(port, arg);
586
587 default:
588 break;
589 }
590
591 return -ENOIOCTLCMD;
592}
593
594static void qt2_process_status(struct usb_serial_port *port, unsigned char *ch)
595{
596 switch (*ch) {
597 case QT2_LINE_STATUS:
598 qt2_update_lsr(port, ch + 1);
599 break;
600 case QT2_MODEM_STATUS:
601 qt2_update_msr(port, ch + 1);
602 break;
603 }
604}
605
606/* not needed, kept to document functionality */
607static void qt2_process_xmit_empty(struct usb_serial_port *port,
608 unsigned char *ch)
609{
610 int bytes_written;
611
612 bytes_written = (int)(*ch) + (int)(*(ch + 1) << 4);
613}
614
615/* not needed, kept to document functionality */
616static void qt2_process_flush(struct usb_serial_port *port, unsigned char *ch)
617{
618 return;
619}
620
621void qt2_process_read_urb(struct urb *urb)
622{
623 struct usb_serial *serial;
624 struct qt2_serial_private *serial_priv;
625 struct usb_serial_port *port;
626 struct qt2_port_private *port_priv;
627 struct tty_struct *tty;
628 bool escapeflag;
629 unsigned char *ch;
630 int i;
631 unsigned char newport;
632 int len = urb->actual_length;
633
634 if (!len)
635 return;
636
637 ch = urb->transfer_buffer;
638 tty = NULL;
639 serial = urb->context;
640 serial_priv = usb_get_serial_data(serial);
641 port = serial->port[serial_priv->current_port];
642 port_priv = usb_get_serial_port_data(port);
643
644 if (port_priv->is_open)
645 tty = tty_port_tty_get(&port->port);
646
647 for (i = 0; i < urb->actual_length; i++) {
648 ch = (unsigned char *)urb->transfer_buffer + i;
649 if ((i <= (len - 3)) &&
650 (*ch == QT2_CONTROL_BYTE) &&
651 (*(ch + 1) == QT2_CONTROL_BYTE)) {
652 escapeflag = false;
653 switch (*(ch + 2)) {
654 case QT2_LINE_STATUS:
655 case QT2_MODEM_STATUS:
656 if (i > (len - 4)) {
657 dev_warn(&port->dev,
658 "%s - status message too short\n",
659 __func__);
660 break;
661 }
662 qt2_process_status(port, ch + 2);
663 i += 3;
664 escapeflag = true;
665 break;
666 case QT2_XMIT_HOLD:
667 if (i > (len - 5)) {
668 dev_warn(&port->dev,
669 "%s - xmit_empty message too short\n",
670 __func__);
671 break;
672 }
673 qt2_process_xmit_empty(port, ch + 3);
674 i += 4;
675 escapeflag = true;
676 break;
677 case QT2_CHANGE_PORT:
678 if (i > (len - 4)) {
679 dev_warn(&port->dev,
680 "%s - change_port message too short\n",
681 __func__);
682 break;
683 }
684 if (tty) {
685 tty_flip_buffer_push(tty);
686 tty_kref_put(tty);
687 }
688
689 newport = *(ch + 3);
690
691 if (newport > serial->num_ports) {
692 dev_err(&port->dev,
693 "%s - port change to invalid port: %i\n",
694 __func__, newport);
695 break;
696 }
697
698 serial_priv->current_port = newport;
699 port = serial->port[serial_priv->current_port];
700 port_priv = usb_get_serial_port_data(port);
701 if (port_priv->is_open)
702 tty = tty_port_tty_get(&port->port);
703 else
704 tty = NULL;
705 i += 3;
706 escapeflag = true;
707 break;
708 case QT2_REC_FLUSH:
709 case QT2_XMIT_FLUSH:
710 qt2_process_flush(port, ch + 2);
711 i += 2;
712 escapeflag = true;
713 break;
714 case QT2_CONTROL_ESCAPE:
715 tty_buffer_request_room(tty, 2);
716 tty_insert_flip_string(tty, ch, 2);
717 i += 2;
718 escapeflag = true;
719 break;
720 default:
721 dev_warn(&port->dev,
722 "%s - unsupported command %i\n",
723 __func__, *(ch + 2));
724 break;
725 }
726 if (escapeflag)
727 continue;
728 }
729
730 if (tty) {
731 tty_buffer_request_room(tty, 1);
732 tty_insert_flip_string(tty, ch, 1);
733 }
734 }
735
736 if (tty) {
737 tty_flip_buffer_push(tty);
738 tty_kref_put(tty);
739 }
740}
741
742static void qt2_write_bulk_callback(struct urb *urb)
743{
744 struct usb_serial_port *port;
745 struct qt2_port_private *port_priv;
746
747 port = urb->context;
748 port_priv = usb_get_serial_port_data(port);
749
750 spin_lock(&port_priv->urb_lock);
751
752 port_priv->urb_in_use = false;
753 usb_serial_port_softint(port);
754
755 spin_unlock(&port_priv->urb_lock);
756
757}
758
759static void qt2_read_bulk_callback(struct urb *urb)
760{
761 struct usb_serial *serial = urb->context;
762 int status;
763
764 if (urb->status) {
765 dev_warn(&serial->dev->dev,
766 "%s - non-zero urb status: %i\n", __func__,
767 urb->status);
768 return;
769 }
770
771 qt2_process_read_urb(urb);
772
773 status = usb_submit_urb(urb, GFP_ATOMIC);
774 if (status != 0)
775 dev_err(&serial->dev->dev,
776 "%s - resubmit read urb failed: %i\n",
777 __func__, status);
778}
779
780static int qt2_setup_urbs(struct usb_serial *serial)
781{
782 struct usb_serial_port *port;
783 struct usb_serial_port *port0;
784 struct qt2_serial_private *serial_priv;
785 struct qt2_port_private *port_priv;
786 int pcount, status;
787
788 port0 = serial->port[0];
789
790 serial_priv = usb_get_serial_data(serial);
791 serial_priv->read_urb = usb_alloc_urb(0, GFP_KERNEL);
792 if (!serial_priv->read_urb) {
793 dev_err(&serial->dev->dev, "No free urbs available\n");
794 return -ENOMEM;
795 }
796
797 usb_fill_bulk_urb(serial_priv->read_urb, serial->dev,
798 usb_rcvbulkpipe(serial->dev,
799 port0->bulk_in_endpointAddress),
800 serial_priv->read_buffer,
801 sizeof(serial_priv->read_buffer),
802 qt2_read_bulk_callback, serial);
803
804 /* setup write_urb for each port */
805 for (pcount = 0; pcount < serial->num_ports; pcount++) {
806
807 port = serial->port[pcount];
808 port_priv = usb_get_serial_port_data(port);
809
810 port_priv->write_urb = usb_alloc_urb(0, GFP_KERNEL);
811 if (!port_priv->write_urb) {
812 dev_err(&serial->dev->dev,
813 "failed to alloc write_urb for port %i\n",
814 pcount);
815 return -ENOMEM;
816 }
817
818 usb_fill_bulk_urb(port_priv->write_urb,
819 serial->dev,
820 usb_sndbulkpipe(serial->dev,
821 port0->
822 bulk_out_endpointAddress),
823 port_priv->write_buffer,
824 sizeof(port_priv->write_buffer),
825 qt2_write_bulk_callback, port);
826 }
827
828 status = usb_submit_urb(serial_priv->read_urb, GFP_KERNEL);
829 if (status != 0) {
830 dev_err(&serial->dev->dev,
831 "%s - submit read urb failed %i\n", __func__, status);
832 return status;
833 }
834
835 return 0;
836
837}
838
839static int qt2_attach(struct usb_serial *serial)
840{
841 struct qt2_serial_private *serial_priv;
842 struct qt2_port_private *port_priv;
843 int status, pcount;
844
845 /* power on unit */
846 status = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
847 0xc2, 0x40, 0x8000, 0, NULL, 0,
848 QT2_USB_TIMEOUT);
849 if (status < 0) {
850 dev_err(&serial->dev->dev,
851 "%s - failed to power on unit: %i\n", __func__, status);
852 return status;
853 }
854
855 serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
856 if (!serial_priv) {
857 dev_err(&serial->dev->dev, "%s - Out of memory\n", __func__);
858 return -ENOMEM;
859 }
860
861 usb_set_serial_data(serial, serial_priv);
862
863 for (pcount = 0; pcount < serial->num_ports; pcount++) {
864 port_priv = kzalloc(sizeof(*port_priv), GFP_KERNEL);
865 if (!port_priv) {
866 dev_err(&serial->dev->dev,
867 "%s- kmalloc(%Zd) failed.\n", __func__,
868 sizeof(*port_priv));
869 pcount--;
870 status = -ENOMEM;
871 goto attach_failed;
872 }
873
874 spin_lock_init(&port_priv->lock);
875 spin_lock_init(&port_priv->urb_lock);
876 init_waitqueue_head(&port_priv->delta_msr_wait);
877
878 port_priv->port = serial->port[pcount];
879
880 usb_set_serial_port_data(serial->port[pcount], port_priv);
881 }
882
883 status = qt2_setup_urbs(serial);
884 if (status != 0)
885 goto attach_failed;
886
887 return 0;
888
889attach_failed:
890 for (/* empty */; pcount >= 0; pcount--) {
891 port_priv = usb_get_serial_port_data(serial->port[pcount]);
892 kfree(port_priv);
893 }
894 kfree(serial_priv);
895 return status;
896}
897
898static int qt2_tiocmget(struct tty_struct *tty)
899{
900 struct usb_serial_port *port = tty->driver_data;
901 struct usb_device *dev = port->serial->dev;
902 struct qt2_port_private *port_priv = usb_get_serial_port_data(port);
903 u8 *d;
904 int r;
905
906 d = kzalloc(2, GFP_KERNEL);
907 if (!d)
908 return -ENOMEM;
909
910 r = qt2_getregister(dev, port_priv->device_port, UART_MCR, d);
911 if (r < 0)
912 goto mget_out;
913
914 r = qt2_getregister(dev, port_priv->device_port, UART_MSR, d + 1);
915 if (r < 0)
916 goto mget_out;
917
918 r = (d[0] & UART_MCR_DTR ? TIOCM_DTR : 0) |
919 (d[0] & UART_MCR_RTS ? TIOCM_RTS : 0) |
920 (d[1] & UART_MSR_CTS ? TIOCM_CTS : 0) |
921 (d[1] & UART_MSR_DCD ? TIOCM_CAR : 0) |
922 (d[1] & UART_MSR_RI ? TIOCM_RI : 0) |
923 (d[1] & UART_MSR_DSR ? TIOCM_DSR : 0);
924
925mget_out:
926 kfree(d);
927 return r;
928}
929
930static int qt2_tiocmset(struct tty_struct *tty,
931 unsigned int set, unsigned int clear)
932{
933 struct qt2_port_private *port_priv;
934
935 port_priv = usb_get_serial_port_data(tty->driver_data);
936 return update_mctrl(port_priv, set, clear);
937}
938
939static void qt2_break_ctl(struct tty_struct *tty, int break_state)
940{
941 struct usb_serial_port *port = tty->driver_data;
942 struct qt2_port_private *port_priv;
943 int status;
944 u16 val;
945
946 port_priv = usb_get_serial_port_data(port);
947
948 if (!port_priv->is_open) {
949 dev_err(&port->dev,
950 "%s - port is not open\n", __func__);
951 return;
952 }
953
954 val = (break_state == -1) ? 1 : 0;
955
956 status = qt2_control_msg(port->serial->dev, QT2_BREAK_CONTROL,
957 val, port_priv->device_port);
958 if (status < 0)
959 dev_warn(&port->dev,
960 "%s - failed to send control message: %i\n", __func__,
961 status);
962}
963
964
965
966static void qt2_dtr_rts(struct usb_serial_port *port, int on)
967{
968 struct usb_device *dev = port->serial->dev;
969 struct qt2_port_private *port_priv = usb_get_serial_port_data(port);
970
971 mutex_lock(&port->serial->disc_mutex);
972 if (!port->serial->disconnected) {
973 /* Disable flow control */
974 if (!on && qt2_setregister(dev, port_priv->device_port,
975 UART_MCR, 0) < 0)
976 dev_warn(&port->dev, "error from flowcontrol urb\n");
977 /* drop RTS and DTR */
978 if (on)
979 update_mctrl(port_priv, TIOCM_DTR | TIOCM_RTS, 0);
980 else
981 update_mctrl(port_priv, 0, TIOCM_DTR | TIOCM_RTS);
982 }
983 mutex_unlock(&port->serial->disc_mutex);
984}
985
986static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch)
987{
988 struct qt2_port_private *port_priv;
989 u8 newMSR = (u8) *ch;
990 unsigned long flags;
991
992 port_priv = usb_get_serial_port_data(port);
993
994 spin_lock_irqsave(&port_priv->lock, flags);
995 port_priv->shadowMSR = newMSR;
996 spin_unlock_irqrestore(&port_priv->lock, flags);
997
998 if (newMSR & UART_MSR_ANY_DELTA) {
999 /* update input line counters */
1000 if (newMSR & UART_MSR_DCTS)
1001 port_priv->icount.cts++;
1002
1003 if (newMSR & UART_MSR_DDSR)
1004 port_priv->icount.dsr++;
1005
1006 if (newMSR & UART_MSR_DDCD)
1007 port_priv->icount.dcd++;
1008
1009 if (newMSR & UART_MSR_TERI)
1010 port_priv->icount.rng++;
1011
1012 wake_up_interruptible(&port_priv->delta_msr_wait);
1013 }
1014}
1015
1016static void qt2_update_lsr(struct usb_serial_port *port, unsigned char *ch)
1017{
1018 struct qt2_port_private *port_priv;
1019 struct async_icount *icount;
1020 unsigned long flags;
1021 u8 newLSR = (u8) *ch;
1022
1023 port_priv = usb_get_serial_port_data(port);
1024
1025 if (newLSR & UART_LSR_BI)
1026 newLSR &= (u8) (UART_LSR_OE | UART_LSR_BI);
1027
1028 spin_lock_irqsave(&port_priv->lock, flags);
1029 port_priv->shadowLSR = newLSR;
1030 spin_unlock_irqrestore(&port_priv->lock, flags);
1031
1032 icount = &port_priv->icount;
1033
1034 if (newLSR & UART_LSR_BRK_ERROR_BITS) {
1035
1036 if (newLSR & UART_LSR_BI)
1037 icount->brk++;
1038
1039 if (newLSR & UART_LSR_OE)
1040 icount->overrun++;
1041
1042 if (newLSR & UART_LSR_PE)
1043 icount->parity++;
1044
1045 if (newLSR & UART_LSR_FE)
1046 icount->frame++;
1047 }
1048
1049}
1050
1051static int qt2_write_room(struct tty_struct *tty)
1052{
1053 struct usb_serial_port *port = tty->driver_data;
1054 struct qt2_port_private *port_priv;
1055 unsigned long flags = 0;
1056 int r;
1057
1058 port_priv = usb_get_serial_port_data(port);
1059
1060 spin_lock_irqsave(&port_priv->urb_lock, flags);
1061
1062 if (port_priv->urb_in_use)
1063 r = 0;
1064 else
1065 r = QT2_WRITE_BUFFER_SIZE - QT2_WRITE_CONTROL_SIZE;
1066
1067 spin_unlock_irqrestore(&port_priv->urb_lock, flags);
1068
1069 return r;
1070}
1071
1072static int qt2_write(struct tty_struct *tty,
1073 struct usb_serial_port *port,
1074 const unsigned char *buf, int count)
1075{
1076 struct qt2_port_private *port_priv;
1077 struct urb *write_urb;
1078 unsigned char *data;
1079 unsigned long flags;
1080 int status;
1081 int bytes_out = 0;
1082
1083 port_priv = usb_get_serial_port_data(port);
1084
1085 if (port_priv->write_urb == NULL) {
1086 dev_err(&port->dev, "%s - no output urb\n", __func__);
1087 return 0;
1088 }
1089 write_urb = port_priv->write_urb;
1090
1091 count = min(count, QT2_WRITE_BUFFER_SIZE - QT2_WRITE_CONTROL_SIZE);
1092
1093 data = write_urb->transfer_buffer;
1094 spin_lock_irqsave(&port_priv->urb_lock, flags);
1095 if (port_priv->urb_in_use == true) {
1096 printk(KERN_INFO "qt2_write - urb is in use\n");
1097 goto write_out;
1098 }
1099
1100 *data++ = QT2_CONTROL_BYTE;
1101 *data++ = QT2_CONTROL_BYTE;
1102 *data++ = port_priv->device_port;
1103 put_unaligned_le16(count, data);
1104 data += 2;
1105 memcpy(data, buf, count);
1106
1107 write_urb->transfer_buffer_length = count + QT2_WRITE_CONTROL_SIZE;
1108
1109 status = usb_submit_urb(write_urb, GFP_ATOMIC);
1110 if (status == 0) {
1111 port_priv->urb_in_use = true;
1112 bytes_out += count;
1113 }
1114
1115write_out:
1116 spin_unlock_irqrestore(&port_priv->urb_lock, flags);
1117 return bytes_out;
1118}
1119
1120
1121static struct usb_serial_driver qt2_device = {
1122 .driver = {
1123 .owner = THIS_MODULE,
1124 .name = "quatech-serial",
1125 },
1126 .description = DRIVER_DESC,
1127 .id_table = id_table,
1128 .open = qt2_open,
1129 .close = qt2_close,
1130 .write = qt2_write,
1131 .write_room = qt2_write_room,
1132 .calc_num_ports = qt2_calc_num_ports,
1133 .attach = qt2_attach,
1134 .release = qt2_release,
1135 .disconnect = qt2_disconnect,
1136 .dtr_rts = qt2_dtr_rts,
1137 .break_ctl = qt2_break_ctl,
1138 .tiocmget = qt2_tiocmget,
1139 .tiocmset = qt2_tiocmset,
1140 .get_icount = qt2_get_icount,
1141 .ioctl = qt2_ioctl,
1142 .set_termios = qt2_set_termios,
1143};
1144
1145static struct usb_serial_driver *const serial_drivers[] = {
1146 &qt2_device, NULL
1147};
1148
1149module_usb_serial_driver(serial_drivers, id_table);
1150
1151MODULE_DESCRIPTION(DRIVER_DESC);
1152MODULE_LICENSE("GPL");
1153
1154module_param(debug, bool, S_IRUGO | S_IWUSR);
1155MODULE_PARM_DESC(debug, "Debug enabled or not");
diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c
index ae4ee30c7411..36e9d9fc0618 100644
--- a/drivers/usb/serial/safe_serial.c
+++ b/drivers/usb/serial/safe_serial.c
@@ -151,13 +151,6 @@ static struct usb_device_id id_table[] = {
151 151
152MODULE_DEVICE_TABLE(usb, id_table); 152MODULE_DEVICE_TABLE(usb, id_table);
153 153
154static struct usb_driver safe_driver = {
155 .name = "safe_serial",
156 .probe = usb_serial_probe,
157 .disconnect = usb_serial_disconnect,
158 .id_table = id_table,
159};
160
161static const __u16 crc10_table[256] = { 154static const __u16 crc10_table[256] = {
162 0x000, 0x233, 0x255, 0x066, 0x299, 0x0aa, 0x0cc, 0x2ff, 155 0x000, 0x233, 0x255, 0x066, 0x299, 0x0aa, 0x0cc, 0x2ff,
163 0x301, 0x132, 0x154, 0x367, 0x198, 0x3ab, 0x3cd, 0x1fe, 156 0x301, 0x132, 0x154, 0x367, 0x198, 0x3ab, 0x3cd, 0x1fe,
@@ -339,12 +332,12 @@ static int __init safe_init(void)
339 } 332 }
340 } 333 }
341 334
342 return usb_serial_register_drivers(&safe_driver, serial_drivers); 335 return usb_serial_register_drivers(serial_drivers, KBUILD_MODNAME, id_table);
343} 336}
344 337
345static void __exit safe_exit(void) 338static void __exit safe_exit(void)
346{ 339{
347 usb_serial_deregister_drivers(&safe_driver, serial_drivers); 340 usb_serial_deregister_drivers(serial_drivers);
348} 341}
349 342
350module_init(safe_init); 343module_init(safe_init);
diff --git a/drivers/usb/serial/siemens_mpi.c b/drivers/usb/serial/siemens_mpi.c
index 46c0430fd38b..e4a1787cdbac 100644
--- a/drivers/usb/serial/siemens_mpi.c
+++ b/drivers/usb/serial/siemens_mpi.c
@@ -29,13 +29,6 @@ static const struct usb_device_id id_table[] = {
29}; 29};
30MODULE_DEVICE_TABLE(usb, id_table); 30MODULE_DEVICE_TABLE(usb, id_table);
31 31
32static struct usb_driver siemens_usb_mpi_driver = {
33 .name = "siemens_mpi",
34 .probe = usb_serial_probe,
35 .disconnect = usb_serial_disconnect,
36 .id_table = id_table,
37};
38
39static struct usb_serial_driver siemens_usb_mpi_device = { 32static struct usb_serial_driver siemens_usb_mpi_device = {
40 .driver = { 33 .driver = {
41 .owner = THIS_MODULE, 34 .owner = THIS_MODULE,
@@ -49,7 +42,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
49 &siemens_usb_mpi_device, NULL 42 &siemens_usb_mpi_device, NULL
50}; 43};
51 44
52module_usb_serial_driver(siemens_usb_mpi_driver, serial_drivers); 45module_usb_serial_driver(serial_drivers, id_table);
53 46
54MODULE_AUTHOR(DRIVER_AUTHOR); 47MODULE_AUTHOR(DRIVER_AUTHOR);
55MODULE_DESCRIPTION(DRIVER_DESC); 48MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
index 8c8bf806f6fa..ba54a0a8235c 100644
--- a/drivers/usb/serial/sierra.c
+++ b/drivers/usb/serial/sierra.c
@@ -63,9 +63,7 @@ struct sierra_intf_private {
63 63
64static int sierra_set_power_state(struct usb_device *udev, __u16 swiState) 64static int sierra_set_power_state(struct usb_device *udev, __u16 swiState)
65{ 65{
66 int result; 66 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
67 dev_dbg(&udev->dev, "%s\n", __func__);
68 result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
69 SWIMS_USB_REQUEST_SetPower, /* __u8 request */ 67 SWIMS_USB_REQUEST_SetPower, /* __u8 request */
70 USB_TYPE_VENDOR, /* __u8 request type */ 68 USB_TYPE_VENDOR, /* __u8 request type */
71 swiState, /* __u16 value */ 69 swiState, /* __u16 value */
@@ -73,14 +71,11 @@ static int sierra_set_power_state(struct usb_device *udev, __u16 swiState)
73 NULL, /* void *data */ 71 NULL, /* void *data */
74 0, /* __u16 size */ 72 0, /* __u16 size */
75 USB_CTRL_SET_TIMEOUT); /* int timeout */ 73 USB_CTRL_SET_TIMEOUT); /* int timeout */
76 return result;
77} 74}
78 75
79static int sierra_vsc_set_nmea(struct usb_device *udev, __u16 enable) 76static int sierra_vsc_set_nmea(struct usb_device *udev, __u16 enable)
80{ 77{
81 int result; 78 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
82 dev_dbg(&udev->dev, "%s\n", __func__);
83 result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
84 SWIMS_USB_REQUEST_SetNmea, /* __u8 request */ 79 SWIMS_USB_REQUEST_SetNmea, /* __u8 request */
85 USB_TYPE_VENDOR, /* __u8 request type */ 80 USB_TYPE_VENDOR, /* __u8 request type */
86 enable, /* __u16 value */ 81 enable, /* __u16 value */
@@ -88,7 +83,6 @@ static int sierra_vsc_set_nmea(struct usb_device *udev, __u16 enable)
88 NULL, /* void *data */ 83 NULL, /* void *data */
89 0, /* __u16 size */ 84 0, /* __u16 size */
90 USB_CTRL_SET_TIMEOUT); /* int timeout */ 85 USB_CTRL_SET_TIMEOUT); /* int timeout */
91 return result;
92} 86}
93 87
94static int sierra_calc_num_ports(struct usb_serial *serial) 88static int sierra_calc_num_ports(struct usb_serial *serial)
@@ -96,8 +90,6 @@ static int sierra_calc_num_ports(struct usb_serial *serial)
96 int num_ports = 0; 90 int num_ports = 0;
97 u8 ifnum, numendpoints; 91 u8 ifnum, numendpoints;
98 92
99 dev_dbg(&serial->dev->dev, "%s\n", __func__);
100
101 ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber; 93 ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
102 numendpoints = serial->interface->cur_altsetting->desc.bNumEndpoints; 94 numendpoints = serial->interface->cur_altsetting->desc.bNumEndpoints;
103 95
@@ -150,7 +142,6 @@ static int sierra_calc_interface(struct usb_serial *serial)
150 int interface; 142 int interface;
151 struct usb_interface *p_interface; 143 struct usb_interface *p_interface;
152 struct usb_host_interface *p_host_interface; 144 struct usb_host_interface *p_host_interface;
153 dev_dbg(&serial->dev->dev, "%s\n", __func__);
154 145
155 /* Get the interface structure pointer from the serial struct */ 146 /* Get the interface structure pointer from the serial struct */
156 p_interface = serial->interface; 147 p_interface = serial->interface;
@@ -175,9 +166,8 @@ static int sierra_probe(struct usb_serial *serial,
175 u8 ifnum; 166 u8 ifnum;
176 167
177 udev = serial->dev; 168 udev = serial->dev;
178 dev_dbg(&udev->dev, "%s\n", __func__);
179
180 ifnum = sierra_calc_interface(serial); 169 ifnum = sierra_calc_interface(serial);
170
181 /* 171 /*
182 * If this interface supports more than 1 alternate 172 * If this interface supports more than 1 alternate
183 * select the 2nd one 173 * select the 2nd one
@@ -344,8 +334,6 @@ static int sierra_send_setup(struct usb_serial_port *port)
344 int do_send = 0; 334 int do_send = 0;
345 int retval; 335 int retval;
346 336
347 dev_dbg(&port->dev, "%s\n", __func__);
348
349 portdata = usb_get_serial_port_data(port); 337 portdata = usb_get_serial_port_data(port);
350 338
351 if (portdata->dtr_state) 339 if (portdata->dtr_state)
@@ -393,7 +381,6 @@ static int sierra_send_setup(struct usb_serial_port *port)
393static void sierra_set_termios(struct tty_struct *tty, 381static void sierra_set_termios(struct tty_struct *tty,
394 struct usb_serial_port *port, struct ktermios *old_termios) 382 struct usb_serial_port *port, struct ktermios *old_termios)
395{ 383{
396 dev_dbg(&port->dev, "%s\n", __func__);
397 tty_termios_copy_hw(tty->termios, old_termios); 384 tty_termios_copy_hw(tty->termios, old_termios);
398 sierra_send_setup(port); 385 sierra_send_setup(port);
399} 386}
@@ -404,7 +391,6 @@ static int sierra_tiocmget(struct tty_struct *tty)
404 unsigned int value; 391 unsigned int value;
405 struct sierra_port_private *portdata; 392 struct sierra_port_private *portdata;
406 393
407 dev_dbg(&port->dev, "%s\n", __func__);
408 portdata = usb_get_serial_port_data(port); 394 portdata = usb_get_serial_port_data(port);
409 395
410 value = ((portdata->rts_state) ? TIOCM_RTS : 0) | 396 value = ((portdata->rts_state) ? TIOCM_RTS : 0) |
@@ -441,8 +427,7 @@ static void sierra_release_urb(struct urb *urb)
441{ 427{
442 struct usb_serial_port *port; 428 struct usb_serial_port *port;
443 if (urb) { 429 if (urb) {
444 port = urb->context; 430 port = urb->context;
445 dev_dbg(&port->dev, "%s: %p\n", __func__, urb);
446 kfree(urb->transfer_buffer); 431 kfree(urb->transfer_buffer);
447 usb_free_urb(urb); 432 usb_free_urb(urb);
448 } 433 }
@@ -455,7 +440,6 @@ static void sierra_outdat_callback(struct urb *urb)
455 struct sierra_intf_private *intfdata; 440 struct sierra_intf_private *intfdata;
456 int status = urb->status; 441 int status = urb->status;
457 442
458 dev_dbg(&port->dev, "%s - port %d\n", __func__, port->number);
459 intfdata = port->serial->private; 443 intfdata = port->serial->private;
460 444
461 /* free up the transfer buffer, as usb_free_urb() does not do this */ 445 /* free up the transfer buffer, as usb_free_urb() does not do this */
@@ -598,8 +582,6 @@ static void sierra_indat_callback(struct urb *urb)
598 endpoint = usb_pipeendpoint(urb->pipe); 582 endpoint = usb_pipeendpoint(urb->pipe);
599 port = urb->context; 583 port = urb->context;
600 584
601 dev_dbg(&port->dev, "%s: %p\n", __func__, urb);
602
603 if (status) { 585 if (status) {
604 dev_dbg(&port->dev, "%s: nonzero status: %d on" 586 dev_dbg(&port->dev, "%s: nonzero status: %d on"
605 " endpoint %02x\n", __func__, status, endpoint); 587 " endpoint %02x\n", __func__, status, endpoint);
@@ -697,8 +679,6 @@ static int sierra_write_room(struct tty_struct *tty)
697 struct sierra_port_private *portdata = usb_get_serial_port_data(port); 679 struct sierra_port_private *portdata = usb_get_serial_port_data(port);
698 unsigned long flags; 680 unsigned long flags;
699 681
700 dev_dbg(&port->dev, "%s - port %d\n", __func__, port->number);
701
702 /* try to give a good number back based on if we have any free urbs at 682 /* try to give a good number back based on if we have any free urbs at
703 * this point in time */ 683 * this point in time */
704 spin_lock_irqsave(&portdata->lock, flags); 684 spin_lock_irqsave(&portdata->lock, flags);
@@ -805,8 +785,6 @@ static void sierra_close(struct usb_serial_port *port)
805 struct sierra_port_private *portdata; 785 struct sierra_port_private *portdata;
806 struct sierra_intf_private *intfdata = port->serial->private; 786 struct sierra_intf_private *intfdata = port->serial->private;
807 787
808
809 dev_dbg(&port->dev, "%s\n", __func__);
810 portdata = usb_get_serial_port_data(port); 788 portdata = usb_get_serial_port_data(port);
811 789
812 portdata->rts_state = 0; 790 portdata->rts_state = 0;
@@ -851,8 +829,6 @@ static int sierra_open(struct tty_struct *tty, struct usb_serial_port *port)
851 829
852 portdata = usb_get_serial_port_data(port); 830 portdata = usb_get_serial_port_data(port);
853 831
854 dev_dbg(&port->dev, "%s\n", __func__);
855
856 /* Set some sane defaults */ 832 /* Set some sane defaults */
857 portdata->rts_state = 1; 833 portdata->rts_state = 1;
858 portdata->dtr_state = 1; 834 portdata->dtr_state = 1;
@@ -915,8 +891,6 @@ static int sierra_startup(struct usb_serial *serial)
915 int i; 891 int i;
916 u8 ifnum; 892 u8 ifnum;
917 893
918 dev_dbg(&serial->dev->dev, "%s\n", __func__);
919
920 /* Set Device mode to D0 */ 894 /* Set Device mode to D0 */
921 sierra_set_power_state(serial->dev, 0x0000); 895 sierra_set_power_state(serial->dev, 0x0000);
922 896
@@ -977,8 +951,6 @@ static void sierra_release(struct usb_serial *serial)
977 struct usb_serial_port *port; 951 struct usb_serial_port *port;
978 struct sierra_port_private *portdata; 952 struct sierra_port_private *portdata;
979 953
980 dev_dbg(&serial->dev->dev, "%s\n", __func__);
981
982 for (i = 0; i < serial->num_ports; ++i) { 954 for (i = 0; i < serial->num_ports; ++i) {
983 port = serial->port[i]; 955 port = serial->port[i];
984 if (!port) 956 if (!port)
@@ -1067,29 +1039,11 @@ static int sierra_resume(struct usb_serial *serial)
1067 return ec ? -EIO : 0; 1039 return ec ? -EIO : 0;
1068} 1040}
1069 1041
1070static int sierra_reset_resume(struct usb_interface *intf)
1071{
1072 struct usb_serial *serial = usb_get_intfdata(intf);
1073 dev_err(&serial->dev->dev, "%s\n", __func__);
1074 return usb_serial_resume(intf);
1075}
1076#else 1042#else
1077#define sierra_suspend NULL 1043#define sierra_suspend NULL
1078#define sierra_resume NULL 1044#define sierra_resume NULL
1079#define sierra_reset_resume NULL
1080#endif 1045#endif
1081 1046
1082static struct usb_driver sierra_driver = {
1083 .name = "sierra",
1084 .probe = usb_serial_probe,
1085 .disconnect = usb_serial_disconnect,
1086 .suspend = usb_serial_suspend,
1087 .resume = usb_serial_resume,
1088 .reset_resume = sierra_reset_resume,
1089 .id_table = id_table,
1090 .supports_autosuspend = 1,
1091};
1092
1093static struct usb_serial_driver sierra_device = { 1047static struct usb_serial_driver sierra_device = {
1094 .driver = { 1048 .driver = {
1095 .owner = THIS_MODULE, 1049 .owner = THIS_MODULE,
@@ -1118,7 +1072,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
1118 &sierra_device, NULL 1072 &sierra_device, NULL
1119}; 1073};
1120 1074
1121module_usb_serial_driver(sierra_driver, serial_drivers); 1075module_usb_serial_driver(serial_drivers, id_table);
1122 1076
1123MODULE_AUTHOR(DRIVER_AUTHOR); 1077MODULE_AUTHOR(DRIVER_AUTHOR);
1124MODULE_DESCRIPTION(DRIVER_DESC); 1078MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c
index f06c9a8f3d37..cad608984710 100644
--- a/drivers/usb/serial/spcp8x5.c
+++ b/drivers/usb/serial/spcp8x5.c
@@ -151,14 +151,6 @@ enum spcp8x5_type {
151 SPCP835_TYPE, 151 SPCP835_TYPE,
152}; 152};
153 153
154static struct usb_driver spcp8x5_driver = {
155 .name = "spcp8x5",
156 .probe = usb_serial_probe,
157 .disconnect = usb_serial_disconnect,
158 .id_table = id_table,
159};
160
161
162struct spcp8x5_private { 154struct spcp8x5_private {
163 spinlock_t lock; 155 spinlock_t lock;
164 enum spcp8x5_type type; 156 enum spcp8x5_type type;
@@ -433,7 +425,7 @@ static void spcp8x5_set_termios(struct tty_struct *tty,
433 if (i < 0) 425 if (i < 0)
434 dev_err(&port->dev, "Set UART format %#x failed (error = %d)\n", 426 dev_err(&port->dev, "Set UART format %#x failed (error = %d)\n",
435 uartdata, i); 427 uartdata, i);
436 dbg("0x21:0x40:0:0 %d", i); 428 dev_dbg(&port->dev, "0x21:0x40:0:0 %d\n", i);
437 429
438 if (cflag & CRTSCTS) { 430 if (cflag & CRTSCTS) {
439 /* enable hardware flow control */ 431 /* enable hardware flow control */
@@ -454,8 +446,6 @@ static int spcp8x5_open(struct tty_struct *tty, struct usb_serial_port *port)
454 u8 status = 0x30; 446 u8 status = 0x30;
455 /* status 0x30 means DSR and CTS = 1 other CDC RI and delta = 0 */ 447 /* status 0x30 means DSR and CTS = 1 other CDC RI and delta = 0 */
456 448
457 dbg("%s - port %d", __func__, port->number);
458
459 usb_clear_halt(serial->dev, port->write_urb->pipe); 449 usb_clear_halt(serial->dev, port->write_urb->pipe);
460 usb_clear_halt(serial->dev, port->read_urb->pipe); 450 usb_clear_halt(serial->dev, port->read_urb->pipe);
461 451
@@ -579,15 +569,19 @@ static int spcp8x5_ioctl(struct tty_struct *tty,
579 unsigned int cmd, unsigned long arg) 569 unsigned int cmd, unsigned long arg)
580{ 570{
581 struct usb_serial_port *port = tty->driver_data; 571 struct usb_serial_port *port = tty->driver_data;
582 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd); 572
573 dev_dbg(&port->dev, "%s (%d) cmd = 0x%04x\n", __func__,
574 port->number, cmd);
583 575
584 switch (cmd) { 576 switch (cmd) {
585 case TIOCMIWAIT: 577 case TIOCMIWAIT:
586 dbg("%s (%d) TIOCMIWAIT", __func__, port->number); 578 dev_dbg(&port->dev, "%s (%d) TIOCMIWAIT\n", __func__,
579 port->number);
587 return spcp8x5_wait_modem_info(port, arg); 580 return spcp8x5_wait_modem_info(port, arg);
588 581
589 default: 582 default:
590 dbg("%s not supported = 0x%04x", __func__, cmd); 583 dev_dbg(&port->dev, "%s not supported = 0x%04x", __func__,
584 cmd);
591 break; 585 break;
592 } 586 }
593 587
@@ -666,7 +660,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
666 &spcp8x5_device, NULL 660 &spcp8x5_device, NULL
667}; 661};
668 662
669module_usb_serial_driver(spcp8x5_driver, serial_drivers); 663module_usb_serial_driver(serial_drivers, id_table);
670 664
671MODULE_DESCRIPTION(DRIVER_DESC); 665MODULE_DESCRIPTION(DRIVER_DESC);
672MODULE_VERSION(DRIVER_VERSION); 666MODULE_VERSION(DRIVER_VERSION);
diff --git a/drivers/usb/serial/ssu100.c b/drivers/usb/serial/ssu100.c
index 3cdc8a52de44..3fee23bf0c14 100644
--- a/drivers/usb/serial/ssu100.c
+++ b/drivers/usb/serial/ssu100.c
@@ -59,20 +59,8 @@ static const struct usb_device_id id_table[] = {
59 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU100)}, 59 {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU100)},
60 {} /* Terminating entry */ 60 {} /* Terminating entry */
61}; 61};
62
63MODULE_DEVICE_TABLE(usb, id_table); 62MODULE_DEVICE_TABLE(usb, id_table);
64 63
65
66static struct usb_driver ssu100_driver = {
67 .name = "ssu100",
68 .probe = usb_serial_probe,
69 .disconnect = usb_serial_disconnect,
70 .id_table = id_table,
71 .suspend = usb_serial_suspend,
72 .resume = usb_serial_resume,
73 .supports_autosuspend = 1,
74};
75
76struct ssu100_port_private { 64struct ssu100_port_private {
77 spinlock_t status_lock; 65 spinlock_t status_lock;
78 u8 shadowLSR; 66 u8 shadowLSR;
@@ -85,7 +73,6 @@ static void ssu100_release(struct usb_serial *serial)
85{ 73{
86 struct ssu100_port_private *priv = usb_get_serial_port_data(*serial->port); 74 struct ssu100_port_private *priv = usb_get_serial_port_data(*serial->port);
87 75
88 dbg("%s", __func__);
89 kfree(priv); 76 kfree(priv);
90} 77}
91 78
@@ -171,8 +158,6 @@ static int ssu100_initdevice(struct usb_device *dev)
171 u8 *data; 158 u8 *data;
172 int result = 0; 159 int result = 0;
173 160
174 dbg("%s", __func__);
175
176 data = kzalloc(3, GFP_KERNEL); 161 data = kzalloc(3, GFP_KERNEL);
177 if (!data) 162 if (!data)
178 return -ENOMEM; 163 return -ENOMEM;
@@ -237,8 +222,6 @@ static void ssu100_set_termios(struct tty_struct *tty,
237 u16 urb_value = 0; /* will hold the new flags */ 222 u16 urb_value = 0; /* will hold the new flags */
238 int result; 223 int result;
239 224
240 dbg("%s", __func__);
241
242 if (cflag & PARENB) { 225 if (cflag & PARENB) {
243 if (cflag & PARODD) 226 if (cflag & PARODD)
244 urb_value |= UART_LCR_PARITY; 227 urb_value |= UART_LCR_PARITY;
@@ -312,8 +295,6 @@ static int ssu100_open(struct tty_struct *tty, struct usb_serial_port *port)
312 int result; 295 int result;
313 unsigned long flags; 296 unsigned long flags;
314 297
315 dbg("%s - port %d", __func__, port->number);
316
317 data = kzalloc(2, GFP_KERNEL); 298 data = kzalloc(2, GFP_KERNEL);
318 if (!data) 299 if (!data)
319 return -ENOMEM; 300 return -ENOMEM;
@@ -348,7 +329,6 @@ static int ssu100_open(struct tty_struct *tty, struct usb_serial_port *port)
348 329
349static void ssu100_close(struct usb_serial_port *port) 330static void ssu100_close(struct usb_serial_port *port)
350{ 331{
351 dbg("%s", __func__);
352 usb_serial_generic_close(port); 332 usb_serial_generic_close(port);
353} 333}
354 334
@@ -467,8 +447,6 @@ static int ssu100_attach(struct usb_serial *serial)
467 struct ssu100_port_private *priv; 447 struct ssu100_port_private *priv;
468 struct usb_serial_port *port = *serial->port; 448 struct usb_serial_port *port = *serial->port;
469 449
470 dbg("%s", __func__);
471
472 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 450 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
473 if (!priv) { 451 if (!priv) {
474 dev_err(&port->dev, "%s- kmalloc(%Zd) failed.\n", __func__, 452 dev_err(&port->dev, "%s- kmalloc(%Zd) failed.\n", __func__,
@@ -490,8 +468,6 @@ static int ssu100_tiocmget(struct tty_struct *tty)
490 u8 *d; 468 u8 *d;
491 int r; 469 int r;
492 470
493 dbg("%s\n", __func__);
494
495 d = kzalloc(2, GFP_KERNEL); 471 d = kzalloc(2, GFP_KERNEL);
496 if (!d) 472 if (!d)
497 return -ENOMEM; 473 return -ENOMEM;
@@ -522,7 +498,6 @@ static int ssu100_tiocmset(struct tty_struct *tty,
522 struct usb_serial_port *port = tty->driver_data; 498 struct usb_serial_port *port = tty->driver_data;
523 struct usb_device *dev = port->serial->dev; 499 struct usb_device *dev = port->serial->dev;
524 500
525 dbg("%s\n", __func__);
526 return update_mctrl(dev, set, clear); 501 return update_mctrl(dev, set, clear);
527} 502}
528 503
@@ -530,8 +505,6 @@ static void ssu100_dtr_rts(struct usb_serial_port *port, int on)
530{ 505{
531 struct usb_device *dev = port->serial->dev; 506 struct usb_device *dev = port->serial->dev;
532 507
533 dbg("%s\n", __func__);
534
535 mutex_lock(&port->serial->disc_mutex); 508 mutex_lock(&port->serial->disc_mutex);
536 if (!port->serial->disconnected) { 509 if (!port->serial->disconnected) {
537 /* Disable flow control */ 510 /* Disable flow control */
@@ -618,8 +591,6 @@ static int ssu100_process_packet(struct urb *urb,
618 int i; 591 int i;
619 char *ch; 592 char *ch;
620 593
621 dbg("%s - port %d", __func__, port->number);
622
623 if ((len >= 4) && 594 if ((len >= 4) &&
624 (packet[0] == 0x1b) && (packet[1] == 0x1b) && 595 (packet[0] == 0x1b) && (packet[1] == 0x1b) &&
625 ((packet[2] == 0x00) || (packet[2] == 0x01))) { 596 ((packet[2] == 0x00) || (packet[2] == 0x01))) {
@@ -656,8 +627,6 @@ static void ssu100_process_read_urb(struct urb *urb)
656 struct tty_struct *tty; 627 struct tty_struct *tty;
657 int count; 628 int count;
658 629
659 dbg("%s", __func__);
660
661 tty = tty_port_tty_get(&port->port); 630 tty = tty_port_tty_get(&port->port);
662 if (!tty) 631 if (!tty)
663 return; 632 return;
@@ -695,7 +664,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
695 &ssu100_device, NULL 664 &ssu100_device, NULL
696}; 665};
697 666
698module_usb_serial_driver(ssu100_driver, serial_drivers); 667module_usb_serial_driver(serial_drivers, id_table);
699 668
700MODULE_DESCRIPTION(DRIVER_DESC); 669MODULE_DESCRIPTION(DRIVER_DESC);
701MODULE_LICENSE("GPL"); 670MODULE_LICENSE("GPL");
diff --git a/drivers/usb/serial/symbolserial.c b/drivers/usb/serial/symbolserial.c
index 1a5be136e6cf..e53d2aac35c5 100644
--- a/drivers/usb/serial/symbolserial.c
+++ b/drivers/usb/serial/symbolserial.c
@@ -54,8 +54,6 @@ static void symbol_int_callback(struct urb *urb)
54 int result; 54 int result;
55 int data_length; 55 int data_length;
56 56
57 dbg("%s - port %d", __func__, port->number);
58
59 switch (status) { 57 switch (status) {
60 case 0: 58 case 0:
61 /* success */ 59 /* success */
@@ -64,12 +62,12 @@ static void symbol_int_callback(struct urb *urb)
64 case -ENOENT: 62 case -ENOENT:
65 case -ESHUTDOWN: 63 case -ESHUTDOWN:
66 /* this urb is terminated, clean up */ 64 /* this urb is terminated, clean up */
67 dbg("%s - urb shutting down with status: %d", 65 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
68 __func__, status); 66 __func__, status);
69 return; 67 return;
70 default: 68 default:
71 dbg("%s - nonzero urb status received: %d", 69 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
72 __func__, status); 70 __func__, status);
73 goto exit; 71 goto exit;
74 } 72 }
75 73
@@ -125,8 +123,6 @@ static int symbol_open(struct tty_struct *tty, struct usb_serial_port *port)
125 unsigned long flags; 123 unsigned long flags;
126 int result = 0; 124 int result = 0;
127 125
128 dbg("%s - port %d", __func__, port->number);
129
130 spin_lock_irqsave(&priv->lock, flags); 126 spin_lock_irqsave(&priv->lock, flags);
131 priv->throttled = false; 127 priv->throttled = false;
132 priv->actually_throttled = false; 128 priv->actually_throttled = false;
@@ -150,8 +146,6 @@ static void symbol_close(struct usb_serial_port *port)
150{ 146{
151 struct symbol_private *priv = usb_get_serial_data(port->serial); 147 struct symbol_private *priv = usb_get_serial_data(port->serial);
152 148
153 dbg("%s - port %d", __func__, port->number);
154
155 /* shutdown our urbs */ 149 /* shutdown our urbs */
156 usb_kill_urb(priv->int_urb); 150 usb_kill_urb(priv->int_urb);
157} 151}
@@ -161,7 +155,6 @@ static void symbol_throttle(struct tty_struct *tty)
161 struct usb_serial_port *port = tty->driver_data; 155 struct usb_serial_port *port = tty->driver_data;
162 struct symbol_private *priv = usb_get_serial_data(port->serial); 156 struct symbol_private *priv = usb_get_serial_data(port->serial);
163 157
164 dbg("%s - port %d", __func__, port->number);
165 spin_lock_irq(&priv->lock); 158 spin_lock_irq(&priv->lock);
166 priv->throttled = true; 159 priv->throttled = true;
167 spin_unlock_irq(&priv->lock); 160 spin_unlock_irq(&priv->lock);
@@ -174,8 +167,6 @@ static void symbol_unthrottle(struct tty_struct *tty)
174 int result; 167 int result;
175 bool was_throttled; 168 bool was_throttled;
176 169
177 dbg("%s - port %d", __func__, port->number);
178
179 spin_lock_irq(&priv->lock); 170 spin_lock_irq(&priv->lock);
180 priv->throttled = false; 171 priv->throttled = false;
181 was_throttled = priv->actually_throttled; 172 was_throttled = priv->actually_throttled;
@@ -266,8 +257,6 @@ static void symbol_disconnect(struct usb_serial *serial)
266{ 257{
267 struct symbol_private *priv = usb_get_serial_data(serial); 258 struct symbol_private *priv = usb_get_serial_data(serial);
268 259
269 dbg("%s", __func__);
270
271 usb_kill_urb(priv->int_urb); 260 usb_kill_urb(priv->int_urb);
272 usb_free_urb(priv->int_urb); 261 usb_free_urb(priv->int_urb);
273} 262}
@@ -276,19 +265,10 @@ static void symbol_release(struct usb_serial *serial)
276{ 265{
277 struct symbol_private *priv = usb_get_serial_data(serial); 266 struct symbol_private *priv = usb_get_serial_data(serial);
278 267
279 dbg("%s", __func__);
280
281 kfree(priv->int_buffer); 268 kfree(priv->int_buffer);
282 kfree(priv); 269 kfree(priv);
283} 270}
284 271
285static struct usb_driver symbol_driver = {
286 .name = "symbol",
287 .probe = usb_serial_probe,
288 .disconnect = usb_serial_disconnect,
289 .id_table = id_table,
290};
291
292static struct usb_serial_driver symbol_device = { 272static struct usb_serial_driver symbol_device = {
293 .driver = { 273 .driver = {
294 .owner = THIS_MODULE, 274 .owner = THIS_MODULE,
@@ -309,7 +289,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
309 &symbol_device, NULL 289 &symbol_device, NULL
310}; 290};
311 291
312module_usb_serial_driver(symbol_driver, serial_drivers); 292module_usb_serial_driver(serial_drivers, id_table);
313 293
314MODULE_LICENSE("GPL"); 294MODULE_LICENSE("GPL");
315 295
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index ab74123d658e..a4404f5ad68e 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -165,7 +165,7 @@ static unsigned int product_5052_count;
165/* the array dimension is the number of default entries plus */ 165/* the array dimension is the number of default entries plus */
166/* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */ 166/* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
167/* null entry */ 167/* null entry */
168static struct usb_device_id ti_id_table_3410[14+TI_EXTRA_VID_PID_COUNT+1] = { 168static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
169 { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, 169 { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
170 { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, 170 { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
171 { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, 171 { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -180,6 +180,7 @@ static struct usb_device_id ti_id_table_3410[14+TI_EXTRA_VID_PID_COUNT+1] = {
180 { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) }, 180 { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
181 { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) }, 181 { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
182 { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) }, 182 { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
183 { USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
183}; 184};
184 185
185static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = { 186static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
@@ -189,7 +190,7 @@ static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
189 { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) }, 190 { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
190}; 191};
191 192
192static struct usb_device_id ti_id_table_combined[18+2*TI_EXTRA_VID_PID_COUNT+1] = { 193static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1] = {
193 { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, 194 { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
194 { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, 195 { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
195 { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, 196 { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -208,16 +209,10 @@ static struct usb_device_id ti_id_table_combined[18+2*TI_EXTRA_VID_PID_COUNT+1]
208 { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) }, 209 { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
209 { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) }, 210 { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
210 { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) }, 211 { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
212 { USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
211 { } 213 { }
212}; 214};
213 215
214static struct usb_driver ti_usb_driver = {
215 .name = "ti_usb_3410_5052",
216 .probe = usb_serial_probe,
217 .disconnect = usb_serial_disconnect,
218 .id_table = ti_id_table_combined,
219};
220
221static struct usb_serial_driver ti_1port_device = { 216static struct usb_serial_driver ti_1port_device = {
222 .driver = { 217 .driver = {
223 .owner = THIS_MODULE, 218 .owner = THIS_MODULE,
@@ -344,20 +339,18 @@ static int __init ti_init(void)
344 ti_id_table_combined[c].match_flags = USB_DEVICE_ID_MATCH_DEVICE; 339 ti_id_table_combined[c].match_flags = USB_DEVICE_ID_MATCH_DEVICE;
345 } 340 }
346 341
347 ret = usb_serial_register_drivers(&ti_usb_driver, serial_drivers); 342 ret = usb_serial_register_drivers(serial_drivers, KBUILD_MODNAME, ti_id_table_combined);
348 if (ret == 0) 343 if (ret == 0)
349 printk(KERN_INFO KBUILD_MODNAME ": " TI_DRIVER_VERSION ":" 344 printk(KERN_INFO KBUILD_MODNAME ": " TI_DRIVER_VERSION ":"
350 TI_DRIVER_DESC "\n"); 345 TI_DRIVER_DESC "\n");
351 return ret; 346 return ret;
352} 347}
353 348
354
355static void __exit ti_exit(void) 349static void __exit ti_exit(void)
356{ 350{
357 usb_serial_deregister_drivers(&ti_usb_driver, serial_drivers); 351 usb_serial_deregister_drivers(serial_drivers);
358} 352}
359 353
360
361module_init(ti_init); 354module_init(ti_init);
362module_exit(ti_exit); 355module_exit(ti_exit);
363 356
@@ -394,7 +387,9 @@ static int ti_startup(struct usb_serial *serial)
394 387
395 /* if we have only 1 configuration, download firmware */ 388 /* if we have only 1 configuration, download firmware */
396 if (dev->descriptor.bNumConfigurations == 1) { 389 if (dev->descriptor.bNumConfigurations == 1) {
397 if ((status = ti_download_firmware(tdev)) != 0) 390 status = ti_download_firmware(tdev);
391
392 if (status != 0)
398 goto free_tdev; 393 goto free_tdev;
399 394
400 /* 3410 must be reset, 5052 resets itself */ 395 /* 3410 must be reset, 5052 resets itself */
@@ -463,8 +458,6 @@ static void ti_release(struct usb_serial *serial)
463 struct ti_device *tdev = usb_get_serial_data(serial); 458 struct ti_device *tdev = usb_get_serial_data(serial);
464 struct ti_port *tport; 459 struct ti_port *tport;
465 460
466 dbg("%s", __func__);
467
468 for (i = 0; i < serial->num_ports; ++i) { 461 for (i = 0; i < serial->num_ports; ++i) {
469 tport = usb_get_serial_port_data(serial->port[i]); 462 tport = usb_get_serial_port_data(serial->port[i]);
470 if (tport) { 463 if (tport) {
@@ -489,8 +482,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
489 TI_PIPE_TIMEOUT_ENABLE | 482 TI_PIPE_TIMEOUT_ENABLE |
490 (TI_TRANSFER_TIMEOUT << 2)); 483 (TI_TRANSFER_TIMEOUT << 2));
491 484
492 dbg("%s - port %d", __func__, port->number);
493
494 if (tport == NULL) 485 if (tport == NULL)
495 return -ENODEV; 486 return -ENODEV;
496 487
@@ -631,8 +622,6 @@ static void ti_close(struct usb_serial_port *port)
631 int status; 622 int status;
632 int do_unlock; 623 int do_unlock;
633 624
634 dbg("%s - port %d", __func__, port->number);
635
636 tdev = usb_get_serial_data(port->serial); 625 tdev = usb_get_serial_data(port->serial);
637 tport = usb_get_serial_port_data(port); 626 tport = usb_get_serial_port_data(port);
638 if (tdev == NULL || tport == NULL) 627 if (tdev == NULL || tport == NULL)
@@ -666,8 +655,6 @@ static void ti_close(struct usb_serial_port *port)
666 } 655 }
667 if (do_unlock) 656 if (do_unlock)
668 mutex_unlock(&tdev->td_open_close_lock); 657 mutex_unlock(&tdev->td_open_close_lock);
669
670 dbg("%s - exit", __func__);
671} 658}
672 659
673 660
@@ -676,8 +663,6 @@ static int ti_write(struct tty_struct *tty, struct usb_serial_port *port,
676{ 663{
677 struct ti_port *tport = usb_get_serial_port_data(port); 664 struct ti_port *tport = usb_get_serial_port_data(port);
678 665
679 dbg("%s - port %d", __func__, port->number);
680
681 if (count == 0) { 666 if (count == 0) {
682 dbg("%s - write request of 0 bytes", __func__); 667 dbg("%s - write request of 0 bytes", __func__);
683 return 0; 668 return 0;
@@ -701,8 +686,6 @@ static int ti_write_room(struct tty_struct *tty)
701 int room = 0; 686 int room = 0;
702 unsigned long flags; 687 unsigned long flags;
703 688
704 dbg("%s - port %d", __func__, port->number);
705
706 if (tport == NULL) 689 if (tport == NULL)
707 return 0; 690 return 0;
708 691
@@ -722,8 +705,6 @@ static int ti_chars_in_buffer(struct tty_struct *tty)
722 int chars = 0; 705 int chars = 0;
723 unsigned long flags; 706 unsigned long flags;
724 707
725 dbg("%s - port %d", __func__, port->number);
726
727 if (tport == NULL) 708 if (tport == NULL)
728 return 0; 709 return 0;
729 710
@@ -741,8 +722,6 @@ static void ti_throttle(struct tty_struct *tty)
741 struct usb_serial_port *port = tty->driver_data; 722 struct usb_serial_port *port = tty->driver_data;
742 struct ti_port *tport = usb_get_serial_port_data(port); 723 struct ti_port *tport = usb_get_serial_port_data(port);
743 724
744 dbg("%s - port %d", __func__, port->number);
745
746 if (tport == NULL) 725 if (tport == NULL)
747 return; 726 return;
748 727
@@ -758,8 +737,6 @@ static void ti_unthrottle(struct tty_struct *tty)
758 struct ti_port *tport = usb_get_serial_port_data(port); 737 struct ti_port *tport = usb_get_serial_port_data(port);
759 int status; 738 int status;
760 739
761 dbg("%s - port %d", __func__, port->number);
762
763 if (tport == NULL) 740 if (tport == NULL)
764 return; 741 return;
765 742
@@ -854,8 +831,6 @@ static void ti_set_termios(struct tty_struct *tty,
854 int port_number = port->number - port->serial->minor; 831 int port_number = port->number - port->serial->minor;
855 unsigned int mcr; 832 unsigned int mcr;
856 833
857 dbg("%s - port %d", __func__, port->number);
858
859 cflag = tty->termios->c_cflag; 834 cflag = tty->termios->c_cflag;
860 iflag = tty->termios->c_iflag; 835 iflag = tty->termios->c_iflag;
861 836
@@ -988,8 +963,6 @@ static int ti_tiocmget(struct tty_struct *tty)
988 unsigned int mcr; 963 unsigned int mcr;
989 unsigned long flags; 964 unsigned long flags;
990 965
991 dbg("%s - port %d", __func__, port->number);
992
993 if (tport == NULL) 966 if (tport == NULL)
994 return -ENODEV; 967 return -ENODEV;
995 968
@@ -1020,8 +993,6 @@ static int ti_tiocmset(struct tty_struct *tty,
1020 unsigned int mcr; 993 unsigned int mcr;
1021 unsigned long flags; 994 unsigned long flags;
1022 995
1023 dbg("%s - port %d", __func__, port->number);
1024
1025 if (tport == NULL) 996 if (tport == NULL)
1026 return -ENODEV; 997 return -ENODEV;
1027 998
@@ -1084,8 +1055,6 @@ static void ti_interrupt_callback(struct urb *urb)
1084 int retval; 1055 int retval;
1085 __u8 msr; 1056 __u8 msr;
1086 1057
1087 dbg("%s", __func__);
1088
1089 switch (status) { 1058 switch (status) {
1090 case 0: 1059 case 0:
1091 break; 1060 break;
@@ -1165,8 +1134,6 @@ static void ti_bulk_in_callback(struct urb *urb)
1165 int retval = 0; 1134 int retval = 0;
1166 struct tty_struct *tty; 1135 struct tty_struct *tty;
1167 1136
1168 dbg("%s", __func__);
1169
1170 switch (status) { 1137 switch (status) {
1171 case 0: 1138 case 0:
1172 break; 1139 break;
@@ -1233,8 +1200,6 @@ static void ti_bulk_out_callback(struct urb *urb)
1233 struct usb_serial_port *port = tport->tp_port; 1200 struct usb_serial_port *port = tport->tp_port;
1234 int status = urb->status; 1201 int status = urb->status;
1235 1202
1236 dbg("%s - port %d", __func__, port->number);
1237
1238 tport->tp_write_urb_in_use = 0; 1203 tport->tp_write_urb_in_use = 0;
1239 1204
1240 switch (status) { 1205 switch (status) {
@@ -1287,9 +1252,6 @@ static void ti_send(struct ti_port *tport)
1287 struct tty_struct *tty = tty_port_tty_get(&port->port); /* FIXME */ 1252 struct tty_struct *tty = tty_port_tty_get(&port->port); /* FIXME */
1288 unsigned long flags; 1253 unsigned long flags;
1289 1254
1290
1291 dbg("%s - port %d", __func__, port->number);
1292
1293 spin_lock_irqsave(&tport->tp_lock, flags); 1255 spin_lock_irqsave(&tport->tp_lock, flags);
1294 1256
1295 if (tport->tp_write_urb_in_use) 1257 if (tport->tp_write_urb_in_use)
@@ -1366,8 +1328,6 @@ static int ti_get_lsr(struct ti_port *tport)
1366 int port_number = port->number - port->serial->minor; 1328 int port_number = port->number - port->serial->minor;
1367 struct ti_port_status *data; 1329 struct ti_port_status *data;
1368 1330
1369 dbg("%s - port %d", __func__, port->number);
1370
1371 size = sizeof(struct ti_port_status); 1331 size = sizeof(struct ti_port_status);
1372 data = kmalloc(size, GFP_KERNEL); 1332 data = kmalloc(size, GFP_KERNEL);
1373 if (!data) { 1333 if (!data) {
@@ -1480,8 +1440,6 @@ static void ti_drain(struct ti_port *tport, unsigned long timeout, int flush)
1480 struct usb_serial_port *port = tport->tp_port; 1440 struct usb_serial_port *port = tport->tp_port;
1481 wait_queue_t wait; 1441 wait_queue_t wait;
1482 1442
1483 dbg("%s - port %d", __func__, port->number);
1484
1485 spin_lock_irq(&tport->tp_lock); 1443 spin_lock_irq(&tport->tp_lock);
1486 1444
1487 /* wait for data to drain from the buffer */ 1445 /* wait for data to drain from the buffer */
@@ -1679,11 +1637,12 @@ static int ti_download_firmware(struct ti_device *tdev)
1679 const struct firmware *fw_p; 1637 const struct firmware *fw_p;
1680 char buf[32]; 1638 char buf[32];
1681 1639
1682 dbg("%s\n", __func__);
1683 /* try ID specific firmware first, then try generic firmware */ 1640 /* try ID specific firmware first, then try generic firmware */
1684 sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor, 1641 sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor,
1685 dev->descriptor.idProduct); 1642 dev->descriptor.idProduct);
1686 if ((status = request_firmware(&fw_p, buf, &dev->dev)) != 0) { 1643 status = request_firmware(&fw_p, buf, &dev->dev);
1644
1645 if (status != 0) {
1687 buf[0] = '\0'; 1646 buf[0] = '\0';
1688 if (dev->descriptor.idVendor == MTS_VENDOR_ID) { 1647 if (dev->descriptor.idVendor == MTS_VENDOR_ID) {
1689 switch (dev->descriptor.idProduct) { 1648 switch (dev->descriptor.idProduct) {
diff --git a/drivers/usb/serial/ti_usb_3410_5052.h b/drivers/usb/serial/ti_usb_3410_5052.h
index f140f1b9d5c0..b353e7e3d480 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.h
+++ b/drivers/usb/serial/ti_usb_3410_5052.h
@@ -37,6 +37,7 @@
37#define TI_5152_BOOT_PRODUCT_ID 0x5152 /* no EEPROM, no firmware */ 37#define TI_5152_BOOT_PRODUCT_ID 0x5152 /* no EEPROM, no firmware */
38#define TI_5052_EEPROM_PRODUCT_ID 0x505A /* EEPROM, no firmware */ 38#define TI_5052_EEPROM_PRODUCT_ID 0x505A /* EEPROM, no firmware */
39#define TI_5052_FIRMWARE_PRODUCT_ID 0x505F /* firmware is running */ 39#define TI_5052_FIRMWARE_PRODUCT_ID 0x505F /* firmware is running */
40#define FRI2_PRODUCT_ID 0x5053 /* Fish River Island II */
40 41
41/* Multi-Tech vendor and product ids */ 42/* Multi-Tech vendor and product ids */
42#define MTS_VENDOR_ID 0x06E0 43#define MTS_VENDOR_ID 0x06E0
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index 97355a15bbea..6a1b609a0d94 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * USB Serial Converter driver 2 * USB Serial Converter driver
3 * 3 *
4 * Copyright (C) 1999 - 2005 Greg Kroah-Hartman (greg@kroah.com) 4 * Copyright (C) 1999 - 2012 Greg Kroah-Hartman (greg@kroah.com)
5 * Copyright (C) 2000 Peter Berger (pberger@brimson.com) 5 * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
6 * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com) 6 * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
7 * 7 *
@@ -43,17 +43,6 @@
43#define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/" 43#define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/"
44#define DRIVER_DESC "USB Serial Driver core" 44#define DRIVER_DESC "USB Serial Driver core"
45 45
46/* Driver structure we register with the USB core */
47static struct usb_driver usb_serial_driver = {
48 .name = "usbserial",
49 .probe = usb_serial_probe,
50 .disconnect = usb_serial_disconnect,
51 .suspend = usb_serial_suspend,
52 .resume = usb_serial_resume,
53 .no_dynamic_id = 1,
54 .supports_autosuspend = 1,
55};
56
57/* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead 46/* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
58 the MODULE_DEVICE_TABLE declarations in each serial driver 47 the MODULE_DEVICE_TABLE declarations in each serial driver
59 cause the "hotplug" program to pull in whatever module is necessary 48 cause the "hotplug" program to pull in whatever module is necessary
@@ -710,7 +699,7 @@ static const struct tty_port_operations serial_port_ops = {
710 .shutdown = serial_down, 699 .shutdown = serial_down,
711}; 700};
712 701
713int usb_serial_probe(struct usb_interface *interface, 702static int usb_serial_probe(struct usb_interface *interface,
714 const struct usb_device_id *id) 703 const struct usb_device_id *id)
715{ 704{
716 struct usb_device *dev = interface_to_usbdev(interface); 705 struct usb_device *dev = interface_to_usbdev(interface);
@@ -856,6 +845,8 @@ int usb_serial_probe(struct usb_interface *interface,
856 module_put(type->driver.owner); 845 module_put(type->driver.owner);
857 return -EIO; 846 return -EIO;
858 } 847 }
848 dev_info(&interface->dev, "The \"generic\" usb-serial driver is only for testing and one-off prototypes.\n");
849 dev_info(&interface->dev, "Tell linux-usb@vger.kernel.org to add your device to a proper driver.\n");
859 } 850 }
860#endif 851#endif
861 if (!num_ports) { 852 if (!num_ports) {
@@ -1043,6 +1034,8 @@ int usb_serial_probe(struct usb_interface *interface,
1043 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined"); 1034 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1044 } 1035 }
1045 1036
1037 usb_set_intfdata(interface, serial);
1038
1046 /* if this device type has an attach function, call it */ 1039 /* if this device type has an attach function, call it */
1047 if (type->attach) { 1040 if (type->attach) {
1048 retval = type->attach(serial); 1041 retval = type->attach(serial);
@@ -1087,10 +1080,7 @@ int usb_serial_probe(struct usb_interface *interface,
1087 serial->disconnected = 0; 1080 serial->disconnected = 0;
1088 1081
1089 usb_serial_console_init(debug, minor); 1082 usb_serial_console_init(debug, minor);
1090
1091exit: 1083exit:
1092 /* success */
1093 usb_set_intfdata(interface, serial);
1094 module_put(type->driver.owner); 1084 module_put(type->driver.owner);
1095 return 0; 1085 return 0;
1096 1086
@@ -1099,9 +1089,8 @@ probe_error:
1099 module_put(type->driver.owner); 1089 module_put(type->driver.owner);
1100 return -EIO; 1090 return -EIO;
1101} 1091}
1102EXPORT_SYMBOL_GPL(usb_serial_probe);
1103 1092
1104void usb_serial_disconnect(struct usb_interface *interface) 1093static void usb_serial_disconnect(struct usb_interface *interface)
1105{ 1094{
1106 int i; 1095 int i;
1107 struct usb_serial *serial = usb_get_intfdata(interface); 1096 struct usb_serial *serial = usb_get_intfdata(interface);
@@ -1112,7 +1101,6 @@ void usb_serial_disconnect(struct usb_interface *interface)
1112 dbg("%s", __func__); 1101 dbg("%s", __func__);
1113 1102
1114 mutex_lock(&serial->disc_mutex); 1103 mutex_lock(&serial->disc_mutex);
1115 usb_set_intfdata(interface, NULL);
1116 /* must set a flag, to signal subdrivers */ 1104 /* must set a flag, to signal subdrivers */
1117 serial->disconnected = 1; 1105 serial->disconnected = 1;
1118 mutex_unlock(&serial->disc_mutex); 1106 mutex_unlock(&serial->disc_mutex);
@@ -1137,7 +1125,6 @@ void usb_serial_disconnect(struct usb_interface *interface)
1137 usb_serial_put(serial); 1125 usb_serial_put(serial);
1138 dev_info(dev, "device disconnected\n"); 1126 dev_info(dev, "device disconnected\n");
1139} 1127}
1140EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1141 1128
1142int usb_serial_suspend(struct usb_interface *intf, pm_message_t message) 1129int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1143{ 1130{
@@ -1181,6 +1168,22 @@ int usb_serial_resume(struct usb_interface *intf)
1181} 1168}
1182EXPORT_SYMBOL(usb_serial_resume); 1169EXPORT_SYMBOL(usb_serial_resume);
1183 1170
1171static int usb_serial_reset_resume(struct usb_interface *intf)
1172{
1173 struct usb_serial *serial = usb_get_intfdata(intf);
1174 int rv;
1175
1176 serial->suspending = 0;
1177 if (serial->type->reset_resume)
1178 rv = serial->type->reset_resume(serial);
1179 else {
1180 rv = -EOPNOTSUPP;
1181 intf->needs_binding = 1;
1182 }
1183
1184 return rv;
1185}
1186
1184static const struct tty_operations serial_ops = { 1187static const struct tty_operations serial_ops = {
1185 .open = serial_open, 1188 .open = serial_open,
1186 .close = serial_close, 1189 .close = serial_close,
@@ -1204,6 +1207,17 @@ static const struct tty_operations serial_ops = {
1204 1207
1205struct tty_driver *usb_serial_tty_driver; 1208struct tty_driver *usb_serial_tty_driver;
1206 1209
1210/* Driver structure we register with the USB core */
1211static struct usb_driver usb_serial_driver = {
1212 .name = "usbserial",
1213 .probe = usb_serial_probe,
1214 .disconnect = usb_serial_disconnect,
1215 .suspend = usb_serial_suspend,
1216 .resume = usb_serial_resume,
1217 .no_dynamic_id = 1,
1218 .supports_autosuspend = 1,
1219};
1220
1207static int __init usb_serial_init(void) 1221static int __init usb_serial_init(void)
1208{ 1222{
1209 int i; 1223 int i;
@@ -1338,7 +1352,6 @@ static int usb_serial_register(struct usb_serial_driver *driver)
1338 driver->description); 1352 driver->description);
1339 return -EINVAL; 1353 return -EINVAL;
1340 } 1354 }
1341 driver->usb_driver->supports_autosuspend = 1;
1342 1355
1343 /* Add this device to our list of devices */ 1356 /* Add this device to our list of devices */
1344 mutex_lock(&table_lock); 1357 mutex_lock(&table_lock);
@@ -1369,18 +1382,19 @@ static void usb_serial_deregister(struct usb_serial_driver *device)
1369 1382
1370/** 1383/**
1371 * usb_serial_register_drivers - register drivers for a usb-serial module 1384 * usb_serial_register_drivers - register drivers for a usb-serial module
1372 * @udriver: usb_driver used for matching devices/interfaces
1373 * @serial_drivers: NULL-terminated array of pointers to drivers to be registered 1385 * @serial_drivers: NULL-terminated array of pointers to drivers to be registered
1386 * @name: name of the usb_driver for this set of @serial_drivers
1387 * @id_table: list of all devices this @serial_drivers set binds to
1374 * 1388 *
1375 * Registers @udriver and all the drivers in the @serial_drivers array. 1389 * Registers all the drivers in the @serial_drivers array, and dynamically
1376 * Automatically fills in the .no_dynamic_id field in @udriver and 1390 * creates a struct usb_driver with the name @name and id_table of @id_table.
1377 * the .usb_driver field in each serial driver.
1378 */ 1391 */
1379int usb_serial_register_drivers(struct usb_driver *udriver, 1392int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
1380 struct usb_serial_driver * const serial_drivers[]) 1393 const char *name,
1394 const struct usb_device_id *id_table)
1381{ 1395{
1382 int rc; 1396 int rc;
1383 const struct usb_device_id *saved_id_table; 1397 struct usb_driver *udriver;
1384 struct usb_serial_driver * const *sd; 1398 struct usb_serial_driver * const *sd;
1385 1399
1386 /* 1400 /*
@@ -1391,12 +1405,30 @@ int usb_serial_register_drivers(struct usb_driver *udriver,
1391 * Performance hack: We don't want udriver to be probed until 1405 * Performance hack: We don't want udriver to be probed until
1392 * the serial drivers are registered, because the probe would 1406 * the serial drivers are registered, because the probe would
1393 * simply fail for lack of a matching serial driver. 1407 * simply fail for lack of a matching serial driver.
1394 * Therefore save off udriver's id_table until we are all set. 1408 * So we leave udriver's id_table set to NULL until we are all set.
1409 *
1410 * Suspend/resume support is implemented in the usb-serial core,
1411 * so fill in the PM-related fields in udriver.
1395 */ 1412 */
1396 saved_id_table = udriver->id_table; 1413 udriver = kzalloc(sizeof(*udriver), GFP_KERNEL);
1397 udriver->id_table = NULL; 1414 if (!udriver)
1415 return -ENOMEM;
1398 1416
1417 udriver->name = name;
1399 udriver->no_dynamic_id = 1; 1418 udriver->no_dynamic_id = 1;
1419 udriver->supports_autosuspend = 1;
1420 udriver->suspend = usb_serial_suspend;
1421 udriver->resume = usb_serial_resume;
1422 udriver->probe = usb_serial_probe;
1423 udriver->disconnect = usb_serial_disconnect;
1424
1425 /* we only set the reset_resume field if the serial_driver has one */
1426 for (sd = serial_drivers; *sd; ++sd) {
1427 if ((*sd)->reset_resume)
1428 udriver->reset_resume = usb_serial_reset_resume;
1429 break;
1430 }
1431
1400 rc = usb_register(udriver); 1432 rc = usb_register(udriver);
1401 if (rc) 1433 if (rc)
1402 return rc; 1434 return rc;
@@ -1408,8 +1440,8 @@ int usb_serial_register_drivers(struct usb_driver *udriver,
1408 goto failed; 1440 goto failed;
1409 } 1441 }
1410 1442
1411 /* Now restore udriver's id_table and look for matches */ 1443 /* Now set udriver's id_table and look for matches */
1412 udriver->id_table = saved_id_table; 1444 udriver->id_table = id_table;
1413 rc = driver_attach(&udriver->drvwrap.driver); 1445 rc = driver_attach(&udriver->drvwrap.driver);
1414 return 0; 1446 return 0;
1415 1447
@@ -1423,17 +1455,20 @@ EXPORT_SYMBOL_GPL(usb_serial_register_drivers);
1423 1455
1424/** 1456/**
1425 * usb_serial_deregister_drivers - deregister drivers for a usb-serial module 1457 * usb_serial_deregister_drivers - deregister drivers for a usb-serial module
1426 * @udriver: usb_driver to unregister
1427 * @serial_drivers: NULL-terminated array of pointers to drivers to be deregistered 1458 * @serial_drivers: NULL-terminated array of pointers to drivers to be deregistered
1428 * 1459 *
1429 * Deregisters @udriver and all the drivers in the @serial_drivers array. 1460 * Deregisters all the drivers in the @serial_drivers array and deregisters and
1461 * frees the struct usb_driver that was created by the call to
1462 * usb_serial_register_drivers().
1430 */ 1463 */
1431void usb_serial_deregister_drivers(struct usb_driver *udriver, 1464void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[])
1432 struct usb_serial_driver * const serial_drivers[])
1433{ 1465{
1466 struct usb_driver *udriver = (*serial_drivers)->usb_driver;
1467
1434 for (; *serial_drivers; ++serial_drivers) 1468 for (; *serial_drivers; ++serial_drivers)
1435 usb_serial_deregister(*serial_drivers); 1469 usb_serial_deregister(*serial_drivers);
1436 usb_deregister(udriver); 1470 usb_deregister(udriver);
1471 kfree(udriver);
1437} 1472}
1438EXPORT_SYMBOL_GPL(usb_serial_deregister_drivers); 1473EXPORT_SYMBOL_GPL(usb_serial_deregister_drivers);
1439 1474
diff --git a/drivers/usb/serial/usb_debug.c b/drivers/usb/serial/usb_debug.c
index e3e8995a4739..5760f97ee508 100644
--- a/drivers/usb/serial/usb_debug.c
+++ b/drivers/usb/serial/usb_debug.c
@@ -35,13 +35,6 @@ static const struct usb_device_id id_table[] = {
35}; 35};
36MODULE_DEVICE_TABLE(usb, id_table); 36MODULE_DEVICE_TABLE(usb, id_table);
37 37
38static struct usb_driver debug_driver = {
39 .name = "debug",
40 .probe = usb_serial_probe,
41 .disconnect = usb_serial_disconnect,
42 .id_table = id_table,
43};
44
45/* This HW really does not support a serial break, so one will be 38/* This HW really does not support a serial break, so one will be
46 * emulated when ever the break state is set to true. 39 * emulated when ever the break state is set to true.
47 */ 40 */
@@ -83,5 +76,5 @@ static struct usb_serial_driver * const serial_drivers[] = {
83 &debug_device, NULL 76 &debug_device, NULL
84}; 77};
85 78
86module_usb_serial_driver(debug_driver, serial_drivers); 79module_usb_serial_driver(serial_drivers, id_table);
87MODULE_LICENSE("GPL"); 80MODULE_LICENSE("GPL");
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index c88657dd31c8..f35971dff4a5 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -43,11 +43,8 @@ void usb_wwan_dtr_rts(struct usb_serial_port *port, int on)
43{ 43{
44 struct usb_serial *serial = port->serial; 44 struct usb_serial *serial = port->serial;
45 struct usb_wwan_port_private *portdata; 45 struct usb_wwan_port_private *portdata;
46
47 struct usb_wwan_intf_private *intfdata; 46 struct usb_wwan_intf_private *intfdata;
48 47
49 dbg("%s", __func__);
50
51 intfdata = port->serial->private; 48 intfdata = port->serial->private;
52 49
53 if (!intfdata->send_setup) 50 if (!intfdata->send_setup)
@@ -69,8 +66,6 @@ void usb_wwan_set_termios(struct tty_struct *tty,
69{ 66{
70 struct usb_wwan_intf_private *intfdata = port->serial->private; 67 struct usb_wwan_intf_private *intfdata = port->serial->private;
71 68
72 dbg("%s", __func__);
73
74 /* Doesn't support option setting */ 69 /* Doesn't support option setting */
75 tty_termios_copy_hw(tty->termios, old_termios); 70 tty_termios_copy_hw(tty->termios, old_termios);
76 71
@@ -286,8 +281,6 @@ static void usb_wwan_indat_callback(struct urb *urb)
286 unsigned char *data = urb->transfer_buffer; 281 unsigned char *data = urb->transfer_buffer;
287 int status = urb->status; 282 int status = urb->status;
288 283
289 dbg("%s: %p", __func__, urb);
290
291 endpoint = usb_pipeendpoint(urb->pipe); 284 endpoint = usb_pipeendpoint(urb->pipe);
292 port = urb->context; 285 port = urb->context;
293 286
@@ -307,20 +300,17 @@ static void usb_wwan_indat_callback(struct urb *urb)
307 } 300 }
308 301
309 /* Resubmit urb so we continue receiving */ 302 /* Resubmit urb so we continue receiving */
310 if (status != -ESHUTDOWN) { 303 err = usb_submit_urb(urb, GFP_ATOMIC);
311 err = usb_submit_urb(urb, GFP_ATOMIC); 304 if (err) {
312 if (err) { 305 if (err != -EPERM) {
313 if (err != -EPERM) { 306 printk(KERN_ERR "%s: resubmit read urb failed. "
314 printk(KERN_ERR "%s: resubmit read urb failed. " 307 "(%d)", __func__, err);
315 "(%d)", __func__, err); 308 /* busy also in error unless we are killed */
316 /* busy also in error unless we are killed */
317 usb_mark_last_busy(port->serial->dev);
318 }
319 } else {
320 usb_mark_last_busy(port->serial->dev); 309 usb_mark_last_busy(port->serial->dev);
321 } 310 }
311 } else {
312 usb_mark_last_busy(port->serial->dev);
322 } 313 }
323
324 } 314 }
325} 315}
326 316
@@ -331,8 +321,6 @@ static void usb_wwan_outdat_callback(struct urb *urb)
331 struct usb_wwan_intf_private *intfdata; 321 struct usb_wwan_intf_private *intfdata;
332 int i; 322 int i;
333 323
334 dbg("%s", __func__);
335
336 port = urb->context; 324 port = urb->context;
337 intfdata = port->serial->private; 325 intfdata = port->serial->private;
338 326
@@ -406,8 +394,6 @@ int usb_wwan_open(struct tty_struct *tty, struct usb_serial_port *port)
406 portdata = usb_get_serial_port_data(port); 394 portdata = usb_get_serial_port_data(port);
407 intfdata = serial->private; 395 intfdata = serial->private;
408 396
409 dbg("%s", __func__);
410
411 /* Start reading from the IN endpoint */ 397 /* Start reading from the IN endpoint */
412 for (i = 0; i < N_IN_URB; i++) { 398 for (i = 0; i < N_IN_URB; i++) {
413 urb = portdata->in_urbs[i]; 399 urb = portdata->in_urbs[i];
@@ -441,7 +427,6 @@ void usb_wwan_close(struct usb_serial_port *port)
441 struct usb_wwan_port_private *portdata; 427 struct usb_wwan_port_private *portdata;
442 struct usb_wwan_intf_private *intfdata = port->serial->private; 428 struct usb_wwan_intf_private *intfdata = port->serial->private;
443 429
444 dbg("%s", __func__);
445 portdata = usb_get_serial_port_data(port); 430 portdata = usb_get_serial_port_data(port);
446 431
447 if (serial->dev) { 432 if (serial->dev) {
@@ -492,8 +477,6 @@ static void usb_wwan_setup_urbs(struct usb_serial *serial)
492 struct usb_serial_port *port; 477 struct usb_serial_port *port;
493 struct usb_wwan_port_private *portdata; 478 struct usb_wwan_port_private *portdata;
494 479
495 dbg("%s", __func__);
496
497 for (i = 0; i < serial->num_ports; i++) { 480 for (i = 0; i < serial->num_ports; i++) {
498 port = serial->port[i]; 481 port = serial->port[i];
499 portdata = usb_get_serial_port_data(port); 482 portdata = usb_get_serial_port_data(port);
@@ -534,8 +517,6 @@ int usb_wwan_startup(struct usb_serial *serial)
534 struct usb_wwan_port_private *portdata; 517 struct usb_wwan_port_private *portdata;
535 u8 *buffer; 518 u8 *buffer;
536 519
537 dbg("%s", __func__);
538
539 /* Now setup per port private data */ 520 /* Now setup per port private data */
540 for (i = 0; i < serial->num_ports; i++) { 521 for (i = 0; i < serial->num_ports; i++) {
541 port = serial->port[i]; 522 port = serial->port[i];
@@ -603,8 +584,6 @@ static void stop_read_write_urbs(struct usb_serial *serial)
603 584
604void usb_wwan_disconnect(struct usb_serial *serial) 585void usb_wwan_disconnect(struct usb_serial *serial)
605{ 586{
606 dbg("%s", __func__);
607
608 stop_read_write_urbs(serial); 587 stop_read_write_urbs(serial);
609} 588}
610EXPORT_SYMBOL(usb_wwan_disconnect); 589EXPORT_SYMBOL(usb_wwan_disconnect);
@@ -615,8 +594,6 @@ void usb_wwan_release(struct usb_serial *serial)
615 struct usb_serial_port *port; 594 struct usb_serial_port *port;
616 struct usb_wwan_port_private *portdata; 595 struct usb_wwan_port_private *portdata;
617 596
618 dbg("%s", __func__);
619
620 /* Now free them */ 597 /* Now free them */
621 for (i = 0; i < serial->num_ports; ++i) { 598 for (i = 0; i < serial->num_ports; ++i) {
622 port = serial->port[i]; 599 port = serial->port[i];
@@ -649,8 +626,6 @@ int usb_wwan_suspend(struct usb_serial *serial, pm_message_t message)
649 struct usb_wwan_intf_private *intfdata = serial->private; 626 struct usb_wwan_intf_private *intfdata = serial->private;
650 int b; 627 int b;
651 628
652 dbg("%s entered", __func__);
653
654 if (PMSG_IS_AUTO(message)) { 629 if (PMSG_IS_AUTO(message)) {
655 spin_lock_irq(&intfdata->susp_lock); 630 spin_lock_irq(&intfdata->susp_lock);
656 b = intfdata->in_flight; 631 b = intfdata->in_flight;
@@ -714,7 +689,6 @@ int usb_wwan_resume(struct usb_serial *serial)
714 struct urb *urb; 689 struct urb *urb;
715 int err = 0; 690 int err = 0;
716 691
717 dbg("%s entered", __func__);
718 /* get the interrupt URBs resubmitted unconditionally */ 692 /* get the interrupt URBs resubmitted unconditionally */
719 for (i = 0; i < serial->num_ports; i++) { 693 for (i = 0; i < serial->num_ports; i++) {
720 port = serial->port[i]; 694 port = serial->port[i];
@@ -725,8 +699,8 @@ int usb_wwan_resume(struct usb_serial *serial)
725 err = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO); 699 err = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO);
726 dbg("Submitted interrupt URB for port %d (result %d)", i, err); 700 dbg("Submitted interrupt URB for port %d (result %d)", i, err);
727 if (err < 0) { 701 if (err < 0) {
728 err("%s: Error %d for interrupt URB of port%d", 702 dev_err(&port->dev, "%s: Error %d for interrupt URB\n",
729 __func__, err, i); 703 __func__, err);
730 goto err_out; 704 goto err_out;
731 } 705 }
732 } 706 }
@@ -747,8 +721,8 @@ int usb_wwan_resume(struct usb_serial *serial)
747 urb = portdata->in_urbs[j]; 721 urb = portdata->in_urbs[j];
748 err = usb_submit_urb(urb, GFP_ATOMIC); 722 err = usb_submit_urb(urb, GFP_ATOMIC);
749 if (err < 0) { 723 if (err < 0) {
750 err("%s: Error %d for bulk URB %d", 724 dev_err(&port->dev, "%s: Error %d for bulk URB %d\n",
751 __func__, err, i); 725 __func__, err, i);
752 spin_unlock_irq(&intfdata->susp_lock); 726 spin_unlock_irq(&intfdata->susp_lock);
753 goto err_out; 727 goto err_out;
754 } 728 }
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
index 71d696474f24..f253c91383da 100644
--- a/drivers/usb/serial/visor.c
+++ b/drivers/usb/serial/visor.c
@@ -53,8 +53,6 @@ static int palm_os_4_probe(struct usb_serial *serial,
53 53
54/* Parameters that may be passed into the module. */ 54/* Parameters that may be passed into the module. */
55static bool debug; 55static bool debug;
56static __u16 vendor;
57static __u16 product;
58 56
59static struct usb_device_id id_table [] = { 57static struct usb_device_id id_table [] = {
60 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_VISOR_ID), 58 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_VISOR_ID),
@@ -115,14 +113,12 @@ static struct usb_device_id id_table [] = {
115 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 113 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
116 { USB_DEVICE(FOSSIL_VENDOR_ID, FOSSIL_ABACUS_ID), 114 { USB_DEVICE(FOSSIL_VENDOR_ID, FOSSIL_ABACUS_ID),
117 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 115 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
118 { }, /* optional parameter entry */
119 { } /* Terminating entry */ 116 { } /* Terminating entry */
120}; 117};
121 118
122static struct usb_device_id clie_id_5_table [] = { 119static struct usb_device_id clie_id_5_table [] = {
123 { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_UX50_ID), 120 { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_UX50_ID),
124 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 121 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
125 { }, /* optional parameter entry */
126 { } /* Terminating entry */ 122 { } /* Terminating entry */
127}; 123};
128 124
@@ -162,19 +158,11 @@ static struct usb_device_id id_table_combined [] = {
162 { USB_DEVICE(ACEECA_VENDOR_ID, ACEECA_MEZ1000_ID) }, 158 { USB_DEVICE(ACEECA_VENDOR_ID, ACEECA_MEZ1000_ID) },
163 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_7135_ID) }, 159 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_7135_ID) },
164 { USB_DEVICE(FOSSIL_VENDOR_ID, FOSSIL_ABACUS_ID) }, 160 { USB_DEVICE(FOSSIL_VENDOR_ID, FOSSIL_ABACUS_ID) },
165 { }, /* optional parameter entry */
166 { } /* Terminating entry */ 161 { } /* Terminating entry */
167}; 162};
168 163
169MODULE_DEVICE_TABLE(usb, id_table_combined); 164MODULE_DEVICE_TABLE(usb, id_table_combined);
170 165
171static struct usb_driver visor_driver = {
172 .name = "visor",
173 .probe = usb_serial_probe,
174 .disconnect = usb_serial_disconnect,
175 .id_table = id_table_combined,
176};
177
178/* All of the device info needed for the Handspring Visor, 166/* All of the device info needed for the Handspring Visor,
179 and Palm 4.0 devices */ 167 and Palm 4.0 devices */
180static struct usb_serial_driver handspring_device = { 168static struct usb_serial_driver handspring_device = {
@@ -244,8 +232,6 @@ static int visor_open(struct tty_struct *tty, struct usb_serial_port *port)
244{ 232{
245 int result = 0; 233 int result = 0;
246 234
247 dbg("%s - port %d", __func__, port->number);
248
249 if (!port->read_urb) { 235 if (!port->read_urb) {
250 /* this is needed for some brain dead Sony devices */ 236 /* this is needed for some brain dead Sony devices */
251 dev_err(&port->dev, "Device lied about number of ports, please use a lower one.\n"); 237 dev_err(&port->dev, "Device lied about number of ports, please use a lower one.\n");
@@ -258,7 +244,7 @@ static int visor_open(struct tty_struct *tty, struct usb_serial_port *port)
258 goto exit; 244 goto exit;
259 245
260 if (port->interrupt_in_urb) { 246 if (port->interrupt_in_urb) {
261 dbg("%s - adding interrupt input for treo", __func__); 247 dev_dbg(&port->dev, "adding interrupt input for treo\n");
262 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 248 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
263 if (result) 249 if (result)
264 dev_err(&port->dev, 250 dev_err(&port->dev,
@@ -274,8 +260,6 @@ static void visor_close(struct usb_serial_port *port)
274{ 260{
275 unsigned char *transfer_buffer; 261 unsigned char *transfer_buffer;
276 262
277 dbg("%s - port %d", __func__, port->number);
278
279 /* shutdown our urbs */ 263 /* shutdown our urbs */
280 usb_serial_generic_close(port); 264 usb_serial_generic_close(port);
281 usb_kill_urb(port->interrupt_in_urb); 265 usb_kill_urb(port->interrupt_in_urb);
@@ -310,12 +294,12 @@ static void visor_read_int_callback(struct urb *urb)
310 case -ENOENT: 294 case -ENOENT:
311 case -ESHUTDOWN: 295 case -ESHUTDOWN:
312 /* this urb is terminated, clean up */ 296 /* this urb is terminated, clean up */
313 dbg("%s - urb shutting down with status: %d", 297 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
314 __func__, status); 298 __func__, status);
315 return; 299 return;
316 default: 300 default:
317 dbg("%s - nonzero urb status received: %d", 301 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
318 __func__, status); 302 __func__, status);
319 goto exit; 303 goto exit;
320 } 304 }
321 305
@@ -348,8 +332,6 @@ static int palm_os_3_probe(struct usb_serial *serial,
348 int i; 332 int i;
349 int num_ports = 0; 333 int num_ports = 0;
350 334
351 dbg("%s", __func__);
352
353 transfer_buffer = kmalloc(sizeof(*connection_info), GFP_KERNEL); 335 transfer_buffer = kmalloc(sizeof(*connection_info), GFP_KERNEL);
354 if (!transfer_buffer) { 336 if (!transfer_buffer) {
355 dev_err(dev, "%s - kmalloc(%Zd) failed.\n", __func__, 337 dev_err(dev, "%s - kmalloc(%Zd) failed.\n", __func__,
@@ -445,8 +427,6 @@ static int palm_os_4_probe(struct usb_serial *serial,
445 unsigned char *transfer_buffer; 427 unsigned char *transfer_buffer;
446 int retval; 428 int retval;
447 429
448 dbg("%s", __func__);
449
450 transfer_buffer = kmalloc(sizeof(*connection_info), GFP_KERNEL); 430 transfer_buffer = kmalloc(sizeof(*connection_info), GFP_KERNEL);
451 if (!transfer_buffer) { 431 if (!transfer_buffer) {
452 dev_err(dev, "%s - kmalloc(%Zd) failed.\n", __func__, 432 dev_err(dev, "%s - kmalloc(%Zd) failed.\n", __func__,
@@ -478,8 +458,6 @@ static int visor_probe(struct usb_serial *serial,
478 int (*startup)(struct usb_serial *serial, 458 int (*startup)(struct usb_serial *serial,
479 const struct usb_device_id *id); 459 const struct usb_device_id *id);
480 460
481 dbg("%s", __func__);
482
483 /* 461 /*
484 * some Samsung Android phones in modem mode have the same ID 462 * some Samsung Android phones in modem mode have the same ID
485 * as SPH-I500, but they are ACM devices, so dont bind to them 463 * as SPH-I500, but they are ACM devices, so dont bind to them
@@ -521,8 +499,6 @@ static int clie_3_5_startup(struct usb_serial *serial)
521 int result; 499 int result;
522 u8 *data; 500 u8 *data;
523 501
524 dbg("%s", __func__);
525
526 data = kmalloc(1, GFP_KERNEL); 502 data = kmalloc(1, GFP_KERNEL);
527 if (!data) 503 if (!data)
528 return -ENOMEM; 504 return -ENOMEM;
@@ -585,8 +561,6 @@ static int treo_attach(struct usb_serial *serial)
585 (serial->num_interrupt_in == 0)) 561 (serial->num_interrupt_in == 0))
586 return 0; 562 return 0;
587 563
588 dbg("%s", __func__);
589
590 /* 564 /*
591 * It appears that Treos and Kyoceras want to use the 565 * It appears that Treos and Kyoceras want to use the
592 * 1st bulk in endpoint to communicate with the 2nd bulk out endpoint, 566 * 1st bulk in endpoint to communicate with the 2nd bulk out endpoint,
@@ -622,8 +596,6 @@ static int clie_5_attach(struct usb_serial *serial)
622 unsigned int pipe; 596 unsigned int pipe;
623 int j; 597 int j;
624 598
625 dbg("%s", __func__);
626
627 /* TH55 registers 2 ports. 599 /* TH55 registers 2 ports.
628 Communication in from the UX50/TH55 uses bulk_in_endpointAddress 600 Communication in from the UX50/TH55 uses bulk_in_endpointAddress
629 from port 0. Communication out to the UX50/TH55 uses 601 from port 0. Communication out to the UX50/TH55 uses
@@ -648,59 +620,7 @@ static int clie_5_attach(struct usb_serial *serial)
648 return 0; 620 return 0;
649} 621}
650 622
651static int __init visor_init(void) 623module_usb_serial_driver(serial_drivers, id_table_combined);
652{
653 int i, retval;
654 /* Only if parameters were passed to us */
655 if (vendor > 0 && product > 0) {
656 struct usb_device_id usb_dev_temp[] = {
657 {
658 USB_DEVICE(vendor, product),
659 .driver_info =
660 (kernel_ulong_t) &palm_os_4_probe
661 }
662 };
663
664 /* Find the last entry in id_table */
665 for (i = 0;; i++) {
666 if (id_table[i].idVendor == 0) {
667 id_table[i] = usb_dev_temp[0];
668 break;
669 }
670 }
671 /* Find the last entry in id_table_combined */
672 for (i = 0;; i++) {
673 if (id_table_combined[i].idVendor == 0) {
674 id_table_combined[i] = usb_dev_temp[0];
675 break;
676 }
677 }
678 printk(KERN_INFO KBUILD_MODNAME
679 ": Untested USB device specified at time of module insertion\n");
680 printk(KERN_INFO KBUILD_MODNAME
681 ": Warning: This is not guaranteed to work\n");
682 printk(KERN_INFO KBUILD_MODNAME
683 ": Using a newer kernel is preferred to this method\n");
684 printk(KERN_INFO KBUILD_MODNAME
685 ": Adding Palm OS protocol 4.x support for unknown device: 0x%x/0x%x\n",
686 vendor, product);
687 }
688
689 retval = usb_serial_register_drivers(&visor_driver, serial_drivers);
690 if (retval == 0)
691 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
692 return retval;
693}
694
695
696static void __exit visor_exit (void)
697{
698 usb_serial_deregister_drivers(&visor_driver, serial_drivers);
699}
700
701
702module_init(visor_init);
703module_exit(visor_exit);
704 624
705MODULE_AUTHOR(DRIVER_AUTHOR); 625MODULE_AUTHOR(DRIVER_AUTHOR);
706MODULE_DESCRIPTION(DRIVER_DESC); 626MODULE_DESCRIPTION(DRIVER_DESC);
@@ -708,9 +628,3 @@ MODULE_LICENSE("GPL");
708 628
709module_param(debug, bool, S_IRUGO | S_IWUSR); 629module_param(debug, bool, S_IRUGO | S_IWUSR);
710MODULE_PARM_DESC(debug, "Debug enabled or not"); 630MODULE_PARM_DESC(debug, "Debug enabled or not");
711
712module_param(vendor, ushort, 0);
713MODULE_PARM_DESC(vendor, "User specified vendor ID");
714module_param(product, ushort, 0);
715MODULE_PARM_DESC(product, "User specified product ID");
716
diff --git a/drivers/usb/serial/vivopay-serial.c b/drivers/usb/serial/vivopay-serial.c
index 078f338b5feb..0c0aa876c209 100644
--- a/drivers/usb/serial/vivopay-serial.c
+++ b/drivers/usb/serial/vivopay-serial.c
@@ -25,13 +25,6 @@ static struct usb_device_id id_table [] = {
25 25
26MODULE_DEVICE_TABLE(usb, id_table); 26MODULE_DEVICE_TABLE(usb, id_table);
27 27
28static struct usb_driver vivopay_serial_driver = {
29 .name = "vivopay-serial",
30 .probe = usb_serial_probe,
31 .disconnect = usb_serial_disconnect,
32 .id_table = id_table,
33};
34
35static struct usb_serial_driver vivopay_serial_device = { 28static struct usb_serial_driver vivopay_serial_device = {
36 .driver = { 29 .driver = {
37 .owner = THIS_MODULE, 30 .owner = THIS_MODULE,
@@ -45,7 +38,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
45 &vivopay_serial_device, NULL 38 &vivopay_serial_device, NULL
46}; 39};
47 40
48module_usb_serial_driver(vivopay_serial_driver, serial_drivers); 41module_usb_serial_driver(serial_drivers, id_table);
49 42
50MODULE_AUTHOR("Forest Bond <forest.bond@outpostembedded.com>"); 43MODULE_AUTHOR("Forest Bond <forest.bond@outpostembedded.com>");
51MODULE_DESCRIPTION(DRIVER_DESC); 44MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
index 407e23c87946..473635e7f5db 100644
--- a/drivers/usb/serial/whiteheat.c
+++ b/drivers/usb/serial/whiteheat.c
@@ -45,7 +45,6 @@ static bool debug;
45/* 45/*
46 * Version Information 46 * Version Information
47 */ 47 */
48#define DRIVER_VERSION "v2.0"
49#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Stuart MacDonald <stuartm@connecttech.com>" 48#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Stuart MacDonald <stuartm@connecttech.com>"
50#define DRIVER_DESC "USB ConnectTech WhiteHEAT driver" 49#define DRIVER_DESC "USB ConnectTech WhiteHEAT driver"
51 50
@@ -78,12 +77,6 @@ static const struct usb_device_id id_table_combined[] = {
78 77
79MODULE_DEVICE_TABLE(usb, id_table_combined); 78MODULE_DEVICE_TABLE(usb, id_table_combined);
80 79
81static struct usb_driver whiteheat_driver = {
82 .name = "whiteheat",
83 .probe = usb_serial_probe,
84 .disconnect = usb_serial_disconnect,
85 .id_table = id_table_combined,
86};
87 80
88/* function prototypes for the Connect Tech WhiteHEAT prerenumeration device */ 81/* function prototypes for the Connect Tech WhiteHEAT prerenumeration device */
89static int whiteheat_firmware_download(struct usb_serial *serial, 82static int whiteheat_firmware_download(struct usb_serial *serial,
@@ -96,10 +89,6 @@ static void whiteheat_release(struct usb_serial *serial);
96static int whiteheat_open(struct tty_struct *tty, 89static int whiteheat_open(struct tty_struct *tty,
97 struct usb_serial_port *port); 90 struct usb_serial_port *port);
98static void whiteheat_close(struct usb_serial_port *port); 91static void whiteheat_close(struct usb_serial_port *port);
99static int whiteheat_write(struct tty_struct *tty,
100 struct usb_serial_port *port,
101 const unsigned char *buf, int count);
102static int whiteheat_write_room(struct tty_struct *tty);
103static int whiteheat_ioctl(struct tty_struct *tty, 92static int whiteheat_ioctl(struct tty_struct *tty,
104 unsigned int cmd, unsigned long arg); 93 unsigned int cmd, unsigned long arg);
105static void whiteheat_set_termios(struct tty_struct *tty, 94static void whiteheat_set_termios(struct tty_struct *tty,
@@ -108,11 +97,6 @@ static int whiteheat_tiocmget(struct tty_struct *tty);
108static int whiteheat_tiocmset(struct tty_struct *tty, 97static int whiteheat_tiocmset(struct tty_struct *tty,
109 unsigned int set, unsigned int clear); 98 unsigned int set, unsigned int clear);
110static void whiteheat_break_ctl(struct tty_struct *tty, int break_state); 99static void whiteheat_break_ctl(struct tty_struct *tty, int break_state);
111static int whiteheat_chars_in_buffer(struct tty_struct *tty);
112static void whiteheat_throttle(struct tty_struct *tty);
113static void whiteheat_unthrottle(struct tty_struct *tty);
114static void whiteheat_read_callback(struct urb *urb);
115static void whiteheat_write_callback(struct urb *urb);
116 100
117static struct usb_serial_driver whiteheat_fake_device = { 101static struct usb_serial_driver whiteheat_fake_device = {
118 .driver = { 102 .driver = {
@@ -138,18 +122,13 @@ static struct usb_serial_driver whiteheat_device = {
138 .release = whiteheat_release, 122 .release = whiteheat_release,
139 .open = whiteheat_open, 123 .open = whiteheat_open,
140 .close = whiteheat_close, 124 .close = whiteheat_close,
141 .write = whiteheat_write,
142 .write_room = whiteheat_write_room,
143 .ioctl = whiteheat_ioctl, 125 .ioctl = whiteheat_ioctl,
144 .set_termios = whiteheat_set_termios, 126 .set_termios = whiteheat_set_termios,
145 .break_ctl = whiteheat_break_ctl, 127 .break_ctl = whiteheat_break_ctl,
146 .tiocmget = whiteheat_tiocmget, 128 .tiocmget = whiteheat_tiocmget,
147 .tiocmset = whiteheat_tiocmset, 129 .tiocmset = whiteheat_tiocmset,
148 .chars_in_buffer = whiteheat_chars_in_buffer, 130 .throttle = usb_serial_generic_throttle,
149 .throttle = whiteheat_throttle, 131 .unthrottle = usb_serial_generic_unthrottle,
150 .unthrottle = whiteheat_unthrottle,
151 .read_bulk_callback = whiteheat_read_callback,
152 .write_bulk_callback = whiteheat_write_callback,
153}; 132};
154 133
155static struct usb_serial_driver * const serial_drivers[] = { 134static struct usb_serial_driver * const serial_drivers[] = {
@@ -166,29 +145,8 @@ struct whiteheat_command_private {
166 __u8 result_buffer[64]; 145 __u8 result_buffer[64];
167}; 146};
168 147
169
170#define THROTTLED 0x01
171#define ACTUALLY_THROTTLED 0x02
172
173static int urb_pool_size = 8;
174
175struct whiteheat_urb_wrap {
176 struct list_head list;
177 struct urb *urb;
178};
179
180struct whiteheat_private { 148struct whiteheat_private {
181 spinlock_t lock;
182 __u8 flags;
183 __u8 mcr; /* FIXME: no locking on mcr */ 149 __u8 mcr; /* FIXME: no locking on mcr */
184 struct list_head rx_urbs_free;
185 struct list_head rx_urbs_submitted;
186 struct list_head rx_urb_q;
187 struct work_struct rx_work;
188 struct usb_serial_port *port;
189 struct list_head tx_urbs_free;
190 struct list_head tx_urbs_submitted;
191 struct mutex deathwarrant;
192}; 150};
193 151
194 152
@@ -198,12 +156,6 @@ static void stop_command_port(struct usb_serial *serial);
198static void command_port_write_callback(struct urb *urb); 156static void command_port_write_callback(struct urb *urb);
199static void command_port_read_callback(struct urb *urb); 157static void command_port_read_callback(struct urb *urb);
200 158
201static int start_port_read(struct usb_serial_port *port);
202static struct whiteheat_urb_wrap *urb_to_wrap(struct urb *urb,
203 struct list_head *head);
204static struct list_head *list_first(struct list_head *head);
205static void rx_data_softint(struct work_struct *work);
206
207static int firm_send_command(struct usb_serial_port *port, __u8 command, 159static int firm_send_command(struct usb_serial_port *port, __u8 command,
208 __u8 *data, __u8 datasize); 160 __u8 *data, __u8 datasize);
209static int firm_open(struct usb_serial_port *port); 161static int firm_open(struct usb_serial_port *port);
@@ -247,8 +199,6 @@ static int whiteheat_firmware_download(struct usb_serial *serial,
247 const struct firmware *loader_fw = NULL, *firmware_fw = NULL; 199 const struct firmware *loader_fw = NULL, *firmware_fw = NULL;
248 const struct ihex_binrec *record; 200 const struct ihex_binrec *record;
249 201
250 dbg("%s", __func__);
251
252 if (request_ihex_firmware(&firmware_fw, "whiteheat.fw", 202 if (request_ihex_firmware(&firmware_fw, "whiteheat.fw",
253 &serial->dev->dev)) { 203 &serial->dev->dev)) {
254 dev_err(&serial->dev->dev, 204 dev_err(&serial->dev->dev,
@@ -349,11 +299,6 @@ static int whiteheat_attach(struct usb_serial *serial)
349 __u8 *command; 299 __u8 *command;
350 __u8 *result; 300 __u8 *result;
351 int i; 301 int i;
352 int j;
353 struct urb *urb;
354 int buf_size;
355 struct whiteheat_urb_wrap *wrap;
356 struct list_head *tmp;
357 302
358 command_port = serial->port[COMMAND_PORT]; 303 command_port = serial->port[COMMAND_PORT];
359 304
@@ -408,8 +353,8 @@ static int whiteheat_attach(struct usb_serial *serial)
408 353
409 hw_info = (struct whiteheat_hw_info *)&result[1]; 354 hw_info = (struct whiteheat_hw_info *)&result[1];
410 355
411 dev_info(&serial->dev->dev, "%s: Driver %s: Firmware v%d.%02d\n", 356 dev_info(&serial->dev->dev, "%s: Firmware v%d.%02d\n",
412 serial->type->description, DRIVER_VERSION, 357 serial->type->description,
413 hw_info->sw_major_rev, hw_info->sw_minor_rev); 358 hw_info->sw_major_rev, hw_info->sw_minor_rev);
414 359
415 for (i = 0; i < serial->num_ports; i++) { 360 for (i = 0; i < serial->num_ports; i++) {
@@ -423,72 +368,7 @@ static int whiteheat_attach(struct usb_serial *serial)
423 goto no_private; 368 goto no_private;
424 } 369 }
425 370
426 spin_lock_init(&info->lock);
427 mutex_init(&info->deathwarrant);
428 info->flags = 0;
429 info->mcr = 0; 371 info->mcr = 0;
430 INIT_WORK(&info->rx_work, rx_data_softint);
431 info->port = port;
432
433 INIT_LIST_HEAD(&info->rx_urbs_free);
434 INIT_LIST_HEAD(&info->rx_urbs_submitted);
435 INIT_LIST_HEAD(&info->rx_urb_q);
436 INIT_LIST_HEAD(&info->tx_urbs_free);
437 INIT_LIST_HEAD(&info->tx_urbs_submitted);
438
439 for (j = 0; j < urb_pool_size; j++) {
440 urb = usb_alloc_urb(0, GFP_KERNEL);
441 if (!urb) {
442 dev_err(&port->dev, "No free urbs available\n");
443 goto no_rx_urb;
444 }
445 buf_size = port->read_urb->transfer_buffer_length;
446 urb->transfer_buffer = kmalloc(buf_size, GFP_KERNEL);
447 if (!urb->transfer_buffer) {
448 dev_err(&port->dev,
449 "Couldn't allocate urb buffer\n");
450 goto no_rx_buf;
451 }
452 wrap = kmalloc(sizeof(*wrap), GFP_KERNEL);
453 if (!wrap) {
454 dev_err(&port->dev,
455 "Couldn't allocate urb wrapper\n");
456 goto no_rx_wrap;
457 }
458 usb_fill_bulk_urb(urb, serial->dev,
459 usb_rcvbulkpipe(serial->dev,
460 port->bulk_in_endpointAddress),
461 urb->transfer_buffer, buf_size,
462 whiteheat_read_callback, port);
463 wrap->urb = urb;
464 list_add(&wrap->list, &info->rx_urbs_free);
465
466 urb = usb_alloc_urb(0, GFP_KERNEL);
467 if (!urb) {
468 dev_err(&port->dev, "No free urbs available\n");
469 goto no_tx_urb;
470 }
471 buf_size = port->write_urb->transfer_buffer_length;
472 urb->transfer_buffer = kmalloc(buf_size, GFP_KERNEL);
473 if (!urb->transfer_buffer) {
474 dev_err(&port->dev,
475 "Couldn't allocate urb buffer\n");
476 goto no_tx_buf;
477 }
478 wrap = kmalloc(sizeof(*wrap), GFP_KERNEL);
479 if (!wrap) {
480 dev_err(&port->dev,
481 "Couldn't allocate urb wrapper\n");
482 goto no_tx_wrap;
483 }
484 usb_fill_bulk_urb(urb, serial->dev,
485 usb_sndbulkpipe(serial->dev,
486 port->bulk_out_endpointAddress),
487 urb->transfer_buffer, buf_size,
488 whiteheat_write_callback, port);
489 wrap->urb = urb;
490 list_add(&wrap->list, &info->tx_urbs_free);
491 }
492 372
493 usb_set_serial_port_data(port, info); 373 usb_set_serial_port_data(port, info);
494 } 374 }
@@ -531,29 +411,6 @@ no_command_private:
531 for (i = serial->num_ports - 1; i >= 0; i--) { 411 for (i = serial->num_ports - 1; i >= 0; i--) {
532 port = serial->port[i]; 412 port = serial->port[i];
533 info = usb_get_serial_port_data(port); 413 info = usb_get_serial_port_data(port);
534 for (j = urb_pool_size - 1; j >= 0; j--) {
535 tmp = list_first(&info->tx_urbs_free);
536 list_del(tmp);
537 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
538 urb = wrap->urb;
539 kfree(wrap);
540no_tx_wrap:
541 kfree(urb->transfer_buffer);
542no_tx_buf:
543 usb_free_urb(urb);
544no_tx_urb:
545 tmp = list_first(&info->rx_urbs_free);
546 list_del(tmp);
547 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
548 urb = wrap->urb;
549 kfree(wrap);
550no_rx_wrap:
551 kfree(urb->transfer_buffer);
552no_rx_buf:
553 usb_free_urb(urb);
554no_rx_urb:
555 ;
556 }
557 kfree(info); 414 kfree(info);
558no_private: 415no_private:
559 ; 416 ;
@@ -569,56 +426,27 @@ no_command_buffer:
569static void whiteheat_release(struct usb_serial *serial) 426static void whiteheat_release(struct usb_serial *serial)
570{ 427{
571 struct usb_serial_port *command_port; 428 struct usb_serial_port *command_port;
572 struct usb_serial_port *port;
573 struct whiteheat_private *info; 429 struct whiteheat_private *info;
574 struct whiteheat_urb_wrap *wrap;
575 struct urb *urb;
576 struct list_head *tmp;
577 struct list_head *tmp2;
578 int i; 430 int i;
579 431
580 dbg("%s", __func__);
581
582 /* free up our private data for our command port */ 432 /* free up our private data for our command port */
583 command_port = serial->port[COMMAND_PORT]; 433 command_port = serial->port[COMMAND_PORT];
584 kfree(usb_get_serial_port_data(command_port)); 434 kfree(usb_get_serial_port_data(command_port));
585 435
586 for (i = 0; i < serial->num_ports; i++) { 436 for (i = 0; i < serial->num_ports; i++) {
587 port = serial->port[i]; 437 info = usb_get_serial_port_data(serial->port[i]);
588 info = usb_get_serial_port_data(port);
589 list_for_each_safe(tmp, tmp2, &info->rx_urbs_free) {
590 list_del(tmp);
591 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
592 urb = wrap->urb;
593 kfree(wrap);
594 kfree(urb->transfer_buffer);
595 usb_free_urb(urb);
596 }
597 list_for_each_safe(tmp, tmp2, &info->tx_urbs_free) {
598 list_del(tmp);
599 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
600 urb = wrap->urb;
601 kfree(wrap);
602 kfree(urb->transfer_buffer);
603 usb_free_urb(urb);
604 }
605 kfree(info); 438 kfree(info);
606 } 439 }
607} 440}
608 441
609static int whiteheat_open(struct tty_struct *tty, struct usb_serial_port *port) 442static int whiteheat_open(struct tty_struct *tty, struct usb_serial_port *port)
610{ 443{
611 int retval = 0; 444 int retval;
612
613 dbg("%s - port %d", __func__, port->number);
614 445
615 retval = start_command_port(port->serial); 446 retval = start_command_port(port->serial);
616 if (retval) 447 if (retval)
617 goto exit; 448 goto exit;
618 449
619 if (tty)
620 tty->low_latency = 1;
621
622 /* send an open port command */ 450 /* send an open port command */
623 retval = firm_open(port); 451 retval = firm_open(port);
624 if (retval) { 452 if (retval) {
@@ -640,144 +468,25 @@ static int whiteheat_open(struct tty_struct *tty, struct usb_serial_port *port)
640 usb_clear_halt(port->serial->dev, port->read_urb->pipe); 468 usb_clear_halt(port->serial->dev, port->read_urb->pipe);
641 usb_clear_halt(port->serial->dev, port->write_urb->pipe); 469 usb_clear_halt(port->serial->dev, port->write_urb->pipe);
642 470
643 /* Start reading from the device */ 471 retval = usb_serial_generic_open(tty, port);
644 retval = start_port_read(port);
645 if (retval) { 472 if (retval) {
646 dev_err(&port->dev,
647 "%s - failed submitting read urb, error %d\n",
648 __func__, retval);
649 firm_close(port); 473 firm_close(port);
650 stop_command_port(port->serial); 474 stop_command_port(port->serial);
651 goto exit; 475 goto exit;
652 } 476 }
653
654exit: 477exit:
655 dbg("%s - exit, retval = %d", __func__, retval);
656 return retval; 478 return retval;
657} 479}
658 480
659 481
660static void whiteheat_close(struct usb_serial_port *port) 482static void whiteheat_close(struct usb_serial_port *port)
661{ 483{
662 struct whiteheat_private *info = usb_get_serial_port_data(port);
663 struct whiteheat_urb_wrap *wrap;
664 struct urb *urb;
665 struct list_head *tmp;
666 struct list_head *tmp2;
667
668 dbg("%s - port %d", __func__, port->number);
669
670 firm_report_tx_done(port); 484 firm_report_tx_done(port);
671 firm_close(port); 485 firm_close(port);
672 486
673 /* shutdown our bulk reads and writes */ 487 usb_serial_generic_close(port);
674 mutex_lock(&info->deathwarrant);
675 spin_lock_irq(&info->lock);
676 list_for_each_safe(tmp, tmp2, &info->rx_urbs_submitted) {
677 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
678 urb = wrap->urb;
679 list_del(tmp);
680 spin_unlock_irq(&info->lock);
681 usb_kill_urb(urb);
682 spin_lock_irq(&info->lock);
683 list_add(tmp, &info->rx_urbs_free);
684 }
685 list_for_each_safe(tmp, tmp2, &info->rx_urb_q)
686 list_move(tmp, &info->rx_urbs_free);
687 list_for_each_safe(tmp, tmp2, &info->tx_urbs_submitted) {
688 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
689 urb = wrap->urb;
690 list_del(tmp);
691 spin_unlock_irq(&info->lock);
692 usb_kill_urb(urb);
693 spin_lock_irq(&info->lock);
694 list_add(tmp, &info->tx_urbs_free);
695 }
696 spin_unlock_irq(&info->lock);
697 mutex_unlock(&info->deathwarrant);
698 stop_command_port(port->serial);
699}
700
701
702static int whiteheat_write(struct tty_struct *tty,
703 struct usb_serial_port *port, const unsigned char *buf, int count)
704{
705 struct whiteheat_private *info = usb_get_serial_port_data(port);
706 struct whiteheat_urb_wrap *wrap;
707 struct urb *urb;
708 int result;
709 int bytes;
710 int sent = 0;
711 unsigned long flags;
712 struct list_head *tmp;
713
714 dbg("%s - port %d", __func__, port->number);
715
716 if (count == 0) {
717 dbg("%s - write request of 0 bytes", __func__);
718 return (0);
719 }
720
721 while (count) {
722 spin_lock_irqsave(&info->lock, flags);
723 if (list_empty(&info->tx_urbs_free)) {
724 spin_unlock_irqrestore(&info->lock, flags);
725 break;
726 }
727 tmp = list_first(&info->tx_urbs_free);
728 list_del(tmp);
729 spin_unlock_irqrestore(&info->lock, flags);
730
731 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
732 urb = wrap->urb;
733 bytes = (count > port->bulk_out_size) ?
734 port->bulk_out_size : count;
735 memcpy(urb->transfer_buffer, buf + sent, bytes);
736
737 usb_serial_debug_data(debug, &port->dev,
738 __func__, bytes, urb->transfer_buffer);
739
740 urb->transfer_buffer_length = bytes;
741 result = usb_submit_urb(urb, GFP_ATOMIC);
742 if (result) {
743 dev_err_console(port,
744 "%s - failed submitting write urb, error %d\n",
745 __func__, result);
746 sent = result;
747 spin_lock_irqsave(&info->lock, flags);
748 list_add(tmp, &info->tx_urbs_free);
749 spin_unlock_irqrestore(&info->lock, flags);
750 break;
751 } else {
752 sent += bytes;
753 count -= bytes;
754 spin_lock_irqsave(&info->lock, flags);
755 list_add(tmp, &info->tx_urbs_submitted);
756 spin_unlock_irqrestore(&info->lock, flags);
757 }
758 }
759
760 return sent;
761}
762
763static int whiteheat_write_room(struct tty_struct *tty)
764{
765 struct usb_serial_port *port = tty->driver_data;
766 struct whiteheat_private *info = usb_get_serial_port_data(port);
767 struct list_head *tmp;
768 int room = 0;
769 unsigned long flags;
770
771 dbg("%s - port %d", __func__, port->number);
772 488
773 spin_lock_irqsave(&info->lock, flags); 489 stop_command_port(port->serial);
774 list_for_each(tmp, &info->tx_urbs_free)
775 room++;
776 spin_unlock_irqrestore(&info->lock, flags);
777 room *= port->bulk_out_size;
778
779 dbg("%s - returns %d", __func__, room);
780 return (room);
781} 490}
782 491
783static int whiteheat_tiocmget(struct tty_struct *tty) 492static int whiteheat_tiocmget(struct tty_struct *tty)
@@ -786,8 +495,6 @@ static int whiteheat_tiocmget(struct tty_struct *tty)
786 struct whiteheat_private *info = usb_get_serial_port_data(port); 495 struct whiteheat_private *info = usb_get_serial_port_data(port);
787 unsigned int modem_signals = 0; 496 unsigned int modem_signals = 0;
788 497
789 dbg("%s - port %d", __func__, port->number);
790
791 firm_get_dtr_rts(port); 498 firm_get_dtr_rts(port);
792 if (info->mcr & UART_MCR_DTR) 499 if (info->mcr & UART_MCR_DTR)
793 modem_signals |= TIOCM_DTR; 500 modem_signals |= TIOCM_DTR;
@@ -803,8 +510,6 @@ static int whiteheat_tiocmset(struct tty_struct *tty,
803 struct usb_serial_port *port = tty->driver_data; 510 struct usb_serial_port *port = tty->driver_data;
804 struct whiteheat_private *info = usb_get_serial_port_data(port); 511 struct whiteheat_private *info = usb_get_serial_port_data(port);
805 512
806 dbg("%s - port %d", __func__, port->number);
807
808 if (set & TIOCM_RTS) 513 if (set & TIOCM_RTS)
809 info->mcr |= UART_MCR_RTS; 514 info->mcr |= UART_MCR_RTS;
810 if (set & TIOCM_DTR) 515 if (set & TIOCM_DTR)
@@ -837,7 +542,7 @@ static int whiteheat_ioctl(struct tty_struct *tty,
837 serstruct.line = port->serial->minor; 542 serstruct.line = port->serial->minor;
838 serstruct.port = port->number; 543 serstruct.port = port->number;
839 serstruct.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ; 544 serstruct.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
840 serstruct.xmit_fifo_size = port->bulk_out_size; 545 serstruct.xmit_fifo_size = kfifo_size(&port->write_fifo);
841 serstruct.custom_divisor = 0; 546 serstruct.custom_divisor = 0;
842 serstruct.baud_base = 460800; 547 serstruct.baud_base = 460800;
843 serstruct.close_delay = CLOSING_DELAY; 548 serstruct.close_delay = CLOSING_DELAY;
@@ -867,60 +572,6 @@ static void whiteheat_break_ctl(struct tty_struct *tty, int break_state)
867} 572}
868 573
869 574
870static int whiteheat_chars_in_buffer(struct tty_struct *tty)
871{
872 struct usb_serial_port *port = tty->driver_data;
873 struct whiteheat_private *info = usb_get_serial_port_data(port);
874 struct list_head *tmp;
875 struct whiteheat_urb_wrap *wrap;
876 int chars = 0;
877 unsigned long flags;
878
879 dbg("%s - port %d", __func__, port->number);
880
881 spin_lock_irqsave(&info->lock, flags);
882 list_for_each(tmp, &info->tx_urbs_submitted) {
883 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
884 chars += wrap->urb->transfer_buffer_length;
885 }
886 spin_unlock_irqrestore(&info->lock, flags);
887
888 dbg("%s - returns %d", __func__, chars);
889 return chars;
890}
891
892
893static void whiteheat_throttle(struct tty_struct *tty)
894{
895 struct usb_serial_port *port = tty->driver_data;
896 struct whiteheat_private *info = usb_get_serial_port_data(port);
897
898 dbg("%s - port %d", __func__, port->number);
899
900 spin_lock_irq(&info->lock);
901 info->flags |= THROTTLED;
902 spin_unlock_irq(&info->lock);
903}
904
905
906static void whiteheat_unthrottle(struct tty_struct *tty)
907{
908 struct usb_serial_port *port = tty->driver_data;
909 struct whiteheat_private *info = usb_get_serial_port_data(port);
910 int actually_throttled;
911
912 dbg("%s - port %d", __func__, port->number);
913
914 spin_lock_irq(&info->lock);
915 actually_throttled = info->flags & ACTUALLY_THROTTLED;
916 info->flags &= ~(THROTTLED | ACTUALLY_THROTTLED);
917 spin_unlock_irq(&info->lock);
918
919 if (actually_throttled)
920 rx_data_softint(&info->rx_work);
921}
922
923
924/***************************************************************************** 575/*****************************************************************************
925 * Connect Tech's White Heat callback routines 576 * Connect Tech's White Heat callback routines
926 *****************************************************************************/ 577 *****************************************************************************/
@@ -928,8 +579,6 @@ static void command_port_write_callback(struct urb *urb)
928{ 579{
929 int status = urb->status; 580 int status = urb->status;
930 581
931 dbg("%s", __func__);
932
933 if (status) { 582 if (status) {
934 dbg("nonzero urb status: %d", status); 583 dbg("nonzero urb status: %d", status);
935 return; 584 return;
@@ -945,8 +594,6 @@ static void command_port_read_callback(struct urb *urb)
945 unsigned char *data = urb->transfer_buffer; 594 unsigned char *data = urb->transfer_buffer;
946 int result; 595 int result;
947 596
948 dbg("%s", __func__);
949
950 command_info = usb_get_serial_port_data(command_port); 597 command_info = usb_get_serial_port_data(command_port);
951 if (!command_info) { 598 if (!command_info) {
952 dbg("%s - command_info is NULL, exiting.", __func__); 599 dbg("%s - command_info is NULL, exiting.", __func__);
@@ -989,80 +636,6 @@ static void command_port_read_callback(struct urb *urb)
989} 636}
990 637
991 638
992static void whiteheat_read_callback(struct urb *urb)
993{
994 struct usb_serial_port *port = urb->context;
995 struct whiteheat_urb_wrap *wrap;
996 unsigned char *data = urb->transfer_buffer;
997 struct whiteheat_private *info = usb_get_serial_port_data(port);
998 int status = urb->status;
999
1000 dbg("%s - port %d", __func__, port->number);
1001
1002 spin_lock(&info->lock);
1003 wrap = urb_to_wrap(urb, &info->rx_urbs_submitted);
1004 if (!wrap) {
1005 spin_unlock(&info->lock);
1006 dev_err(&port->dev, "%s - Not my urb!\n", __func__);
1007 return;
1008 }
1009 list_del(&wrap->list);
1010 spin_unlock(&info->lock);
1011
1012 if (status) {
1013 dbg("%s - nonzero read bulk status received: %d",
1014 __func__, status);
1015 spin_lock(&info->lock);
1016 list_add(&wrap->list, &info->rx_urbs_free);
1017 spin_unlock(&info->lock);
1018 return;
1019 }
1020
1021 usb_serial_debug_data(debug, &port->dev,
1022 __func__, urb->actual_length, data);
1023
1024 spin_lock(&info->lock);
1025 list_add_tail(&wrap->list, &info->rx_urb_q);
1026 if (info->flags & THROTTLED) {
1027 info->flags |= ACTUALLY_THROTTLED;
1028 spin_unlock(&info->lock);
1029 return;
1030 }
1031 spin_unlock(&info->lock);
1032
1033 schedule_work(&info->rx_work);
1034}
1035
1036
1037static void whiteheat_write_callback(struct urb *urb)
1038{
1039 struct usb_serial_port *port = urb->context;
1040 struct whiteheat_private *info = usb_get_serial_port_data(port);
1041 struct whiteheat_urb_wrap *wrap;
1042 int status = urb->status;
1043
1044 dbg("%s - port %d", __func__, port->number);
1045
1046 spin_lock(&info->lock);
1047 wrap = urb_to_wrap(urb, &info->tx_urbs_submitted);
1048 if (!wrap) {
1049 spin_unlock(&info->lock);
1050 dev_err(&port->dev, "%s - Not my urb!\n", __func__);
1051 return;
1052 }
1053 list_move(&wrap->list, &info->tx_urbs_free);
1054 spin_unlock(&info->lock);
1055
1056 if (status) {
1057 dbg("%s - nonzero write bulk status received: %d",
1058 __func__, status);
1059 return;
1060 }
1061
1062 usb_serial_port_softint(port);
1063}
1064
1065
1066/***************************************************************************** 639/*****************************************************************************
1067 * Connect Tech's White Heat firmware interface 640 * Connect Tech's White Heat firmware interface
1068 *****************************************************************************/ 641 *****************************************************************************/
@@ -1337,124 +910,7 @@ static void stop_command_port(struct usb_serial *serial)
1337 mutex_unlock(&command_info->mutex); 910 mutex_unlock(&command_info->mutex);
1338} 911}
1339 912
1340 913module_usb_serial_driver(serial_drivers, id_table_combined);
1341static int start_port_read(struct usb_serial_port *port)
1342{
1343 struct whiteheat_private *info = usb_get_serial_port_data(port);
1344 struct whiteheat_urb_wrap *wrap;
1345 struct urb *urb;
1346 int retval = 0;
1347 unsigned long flags;
1348 struct list_head *tmp;
1349 struct list_head *tmp2;
1350
1351 spin_lock_irqsave(&info->lock, flags);
1352
1353 list_for_each_safe(tmp, tmp2, &info->rx_urbs_free) {
1354 list_del(tmp);
1355 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
1356 urb = wrap->urb;
1357 spin_unlock_irqrestore(&info->lock, flags);
1358 retval = usb_submit_urb(urb, GFP_KERNEL);
1359 if (retval) {
1360 spin_lock_irqsave(&info->lock, flags);
1361 list_add(tmp, &info->rx_urbs_free);
1362 list_for_each_safe(tmp, tmp2, &info->rx_urbs_submitted) {
1363 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
1364 urb = wrap->urb;
1365 list_del(tmp);
1366 spin_unlock_irqrestore(&info->lock, flags);
1367 usb_kill_urb(urb);
1368 spin_lock_irqsave(&info->lock, flags);
1369 list_add(tmp, &info->rx_urbs_free);
1370 }
1371 break;
1372 }
1373 spin_lock_irqsave(&info->lock, flags);
1374 list_add(tmp, &info->rx_urbs_submitted);
1375 }
1376
1377 spin_unlock_irqrestore(&info->lock, flags);
1378
1379 return retval;
1380}
1381
1382
1383static struct whiteheat_urb_wrap *urb_to_wrap(struct urb *urb,
1384 struct list_head *head)
1385{
1386 struct whiteheat_urb_wrap *wrap;
1387 struct list_head *tmp;
1388
1389 list_for_each(tmp, head) {
1390 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
1391 if (wrap->urb == urb)
1392 return wrap;
1393 }
1394
1395 return NULL;
1396}
1397
1398
1399static struct list_head *list_first(struct list_head *head)
1400{
1401 return head->next;
1402}
1403
1404
1405static void rx_data_softint(struct work_struct *work)
1406{
1407 struct whiteheat_private *info =
1408 container_of(work, struct whiteheat_private, rx_work);
1409 struct usb_serial_port *port = info->port;
1410 struct tty_struct *tty = tty_port_tty_get(&port->port);
1411 struct whiteheat_urb_wrap *wrap;
1412 struct urb *urb;
1413 unsigned long flags;
1414 struct list_head *tmp;
1415 struct list_head *tmp2;
1416 int result;
1417 int sent = 0;
1418
1419 spin_lock_irqsave(&info->lock, flags);
1420 if (info->flags & THROTTLED) {
1421 spin_unlock_irqrestore(&info->lock, flags);
1422 goto out;
1423 }
1424
1425 list_for_each_safe(tmp, tmp2, &info->rx_urb_q) {
1426 list_del(tmp);
1427 spin_unlock_irqrestore(&info->lock, flags);
1428
1429 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
1430 urb = wrap->urb;
1431
1432 if (tty && urb->actual_length)
1433 sent += tty_insert_flip_string(tty,
1434 urb->transfer_buffer, urb->actual_length);
1435
1436 result = usb_submit_urb(urb, GFP_ATOMIC);
1437 if (result) {
1438 dev_err(&port->dev,
1439 "%s - failed resubmitting read urb, error %d\n",
1440 __func__, result);
1441 spin_lock_irqsave(&info->lock, flags);
1442 list_add(tmp, &info->rx_urbs_free);
1443 continue;
1444 }
1445
1446 spin_lock_irqsave(&info->lock, flags);
1447 list_add(tmp, &info->rx_urbs_submitted);
1448 }
1449 spin_unlock_irqrestore(&info->lock, flags);
1450
1451 if (sent)
1452 tty_flip_buffer_push(tty);
1453out:
1454 tty_kref_put(tty);
1455}
1456
1457module_usb_serial_driver(whiteheat_driver, serial_drivers);
1458 914
1459MODULE_AUTHOR(DRIVER_AUTHOR); 915MODULE_AUTHOR(DRIVER_AUTHOR);
1460MODULE_DESCRIPTION(DRIVER_DESC); 916MODULE_DESCRIPTION(DRIVER_DESC);
@@ -1463,8 +919,5 @@ MODULE_LICENSE("GPL");
1463MODULE_FIRMWARE("whiteheat.fw"); 919MODULE_FIRMWARE("whiteheat.fw");
1464MODULE_FIRMWARE("whiteheat_loader.fw"); 920MODULE_FIRMWARE("whiteheat_loader.fw");
1465 921
1466module_param(urb_pool_size, int, 0);
1467MODULE_PARM_DESC(urb_pool_size, "Number of urbs to use for buffering");
1468
1469module_param(debug, bool, S_IRUGO | S_IWUSR); 922module_param(debug, bool, S_IRUGO | S_IWUSR);
1470MODULE_PARM_DESC(debug, "Debug enabled or not"); 923MODULE_PARM_DESC(debug, "Debug enabled or not");
diff --git a/drivers/usb/serial/zio.c b/drivers/usb/serial/zio.c
index 9d0bb3752cd4..c043aa84a0ba 100644
--- a/drivers/usb/serial/zio.c
+++ b/drivers/usb/serial/zio.c
@@ -22,13 +22,6 @@ static const struct usb_device_id id_table[] = {
22}; 22};
23MODULE_DEVICE_TABLE(usb, id_table); 23MODULE_DEVICE_TABLE(usb, id_table);
24 24
25static struct usb_driver zio_driver = {
26 .name = "zio",
27 .probe = usb_serial_probe,
28 .disconnect = usb_serial_disconnect,
29 .id_table = id_table,
30};
31
32static struct usb_serial_driver zio_device = { 25static struct usb_serial_driver zio_device = {
33 .driver = { 26 .driver = {
34 .owner = THIS_MODULE, 27 .owner = THIS_MODULE,
@@ -42,5 +35,5 @@ static struct usb_serial_driver * const serial_drivers[] = {
42 &zio_device, NULL 35 &zio_device, NULL
43}; 36};
44 37
45module_usb_serial_driver(zio_driver, serial_drivers); 38module_usb_serial_driver(serial_drivers, id_table);
46MODULE_LICENSE("GPL"); 39MODULE_LICENSE("GPL");
diff --git a/drivers/usb/storage/ene_ub6250.c b/drivers/usb/storage/ene_ub6250.c
index e7e678109500..b28f2ad127d4 100644
--- a/drivers/usb/storage/ene_ub6250.c
+++ b/drivers/usb/storage/ene_ub6250.c
@@ -1933,11 +1933,7 @@ static int ene_load_bincode(struct us_data *us, unsigned char flag)
1933 kfree(buf); 1933 kfree(buf);
1934 1934
1935nofw: 1935nofw:
1936 if (sd_fw != NULL) { 1936 release_firmware(sd_fw);
1937 release_firmware(sd_fw);
1938 sd_fw = NULL;
1939 }
1940
1941 return result; 1937 return result;
1942} 1938}
1943 1939
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index 856ad92c40de..8f3cbb8dc81b 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -1885,6 +1885,13 @@ UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201,
1885 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 1885 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1886 US_FL_IGNORE_RESIDUE ), 1886 US_FL_IGNORE_RESIDUE ),
1887 1887
1888/* Reported by Jesse Feddema <jdfeddema@gmail.com> */
1889UNUSUAL_DEV( 0x177f, 0x0400, 0x0000, 0x0000,
1890 "Yarvik",
1891 "PMP400",
1892 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1893 US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ),
1894
1888/* Reported by Hans de Goede <hdegoede@redhat.com> 1895/* Reported by Hans de Goede <hdegoede@redhat.com>
1889 * These Appotech controllers are found in Picture Frames, they provide a 1896 * These Appotech controllers are found in Picture Frames, they provide a
1890 * (buggy) emulation of a cdrom drive which contains the windows software 1897 * (buggy) emulation of a cdrom drive which contains the windows software
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index 2653e73db623..e23c30ab66da 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -121,7 +121,7 @@ MODULE_PARM_DESC(quirks, "supplemental list of device IDs and their quirks");
121} 121}
122 122
123static struct us_unusual_dev us_unusual_dev_list[] = { 123static struct us_unusual_dev us_unusual_dev_list[] = {
124# include "unusual_devs.h" 124# include "unusual_devs.h"
125 { } /* Terminating entry */ 125 { } /* Terminating entry */
126}; 126};
127 127
@@ -261,17 +261,17 @@ EXPORT_SYMBOL_GPL(usb_stor_post_reset);
261void fill_inquiry_response(struct us_data *us, unsigned char *data, 261void fill_inquiry_response(struct us_data *us, unsigned char *data,
262 unsigned int data_len) 262 unsigned int data_len)
263{ 263{
264 if (data_len<36) // You lose. 264 if (data_len < 36) /* You lose. */
265 return; 265 return;
266 266
267 memset(data+8, ' ', 28); 267 memset(data+8, ' ', 28);
268 if(data[0]&0x20) { /* USB device currently not connected. Return 268 if (data[0]&0x20) { /* USB device currently not connected. Return
269 peripheral qualifier 001b ("...however, the 269 peripheral qualifier 001b ("...however, the
270 physical device is not currently connected 270 physical device is not currently connected
271 to this logical unit") and leave vendor and 271 to this logical unit") and leave vendor and
272 product identification empty. ("If the target 272 product identification empty. ("If the target
273 does store some of the INQUIRY data on the 273 does store some of the INQUIRY data on the
274 device, it may return zeros or ASCII spaces 274 device, it may return zeros or ASCII spaces
275 (20h) in those fields until the data is 275 (20h) in those fields until the data is
276 available from the device."). */ 276 available from the device."). */
277 } else { 277 } else {
@@ -298,7 +298,7 @@ static int usb_stor_control_thread(void * __us)
298 struct us_data *us = (struct us_data *)__us; 298 struct us_data *us = (struct us_data *)__us;
299 struct Scsi_Host *host = us_to_host(us); 299 struct Scsi_Host *host = us_to_host(us);
300 300
301 for(;;) { 301 for (;;) {
302 US_DEBUGP("*** thread sleeping.\n"); 302 US_DEBUGP("*** thread sleeping.\n");
303 if (wait_for_completion_interruptible(&us->cmnd_ready)) 303 if (wait_for_completion_interruptible(&us->cmnd_ready))
304 break; 304 break;
@@ -327,7 +327,7 @@ static int usb_stor_control_thread(void * __us)
327 327
328 scsi_unlock(host); 328 scsi_unlock(host);
329 329
330 /* reject the command if the direction indicator 330 /* reject the command if the direction indicator
331 * is UNKNOWN 331 * is UNKNOWN
332 */ 332 */
333 if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) { 333 if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) {
@@ -338,7 +338,7 @@ static int usb_stor_control_thread(void * __us)
338 /* reject if target != 0 or if LUN is higher than 338 /* reject if target != 0 or if LUN is higher than
339 * the maximum known LUN 339 * the maximum known LUN
340 */ 340 */
341 else if (us->srb->device->id && 341 else if (us->srb->device->id &&
342 !(us->fflags & US_FL_SCM_MULT_TARG)) { 342 !(us->fflags & US_FL_SCM_MULT_TARG)) {
343 US_DEBUGP("Bad target number (%d:%d)\n", 343 US_DEBUGP("Bad target number (%d:%d)\n",
344 us->srb->device->id, us->srb->device->lun); 344 us->srb->device->id, us->srb->device->lun);
@@ -351,7 +351,7 @@ static int usb_stor_control_thread(void * __us)
351 us->srb->result = DID_BAD_TARGET << 16; 351 us->srb->result = DID_BAD_TARGET << 16;
352 } 352 }
353 353
354 /* Handle those devices which need us to fake 354 /* Handle those devices which need us to fake
355 * their inquiry data */ 355 * their inquiry data */
356 else if ((us->srb->cmnd[0] == INQUIRY) && 356 else if ((us->srb->cmnd[0] == INQUIRY) &&
357 (us->fflags & US_FL_FIX_INQUIRY)) { 357 (us->fflags & US_FL_FIX_INQUIRY)) {
@@ -376,7 +376,7 @@ static int usb_stor_control_thread(void * __us)
376 376
377 /* indicate that the command is done */ 377 /* indicate that the command is done */
378 if (us->srb->result != DID_ABORT << 16) { 378 if (us->srb->result != DID_ABORT << 16) {
379 US_DEBUGP("scsi cmd done, result=0x%x\n", 379 US_DEBUGP("scsi cmd done, result=0x%x\n",
380 us->srb->result); 380 us->srb->result);
381 us->srb->scsi_done(us->srb); 381 us->srb->scsi_done(us->srb);
382 } else { 382 } else {
@@ -414,7 +414,7 @@ SkipForAbort:
414 } 414 }
415 __set_current_state(TASK_RUNNING); 415 __set_current_state(TASK_RUNNING);
416 return 0; 416 return 0;
417} 417}
418 418
419/*********************************************************************** 419/***********************************************************************
420 * Device probing and disconnecting 420 * Device probing and disconnecting
@@ -732,7 +732,7 @@ static int get_pipes(struct us_data *us)
732 us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0); 732 us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0);
733 us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev, 733 us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev,
734 usb_endpoint_num(ep_out)); 734 usb_endpoint_num(ep_out));
735 us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev, 735 us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev,
736 usb_endpoint_num(ep_in)); 736 usb_endpoint_num(ep_in));
737 if (ep_int) { 737 if (ep_int) {
738 us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev, 738 us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev,
diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
index b4a71679c933..0616f235bd6b 100644
--- a/drivers/usb/usb-skeleton.c
+++ b/drivers/usb/usb-skeleton.c
@@ -93,8 +93,8 @@ static int skel_open(struct inode *inode, struct file *file)
93 93
94 interface = usb_find_interface(&skel_driver, subminor); 94 interface = usb_find_interface(&skel_driver, subminor);
95 if (!interface) { 95 if (!interface) {
96 err("%s - error, can't find device for minor %d", 96 pr_err("%s - error, can't find device for minor %d\n",
97 __func__, subminor); 97 __func__, subminor);
98 retval = -ENODEV; 98 retval = -ENODEV;
99 goto exit; 99 goto exit;
100 } 100 }
@@ -179,8 +179,9 @@ static void skel_read_bulk_callback(struct urb *urb)
179 if (!(urb->status == -ENOENT || 179 if (!(urb->status == -ENOENT ||
180 urb->status == -ECONNRESET || 180 urb->status == -ECONNRESET ||
181 urb->status == -ESHUTDOWN)) 181 urb->status == -ESHUTDOWN))
182 err("%s - nonzero write bulk status received: %d", 182 dev_err(&dev->interface->dev,
183 __func__, urb->status); 183 "%s - nonzero write bulk status received: %d\n",
184 __func__, urb->status);
184 185
185 dev->errors = urb->status; 186 dev->errors = urb->status;
186 } else { 187 } else {
@@ -213,7 +214,8 @@ static int skel_do_read_io(struct usb_skel *dev, size_t count)
213 /* do it */ 214 /* do it */
214 rv = usb_submit_urb(dev->bulk_in_urb, GFP_KERNEL); 215 rv = usb_submit_urb(dev->bulk_in_urb, GFP_KERNEL);
215 if (rv < 0) { 216 if (rv < 0) {
216 err("%s - failed submitting read urb, error %d", 217 dev_err(&dev->interface->dev,
218 "%s - failed submitting read urb, error %d\n",
217 __func__, rv); 219 __func__, rv);
218 dev->bulk_in_filled = 0; 220 dev->bulk_in_filled = 0;
219 rv = (rv == -ENOMEM) ? rv : -EIO; 221 rv = (rv == -ENOMEM) ? rv : -EIO;
@@ -364,8 +366,9 @@ static void skel_write_bulk_callback(struct urb *urb)
364 if (!(urb->status == -ENOENT || 366 if (!(urb->status == -ENOENT ||
365 urb->status == -ECONNRESET || 367 urb->status == -ECONNRESET ||
366 urb->status == -ESHUTDOWN)) 368 urb->status == -ESHUTDOWN))
367 err("%s - nonzero write bulk status received: %d", 369 dev_err(&dev->interface->dev,
368 __func__, urb->status); 370 "%s - nonzero write bulk status received: %d\n",
371 __func__, urb->status);
369 372
370 spin_lock(&dev->err_lock); 373 spin_lock(&dev->err_lock);
371 dev->errors = urb->status; 374 dev->errors = urb->status;
@@ -459,8 +462,9 @@ static ssize_t skel_write(struct file *file, const char *user_buffer,
459 retval = usb_submit_urb(urb, GFP_KERNEL); 462 retval = usb_submit_urb(urb, GFP_KERNEL);
460 mutex_unlock(&dev->io_mutex); 463 mutex_unlock(&dev->io_mutex);
461 if (retval) { 464 if (retval) {
462 err("%s - failed submitting write urb, error %d", __func__, 465 dev_err(&dev->interface->dev,
463 retval); 466 "%s - failed submitting write urb, error %d\n",
467 __func__, retval);
464 goto error_unanchor; 468 goto error_unanchor;
465 } 469 }
466 470
@@ -519,7 +523,7 @@ static int skel_probe(struct usb_interface *interface,
519 /* allocate memory for our device state and initialize it */ 523 /* allocate memory for our device state and initialize it */
520 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 524 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
521 if (!dev) { 525 if (!dev) {
522 err("Out of memory"); 526 dev_err(&interface->dev, "Out of memory\n");
523 goto error; 527 goto error;
524 } 528 }
525 kref_init(&dev->kref); 529 kref_init(&dev->kref);
@@ -546,12 +550,14 @@ static int skel_probe(struct usb_interface *interface,
546 dev->bulk_in_endpointAddr = endpoint->bEndpointAddress; 550 dev->bulk_in_endpointAddr = endpoint->bEndpointAddress;
547 dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL); 551 dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
548 if (!dev->bulk_in_buffer) { 552 if (!dev->bulk_in_buffer) {
549 err("Could not allocate bulk_in_buffer"); 553 dev_err(&interface->dev,
554 "Could not allocate bulk_in_buffer\n");
550 goto error; 555 goto error;
551 } 556 }
552 dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL); 557 dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL);
553 if (!dev->bulk_in_urb) { 558 if (!dev->bulk_in_urb) {
554 err("Could not allocate bulk_in_urb"); 559 dev_err(&interface->dev,
560 "Could not allocate bulk_in_urb\n");
555 goto error; 561 goto error;
556 } 562 }
557 } 563 }
@@ -563,7 +569,8 @@ static int skel_probe(struct usb_interface *interface,
563 } 569 }
564 } 570 }
565 if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) { 571 if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) {
566 err("Could not find both bulk-in and bulk-out endpoints"); 572 dev_err(&interface->dev,
573 "Could not find both bulk-in and bulk-out endpoints\n");
567 goto error; 574 goto error;
568 } 575 }
569 576
@@ -574,7 +581,8 @@ static int skel_probe(struct usb_interface *interface,
574 retval = usb_register_dev(interface, &skel_class); 581 retval = usb_register_dev(interface, &skel_class);
575 if (retval) { 582 if (retval) {
576 /* something prevented us from registering this driver */ 583 /* something prevented us from registering this driver */
577 err("Not able to get a minor for this device."); 584 dev_err(&interface->dev,
585 "Not able to get a minor for this device.\n");
578 usb_set_intfdata(interface, NULL); 586 usb_set_intfdata(interface, NULL);
579 goto error; 587 goto error;
580 } 588 }
diff --git a/drivers/video/udlfb.c b/drivers/video/udlfb.c
index a159b63e18b9..7af1e8166182 100644
--- a/drivers/video/udlfb.c
+++ b/drivers/video/udlfb.c
@@ -1594,7 +1594,7 @@ static int dlfb_usb_probe(struct usb_interface *interface,
1594 1594
1595 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 1595 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1596 if (dev == NULL) { 1596 if (dev == NULL) {
1597 err("dlfb_usb_probe: failed alloc of dev struct\n"); 1597 dev_err(&interface->dev, "dlfb_usb_probe: failed alloc of dev struct\n");
1598 goto error; 1598 goto error;
1599 } 1599 }
1600 1600
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index f1c8ca60e824..b0d62820ada1 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -51,6 +51,37 @@ acpi_evaluate_reference(acpi_handle handle,
51 struct acpi_object_list *arguments, 51 struct acpi_object_list *arguments,
52 struct acpi_handle_list *list); 52 struct acpi_handle_list *list);
53 53
54struct acpi_pld {
55 unsigned int revision:7; /* 0 */
56 unsigned int ignore_colour:1; /* 7 */
57 unsigned int colour:24; /* 8 */
58 unsigned int width:16; /* 32 */
59 unsigned int height:16; /* 48 */
60 unsigned int user_visible:1; /* 64 */
61 unsigned int dock:1; /* 65 */
62 unsigned int lid:1; /* 66 */
63 unsigned int panel:3; /* 67 */
64 unsigned int vertical_pos:2; /* 70 */
65 unsigned int horizontal_pos:2; /* 72 */
66 unsigned int shape:4; /* 74 */
67 unsigned int group_orientation:1; /* 78 */
68 unsigned int group_token:8; /* 79 */
69 unsigned int group_position:8; /* 87 */
70 unsigned int bay:1; /* 95 */
71 unsigned int ejectable:1; /* 96 */
72 unsigned int ospm_eject_required:1; /* 97 */
73 unsigned int cabinet_number:8; /* 98 */
74 unsigned int card_cage_number:8; /* 106 */
75 unsigned int reference:1; /* 114 */
76 unsigned int rotation:4; /* 115 */
77 unsigned int order:5; /* 119 */
78 unsigned int reserved:4; /* 124 */
79 unsigned int vertical_offset:16; /* 128 */
80 unsigned int horizontal_offset:16; /* 144 */
81} __attribute__((__packed__));
82
83acpi_status
84acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld *pld);
54#ifdef CONFIG_ACPI 85#ifdef CONFIG_ACPI
55 86
56#include <linux/proc_fs.h> 87#include <linux/proc_fs.h>
@@ -407,6 +438,11 @@ static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
407} 438}
408#endif 439#endif
409 440
441#else /* CONFIG_ACPI */
442
443static int register_acpi_bus_type(struct acpi_bus_type *bus) { return 0; }
444static int unregister_acpi_bus_type(struct acpi_bus_type *bus) { return 0; }
445
410#endif /* CONFIG_ACPI */ 446#endif /* CONFIG_ACPI */
411 447
412#endif /*__ACPI_BUS_H__*/ 448#endif /*__ACPI_BUS_H__*/
diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h
index 5af9a075498f..98bb2901d7b7 100644
--- a/include/linux/bcma/bcma.h
+++ b/include/linux/bcma/bcma.h
@@ -139,6 +139,7 @@ struct bcma_device {
139 u8 core_unit; 139 u8 core_unit;
140 140
141 u32 addr; 141 u32 addr;
142 u32 addr1;
142 u32 wrap; 143 u32 wrap;
143 144
144 void __iomem *io_addr; 145 void __iomem *io_addr;
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h
index fffdf00f87b9..15be561e7397 100644
--- a/include/linux/fsl_devices.h
+++ b/include/linux/fsl_devices.h
@@ -6,7 +6,7 @@
6 * 6 *
7 * Maintainer: Kumar Gala <galak@kernel.crashing.org> 7 * Maintainer: Kumar Gala <galak@kernel.crashing.org>
8 * 8 *
9 * Copyright 2004 Freescale Semiconductor, Inc 9 * Copyright 2004,2012 Freescale Semiconductor, Inc
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify it 11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the 12 * under the terms of the GNU General Public License as published by the
@@ -17,6 +17,12 @@
17#ifndef _FSL_DEVICE_H_ 17#ifndef _FSL_DEVICE_H_
18#define _FSL_DEVICE_H_ 18#define _FSL_DEVICE_H_
19 19
20#define FSL_UTMI_PHY_DLY 10 /*As per P1010RM, delay for UTMI
21 PHY CLK to become stable - 10ms*/
22#define FSL_USB_VER_OLD 0
23#define FSL_USB_VER_1_6 1
24#define FSL_USB_VER_2_2 2
25
20#include <linux/types.h> 26#include <linux/types.h>
21 27
22/* 28/*
@@ -63,6 +69,7 @@ struct platform_device;
63 69
64struct fsl_usb2_platform_data { 70struct fsl_usb2_platform_data {
65 /* board specific information */ 71 /* board specific information */
72 int controller_ver;
66 enum fsl_usb2_operating_modes operating_mode; 73 enum fsl_usb2_operating_modes operating_mode;
67 enum fsl_usb2_phy_modes phy_mode; 74 enum fsl_usb2_phy_modes phy_mode;
68 unsigned int port_enables; 75 unsigned int port_enables;
diff --git a/include/linux/platform_data/ehci-sh.h b/include/linux/platform_data/ehci-sh.h
new file mode 100644
index 000000000000..5c15a738e116
--- /dev/null
+++ b/include/linux/platform_data/ehci-sh.h
@@ -0,0 +1,28 @@
1/*
2 * EHCI SuperH driver platform data
3 *
4 * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
5 * Copyright (C) 2012 Renesas Solutions Corp.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; version 2 of the License.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef __USB_EHCI_SH_H
22#define __USB_EHCI_SH_H
23
24struct ehci_sh_platdata {
25 void (*phy_init)(void); /* Phy init function */
26};
27
28#endif /* __USB_EHCI_SH_H */
diff --git a/arch/arm/plat-samsung/include/plat/udc-hs.h b/include/linux/platform_data/s3c-hsotg.h
index c9e3667cb2b1..97ec12c2ded4 100644
--- a/arch/arm/plat-samsung/include/plat/udc-hs.h
+++ b/include/linux/platform_data/s3c-hsotg.h
@@ -1,4 +1,4 @@
1/* arch/arm/plat-s3c/include/plat/udc-hs.h 1/* include/linux/platform_data/s3c-hsotg.h
2 * 2 *
3 * Copyright 2008 Openmoko, Inc. 3 * Copyright 2008 Openmoko, Inc.
4 * Copyright 2008 Simtec Electronics 4 * Copyright 2008 Simtec Electronics
@@ -25,7 +25,8 @@ enum s3c_hsotg_dmamode {
25 */ 25 */
26struct s3c_hsotg_plat { 26struct s3c_hsotg_plat {
27 enum s3c_hsotg_dmamode dma; 27 enum s3c_hsotg_dmamode dma;
28 unsigned int is_osc : 1; 28 unsigned int is_osc:1;
29 int phy_type;
29 30
30 int (*phy_init)(struct platform_device *pdev, int type); 31 int (*phy_init)(struct platform_device *pdev, int type);
31 int (*phy_exit)(struct platform_device *pdev, int type); 32 int (*phy_exit)(struct platform_device *pdev, int type);
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 73b68d1f2cb0..dea39dc551d4 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -351,10 +351,6 @@ struct usb_bus {
351 int bandwidth_int_reqs; /* number of Interrupt requests */ 351 int bandwidth_int_reqs; /* number of Interrupt requests */
352 int bandwidth_isoc_reqs; /* number of Isoc. requests */ 352 int bandwidth_isoc_reqs; /* number of Isoc. requests */
353 353
354#ifdef CONFIG_USB_DEVICEFS
355 struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */
356#endif
357
358#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) 354#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
359 struct mon_bus *mon_bus; /* non-null when associated */ 355 struct mon_bus *mon_bus; /* non-null when associated */
360 int monitored; /* non-zero when monitored */ 356 int monitored; /* non-zero when monitored */
@@ -382,6 +378,45 @@ enum usb_device_removable {
382 USB_DEVICE_FIXED, 378 USB_DEVICE_FIXED,
383}; 379};
384 380
381/*
382 * USB 3.0 Link Power Management (LPM) parameters.
383 *
384 * PEL and SEL are USB 3.0 Link PM latencies for device-initiated LPM exit.
385 * MEL is the USB 3.0 Link PM latency for host-initiated LPM exit.
386 * All three are stored in nanoseconds.
387 */
388struct usb3_lpm_parameters {
389 /*
390 * Maximum exit latency (MEL) for the host to send a packet to the
391 * device (either a Ping for isoc endpoints, or a data packet for
392 * interrupt endpoints), the hubs to decode the packet, and for all hubs
393 * in the path to transition the links to U0.
394 */
395 unsigned int mel;
396 /*
397 * Maximum exit latency for a device-initiated LPM transition to bring
398 * all links into U0. Abbreviated as "PEL" in section 9.4.12 of the USB
399 * 3.0 spec, with no explanation of what "P" stands for. "Path"?
400 */
401 unsigned int pel;
402
403 /*
404 * The System Exit Latency (SEL) includes PEL, and three other
405 * latencies. After a device initiates a U0 transition, it will take
406 * some time from when the device sends the ERDY to when it will finally
407 * receive the data packet. Basically, SEL should be the worse-case
408 * latency from when a device starts initiating a U0 transition to when
409 * it will get data.
410 */
411 unsigned int sel;
412 /*
413 * The idle timeout value that is currently programmed into the parent
414 * hub for this device. When the timer counts to zero, the parent hub
415 * will initiate an LPM transition to either U1 or U2.
416 */
417 int timeout;
418};
419
385/** 420/**
386 * struct usb_device - kernel's representation of a USB device 421 * struct usb_device - kernel's representation of a USB device
387 * @devnum: device number; address on a USB bus 422 * @devnum: device number; address on a USB bus
@@ -439,6 +474,12 @@ enum usb_device_removable {
439 * specific data for the device. 474 * specific data for the device.
440 * @slot_id: Slot ID assigned by xHCI 475 * @slot_id: Slot ID assigned by xHCI
441 * @removable: Device can be physically removed from this port 476 * @removable: Device can be physically removed from this port
477 * @u1_params: exit latencies for USB3 U1 LPM state, and hub-initiated timeout.
478 * @u2_params: exit latencies for USB3 U2 LPM state, and hub-initiated timeout.
479 * @lpm_disable_count: Ref count used by usb_disable_lpm() and usb_enable_lpm()
480 * to keep track of the number of functions that require USB 3.0 Link Power
481 * Management to be disabled for this usb_device. This count should only
482 * be manipulated by those functions, with the bandwidth_mutex is held.
442 * 483 *
443 * Notes: 484 * Notes:
444 * Usbcore drivers should not set usbdev->state directly. Instead use 485 * Usbcore drivers should not set usbdev->state directly. Instead use
@@ -485,6 +526,7 @@ struct usb_device {
485 unsigned lpm_capable:1; 526 unsigned lpm_capable:1;
486 unsigned usb2_hw_lpm_capable:1; 527 unsigned usb2_hw_lpm_capable:1;
487 unsigned usb2_hw_lpm_enabled:1; 528 unsigned usb2_hw_lpm_enabled:1;
529 unsigned usb3_lpm_enabled:1;
488 int string_langid; 530 int string_langid;
489 531
490 /* static strings from the device */ 532 /* static strings from the device */
@@ -493,12 +535,6 @@ struct usb_device {
493 char *serial; 535 char *serial;
494 536
495 struct list_head filelist; 537 struct list_head filelist;
496#ifdef CONFIG_USB_DEVICE_CLASS
497 struct device *usb_classdev;
498#endif
499#ifdef CONFIG_USB_DEVICEFS
500 struct dentry *usbfs_dentry;
501#endif
502 538
503 int maxchild; 539 int maxchild;
504 struct usb_device **children; 540 struct usb_device **children;
@@ -517,6 +553,10 @@ struct usb_device {
517 struct wusb_dev *wusb_dev; 553 struct wusb_dev *wusb_dev;
518 int slot_id; 554 int slot_id;
519 enum usb_device_removable removable; 555 enum usb_device_removable removable;
556 struct usb3_lpm_parameters u1_params;
557 struct usb3_lpm_parameters u2_params;
558 unsigned lpm_disable_count;
559 unsigned hub_initiated_lpm_disable_count;
520}; 560};
521#define to_usb_device(d) container_of(d, struct usb_device, dev) 561#define to_usb_device(d) container_of(d, struct usb_device, dev)
522 562
@@ -583,6 +623,12 @@ static inline void usb_mark_last_busy(struct usb_device *udev)
583{ } 623{ }
584#endif 624#endif
585 625
626extern int usb_disable_lpm(struct usb_device *udev);
627extern void usb_enable_lpm(struct usb_device *udev);
628/* Same as above, but these functions lock/unlock the bandwidth_mutex. */
629extern int usb_unlocked_disable_lpm(struct usb_device *udev);
630extern void usb_unlocked_enable_lpm(struct usb_device *udev);
631
586/*-------------------------------------------------------------------------*/ 632/*-------------------------------------------------------------------------*/
587 633
588/* for drivers using iso endpoints */ 634/* for drivers using iso endpoints */
@@ -800,6 +846,8 @@ extern ssize_t usb_store_new_id(struct usb_dynids *dynids,
800 struct device_driver *driver, 846 struct device_driver *driver,
801 const char *buf, size_t count); 847 const char *buf, size_t count);
802 848
849extern ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf);
850
803/** 851/**
804 * struct usbdrv_wrap - wrapper for driver-model structure 852 * struct usbdrv_wrap - wrapper for driver-model structure
805 * @driver: The driver-model core driver structure. 853 * @driver: The driver-model core driver structure.
@@ -850,6 +898,9 @@ struct usbdrv_wrap {
850 * for interfaces bound to this driver. 898 * for interfaces bound to this driver.
851 * @soft_unbind: if set to 1, the USB core will not kill URBs and disable 899 * @soft_unbind: if set to 1, the USB core will not kill URBs and disable
852 * endpoints before calling the driver's disconnect method. 900 * endpoints before calling the driver's disconnect method.
901 * @disable_hub_initiated_lpm: if set to 0, the USB core will not allow hubs
902 * to initiate lower power link state transitions when an idle timeout
903 * occurs. Device-initiated USB 3.0 link PM will still be allowed.
853 * 904 *
854 * USB interface drivers must provide a name, probe() and disconnect() 905 * USB interface drivers must provide a name, probe() and disconnect()
855 * methods, and an id_table. Other driver fields are optional. 906 * methods, and an id_table. Other driver fields are optional.
@@ -890,6 +941,7 @@ struct usb_driver {
890 struct usbdrv_wrap drvwrap; 941 struct usbdrv_wrap drvwrap;
891 unsigned int no_dynamic_id:1; 942 unsigned int no_dynamic_id:1;
892 unsigned int supports_autosuspend:1; 943 unsigned int supports_autosuspend:1;
944 unsigned int disable_hub_initiated_lpm:1;
893 unsigned int soft_unbind:1; 945 unsigned int soft_unbind:1;
894}; 946};
895#define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver) 947#define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)
@@ -1379,6 +1431,7 @@ extern int usb_unlink_urb(struct urb *urb);
1379extern void usb_kill_urb(struct urb *urb); 1431extern void usb_kill_urb(struct urb *urb);
1380extern void usb_poison_urb(struct urb *urb); 1432extern void usb_poison_urb(struct urb *urb);
1381extern void usb_unpoison_urb(struct urb *urb); 1433extern void usb_unpoison_urb(struct urb *urb);
1434extern void usb_block_urb(struct urb *urb);
1382extern void usb_kill_anchored_urbs(struct usb_anchor *anchor); 1435extern void usb_kill_anchored_urbs(struct usb_anchor *anchor);
1383extern void usb_poison_anchored_urbs(struct usb_anchor *anchor); 1436extern void usb_poison_anchored_urbs(struct usb_anchor *anchor);
1384extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor); 1437extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor);
@@ -1391,6 +1444,8 @@ extern struct urb *usb_get_from_anchor(struct usb_anchor *anchor);
1391extern void usb_scuttle_anchored_urbs(struct usb_anchor *anchor); 1444extern void usb_scuttle_anchored_urbs(struct usb_anchor *anchor);
1392extern int usb_anchor_empty(struct usb_anchor *anchor); 1445extern int usb_anchor_empty(struct usb_anchor *anchor);
1393 1446
1447#define usb_unblock_urb usb_unpoison_urb
1448
1394/** 1449/**
1395 * usb_urb_dir_in - check if an URB describes an IN transfer 1450 * usb_urb_dir_in - check if an URB describes an IN transfer
1396 * @urb: URB to be checked 1451 * @urb: URB to be checked
@@ -1627,6 +1682,7 @@ static inline int usb_translate_errors(int error_code)
1627 case 0: 1682 case 0:
1628 case -ENOMEM: 1683 case -ENOMEM:
1629 case -ENODEV: 1684 case -ENODEV:
1685 case -EOPNOTSUPP:
1630 return error_code; 1686 return error_code;
1631 default: 1687 default:
1632 return -EIO; 1688 return -EIO;
@@ -1652,9 +1708,6 @@ do { \
1652} while (0) 1708} while (0)
1653#endif 1709#endif
1654 1710
1655#define err(format, arg...) \
1656 printk(KERN_ERR KBUILD_MODNAME ": " format "\n", ##arg)
1657
1658/* debugfs stuff */ 1711/* debugfs stuff */
1659extern struct dentry *usb_debug_root; 1712extern struct dentry *usb_debug_root;
1660 1713
diff --git a/include/linux/usb/ch11.h b/include/linux/usb/ch11.h
index f1d26b6067f1..b6c2863b2c94 100644
--- a/include/linux/usb/ch11.h
+++ b/include/linux/usb/ch11.h
@@ -76,6 +76,8 @@
76#define USB_PORT_FEAT_C_BH_PORT_RESET 29 76#define USB_PORT_FEAT_C_BH_PORT_RESET 29
77#define USB_PORT_FEAT_FORCE_LINKPM_ACCEPT 30 77#define USB_PORT_FEAT_FORCE_LINKPM_ACCEPT 30
78 78
79#define USB_PORT_LPM_TIMEOUT(p) (((p) & 0xff) << 8)
80
79/* USB 3.0 hub remote wake mask bits, see table 10-14 */ 81/* USB 3.0 hub remote wake mask bits, see table 10-14 */
80#define USB_PORT_FEAT_REMOTE_WAKE_CONNECT (1 << 8) 82#define USB_PORT_FEAT_REMOTE_WAKE_CONNECT (1 << 8)
81#define USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT (1 << 9) 83#define USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT (1 << 9)
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index af21f3115919..d1d732c2838d 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -88,6 +88,8 @@
88#define USB_REQ_GET_INTERFACE 0x0A 88#define USB_REQ_GET_INTERFACE 0x0A
89#define USB_REQ_SET_INTERFACE 0x0B 89#define USB_REQ_SET_INTERFACE 0x0B
90#define USB_REQ_SYNCH_FRAME 0x0C 90#define USB_REQ_SYNCH_FRAME 0x0C
91#define USB_REQ_SET_SEL 0x30
92#define USB_REQ_SET_ISOCH_DELAY 0x31
91 93
92#define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */ 94#define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */
93#define USB_REQ_GET_ENCRYPTION 0x0E 95#define USB_REQ_GET_ENCRYPTION 0x0E
@@ -390,6 +392,11 @@ struct usb_endpoint_descriptor {
390#define USB_ENDPOINT_XFER_INT 3 392#define USB_ENDPOINT_XFER_INT 3
391#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 393#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80
392 394
395/* The USB 3.0 spec redefines bits 5:4 of bmAttributes as interrupt ep type. */
396#define USB_ENDPOINT_INTRTYPE 0x30
397#define USB_ENDPOINT_INTR_PERIODIC (0 << 4)
398#define USB_ENDPOINT_INTR_NOTIFICATION (1 << 4)
399
393#define USB_ENDPOINT_SYNCTYPE 0x0c 400#define USB_ENDPOINT_SYNCTYPE 0x0c
394#define USB_ENDPOINT_SYNC_NONE (0 << 2) 401#define USB_ENDPOINT_SYNC_NONE (0 << 2)
395#define USB_ENDPOINT_SYNC_ASYNC (1 << 2) 402#define USB_ENDPOINT_SYNC_ASYNC (1 << 2)
@@ -592,6 +599,12 @@ static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd)
592 return __le16_to_cpu(epd->wMaxPacketSize); 599 return __le16_to_cpu(epd->wMaxPacketSize);
593} 600}
594 601
602static inline int usb_endpoint_interrupt_type(
603 const struct usb_endpoint_descriptor *epd)
604{
605 return epd->bmAttributes & USB_ENDPOINT_INTRTYPE;
606}
607
595/*-------------------------------------------------------------------------*/ 608/*-------------------------------------------------------------------------*/
596 609
597/* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */ 610/* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */
@@ -933,6 +946,51 @@ enum usb_device_state {
933 */ 946 */
934}; 947};
935 948
949enum usb3_link_state {
950 USB3_LPM_U0 = 0,
951 USB3_LPM_U1,
952 USB3_LPM_U2,
953 USB3_LPM_U3
954};
955
956/*
957 * A U1 timeout of 0x0 means the parent hub will reject any transitions to U1.
958 * 0xff means the parent hub will accept transitions to U1, but will not
959 * initiate a transition.
960 *
961 * A U1 timeout of 0x1 to 0x7F also causes the hub to initiate a transition to
962 * U1 after that many microseconds. Timeouts of 0x80 to 0xFE are reserved
963 * values.
964 *
965 * A U2 timeout of 0x0 means the parent hub will reject any transitions to U2.
966 * 0xff means the parent hub will accept transitions to U2, but will not
967 * initiate a transition.
968 *
969 * A U2 timeout of 0x1 to 0xFE also causes the hub to initiate a transition to
970 * U2 after N*256 microseconds. Therefore a U2 timeout value of 0x1 means a U2
971 * idle timer of 256 microseconds, 0x2 means 512 microseconds, 0xFE means
972 * 65.024ms.
973 */
974#define USB3_LPM_DISABLED 0x0
975#define USB3_LPM_U1_MAX_TIMEOUT 0x7F
976#define USB3_LPM_U2_MAX_TIMEOUT 0xFE
977#define USB3_LPM_DEVICE_INITIATED 0xFF
978
979struct usb_set_sel_req {
980 __u8 u1_sel;
981 __u8 u1_pel;
982 __le16 u2_sel;
983 __le16 u2_pel;
984} __attribute__ ((packed));
985
986/*
987 * The Set System Exit Latency control transfer provides one byte each for
988 * U1 SEL and U1 PEL, so the max exit latency is 0xFF. U2 SEL and U2 PEL each
989 * are two bytes long.
990 */
991#define USB3_LPM_MAX_U1_SEL_PEL 0xFF
992#define USB3_LPM_MAX_U2_SEL_PEL 0xFFFF
993
936/*-------------------------------------------------------------------------*/ 994/*-------------------------------------------------------------------------*/
937 995
938/* 996/*
diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
new file mode 100644
index 000000000000..edb90d6cfd12
--- /dev/null
+++ b/include/linux/usb/chipidea.h
@@ -0,0 +1,28 @@
1/*
2 * Platform data for the chipidea USB dual role controller
3 */
4
5#ifndef __LINUX_USB_CHIPIDEA_H
6#define __LINUX_USB_CHIPIDEA_H
7
8struct ci13xxx;
9struct ci13xxx_udc_driver {
10 const char *name;
11 /* offset of the capability registers */
12 uintptr_t capoffset;
13 unsigned power_budget;
14 unsigned long flags;
15#define CI13XXX_REGS_SHARED BIT(0)
16#define CI13XXX_REQUIRE_TRANSCEIVER BIT(1)
17#define CI13XXX_PULLUP_ON_VBUS BIT(2)
18#define CI13XXX_DISABLE_STREAMING BIT(3)
19
20#define CI13XXX_CONTROLLER_RESET_EVENT 0
21#define CI13XXX_CONTROLLER_STOPPED_EVENT 1
22 void (*notify_event) (struct ci13xxx *udc, unsigned event);
23};
24
25/* Default offset of capability registers */
26#define DEF_CAPOFFSET 0x100
27
28#endif
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index a316fba73518..9d8c3b634493 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -242,6 +242,9 @@ int usb_add_config(struct usb_composite_dev *,
242 struct usb_configuration *, 242 struct usb_configuration *,
243 int (*)(struct usb_configuration *)); 243 int (*)(struct usb_configuration *));
244 244
245void usb_remove_config(struct usb_composite_dev *,
246 struct usb_configuration *);
247
245/** 248/**
246 * struct usb_composite_driver - groups configurations into a gadget 249 * struct usb_composite_driver - groups configurations into a gadget
247 * @name: For diagnostics, identifies the driver. 250 * @name: For diagnostics, identifies the driver.
@@ -250,6 +253,8 @@ int usb_add_config(struct usb_composite_dev *,
250 * @iManufacturer: Used as iManufacturer override if @dev->iManufacturer is 253 * @iManufacturer: Used as iManufacturer override if @dev->iManufacturer is
251 * not set. If NULL a default "<system> <release> with <udc>" value 254 * not set. If NULL a default "<system> <release> with <udc>" value
252 * will be used. 255 * will be used.
256 * @iSerialNumber: Used as iSerialNumber override if @dev->iSerialNumber is
257 * not set.
253 * @dev: Template descriptor for the device, including default device 258 * @dev: Template descriptor for the device, including default device
254 * identifiers. 259 * identifiers.
255 * @strings: tables of strings, keyed by identifiers assigned during bind() 260 * @strings: tables of strings, keyed by identifiers assigned during bind()
@@ -280,6 +285,7 @@ struct usb_composite_driver {
280 const char *name; 285 const char *name;
281 const char *iProduct; 286 const char *iProduct;
282 const char *iManufacturer; 287 const char *iManufacturer;
288 const char *iSerialNumber;
283 const struct usb_device_descriptor *dev; 289 const struct usb_device_descriptor *dev;
284 struct usb_gadget_strings **strings; 290 struct usb_gadget_strings **strings;
285 enum usb_device_speed max_speed; 291 enum usb_device_speed max_speed;
diff --git a/include/linux/usb/functionfs.h b/include/linux/usb/functionfs.h
index 7587ef934ba8..a843d0851364 100644
--- a/include/linux/usb/functionfs.h
+++ b/include/linux/usb/functionfs.h
@@ -190,8 +190,10 @@ static int functionfs_ready_callback(struct ffs_data *ffs)
190 __attribute__((warn_unused_result, nonnull)); 190 __attribute__((warn_unused_result, nonnull));
191static void functionfs_closed_callback(struct ffs_data *ffs) 191static void functionfs_closed_callback(struct ffs_data *ffs)
192 __attribute__((nonnull)); 192 __attribute__((nonnull));
193static int functionfs_check_dev_callback(const char *dev_name) 193static void *functionfs_acquire_dev_callback(const char *dev_name)
194 __attribute__((warn_unused_result, nonnull)); 194 __attribute__((warn_unused_result, nonnull));
195static void functionfs_release_dev_callback(struct ffs_data *ffs_data)
196 __attribute__((nonnull));
195 197
196 198
197#endif 199#endif
diff --git a/include/linux/usb/gpio_vbus.h b/include/linux/usb/gpio_vbus.h
index d9f03ccc2d60..837bba604a0b 100644
--- a/include/linux/usb/gpio_vbus.h
+++ b/include/linux/usb/gpio_vbus.h
@@ -17,6 +17,7 @@
17 * @gpio_pullup: optional D+ or D- pullup GPIO (else negative/invalid) 17 * @gpio_pullup: optional D+ or D- pullup GPIO (else negative/invalid)
18 * @gpio_vbus_inverted: true if gpio_vbus is active low 18 * @gpio_vbus_inverted: true if gpio_vbus is active low
19 * @gpio_pullup_inverted: true if gpio_pullup is active low 19 * @gpio_pullup_inverted: true if gpio_pullup is active low
20 * @wakeup: configure gpio_vbus as a wake-up source
20 * 21 *
21 * The VBUS sensing GPIO should have a pulldown, which will normally be 22 * The VBUS sensing GPIO should have a pulldown, which will normally be
22 * part of a resistor ladder turning a 4.0V-5.25V level on VBUS into a 23 * part of a resistor ladder turning a 4.0V-5.25V level on VBUS into a
@@ -27,4 +28,5 @@ struct gpio_vbus_mach_info {
27 int gpio_pullup; 28 int gpio_pullup;
28 bool gpio_vbus_inverted; 29 bool gpio_vbus_inverted;
29 bool gpio_pullup_inverted; 30 bool gpio_pullup_inverted;
31 bool wakeup;
30}; 32};
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
index d28cc78a38e4..7f855d50cdf5 100644
--- a/include/linux/usb/hcd.h
+++ b/include/linux/usb/hcd.h
@@ -344,6 +344,15 @@ struct hc_driver {
344 */ 344 */
345 int (*update_device)(struct usb_hcd *, struct usb_device *); 345 int (*update_device)(struct usb_hcd *, struct usb_device *);
346 int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int); 346 int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
347 /* USB 3.0 Link Power Management */
348 /* Returns the USB3 hub-encoded value for the U1/U2 timeout. */
349 int (*enable_usb3_lpm_timeout)(struct usb_hcd *,
350 struct usb_device *, enum usb3_link_state state);
351 /* The xHCI host controller can still fail the command to
352 * disable the LPM timeouts, so this can return an error code.
353 */
354 int (*disable_usb3_lpm_timeout)(struct usb_hcd *,
355 struct usb_device *, enum usb3_link_state state);
347}; 356};
348 357
349extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); 358extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb);
@@ -584,29 +593,6 @@ static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd)
584} 593}
585#endif /* CONFIG_USB_SUSPEND */ 594#endif /* CONFIG_USB_SUSPEND */
586 595
587
588/*
589 * USB device fs stuff
590 */
591
592#ifdef CONFIG_USB_DEVICEFS
593
594/*
595 * these are expected to be called from the USB core/hub thread
596 * with the kernel lock held
597 */
598extern void usbfs_update_special(void);
599extern int usbfs_init(void);
600extern void usbfs_cleanup(void);
601
602#else /* CONFIG_USB_DEVICEFS */
603
604static inline void usbfs_update_special(void) {}
605static inline int usbfs_init(void) { return 0; }
606static inline void usbfs_cleanup(void) { }
607
608#endif /* CONFIG_USB_DEVICEFS */
609
610/*-------------------------------------------------------------------------*/ 596/*-------------------------------------------------------------------------*/
611 597
612#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) 598#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
diff --git a/include/linux/usb/isp1301.h b/include/linux/usb/isp1301.h
new file mode 100644
index 000000000000..d3a851c28b6a
--- /dev/null
+++ b/include/linux/usb/isp1301.h
@@ -0,0 +1,80 @@
1/*
2 * NXP ISP1301 USB transceiver driver
3 *
4 * Copyright (C) 2012 Roland Stigge <stigge@antcom.de>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17#ifndef __LINUX_USB_ISP1301_H
18#define __LINUX_USB_ISP1301_H
19
20#include <linux/of.h>
21
22/* I2C Register definitions: */
23
24#define ISP1301_I2C_MODE_CONTROL_1 0x04 /* u8 read, set, +1 clear */
25
26#define MC1_SPEED_REG (1 << 0)
27#define MC1_SUSPEND_REG (1 << 1)
28#define MC1_DAT_SE0 (1 << 2)
29#define MC1_TRANSPARENT (1 << 3)
30#define MC1_BDIS_ACON_EN (1 << 4)
31#define MC1_OE_INT_EN (1 << 5)
32#define MC1_UART_EN (1 << 6)
33#define MC1_MASK 0x7f
34
35#define ISP1301_I2C_MODE_CONTROL_2 0x12 /* u8 read, set, +1 clear */
36
37#define MC2_GLOBAL_PWR_DN (1 << 0)
38#define MC2_SPD_SUSP_CTRL (1 << 1)
39#define MC2_BI_DI (1 << 2)
40#define MC2_TRANSP_BDIR0 (1 << 3)
41#define MC2_TRANSP_BDIR1 (1 << 4)
42#define MC2_AUDIO_EN (1 << 5)
43#define MC2_PSW_EN (1 << 6)
44#define MC2_EN2V7 (1 << 7)
45
46#define ISP1301_I2C_OTG_CONTROL_1 0x06 /* u8 read, set, +1 clear */
47
48#define OTG1_DP_PULLUP (1 << 0)
49#define OTG1_DM_PULLUP (1 << 1)
50#define OTG1_DP_PULLDOWN (1 << 2)
51#define OTG1_DM_PULLDOWN (1 << 3)
52#define OTG1_ID_PULLDOWN (1 << 4)
53#define OTG1_VBUS_DRV (1 << 5)
54#define OTG1_VBUS_DISCHRG (1 << 6)
55#define OTG1_VBUS_CHRG (1 << 7)
56
57#define ISP1301_I2C_OTG_CONTROL_2 0x10 /* u8 readonly */
58
59#define OTG_B_SESS_END (1 << 6)
60#define OTG_B_SESS_VLD (1 << 7)
61
62#define ISP1301_I2C_INTERRUPT_SOURCE 0x8
63#define ISP1301_I2C_INTERRUPT_LATCH 0xA
64#define ISP1301_I2C_INTERRUPT_FALLING 0xC
65#define ISP1301_I2C_INTERRUPT_RISING 0xE
66
67#define INT_VBUS_VLD (1 << 0)
68#define INT_SESS_VLD (1 << 1)
69#define INT_DP_HI (1 << 2)
70#define INT_ID_GND (1 << 3)
71#define INT_DM_HI (1 << 4)
72#define INT_ID_FLOAT (1 << 5)
73#define INT_BDIS_ACON (1 << 6)
74#define INT_CR_INT (1 << 7)
75
76#define ISP1301_I2C_REG_CLEAR_ADDR 1 /* Register Address Modifier */
77
78struct i2c_client *isp1301_get_client(struct device_node *node);
79
80#endif /* __LINUX_USB_ISP1301_H */
diff --git a/include/linux/usb/langwell_udc.h b/include/linux/usb/langwell_udc.h
deleted file mode 100644
index 2d2d1bbad9d2..000000000000
--- a/include/linux/usb/langwell_udc.h
+++ /dev/null
@@ -1,310 +0,0 @@
1/*
2 * Intel Langwell USB Device Controller driver
3 * Copyright (C) 2008-2009, Intel Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 */
19
20#ifndef __LANGWELL_UDC_H
21#define __LANGWELL_UDC_H
22
23
24/* MACRO defines */
25#define CAP_REG_OFFSET 0x0
26#define OP_REG_OFFSET 0x28
27
28#define DMA_ADDR_INVALID (~(dma_addr_t)0)
29
30#define DQH_ALIGNMENT 2048
31#define DTD_ALIGNMENT 64
32#define DMA_BOUNDARY 4096
33
34#define EP0_MAX_PKT_SIZE 64
35#define EP_DIR_IN 1
36#define EP_DIR_OUT 0
37
38#define FLUSH_TIMEOUT 1000
39#define RESET_TIMEOUT 1000
40#define SETUPSTAT_TIMEOUT 100
41#define PRIME_TIMEOUT 100
42
43
44/* device memory space registers */
45
46/* Capability Registers, BAR0 + CAP_REG_OFFSET */
47struct langwell_cap_regs {
48 /* offset: 0x0 */
49 u8 caplength; /* offset of Operational Register */
50 u8 _reserved3;
51 u16 hciversion; /* H: BCD encoding of host version */
52 u32 hcsparams; /* H: host port steering logic capability */
53 u32 hccparams; /* H: host multiple mode control capability */
54#define HCC_LEN BIT(17) /* Link power management (LPM) capability */
55 u8 _reserved4[0x20-0xc];
56 /* offset: 0x20 */
57 u16 dciversion; /* BCD encoding of device version */
58 u8 _reserved5[0x24-0x22];
59 u32 dccparams; /* overall device controller capability */
60#define HOSTCAP BIT(8) /* host capable */
61#define DEVCAP BIT(7) /* device capable */
62#define DEN(d) \
63 (((d)>>0)&0x1f) /* bits 4:0, device endpoint number */
64} __attribute__ ((packed));
65
66
67/* Operational Registers, BAR0 + OP_REG_OFFSET */
68struct langwell_op_regs {
69 /* offset: 0x28 */
70 u32 extsts;
71#define EXTS_TI1 BIT(4) /* general purpose timer interrupt 1 */
72#define EXTS_TI1TI0 BIT(3) /* general purpose timer interrupt 0 */
73#define EXTS_TI1UPI BIT(2) /* USB host periodic interrupt */
74#define EXTS_TI1UAI BIT(1) /* USB host asynchronous interrupt */
75#define EXTS_TI1NAKI BIT(0) /* NAK interrupt */
76 u32 extintr;
77#define EXTI_TIE1 BIT(4) /* general purpose timer interrupt enable 1 */
78#define EXTI_TIE0 BIT(3) /* general purpose timer interrupt enable 0 */
79#define EXTI_UPIE BIT(2) /* USB host periodic interrupt enable */
80#define EXTI_UAIE BIT(1) /* USB host asynchronous interrupt enable */
81#define EXTI_NAKE BIT(0) /* NAK interrupt enable */
82 /* offset: 0x30 */
83 u32 usbcmd;
84#define CMD_HIRD(u) \
85 (((u)>>24)&0xf) /* bits 27:24, host init resume duration */
86#define CMD_ITC(u) \
87 (((u)>>16)&0xff) /* bits 23:16, interrupt threshold control */
88#define CMD_PPE BIT(15) /* per-port change events enable */
89#define CMD_ATDTW BIT(14) /* add dTD tripwire */
90#define CMD_SUTW BIT(13) /* setup tripwire */
91#define CMD_ASPE BIT(11) /* asynchronous schedule park mode enable */
92#define CMD_FS2 BIT(10) /* frame list size */
93#define CMD_ASP1 BIT(9) /* asynchronous schedule park mode count */
94#define CMD_ASP0 BIT(8)
95#define CMD_LR BIT(7) /* light host/device controller reset */
96#define CMD_IAA BIT(6) /* interrupt on async advance doorbell */
97#define CMD_ASE BIT(5) /* asynchronous schedule enable */
98#define CMD_PSE BIT(4) /* periodic schedule enable */
99#define CMD_FS1 BIT(3)
100#define CMD_FS0 BIT(2)
101#define CMD_RST BIT(1) /* controller reset */
102#define CMD_RUNSTOP BIT(0) /* run/stop */
103 u32 usbsts;
104#define STS_PPCI(u) \
105 (((u)>>16)&0xffff) /* bits 31:16, port-n change detect */
106#define STS_AS BIT(15) /* asynchronous schedule status */
107#define STS_PS BIT(14) /* periodic schedule status */
108#define STS_RCL BIT(13) /* reclamation */
109#define STS_HCH BIT(12) /* HC halted */
110#define STS_ULPII BIT(10) /* ULPI interrupt */
111#define STS_SLI BIT(8) /* DC suspend */
112#define STS_SRI BIT(7) /* SOF received */
113#define STS_URI BIT(6) /* USB reset received */
114#define STS_AAI BIT(5) /* interrupt on async advance */
115#define STS_SEI BIT(4) /* system error */
116#define STS_FRI BIT(3) /* frame list rollover */
117#define STS_PCI BIT(2) /* port change detect */
118#define STS_UEI BIT(1) /* USB error interrupt */
119#define STS_UI BIT(0) /* USB interrupt */
120 u32 usbintr;
121/* bits 31:16, per-port interrupt enable */
122#define INTR_PPCE(u) (((u)>>16)&0xffff)
123#define INTR_ULPIE BIT(10) /* ULPI enable */
124#define INTR_SLE BIT(8) /* DC sleep/suspend enable */
125#define INTR_SRE BIT(7) /* SOF received enable */
126#define INTR_URE BIT(6) /* USB reset enable */
127#define INTR_AAE BIT(5) /* interrupt on async advance enable */
128#define INTR_SEE BIT(4) /* system error enable */
129#define INTR_FRE BIT(3) /* frame list rollover enable */
130#define INTR_PCE BIT(2) /* port change detect enable */
131#define INTR_UEE BIT(1) /* USB error interrupt enable */
132#define INTR_UE BIT(0) /* USB interrupt enable */
133 u32 frindex; /* frame index */
134#define FRINDEX_MASK (0x3fff << 0)
135 u32 ctrldssegment; /* not used */
136 u32 deviceaddr;
137#define USBADR_SHIFT 25
138#define USBADR(d) \
139 (((d)>>25)&0x7f) /* bits 31:25, device address */
140#define USBADR_MASK (0x7f << 25)
141#define USBADRA BIT(24) /* device address advance */
142 u32 endpointlistaddr;/* endpoint list top memory address */
143/* bits 31:11, endpoint list pointer */
144#define EPBASE(d) (((d)>>11)&0x1fffff)
145#define ENDPOINTLISTADDR_MASK (0x1fffff << 11)
146 u32 ttctrl; /* H: TT operatin, not used */
147 /* offset: 0x50 */
148 u32 burstsize; /* burst size of data movement */
149#define TXPBURST(b) \
150 (((b)>>8)&0xff) /* bits 15:8, TX burst length */
151#define RXPBURST(b) \
152 (((b)>>0)&0xff) /* bits 7:0, RX burst length */
153 u32 txfilltuning; /* TX tuning */
154 u32 txttfilltuning; /* H: TX TT tuning */
155 u32 ic_usb; /* control the IC_USB FS/LS transceiver */
156 /* offset: 0x60 */
157 u32 ulpi_viewport; /* indirect access to ULPI PHY */
158#define ULPIWU BIT(31) /* ULPI wakeup */
159#define ULPIRUN BIT(30) /* ULPI read/write run */
160#define ULPIRW BIT(29) /* ULPI read/write control */
161#define ULPISS BIT(27) /* ULPI sync state */
162#define ULPIPORT(u) \
163 (((u)>>24)&7) /* bits 26:24, ULPI port number */
164#define ULPIADDR(u) \
165 (((u)>>16)&0xff) /* bits 23:16, ULPI data address */
166#define ULPIDATRD(u) \
167 (((u)>>8)&0xff) /* bits 15:8, ULPI data read */
168#define ULPIDATWR(u) \
169 (((u)>>0)&0xff) /* bits 7:0, ULPI date write */
170 u8 _reserved6[0x70-0x64];
171 /* offset: 0x70 */
172 u32 configflag; /* H: not used */
173 u32 portsc1; /* port status */
174#define DA(p) \
175 (((p)>>25)&0x7f) /* bits 31:25, device address */
176#define PORTS_SSTS (BIT(24) | BIT(23)) /* suspend status */
177#define PORTS_WKOC BIT(22) /* wake on over-current enable */
178#define PORTS_WKDS BIT(21) /* wake on disconnect enable */
179#define PORTS_WKCN BIT(20) /* wake on connect enable */
180#define PORTS_PTC(p) (((p)>>16)&0xf) /* bits 19:16, port test control */
181#define PORTS_PIC (BIT(15) | BIT(14)) /* port indicator control */
182#define PORTS_PO BIT(13) /* port owner */
183#define PORTS_PP BIT(12) /* port power */
184#define PORTS_LS (BIT(11) | BIT(10)) /* line status */
185#define PORTS_SLP BIT(9) /* suspend using L1 */
186#define PORTS_PR BIT(8) /* port reset */
187#define PORTS_SUSP BIT(7) /* suspend */
188#define PORTS_FPR BIT(6) /* force port resume */
189#define PORTS_OCC BIT(5) /* over-current change */
190#define PORTS_OCA BIT(4) /* over-current active */
191#define PORTS_PEC BIT(3) /* port enable/disable change */
192#define PORTS_PE BIT(2) /* port enable/disable */
193#define PORTS_CSC BIT(1) /* connect status change */
194#define PORTS_CCS BIT(0) /* current connect status */
195 u8 _reserved7[0xb4-0x78];
196 /* offset: 0xb4 */
197 u32 devlc; /* control LPM and each USB port behavior */
198/* bits 31:29, parallel transceiver select */
199#define LPM_PTS(d) (((d)>>29)&7)
200#define LPM_STS BIT(28) /* serial transceiver select */
201#define LPM_PTW BIT(27) /* parallel transceiver width */
202#define LPM_PSPD(d) (((d)>>25)&3) /* bits 26:25, port speed */
203#define LPM_PSPD_MASK (BIT(26) | BIT(25))
204#define LPM_SPEED_FULL 0
205#define LPM_SPEED_LOW 1
206#define LPM_SPEED_HIGH 2
207#define LPM_SRT BIT(24) /* shorten reset time */
208#define LPM_PFSC BIT(23) /* port force full speed connect */
209#define LPM_PHCD BIT(22) /* PHY low power suspend clock disable */
210#define LPM_STL BIT(16) /* STALL reply to LPM token */
211#define LPM_BA(d) \
212 (((d)>>1)&0x7ff) /* bits 11:1, BmAttributes */
213#define LPM_NYT_ACK BIT(0) /* NYET/ACK reply to LPM token */
214 u8 _reserved8[0xf4-0xb8];
215 /* offset: 0xf4 */
216 u32 otgsc; /* On-The-Go status and control */
217#define OTGSC_DPIE BIT(30) /* data pulse interrupt enable */
218#define OTGSC_MSE BIT(29) /* 1 ms timer interrupt enable */
219#define OTGSC_BSEIE BIT(28) /* B session end interrupt enable */
220#define OTGSC_BSVIE BIT(27) /* B session valid interrupt enable */
221#define OTGSC_ASVIE BIT(26) /* A session valid interrupt enable */
222#define OTGSC_AVVIE BIT(25) /* A VBUS valid interrupt enable */
223#define OTGSC_IDIE BIT(24) /* USB ID interrupt enable */
224#define OTGSC_DPIS BIT(22) /* data pulse interrupt status */
225#define OTGSC_MSS BIT(21) /* 1 ms timer interrupt status */
226#define OTGSC_BSEIS BIT(20) /* B session end interrupt status */
227#define OTGSC_BSVIS BIT(19) /* B session valid interrupt status */
228#define OTGSC_ASVIS BIT(18) /* A session valid interrupt status */
229#define OTGSC_AVVIS BIT(17) /* A VBUS valid interrupt status */
230#define OTGSC_IDIS BIT(16) /* USB ID interrupt status */
231#define OTGSC_DPS BIT(14) /* data bus pulsing status */
232#define OTGSC_MST BIT(13) /* 1 ms timer toggle */
233#define OTGSC_BSE BIT(12) /* B session end */
234#define OTGSC_BSV BIT(11) /* B session valid */
235#define OTGSC_ASV BIT(10) /* A session valid */
236#define OTGSC_AVV BIT(9) /* A VBUS valid */
237#define OTGSC_USBID BIT(8) /* USB ID */
238#define OTGSC_HABA BIT(7) /* hw assist B-disconnect to A-connect */
239#define OTGSC_HADP BIT(6) /* hw assist data pulse */
240#define OTGSC_IDPU BIT(5) /* ID pullup */
241#define OTGSC_DP BIT(4) /* data pulsing */
242#define OTGSC_OT BIT(3) /* OTG termination */
243#define OTGSC_HAAR BIT(2) /* hw assist auto reset */
244#define OTGSC_VC BIT(1) /* VBUS charge */
245#define OTGSC_VD BIT(0) /* VBUS discharge */
246 u32 usbmode;
247#define MODE_VBPS BIT(5) /* R/W VBUS power select */
248#define MODE_SDIS BIT(4) /* R/W stream disable mode */
249#define MODE_SLOM BIT(3) /* R/W setup lockout mode */
250#define MODE_ENSE BIT(2) /* endian select */
251#define MODE_CM(u) (((u)>>0)&3) /* bits 1:0, controller mode */
252#define MODE_IDLE 0
253#define MODE_DEVICE 2
254#define MODE_HOST 3
255 u8 _reserved9[0x100-0xfc];
256 /* offset: 0x100 */
257 u32 endptnak;
258#define EPTN(e) \
259 (((e)>>16)&0xffff) /* bits 31:16, TX endpoint NAK */
260#define EPRN(e) \
261 (((e)>>0)&0xffff) /* bits 15:0, RX endpoint NAK */
262 u32 endptnaken;
263#define EPTNE(e) \
264 (((e)>>16)&0xffff) /* bits 31:16, TX endpoint NAK enable */
265#define EPRNE(e) \
266 (((e)>>0)&0xffff) /* bits 15:0, RX endpoint NAK enable */
267 u32 endptsetupstat;
268#define SETUPSTAT_MASK (0xffff << 0) /* bits 15:0 */
269#define EP0SETUPSTAT_MASK 1
270 u32 endptprime;
271/* bits 31:16, prime endpoint transmit buffer */
272#define PETB(e) (((e)>>16)&0xffff)
273/* bits 15:0, prime endpoint receive buffer */
274#define PERB(e) (((e)>>0)&0xffff)
275 /* offset: 0x110 */
276 u32 endptflush;
277/* bits 31:16, flush endpoint transmit buffer */
278#define FETB(e) (((e)>>16)&0xffff)
279/* bits 15:0, flush endpoint receive buffer */
280#define FERB(e) (((e)>>0)&0xffff)
281 u32 endptstat;
282/* bits 31:16, endpoint transmit buffer ready */
283#define ETBR(e) (((e)>>16)&0xffff)
284/* bits 15:0, endpoint receive buffer ready */
285#define ERBR(e) (((e)>>0)&0xffff)
286 u32 endptcomplete;
287/* bits 31:16, endpoint transmit complete event */
288#define ETCE(e) (((e)>>16)&0xffff)
289/* bits 15:0, endpoint receive complete event */
290#define ERCE(e) (((e)>>0)&0xffff)
291 /* offset: 0x11c */
292 u32 endptctrl[16];
293#define EPCTRL_TXE BIT(23) /* TX endpoint enable */
294#define EPCTRL_TXR BIT(22) /* TX data toggle reset */
295#define EPCTRL_TXI BIT(21) /* TX data toggle inhibit */
296#define EPCTRL_TXT(e) (((e)>>18)&3) /* bits 19:18, TX endpoint type */
297#define EPCTRL_TXT_SHIFT 18
298#define EPCTRL_TXD BIT(17) /* TX endpoint data source */
299#define EPCTRL_TXS BIT(16) /* TX endpoint STALL */
300#define EPCTRL_RXE BIT(7) /* RX endpoint enable */
301#define EPCTRL_RXR BIT(6) /* RX data toggle reset */
302#define EPCTRL_RXI BIT(5) /* RX data toggle inhibit */
303#define EPCTRL_RXT(e) (((e)>>2)&3) /* bits 3:2, RX endpoint type */
304#define EPCTRL_RXT_SHIFT 2 /* bits 19:18, TX endpoint type */
305#define EPCTRL_RXD BIT(1) /* RX endpoint data sink */
306#define EPCTRL_RXS BIT(0) /* RX endpoint STALL */
307} __attribute__ ((packed));
308
309#endif /* __LANGWELL_UDC_H */
310
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
index 474283888233..86c0b451745d 100644
--- a/include/linux/usb/serial.h
+++ b/include/linux/usb/serial.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * USB Serial Converter stuff 2 * USB Serial Converter stuff
3 * 3 *
4 * Copyright (C) 1999 - 2005 4 * Copyright (C) 1999 - 2012
5 * Greg Kroah-Hartman (greg@kroah.com) 5 * Greg Kroah-Hartman (greg@kroah.com)
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
@@ -249,6 +249,7 @@ struct usb_serial_driver {
249 249
250 int (*suspend)(struct usb_serial *serial, pm_message_t message); 250 int (*suspend)(struct usb_serial *serial, pm_message_t message);
251 int (*resume)(struct usb_serial *serial); 251 int (*resume)(struct usb_serial *serial);
252 int (*reset_resume)(struct usb_serial *serial);
252 253
253 /* serial function calls */ 254 /* serial function calls */
254 /* Called by console and by the tty layer */ 255 /* Called by console and by the tty layer */
@@ -292,16 +293,11 @@ struct usb_serial_driver {
292#define to_usb_serial_driver(d) \ 293#define to_usb_serial_driver(d) \
293 container_of(d, struct usb_serial_driver, driver) 294 container_of(d, struct usb_serial_driver, driver)
294 295
295extern int usb_serial_register_drivers(struct usb_driver *udriver, 296extern int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
296 struct usb_serial_driver * const serial_drivers[]); 297 const char *name, const struct usb_device_id *id_table);
297extern void usb_serial_deregister_drivers(struct usb_driver *udriver, 298extern void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[]);
298 struct usb_serial_driver * const serial_drivers[]);
299extern void usb_serial_port_softint(struct usb_serial_port *port); 299extern void usb_serial_port_softint(struct usb_serial_port *port);
300 300
301extern int usb_serial_probe(struct usb_interface *iface,
302 const struct usb_device_id *id);
303extern void usb_serial_disconnect(struct usb_interface *iface);
304
305extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message); 301extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
306extern int usb_serial_resume(struct usb_interface *intf); 302extern int usb_serial_resume(struct usb_interface *intf);
307 303
@@ -400,8 +396,8 @@ do { \
400 396
401/* 397/*
402 * module_usb_serial_driver() - Helper macro for registering a USB Serial driver 398 * module_usb_serial_driver() - Helper macro for registering a USB Serial driver
403 * @__usb_driver: usb_driver struct to register
404 * @__serial_drivers: list of usb_serial drivers to register 399 * @__serial_drivers: list of usb_serial drivers to register
400 * @__ids: all device ids that @__serial_drivers bind to
405 * 401 *
406 * Helper macro for USB serial drivers which do not do anything special 402 * Helper macro for USB serial drivers which do not do anything special
407 * in module init/exit. This eliminates a lot of boilerplate. Each 403 * in module init/exit. This eliminates a lot of boilerplate. Each
@@ -409,9 +405,21 @@ do { \
409 * module_init() and module_exit() 405 * module_init() and module_exit()
410 * 406 *
411 */ 407 */
412#define module_usb_serial_driver(__usb_driver, __serial_drivers) \ 408#define usb_serial_module_driver(__name, __serial_drivers, __ids) \
413 module_driver(__usb_driver, usb_serial_register_drivers, \ 409static int __init usb_serial_module_init(void) \
414 usb_serial_deregister_drivers, __serial_drivers) 410{ \
411 return usb_serial_register_drivers(__serial_drivers, \
412 __name, __ids); \
413} \
414module_init(usb_serial_module_init); \
415static void __exit usb_serial_module_exit(void) \
416{ \
417 usb_serial_deregister_drivers(__serial_drivers); \
418} \
419module_exit(usb_serial_module_exit);
420
421#define module_usb_serial_driver(__serial_drivers, __ids) \
422 usb_serial_module_driver(KBUILD_MODNAME, __serial_drivers, __ids)
415 423
416#endif /* __LINUX_USB_SERIAL_H */ 424#endif /* __LINUX_USB_SERIAL_H */
417 425
diff --git a/tools/usb/ffs-test.c b/tools/usb/ffs-test.c
index 4b107b5e623f..8674b9ec14f6 100644
--- a/tools/usb/ffs-test.c
+++ b/tools/usb/ffs-test.c
@@ -297,7 +297,7 @@ static void *start_thread_helper(void *arg)
297 297
298 ret = t->in(t, t->buf, t->buf_size); 298 ret = t->in(t, t->buf, t->buf_size);
299 if (ret > 0) { 299 if (ret > 0) {
300 ret = t->out(t, t->buf, t->buf_size); 300 ret = t->out(t, t->buf, ret);
301 name = out_name; 301 name = out_name;
302 op = "write"; 302 op = "write";
303 } else { 303 } else {
diff --git a/tools/usb/testusb.c b/tools/usb/testusb.c
index 6e0f56701e44..82d7c590c026 100644
--- a/tools/usb/testusb.c
+++ b/tools/usb/testusb.c
@@ -358,6 +358,7 @@ static const char *usbfs_dir_find(void)
358{ 358{
359 static char usbfs_path_0[] = "/dev/usb/devices"; 359 static char usbfs_path_0[] = "/dev/usb/devices";
360 static char usbfs_path_1[] = "/proc/bus/usb/devices"; 360 static char usbfs_path_1[] = "/proc/bus/usb/devices";
361 static char udev_usb_path[] = "/dev/bus/usb";
361 362
362 static char *const usbfs_paths[] = { 363 static char *const usbfs_paths[] = {
363 usbfs_path_0, usbfs_path_1 364 usbfs_path_0, usbfs_path_1
@@ -376,6 +377,10 @@ static const char *usbfs_dir_find(void)
376 } 377 }
377 } while (++it != end); 378 } while (++it != end);
378 379
380 /* real device-nodes managed by udev */
381 if (access(udev_usb_path, F_OK) == 0)
382 return udev_usb_path;
383
379 return NULL; 384 return NULL;
380} 385}
381 386