diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-16 14:17:01 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-16 14:17:01 -0400 |
commit | 39c242704cba38bdf67566589facdd6fb2f2d941 (patch) | |
tree | 699e3e7462f21598e74eb9a5f54c6b84ab7e74f3 | |
parent | ad81f0545ef01ea651886dddac4bef6cec930092 (diff) | |
parent | 690c70bab1ebab0782cf9c316b726e2dddebc411 (diff) |
Merge tag 'fixes-for-v3.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus
Felipe writes:
usb: fixes for v3.11-rc1
Quite a few changes going on here. They have been
boot tested on OMAP5 and compile tested on ARM and x86
with different defconfigs.
Many gadget drivers got a depends on HAS_DMA in order
to prevent build failures on !HAS_DMA architectures.
DWC3 learned how to allow a gadget driver to be modprobed
after an unsuccessful modprobe of another gadget driver. It
also got a fix to a wrong bit mask in dwc3_event_type, and
learns to return proper error codes from failed usb3_phy
initialization.
RNDIS function driver can now be built with configfs.
at91_udc now knows that we need to prepare the clock
before enabling it.
renesas_usbhs now lets gadget drivers be modprobed
multiple times.
phy-omap-usb3 got a fix for the DPLL settings.
mv_u3d_core now passes the correct cookie to free_irq().
fotg210-udc got Section mismatch fixes.
Signed-of-by: Felipe Balbi <balbi@ti.com>
-rw-r--r-- | drivers/usb/dwc3/Kconfig | 2 | ||||
-rw-r--r-- | drivers/usb/dwc3/core.c | 2 | ||||
-rw-r--r-- | drivers/usb/dwc3/core.h | 4 | ||||
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 1 | ||||
-rw-r--r-- | drivers/usb/gadget/Kconfig | 5 | ||||
-rw-r--r-- | drivers/usb/gadget/at91_udc.c | 16 | ||||
-rw-r--r-- | drivers/usb/gadget/fotg210-udc.c | 4 | ||||
-rw-r--r-- | drivers/usb/gadget/mv_u3d_core.c | 4 | ||||
-rw-r--r-- | drivers/usb/gadget/udc-core.c | 6 | ||||
-rw-r--r-- | drivers/usb/phy/phy-omap-usb3.c | 2 | ||||
-rw-r--r-- | drivers/usb/phy/phy-samsung-usb2.c | 2 | ||||
-rw-r--r-- | drivers/usb/renesas_usbhs/mod_gadget.c | 4 |
12 files changed, 30 insertions, 22 deletions
diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig index 757aa18027d0..2378958ea63e 100644 --- a/drivers/usb/dwc3/Kconfig +++ b/drivers/usb/dwc3/Kconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | config USB_DWC3 | 1 | config USB_DWC3 |
2 | tristate "DesignWare USB3 DRD Core Support" | 2 | tristate "DesignWare USB3 DRD Core Support" |
3 | depends on (USB || USB_GADGET) && GENERIC_HARDIRQS | 3 | depends on (USB || USB_GADGET) && GENERIC_HARDIRQS && HAS_DMA |
4 | select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD | 4 | select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD |
5 | help | 5 | help |
6 | Say Y or M here if your system has a Dual Role SuperSpeed | 6 | Say Y or M here if your system has a Dual Role SuperSpeed |
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index c35d49d39b76..358375e0b291 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c | |||
@@ -450,7 +450,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
450 | } | 450 | } |
451 | 451 | ||
452 | if (IS_ERR(dwc->usb3_phy)) { | 452 | if (IS_ERR(dwc->usb3_phy)) { |
453 | ret = PTR_ERR(dwc->usb2_phy); | 453 | ret = PTR_ERR(dwc->usb3_phy); |
454 | 454 | ||
455 | /* | 455 | /* |
456 | * if -ENXIO is returned, it means PHY layer wasn't | 456 | * if -ENXIO is returned, it means PHY layer wasn't |
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index b69d322e3cab..27dad993b007 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h | |||
@@ -759,8 +759,8 @@ struct dwc3 { | |||
759 | 759 | ||
760 | struct dwc3_event_type { | 760 | struct dwc3_event_type { |
761 | u32 is_devspec:1; | 761 | u32 is_devspec:1; |
762 | u32 type:6; | 762 | u32 type:7; |
763 | u32 reserved8_31:25; | 763 | u32 reserved8_31:24; |
764 | } __packed; | 764 | } __packed; |
765 | 765 | ||
766 | #define DWC3_DEPEVT_XFERCOMPLETE 0x01 | 766 | #define DWC3_DEPEVT_XFERCOMPLETE 0x01 |
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index b5e5b35df49c..f77083fedc68 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
@@ -1584,6 +1584,7 @@ err1: | |||
1584 | __dwc3_gadget_ep_disable(dwc->eps[0]); | 1584 | __dwc3_gadget_ep_disable(dwc->eps[0]); |
1585 | 1585 | ||
1586 | err0: | 1586 | err0: |
1587 | dwc->gadget_driver = NULL; | ||
1587 | spin_unlock_irqrestore(&dwc->lock, flags); | 1588 | spin_unlock_irqrestore(&dwc->lock, flags); |
1588 | 1589 | ||
1589 | return ret; | 1590 | return ret; |
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 62f6802f6e0f..8e9368330b10 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig | |||
@@ -193,6 +193,7 @@ config USB_FUSB300 | |||
193 | Faraday usb device controller FUSB300 driver | 193 | Faraday usb device controller FUSB300 driver |
194 | 194 | ||
195 | config USB_FOTG210_UDC | 195 | config USB_FOTG210_UDC |
196 | depends on HAS_DMA | ||
196 | tristate "Faraday FOTG210 USB Peripheral Controller" | 197 | tristate "Faraday FOTG210 USB Peripheral Controller" |
197 | help | 198 | help |
198 | Faraday USB2.0 OTG controller which can be configured as | 199 | Faraday USB2.0 OTG controller which can be configured as |
@@ -328,13 +329,14 @@ config USB_S3C_HSUDC | |||
328 | 329 | ||
329 | config USB_MV_UDC | 330 | config USB_MV_UDC |
330 | tristate "Marvell USB2.0 Device Controller" | 331 | tristate "Marvell USB2.0 Device Controller" |
331 | depends on GENERIC_HARDIRQS | 332 | depends on GENERIC_HARDIRQS && HAS_DMA |
332 | help | 333 | help |
333 | Marvell Socs (including PXA and MMP series) include a high speed | 334 | Marvell Socs (including PXA and MMP series) include a high speed |
334 | USB2.0 OTG controller, which can be configured as high speed or | 335 | USB2.0 OTG controller, which can be configured as high speed or |
335 | full speed USB peripheral. | 336 | full speed USB peripheral. |
336 | 337 | ||
337 | config USB_MV_U3D | 338 | config USB_MV_U3D |
339 | depends on HAS_DMA | ||
338 | tristate "MARVELL PXA2128 USB 3.0 controller" | 340 | tristate "MARVELL PXA2128 USB 3.0 controller" |
339 | help | 341 | help |
340 | MARVELL PXA2128 Processor series include a super speed USB3.0 device | 342 | MARVELL PXA2128 Processor series include a super speed USB3.0 device |
@@ -639,6 +641,7 @@ config USB_CONFIGFS_RNDIS | |||
639 | depends on USB_CONFIGFS | 641 | depends on USB_CONFIGFS |
640 | depends on NET | 642 | depends on NET |
641 | select USB_U_ETHER | 643 | select USB_U_ETHER |
644 | select USB_U_RNDIS | ||
642 | select USB_F_RNDIS | 645 | select USB_F_RNDIS |
643 | help | 646 | help |
644 | Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, | 647 | Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, |
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index 073b938f9135..d9a6add0c852 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c | |||
@@ -870,8 +870,8 @@ static void clk_on(struct at91_udc *udc) | |||
870 | if (udc->clocked) | 870 | if (udc->clocked) |
871 | return; | 871 | return; |
872 | udc->clocked = 1; | 872 | udc->clocked = 1; |
873 | clk_enable(udc->iclk); | 873 | clk_prepare_enable(udc->iclk); |
874 | clk_enable(udc->fclk); | 874 | clk_prepare_enable(udc->fclk); |
875 | } | 875 | } |
876 | 876 | ||
877 | static void clk_off(struct at91_udc *udc) | 877 | static void clk_off(struct at91_udc *udc) |
@@ -880,8 +880,8 @@ static void clk_off(struct at91_udc *udc) | |||
880 | return; | 880 | return; |
881 | udc->clocked = 0; | 881 | udc->clocked = 0; |
882 | udc->gadget.speed = USB_SPEED_UNKNOWN; | 882 | udc->gadget.speed = USB_SPEED_UNKNOWN; |
883 | clk_disable(udc->fclk); | 883 | clk_disable_unprepare(udc->fclk); |
884 | clk_disable(udc->iclk); | 884 | clk_disable_unprepare(udc->iclk); |
885 | } | 885 | } |
886 | 886 | ||
887 | /* | 887 | /* |
@@ -1725,7 +1725,7 @@ static int at91udc_probe(struct platform_device *pdev) | |||
1725 | /* init software state */ | 1725 | /* init software state */ |
1726 | udc = &controller; | 1726 | udc = &controller; |
1727 | udc->gadget.dev.parent = dev; | 1727 | udc->gadget.dev.parent = dev; |
1728 | if (pdev->dev.of_node) | 1728 | if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) |
1729 | at91udc_of_init(udc, pdev->dev.of_node); | 1729 | at91udc_of_init(udc, pdev->dev.of_node); |
1730 | else | 1730 | else |
1731 | memcpy(&udc->board, dev->platform_data, | 1731 | memcpy(&udc->board, dev->platform_data, |
@@ -1782,12 +1782,14 @@ static int at91udc_probe(struct platform_device *pdev) | |||
1782 | } | 1782 | } |
1783 | 1783 | ||
1784 | /* don't do anything until we have both gadget driver and VBUS */ | 1784 | /* don't do anything until we have both gadget driver and VBUS */ |
1785 | clk_enable(udc->iclk); | 1785 | retval = clk_prepare_enable(udc->iclk); |
1786 | if (retval) | ||
1787 | goto fail1; | ||
1786 | at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); | 1788 | at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); |
1787 | at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff); | 1789 | at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff); |
1788 | /* Clear all pending interrupts - UDP may be used by bootloader. */ | 1790 | /* Clear all pending interrupts - UDP may be used by bootloader. */ |
1789 | at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff); | 1791 | at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff); |
1790 | clk_disable(udc->iclk); | 1792 | clk_disable_unprepare(udc->iclk); |
1791 | 1793 | ||
1792 | /* request UDC and maybe VBUS irqs */ | 1794 | /* request UDC and maybe VBUS irqs */ |
1793 | udc->udp_irq = platform_get_irq(pdev, 0); | 1795 | udc->udp_irq = platform_get_irq(pdev, 0); |
diff --git a/drivers/usb/gadget/fotg210-udc.c b/drivers/usb/gadget/fotg210-udc.c index cce5535b1dc6..10cd18ddd0d4 100644 --- a/drivers/usb/gadget/fotg210-udc.c +++ b/drivers/usb/gadget/fotg210-udc.c | |||
@@ -1074,7 +1074,7 @@ static struct usb_gadget_ops fotg210_gadget_ops = { | |||
1074 | .udc_stop = fotg210_udc_stop, | 1074 | .udc_stop = fotg210_udc_stop, |
1075 | }; | 1075 | }; |
1076 | 1076 | ||
1077 | static int __exit fotg210_udc_remove(struct platform_device *pdev) | 1077 | static int fotg210_udc_remove(struct platform_device *pdev) |
1078 | { | 1078 | { |
1079 | struct fotg210_udc *fotg210 = dev_get_drvdata(&pdev->dev); | 1079 | struct fotg210_udc *fotg210 = dev_get_drvdata(&pdev->dev); |
1080 | 1080 | ||
@@ -1088,7 +1088,7 @@ static int __exit fotg210_udc_remove(struct platform_device *pdev) | |||
1088 | return 0; | 1088 | return 0; |
1089 | } | 1089 | } |
1090 | 1090 | ||
1091 | static int __init fotg210_udc_probe(struct platform_device *pdev) | 1091 | static int fotg210_udc_probe(struct platform_device *pdev) |
1092 | { | 1092 | { |
1093 | struct resource *res, *ires; | 1093 | struct resource *res, *ires; |
1094 | struct fotg210_udc *fotg210 = NULL; | 1094 | struct fotg210_udc *fotg210 = NULL; |
diff --git a/drivers/usb/gadget/mv_u3d_core.c b/drivers/usb/gadget/mv_u3d_core.c index 07fdb3eaf48a..ec6a2d290398 100644 --- a/drivers/usb/gadget/mv_u3d_core.c +++ b/drivers/usb/gadget/mv_u3d_core.c | |||
@@ -1776,7 +1776,7 @@ static int mv_u3d_remove(struct platform_device *dev) | |||
1776 | kfree(u3d->eps); | 1776 | kfree(u3d->eps); |
1777 | 1777 | ||
1778 | if (u3d->irq) | 1778 | if (u3d->irq) |
1779 | free_irq(u3d->irq, &dev->dev); | 1779 | free_irq(u3d->irq, u3d); |
1780 | 1780 | ||
1781 | if (u3d->cap_regs) | 1781 | if (u3d->cap_regs) |
1782 | iounmap(u3d->cap_regs); | 1782 | iounmap(u3d->cap_regs); |
@@ -1974,7 +1974,7 @@ static int mv_u3d_probe(struct platform_device *dev) | |||
1974 | return 0; | 1974 | return 0; |
1975 | 1975 | ||
1976 | err_unregister: | 1976 | err_unregister: |
1977 | free_irq(u3d->irq, &dev->dev); | 1977 | free_irq(u3d->irq, u3d); |
1978 | err_request_irq: | 1978 | err_request_irq: |
1979 | err_get_irq: | 1979 | err_get_irq: |
1980 | kfree(u3d->status_req); | 1980 | kfree(u3d->status_req); |
diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c index ffd8fa541101..c28ac9872030 100644 --- a/drivers/usb/gadget/udc-core.c +++ b/drivers/usb/gadget/udc-core.c | |||
@@ -50,6 +50,8 @@ static DEFINE_MUTEX(udc_lock); | |||
50 | 50 | ||
51 | /* ------------------------------------------------------------------------- */ | 51 | /* ------------------------------------------------------------------------- */ |
52 | 52 | ||
53 | #ifdef CONFIG_HAS_DMA | ||
54 | |||
53 | int usb_gadget_map_request(struct usb_gadget *gadget, | 55 | int usb_gadget_map_request(struct usb_gadget *gadget, |
54 | struct usb_request *req, int is_in) | 56 | struct usb_request *req, int is_in) |
55 | { | 57 | { |
@@ -99,6 +101,8 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget, | |||
99 | } | 101 | } |
100 | EXPORT_SYMBOL_GPL(usb_gadget_unmap_request); | 102 | EXPORT_SYMBOL_GPL(usb_gadget_unmap_request); |
101 | 103 | ||
104 | #endif /* CONFIG_HAS_DMA */ | ||
105 | |||
102 | /* ------------------------------------------------------------------------- */ | 106 | /* ------------------------------------------------------------------------- */ |
103 | 107 | ||
104 | void usb_gadget_set_state(struct usb_gadget *gadget, | 108 | void usb_gadget_set_state(struct usb_gadget *gadget, |
@@ -194,9 +198,11 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget, | |||
194 | dev_set_name(&gadget->dev, "gadget"); | 198 | dev_set_name(&gadget->dev, "gadget"); |
195 | gadget->dev.parent = parent; | 199 | gadget->dev.parent = parent; |
196 | 200 | ||
201 | #ifdef CONFIG_HAS_DMA | ||
197 | dma_set_coherent_mask(&gadget->dev, parent->coherent_dma_mask); | 202 | dma_set_coherent_mask(&gadget->dev, parent->coherent_dma_mask); |
198 | gadget->dev.dma_parms = parent->dma_parms; | 203 | gadget->dev.dma_parms = parent->dma_parms; |
199 | gadget->dev.dma_mask = parent->dma_mask; | 204 | gadget->dev.dma_mask = parent->dma_mask; |
205 | #endif | ||
200 | 206 | ||
201 | if (release) | 207 | if (release) |
202 | gadget->dev.release = release; | 208 | gadget->dev.release = release; |
diff --git a/drivers/usb/phy/phy-omap-usb3.c b/drivers/usb/phy/phy-omap-usb3.c index efe6e1464f45..a2fb30bbb971 100644 --- a/drivers/usb/phy/phy-omap-usb3.c +++ b/drivers/usb/phy/phy-omap-usb3.c | |||
@@ -71,9 +71,9 @@ static struct usb_dpll_params omap_usb3_dpll_params[NUM_SYS_CLKS] = { | |||
71 | {1250, 5, 4, 20, 0}, /* 12 MHz */ | 71 | {1250, 5, 4, 20, 0}, /* 12 MHz */ |
72 | {3125, 20, 4, 20, 0}, /* 16.8 MHz */ | 72 | {3125, 20, 4, 20, 0}, /* 16.8 MHz */ |
73 | {1172, 8, 4, 20, 65537}, /* 19.2 MHz */ | 73 | {1172, 8, 4, 20, 65537}, /* 19.2 MHz */ |
74 | {1000, 7, 4, 10, 0}, /* 20 MHz */ | ||
74 | {1250, 12, 4, 20, 0}, /* 26 MHz */ | 75 | {1250, 12, 4, 20, 0}, /* 26 MHz */ |
75 | {3125, 47, 4, 20, 92843}, /* 38.4 MHz */ | 76 | {3125, 47, 4, 20, 92843}, /* 38.4 MHz */ |
76 | {1000, 7, 4, 10, 0}, /* 20 MHz */ | ||
77 | 77 | ||
78 | }; | 78 | }; |
79 | 79 | ||
diff --git a/drivers/usb/phy/phy-samsung-usb2.c b/drivers/usb/phy/phy-samsung-usb2.c index 1011c16ade7e..758b86d0fcb3 100644 --- a/drivers/usb/phy/phy-samsung-usb2.c +++ b/drivers/usb/phy/phy-samsung-usb2.c | |||
@@ -388,7 +388,7 @@ static int samsung_usb2phy_probe(struct platform_device *pdev) | |||
388 | clk = devm_clk_get(dev, "otg"); | 388 | clk = devm_clk_get(dev, "otg"); |
389 | 389 | ||
390 | if (IS_ERR(clk)) { | 390 | if (IS_ERR(clk)) { |
391 | dev_err(dev, "Failed to get otg clock\n"); | 391 | dev_err(dev, "Failed to get usbhost/otg clock\n"); |
392 | return PTR_ERR(clk); | 392 | return PTR_ERR(clk); |
393 | } | 393 | } |
394 | 394 | ||
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c index ed4949faa70d..805940c37353 100644 --- a/drivers/usb/renesas_usbhs/mod_gadget.c +++ b/drivers/usb/renesas_usbhs/mod_gadget.c | |||
@@ -855,10 +855,6 @@ static int usbhsg_gadget_stop(struct usb_gadget *gadget, | |||
855 | struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget); | 855 | struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget); |
856 | struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv); | 856 | struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv); |
857 | 857 | ||
858 | if (!driver || | ||
859 | !driver->unbind) | ||
860 | return -EINVAL; | ||
861 | |||
862 | usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD); | 858 | usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD); |
863 | gpriv->driver = NULL; | 859 | gpriv->driver = NULL; |
864 | 860 | ||