diff options
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r-- | drivers/usb/gadget/Kconfig | 5 | ||||
-rw-r--r-- | drivers/usb/gadget/at91_udc.c | 16 | ||||
-rw-r--r-- | drivers/usb/gadget/f_ecm.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_eem.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_ncm.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_phonet.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_rndis.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_subset.c | 7 | ||||
-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 |
11 files changed, 53 insertions, 24 deletions
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/f_ecm.c b/drivers/usb/gadget/f_ecm.c index 5d3561ea1c15..edab45da3741 100644 --- a/drivers/usb/gadget/f_ecm.c +++ b/drivers/usb/gadget/f_ecm.c | |||
@@ -959,8 +959,11 @@ static struct usb_function_instance *ecm_alloc_inst(void) | |||
959 | mutex_init(&opts->lock); | 959 | mutex_init(&opts->lock); |
960 | opts->func_inst.free_func_inst = ecm_free_inst; | 960 | opts->func_inst.free_func_inst = ecm_free_inst; |
961 | opts->net = gether_setup_default(); | 961 | opts->net = gether_setup_default(); |
962 | if (IS_ERR(opts->net)) | 962 | if (IS_ERR(opts->net)) { |
963 | return ERR_PTR(PTR_ERR(opts->net)); | 963 | struct net_device *net = opts->net; |
964 | kfree(opts); | ||
965 | return ERR_CAST(net); | ||
966 | } | ||
964 | 967 | ||
965 | config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type); | 968 | config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type); |
966 | 969 | ||
diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c index 90ee8022e8d8..d00392d879db 100644 --- a/drivers/usb/gadget/f_eem.c +++ b/drivers/usb/gadget/f_eem.c | |||
@@ -593,8 +593,11 @@ static struct usb_function_instance *eem_alloc_inst(void) | |||
593 | mutex_init(&opts->lock); | 593 | mutex_init(&opts->lock); |
594 | opts->func_inst.free_func_inst = eem_free_inst; | 594 | opts->func_inst.free_func_inst = eem_free_inst; |
595 | opts->net = gether_setup_default(); | 595 | opts->net = gether_setup_default(); |
596 | if (IS_ERR(opts->net)) | 596 | if (IS_ERR(opts->net)) { |
597 | return ERR_CAST(opts->net); | 597 | struct net_device *net = opts->net; |
598 | kfree(opts); | ||
599 | return ERR_CAST(net); | ||
600 | } | ||
598 | 601 | ||
599 | config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type); | 602 | config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type); |
600 | 603 | ||
diff --git a/drivers/usb/gadget/f_ncm.c b/drivers/usb/gadget/f_ncm.c index 952177f7eb9b..1c28fe13328a 100644 --- a/drivers/usb/gadget/f_ncm.c +++ b/drivers/usb/gadget/f_ncm.c | |||
@@ -1350,8 +1350,11 @@ static struct usb_function_instance *ncm_alloc_inst(void) | |||
1350 | mutex_init(&opts->lock); | 1350 | mutex_init(&opts->lock); |
1351 | opts->func_inst.free_func_inst = ncm_free_inst; | 1351 | opts->func_inst.free_func_inst = ncm_free_inst; |
1352 | opts->net = gether_setup_default(); | 1352 | opts->net = gether_setup_default(); |
1353 | if (IS_ERR(opts->net)) | 1353 | if (IS_ERR(opts->net)) { |
1354 | return ERR_PTR(PTR_ERR(opts->net)); | 1354 | struct net_device *net = opts->net; |
1355 | kfree(opts); | ||
1356 | return ERR_CAST(net); | ||
1357 | } | ||
1355 | 1358 | ||
1356 | config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type); | 1359 | config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type); |
1357 | 1360 | ||
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c index 7944fb0efe3b..1bf26e9f38cd 100644 --- a/drivers/usb/gadget/f_phonet.c +++ b/drivers/usb/gadget/f_phonet.c | |||
@@ -656,8 +656,11 @@ static struct usb_function_instance *phonet_alloc_inst(void) | |||
656 | 656 | ||
657 | opts->func_inst.free_func_inst = phonet_free_inst; | 657 | opts->func_inst.free_func_inst = phonet_free_inst; |
658 | opts->net = gphonet_setup_default(); | 658 | opts->net = gphonet_setup_default(); |
659 | if (IS_ERR(opts->net)) | 659 | if (IS_ERR(opts->net)) { |
660 | return ERR_PTR(PTR_ERR(opts->net)); | 660 | struct net_device *net = opts->net; |
661 | kfree(opts); | ||
662 | return ERR_CAST(net); | ||
663 | } | ||
661 | 664 | ||
662 | config_group_init_type_name(&opts->func_inst.group, "", | 665 | config_group_init_type_name(&opts->func_inst.group, "", |
663 | &phonet_func_type); | 666 | &phonet_func_type); |
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c index 191df35ae69d..717ed7f95639 100644 --- a/drivers/usb/gadget/f_rndis.c +++ b/drivers/usb/gadget/f_rndis.c | |||
@@ -963,8 +963,11 @@ static struct usb_function_instance *rndis_alloc_inst(void) | |||
963 | mutex_init(&opts->lock); | 963 | mutex_init(&opts->lock); |
964 | opts->func_inst.free_func_inst = rndis_free_inst; | 964 | opts->func_inst.free_func_inst = rndis_free_inst; |
965 | opts->net = gether_setup_default(); | 965 | opts->net = gether_setup_default(); |
966 | if (IS_ERR(opts->net)) | 966 | if (IS_ERR(opts->net)) { |
967 | return ERR_CAST(opts->net); | 967 | struct net_device *net = opts->net; |
968 | kfree(opts); | ||
969 | return ERR_CAST(net); | ||
970 | } | ||
968 | 971 | ||
969 | config_group_init_type_name(&opts->func_inst.group, "", | 972 | config_group_init_type_name(&opts->func_inst.group, "", |
970 | &rndis_func_type); | 973 | &rndis_func_type); |
diff --git a/drivers/usb/gadget/f_subset.c b/drivers/usb/gadget/f_subset.c index 5601e1d96c4f..7c8674fa7e80 100644 --- a/drivers/usb/gadget/f_subset.c +++ b/drivers/usb/gadget/f_subset.c | |||
@@ -505,8 +505,11 @@ static struct usb_function_instance *geth_alloc_inst(void) | |||
505 | mutex_init(&opts->lock); | 505 | mutex_init(&opts->lock); |
506 | opts->func_inst.free_func_inst = geth_free_inst; | 506 | opts->func_inst.free_func_inst = geth_free_inst; |
507 | opts->net = gether_setup_default(); | 507 | opts->net = gether_setup_default(); |
508 | if (IS_ERR(opts->net)) | 508 | if (IS_ERR(opts->net)) { |
509 | return ERR_CAST(opts->net); | 509 | struct net_device *net = opts->net; |
510 | kfree(opts); | ||
511 | return ERR_CAST(net); | ||
512 | } | ||
510 | 513 | ||
511 | config_group_init_type_name(&opts->func_inst.group, "", | 514 | config_group_init_type_name(&opts->func_inst.group, "", |
512 | &gether_func_type); | 515 | &gether_func_type); |
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; |