Re: [PATCH] USB: option: add Huawei ACM devices using protocol = vendor

2013-02-26 Thread Bjørn Mork
Looks like there might be an infinite number of these devices.  Should
we continue to add them one by one, or would it be better to create a
Huawei vendor rule and additionally test the number of endpoints to
avoid any RNDIS devices?  All the ACM like serial functions I've seen so
far have only 2 bulk endpoints so they are easily distinguished from
RNDIS that way.


Bjørn
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Not enough resource for old configuration after USB bus reset

2013-02-26 Thread Felipe Balbi
Hi,

On Tue, Feb 26, 2013 at 01:04:50PM +0800, Soar Hung wrote:
 Hi all, thanks for your help.
 
  I just ran 10K resets with each of 3 different devices (USB3
  HDD, USB2 pendrive and a mouse) and I didn't see the problem you're
  saying here. 
  
  Tested with TUSB7340EVM on v3.8.0.
 
 Maybe I can try this with the mouse. 
 As far as I know, most HDD and pendrive do not use periodic tranfer.
 So they can not produce the issue.

few emails back you said it had nothing to do with periodic transfers.
-ECONFUSED

 The lspci shows Texas Instruments Device 8241 (rev 02).
 Is this the same?

03:00.0 USB controller: Texas Instruments TUSB73x0 SuperSpeed USB 3.0 xHCI Host 
Controller (rev 02) (prog-if 30 [XHCI])
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast TAbort- TAbort- 
MAbort- SERR- PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 30
Region 0: Memory at f3ff (64-bit, non-prefetchable) [size=64K]
Region 2: Memory at f3fee000 (64-bit, non-prefetchable) [size=8K]
Capabilities: access denied
Kernel driver in use: xhci_hcd

-- 
balbi


signature.asc
Description: Digital signature


[PATCH 000/100] usb: gadget: big patch bomb :-)

2013-02-26 Thread Felipe Balbi
Hi folks,

sorry fort he patch bomb, but I have been busy lately and I pretty
much forgot which patches I had already sent and which needed to be
sent again, so I'm sending everything I have already which *will be*
queued for v3.10 merge window.

Please go over the patches and scream if you see anything wrong. I have
just pushed the entire series to a branch called 'testing' on my git
tree.

Again, sorry for the patch bomb, but overall the diffstat looks good;
deleting 152 lines is always good.

Felipe Balbi (99):
  usb: gadget: udc-core: allow udc class register gadget device
  usb: dwc3: gadget: let udc-core manage gadget-dev
  usb: musb: gadget: let udc-core manage gadget-dev
  usb: gadget: omap_udc: let udc-core manage gadget-dev
  usb: gadget: amd5536udc: let udc-core manage gadget-dev
  usb: gadget: at91_udc: let udc-core manage gadget-dev
  usb: gadget: atmel_usba_udc: let udc-core manage gadget-dev
  usb: gadget: bcm63xx_udc: let udc-core manage gadget-dev
  usb: gadget: dummy_hcd: let udc-core manage gadget-dev
  usb: gadget: fsl_qe_udc: let udc-core manage gadget-dev
  usb: gadget: fsl_udc_core: let udc-core manage gadget-dev
  usb: gadget: fusb300_udc: let udc-core manage gadget-dev
  usb: gadget: goku_udc: let udc-core manage gadget-dev
  usb: gadget: imx_udc: let udc-core manage gadget-dev
  usb: gadget: lpc32xx_udc: let udc-core manage gadget-dev
  usb: gadget: m66592-udc: let udc-core manage gadget-dev
  usb: gadget: mv_u3d_core: let udc-core manage gadget-dev
  usb: gadget: mv_u3d_core: fix a compile warning
  usb: gadget: mv_udc_core: let udc-core manage gadget-dev
  usb: gadget: net2272: let udc-core manage gadget-dev
  usb: gadget: net2280: let udc-core manage gadget-dev
  usb: gadget: pch_udc: let udc-core manage gadget-dev
  usb: gadget: r8a66597-udc: let udc-core manage gadget-dev
  usb: gadget: s3c-hsotg: let udc-core manage gadget-dev
  usb: gadget: s3c-hsudc: let udc-core manage gadget-dev
  usb: gadget: s3c2410_udc: let udc-core manage gadget-dev
  usb: renesas_usbhs: gadget: let udc-core manage gadget-dev
  usb: gadget: pxa25x_udc: let udc-core manage gadget-dev
  usb: gadget: pxa27x_udc: let udc-core manage gadget-dev
  usb: chipidea: let udc-core manage gadget-dev
  usb: gadget: drop now unnecessary flag
  usb: gadget: s3c-hsotg: switch over to usb_gadget_map/unmap_request()
  usb: gadget: amd5536udc: remove unused structure member
  usb: gadget: atmel_usba_udc: switch over to
usb_gadget_map/unmap_request()
  usb: gadget: fsl_udc_core: switch over to
usb_gadget_map/unmap_request()
  usb: gadget: fusb300: switch over to usb_gadget_map/unmap_request()
  usb: gadget: lpc32xx_udc: switch over to
usb_gadget_map/unmap_request()
  usb: gadget: mv_udc_core: switch over to
usb_gadget_map/unmap_request()
  usb: musb: gadget: switch over to usb_gadget_map/unmap_request()
  usb: dwc3: core: explicitly setup and cleanup event buffers
  usb: dwc3: gadget: introduce and use enable/disable irq methods
  usb: dwc3: gadget: save state of pullups
  usb: dwc3: core: add power management support
  usb: dwc3: omap: introduce enable/disable IRQ methods
  usb: dwc3: omap: remove unused fields from private structure
  usb: dwc3: omap: add basic suspend/resume support
  usb: dwc3: pci: add basic suspend/resume support
  usb: dwc3: omap: bail out early on non-DT boot
  usb: dwc3: omap: fix error path
  usb: musb: core: remove unnecessary pr_info()
  usb: musb: switch over to devm_ioremap_resource()
  usb: musb: gadget: delete wrong comment
  usb: musb: force PIO-only if we're building multiplatform kernels
  usb: musb: make davinci and da8xx glues depend on BROKEN
  usb: musb: dsps: add missing include
  usb: musb: ux500_dma: kill compile warnings
  usb: musb: dsps: fix possible compile warning
  usb: musb: gadget: fix compile warning
  usb: musb: Kconfig: drop unnecessary dependencies
  usb: dwc3: core: remove bogus comment to our structure
  usb: dwc3: add a flags field to event buffer
  usb: dwc3: add count field to event buffer
  usb: dwc3: gadget: move to threaded IRQ
  usb: common: introduce usb_state_string()
  usb: gadget: introduce gadget state tracking
  usb: dwc3: gadget: implement gadget state tracking
  usb: dwc3: remove our homebrew state mechanism
  usb: dwc3: debugfs: add two missing Link States
  usb: dwc3: debugfs: when unknown, print only the state value
  usb: dwc3: debugfs: mark our regset structure const
  usb: dwc3: debugfs: improve debugfs file creation
  usb: dwc3: core: avoid checkpatch.pl warning
  usb: gadget: pxa27x_udc: drop ARCH_PXA dependency
  usb: gadget: pxa27x_udc: switch over to module_platform_driver
  usb: gadget: udc-core: copy dma-related parameters from parent
  usb: gadget: udc-core: initialize parent
  usb: gadget: chipidea: remove unnecessary initializations
  usb: gadget: amd5536udc: remove unnecessary initializations
  usb: gadget: atmel_usba_udc: remove unnecessary initializations
  usb: gadget: bcm63xx_udc: remove unnecessary 

[PATCH 002/100] usb: dwc3: gadget: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
We don't need to register that device ourselves
if we simply set gadget-register_my_device.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/gadget.c | 17 ++---
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 82e160e..10bb161 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2488,8 +2488,6 @@ int dwc3_gadget_init(struct dwc3 *dwc)
goto err3;
}
 
-   dev_set_name(dwc-gadget.dev, gadget);
-
dwc-gadget.ops = dwc3_gadget_ops;
dwc-gadget.max_speed   = USB_SPEED_SUPER;
dwc-gadget.speed   = USB_SPEED_UNKNOWN;
@@ -2501,6 +2499,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
dwc-gadget.dev.dma_parms   = dwc-dev-dma_parms;
dwc-gadget.dev.dma_mask= dwc-dev-dma_mask;
dwc-gadget.dev.release = dwc3_gadget_release;
+   dwc-gadget.register_my_device  = true;
dwc-gadget.name= dwc3-gadget;
 
/*
@@ -2544,24 +2543,14 @@ int dwc3_gadget_init(struct dwc3 *dwc)
dwc3_gadget_usb3_phy_suspend(dwc, false);
}
 
-   ret = device_register(dwc-gadget.dev);
-   if (ret) {
-   dev_err(dwc-dev, failed to register gadget device\n);
-   put_device(dwc-gadget.dev);
-   goto err6;
-   }
-
ret = usb_add_gadget_udc(dwc-dev, dwc-gadget);
if (ret) {
dev_err(dwc-dev, failed to register udc\n);
-   goto err7;
+   goto err6;
}
 
return 0;
 
-err7:
-   device_unregister(dwc-gadget.dev);
-
 err6:
dwc3_writel(dwc-regs, DWC3_DEVTEN, 0x00);
free_irq(irq, dwc);
@@ -2610,6 +2599,4 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
 
dma_free_coherent(dwc-dev, sizeof(*dwc-ctrl_req),
dwc-ctrl_req, dwc-ctrl_req_addr);
-
-   device_unregister(dwc-gadget.dev);
 }
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 003/100] usb: musb: gadget: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can delete a little
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_gadget.c | 10 +-
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index be18537..cadb750 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -1887,12 +1887,11 @@ int musb_gadget_setup(struct musb *musb)
musb-g.speed = USB_SPEED_UNKNOWN;
 
/* this gadget abstracts/virtualizes the controller */
-   dev_set_name(musb-g.dev, gadget);
musb-g.dev.parent = musb-controller;
musb-g.dev.dma_mask = musb-controller-dma_mask;
musb-g.dev.release = musb_gadget_release;
musb-g.name = musb_driver_name;
-
+   musb-g.register_my_device = true;
musb-g.is_otg = 1;
 
musb_g_init_endpoints(musb);
@@ -1900,11 +1899,6 @@ int musb_gadget_setup(struct musb *musb)
musb-is_active = 0;
musb_platform_try_idle(musb, 0);
 
-   status = device_register(musb-g.dev);
-   if (status != 0) {
-   put_device(musb-g.dev);
-   return status;
-   }
status = usb_add_gadget_udc(musb-controller, musb-g);
if (status)
goto err;
@@ -1919,8 +1913,6 @@ err:
 void musb_gadget_cleanup(struct musb *musb)
 {
usb_del_gadget_udc(musb-g);
-   if (musb-g.dev.parent)
-   device_unregister(musb-g.dev);
 }
 
 /*
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 004/100] usb: gadget: omap_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we drop some boilerplate
code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/omap_udc.c | 12 
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c
index 06be85c2b..17986fd 100644
--- a/drivers/usb/gadget/omap_udc.c
+++ b/drivers/usb/gadget/omap_udc.c
@@ -2631,10 +2631,9 @@ omap_udc_setup(struct platform_device *odev, struct 
usb_phy *xceiv)
udc-gadget.max_speed = USB_SPEED_FULL;
udc-gadget.name = driver_name;
 
-   device_initialize(udc-gadget.dev);
-   dev_set_name(udc-gadget.dev, gadget);
udc-gadget.dev.release = omap_udc_release;
udc-gadget.dev.parent = odev-dev;
+   udc-gadget.register_my_device = true;
if (use_dma)
udc-gadget.dev.dma_mask = odev-dev.dma_mask;
 
@@ -2911,14 +2910,12 @@ bad_on_1710:
}
 
create_proc_file();
-   status = device_add(udc-gadget.dev);
+   status = usb_add_gadget_udc(pdev-dev, udc-gadget);
if (status)
goto cleanup4;
 
-   status = usb_add_gadget_udc(pdev-dev, udc-gadget);
-   if (!status)
-   return status;
-   /* If fail, fall through */
+   return 0;
+
 cleanup4:
remove_proc_file();
 
@@ -2989,7 +2986,6 @@ static int omap_udc_remove(struct platform_device *pdev)
release_mem_region(pdev-resource[0].start,
pdev-resource[0].end - pdev-resource[0].start + 1);
 
-   device_unregister(udc-gadget.dev);
wait_for_completion(done);
 
return 0;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 007/100] usb: gadget: atmel_usba_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/atmel_usba_udc.c | 13 +
 1 file changed, 1 insertion(+), 12 deletions(-)

diff --git a/drivers/usb/gadget/atmel_usba_udc.c 
b/drivers/usb/gadget/atmel_usba_udc.c
index bc19496..b9efe4d 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -1900,9 +1900,9 @@ static int __init usba_udc_probe(struct platform_device 
*pdev)
dev_info(pdev-dev, FIFO at 0x%08lx mapped at %p\n,
 (unsigned long)fifo-start, udc-fifo);
 
-   device_initialize(udc-gadget.dev);
udc-gadget.dev.parent = pdev-dev;
udc-gadget.dev.dma_mask = pdev-dev.dma_mask;
+   udc-gadget.register_my_device = true;
 
platform_set_drvdata(pdev, udc);
 
@@ -1962,12 +1962,6 @@ static int __init usba_udc_probe(struct platform_device 
*pdev)
}
udc-irq = irq;
 
-   ret = device_add(udc-gadget.dev);
-   if (ret) {
-   dev_dbg(pdev-dev, Could not add gadget: %d\n, ret);
-   goto err_device_add;
-   }
-
if (gpio_is_valid(pdata-vbus_pin)) {
if (!gpio_request(pdata-vbus_pin, atmel_usba_udc)) {
udc-vbus_pin = pdata-vbus_pin;
@@ -2007,9 +2001,6 @@ err_add_udc:
gpio_free(udc-vbus_pin);
}
 
-   device_unregister(udc-gadget.dev);
-
-err_device_add:
free_irq(irq, udc);
 err_request_irq:
kfree(usba_ep);
@@ -2053,8 +2044,6 @@ static int __exit usba_udc_remove(struct platform_device 
*pdev)
clk_put(udc-hclk);
clk_put(udc-pclk);
 
-   device_unregister(udc-gadget.dev);
-
return 0;
 }
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 008/100] usb: gadget: bcm63xx_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/bcm63xx_udc.c | 8 +---
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/usb/gadget/bcm63xx_udc.c b/drivers/usb/gadget/bcm63xx_udc.c
index 8cc8253..c020b87 100644
--- a/drivers/usb/gadget/bcm63xx_udc.c
+++ b/drivers/usb/gadget/bcm63xx_udc.c
@@ -2368,13 +2368,13 @@ static int bcm63xx_udc_probe(struct platform_device 
*pdev)
 
spin_lock_init(udc-lock);
INIT_WORK(udc-ep0_wq, bcm63xx_ep0_process);
-   dev_set_name(udc-gadget.dev, gadget);
 
udc-gadget.ops = bcm63xx_udc_ops;
udc-gadget.name = dev_name(dev);
udc-gadget.dev.parent = dev;
udc-gadget.dev.release = bcm63xx_udc_gadget_release;
udc-gadget.dev.dma_mask = dev-dma_mask;
+   udc-gadget.register_my_device = true;
 
if (!pd-use_fullspeed  !use_fullspeed)
udc-gadget.max_speed = USB_SPEED_HIGH;
@@ -2414,17 +2414,12 @@ static int bcm63xx_udc_probe(struct platform_device 
*pdev)
}
}
 
-   rc = device_register(udc-gadget.dev);
-   if (rc)
-   goto out_uninit;
-
bcm63xx_udc_init_debugfs(udc);
rc = usb_add_gadget_udc(dev, udc-gadget);
if (!rc)
return 0;
 
bcm63xx_udc_cleanup_debugfs(udc);
-   device_unregister(udc-gadget.dev);
 out_uninit:
bcm63xx_uninit_udc_hw(udc);
return rc;
@@ -2440,7 +2435,6 @@ static int bcm63xx_udc_remove(struct platform_device 
*pdev)
 
bcm63xx_udc_cleanup_debugfs(udc);
usb_del_gadget_udc(udc-gadget);
-   device_unregister(udc-gadget.dev);
BUG_ON(udc-driver);
 
platform_set_drvdata(pdev, NULL);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 010/100] usb: gadget: fsl_qe_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/fsl_qe_udc.c | 15 ++-
 1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c
index 034477c..0f78cd8 100644
--- a/drivers/usb/gadget/fsl_qe_udc.c
+++ b/drivers/usb/gadget/fsl_qe_udc.c
@@ -2523,13 +2523,9 @@ static int qe_udc_probe(struct platform_device *ofdev)
 
/* name: Identifies the controller hardware type. */
udc-gadget.name = driver_name;
-
-   device_initialize(udc-gadget.dev);
-
-   dev_set_name(udc-gadget.dev, gadget);
-
udc-gadget.dev.release = qe_udc_release;
udc-gadget.dev.parent = ofdev-dev;
+   udc-gadget.register_my_device = true;
 
/* initialize qe_ep struct */
for (i = 0; i  USB_MAX_ENDPOINTS ; i++) {
@@ -2592,13 +2588,9 @@ static int qe_udc_probe(struct platform_device *ofdev)
goto err5;
}
 
-   ret = device_add(udc-gadget.dev);
-   if (ret)
-   goto err6;
-
ret = usb_add_gadget_udc(ofdev-dev, udc-gadget);
if (ret)
-   goto err7;
+   goto err6;
 
dev_set_drvdata(ofdev-dev, udc);
dev_info(udc-dev,
@@ -2606,8 +2598,6 @@ static int qe_udc_probe(struct platform_device *ofdev)
(udc-soc_type == PORT_QE) ? QE : CPM);
return 0;
 
-err7:
-   device_unregister(udc-gadget.dev);
 err6:
free_irq(udc-usb_irq, udc);
 err5:
@@ -2702,7 +2692,6 @@ static int qe_udc_remove(struct platform_device *ofdev)
 
iounmap(udc-usb_regs);
 
-   device_unregister(udc-gadget.dev);
/* wait for release() of gadget.dev to free udc */
wait_for_completion(done);
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 009/100] usb: gadget: dummy_hcd: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/dummy_hcd.c | 10 +-
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
index 8cf0c0f..a6950aa 100644
--- a/drivers/usb/gadget/dummy_hcd.c
+++ b/drivers/usb/gadget/dummy_hcd.c
@@ -983,16 +983,10 @@ static int dummy_udc_probe(struct platform_device *pdev)
dum-gadget.name = gadget_name;
dum-gadget.ops = dummy_ops;
dum-gadget.max_speed = USB_SPEED_SUPER;
+   dum-gadget.register_my_device = true;
 
-   dev_set_name(dum-gadget.dev, gadget);
dum-gadget.dev.parent = pdev-dev;
dum-gadget.dev.release = dummy_gadget_release;
-   rc = device_register(dum-gadget.dev);
-   if (rc  0) {
-   put_device(dum-gadget.dev);
-   return rc;
-   }
-
init_dummy_udc_hw(dum);
 
rc = usb_add_gadget_udc(pdev-dev, dum-gadget);
@@ -1008,7 +1002,6 @@ static int dummy_udc_probe(struct platform_device *pdev)
 err_dev:
usb_del_gadget_udc(dum-gadget);
 err_udc:
-   device_unregister(dum-gadget.dev);
return rc;
 }
 
@@ -1019,7 +1012,6 @@ static int dummy_udc_remove(struct platform_device *pdev)
usb_del_gadget_udc(dum-gadget);
platform_set_drvdata(pdev, NULL);
device_remove_file(dum-gadget.dev, dev_attr_function);
-   device_unregister(dum-gadget.dev);
return 0;
 }
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 015/100] usb: gadget: lpc32xx_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/lpc32xx_udc.c | 11 +--
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/usb/gadget/lpc32xx_udc.c b/drivers/usb/gadget/lpc32xx_udc.c
index aa04089..329e1c5 100644
--- a/drivers/usb/gadget/lpc32xx_udc.c
+++ b/drivers/usb/gadget/lpc32xx_udc.c
@@ -3090,6 +3090,7 @@ static int __init lpc32xx_udc_probe(struct 
platform_device *pdev)
 
/* init software state */
udc-gadget.dev.parent = dev;
+   udc-gadget.register_my_device = true;
udc-pdev = pdev;
udc-dev = pdev-dev;
udc-enabled = 0;
@@ -3248,12 +3249,6 @@ static int __init lpc32xx_udc_probe(struct 
platform_device *pdev)
udc_disable(udc);
udc_reinit(udc);
 
-   retval = device_register(udc-gadget.dev);
-   if (retval  0) {
-   dev_err(udc-dev, Device registration failure\n);
-   goto dev_register_fail;
-   }
-
/* Request IRQs - low and high priority USB device IRQs are routed to
 * the same handler, while the DMA interrupt is routed elsewhere */
retval = request_irq(udc-udp_irq[IRQ_USB_LP], lpc32xx_usb_lp_irq,
@@ -3320,8 +3315,6 @@ irq_dev_fail:
 irq_hp_fail:
free_irq(udc-udp_irq[IRQ_USB_LP], udc);
 irq_lp_fail:
-   device_unregister(udc-gadget.dev);
-dev_register_fail:
dma_pool_destroy(udc-dd_cache);
 dma_alloc_fail:
dma_free_coherent(pdev-dev, UDCA_BUFF_SIZE,
@@ -3376,8 +3369,6 @@ static int lpc32xx_udc_remove(struct platform_device 
*pdev)
free_irq(udc-udp_irq[IRQ_USB_HP], udc);
free_irq(udc-udp_irq[IRQ_USB_LP], udc);
 
-   device_unregister(udc-gadget.dev);
-
clk_disable(udc-usb_otg_clk);
clk_put(udc-usb_otg_clk);
clk_disable(udc-usb_slv_clk);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 017/100] usb: gadget: mv_u3d_core: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/mv_u3d_core.c | 10 +-
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/usb/gadget/mv_u3d_core.c b/drivers/usb/gadget/mv_u3d_core.c
index b5cea27..565addc 100644
--- a/drivers/usb/gadget/mv_u3d_core.c
+++ b/drivers/usb/gadget/mv_u3d_core.c
@@ -1792,8 +1792,6 @@ static int mv_u3d_remove(struct platform_device *dev)
 
clk_put(u3d-clk);
 
-   device_unregister(u3d-gadget.dev);
-
platform_set_drvdata(dev, NULL);
 
kfree(u3d);
@@ -1957,15 +1955,11 @@ static int mv_u3d_probe(struct platform_device *dev)
u3d-gadget.speed = USB_SPEED_UNKNOWN;  /* speed */
 
/* the gadget abstracts/virtualizes the controller */
-   dev_set_name(u3d-gadget.dev, gadget);
u3d-gadget.dev.parent = dev-dev;
u3d-gadget.dev.dma_mask = dev-dev.dma_mask;
u3d-gadget.dev.release = mv_u3d_gadget_release;
u3d-gadget.name = driver_name; /* gadget name */
-
-   retval = device_register(u3d-gadget.dev);
-   if (retval)
-   goto err_register_gadget_device;
+   u3d-gadget.register_my_device = true;
 
mv_u3d_eps_init(u3d);
 
@@ -1991,8 +1985,6 @@ static int mv_u3d_probe(struct platform_device *dev)
return 0;
 
 err_unregister:
-   device_unregister(u3d-gadget.dev);
-err_register_gadget_device:
free_irq(u3d-irq, dev-dev);
 err_request_irq:
 err_get_irq:
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 018/100] usb: gadget: mv_u3d_core: fix a compile warning

2013-02-26 Thread Felipe Balbi
Fix the following compile warning:

mv_u3d_core.c:1766:12: warning: 'mv_u3d_remove' \
defined but not used [-Wunused-function]

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/mv_u3d_core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/mv_u3d_core.c b/drivers/usb/gadget/mv_u3d_core.c
index 565addc..734ade1 100644
--- a/drivers/usb/gadget/mv_u3d_core.c
+++ b/drivers/usb/gadget/mv_u3d_core.c
@@ -2072,7 +2072,7 @@ static void mv_u3d_shutdown(struct platform_device *dev)
 
 static struct platform_driver mv_u3d_driver = {
.probe  = mv_u3d_probe,
-   .remove = __exit_p(mv_u3d_remove),
+   .remove = mv_u3d_remove,
.shutdown   = mv_u3d_shutdown,
.driver = {
.owner  = THIS_MODULE,
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 019/100] usb: gadget: mv_udc_core: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/mv_udc_core.c | 12 ++--
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/gadget/mv_udc_core.c b/drivers/usb/gadget/mv_udc_core.c
index c8cf959..a7afdfb 100644
--- a/drivers/usb/gadget/mv_udc_core.c
+++ b/drivers/usb/gadget/mv_udc_core.c
@@ -2138,8 +2138,6 @@ static int mv_udc_remove(struct platform_device *pdev)
 
mv_udc_disable(udc);
 
-   device_unregister(udc-gadget.dev);
-
/* free dev, wait for the release() finished */
wait_for_completion(udc-done);
 
@@ -2311,15 +2309,11 @@ static int mv_udc_probe(struct platform_device *pdev)
udc-gadget.max_speed = USB_SPEED_HIGH; /* support dual speed */
 
/* the gadget abstracts/virtualizes the controller */
-   dev_set_name(udc-gadget.dev, gadget);
udc-gadget.dev.parent = pdev-dev;
udc-gadget.dev.dma_mask = pdev-dev.dma_mask;
udc-gadget.dev.release = gadget_release;
udc-gadget.name = driver_name; /* gadget name */
-
-   retval = device_register(udc-gadget.dev);
-   if (retval)
-   goto err_destroy_dma;
+   udc-gadget.register_my_device = true;
 
eps_init(udc);
 
@@ -2342,7 +2336,7 @@ static int mv_udc_probe(struct platform_device *pdev)
if (!udc-qwork) {
dev_err(pdev-dev, cannot create workqueue\n);
retval = -ENOMEM;
-   goto err_unregister;
+   goto err_destroy_dma;
}
 
INIT_WORK(udc-vbus_work, mv_udc_vbus_work);
@@ -2370,8 +2364,6 @@ static int mv_udc_probe(struct platform_device *pdev)
 
 err_create_workqueue:
destroy_workqueue(udc-qwork);
-err_unregister:
-   device_unregister(udc-gadget.dev);
 err_destroy_dma:
dma_pool_destroy(udc-dtd_pool);
 err_free_dma:
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 022/100] usb: gadget: pch_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pch_udc.c | 10 +-
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c
index a787a8e..7032145 100644
--- a/drivers/usb/gadget/pch_udc.c
+++ b/drivers/usb/gadget/pch_udc.c
@@ -358,7 +358,6 @@ struct pch_udc_dev {
prot_stall:1,
irq_registered:1,
mem_region:1,
-   registered:1,
suspended:1,
connected:1,
vbus_session:1,
@@ -3078,8 +3077,6 @@ static void pch_udc_remove(struct pci_dev *pdev)
   pci_resource_len(pdev, PCH_UDC_PCI_BAR));
if (dev-active)
pci_disable_device(pdev);
-   if (dev-registered)
-   device_unregister(dev-gadget.dev);
kfree(dev);
pci_set_drvdata(pdev, NULL);
 }
@@ -3196,17 +3193,12 @@ static int pch_udc_probe(struct pci_dev *pdev,
if (retval)
goto finished;
 
-   dev_set_name(dev-gadget.dev, gadget);
dev-gadget.dev.parent = pdev-dev;
dev-gadget.dev.dma_mask = pdev-dev.dma_mask;
dev-gadget.dev.release = gadget_release;
dev-gadget.name = KBUILD_MODNAME;
dev-gadget.max_speed = USB_SPEED_HIGH;
-
-   retval = device_register(dev-gadget.dev);
-   if (retval)
-   goto finished;
-   dev-registered = 1;
+   dev-gadget.register_my_device = true;
 
/* Put the device in disconnected state till a driver is bound */
pch_udc_set_disconnect(dev);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 025/100] usb: gadget: s3c-hsudc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c-hsudc.c | 11 +--
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/usb/gadget/s3c-hsudc.c b/drivers/usb/gadget/s3c-hsudc.c
index 458965a..c4ff747 100644
--- a/drivers/usb/gadget/s3c-hsudc.c
+++ b/drivers/usb/gadget/s3c-hsudc.c
@@ -1303,18 +1303,16 @@ static int s3c_hsudc_probe(struct platform_device *pdev)
 
spin_lock_init(hsudc-lock);
 
-   dev_set_name(hsudc-gadget.dev, gadget);
-
hsudc-gadget.max_speed = USB_SPEED_HIGH;
hsudc-gadget.ops = s3c_hsudc_gadget_ops;
hsudc-gadget.name = dev_name(dev);
hsudc-gadget.dev.parent = dev;
hsudc-gadget.dev.dma_mask = dev-dma_mask;
hsudc-gadget.ep0 = hsudc-ep[0].ep;
-
hsudc-gadget.is_otg = 0;
hsudc-gadget.is_a_peripheral = 0;
hsudc-gadget.speed = USB_SPEED_UNKNOWN;
+   hsudc-gadget.register_my_device = true;
 
s3c_hsudc_setup_ep(hsudc);
 
@@ -1345,12 +1343,6 @@ static int s3c_hsudc_probe(struct platform_device *pdev)
disable_irq(hsudc-irq);
local_irq_enable();
 
-   ret = device_register(hsudc-gadget.dev);
-   if (ret) {
-   put_device(hsudc-gadget.dev);
-   goto err_add_device;
-   }
-
ret = usb_add_gadget_udc(pdev-dev, hsudc-gadget);
if (ret)
goto err_add_udc;
@@ -1359,7 +1351,6 @@ static int s3c_hsudc_probe(struct platform_device *pdev)
 
return 0;
 err_add_udc:
-   device_unregister(hsudc-gadget.dev);
 err_add_device:
clk_disable(hsudc-uclk);
 err_res:
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 026/100] usb: gadget: s3c2410_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c2410_udc.c | 12 +---
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
index 08f8965..c413494 100644
--- a/drivers/usb/gadget/s3c2410_udc.c
+++ b/drivers/usb/gadget/s3c2410_udc.c
@@ -1824,16 +1824,9 @@ static int s3c2410_udc_probe(struct platform_device 
*pdev)
goto err_mem;
}
 
-   device_initialize(udc-gadget.dev);
udc-gadget.dev.parent = pdev-dev;
udc-gadget.dev.dma_mask = pdev-dev.dma_mask;
-
-   /* Bind the driver */
-   retval = device_add(udc-gadget.dev);
-   if (retval) {
-   dev_err(udc-gadget.dev, Error in device_add() : %d\n, 
retval);
-   goto err_device_add;
-   }
+   udc-gadget.register_my_device = true;
 
the_controller = udc;
platform_set_drvdata(pdev, udc);
@@ -1923,8 +1916,6 @@ err_gpio_claim:
 err_int:
free_irq(IRQ_USBD, udc);
 err_map:
-   device_unregister(udc-gadget.dev);
-err_device_add:
iounmap(base_addr);
 err_mem:
release_mem_region(rsrc_start, rsrc_len);
@@ -1946,7 +1937,6 @@ static int s3c2410_udc_remove(struct platform_device 
*pdev)
return -EBUSY;
 
usb_del_gadget_udc(udc-gadget);
-   device_unregister(udc-gadget.dev);
debugfs_remove(udc-regs_info);
 
if (udc_info  !udc_info-udc_command 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 028/100] usb: gadget: pxa25x_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pxa25x_udc.c | 12 +---
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index 9aa9dd5..99557387 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -2134,16 +2134,9 @@ static int __init pxa25x_udc_probe(struct 
platform_device *pdev)
dev-timer.function = udc_watchdog;
dev-timer.data = (unsigned long) dev;
 
-   device_initialize(dev-gadget.dev);
dev-gadget.dev.parent = pdev-dev;
dev-gadget.dev.dma_mask = pdev-dev.dma_mask;
-
-   retval = device_add(dev-gadget.dev);
-   if (retval) {
-   dev-driver = NULL;
-   dev-gadget.dev.driver = NULL;
-   goto err_device_add;
-   }
+   dev-gadget.register_my_device = true;
 
the_controller = dev;
platform_set_drvdata(pdev, dev);
@@ -2195,8 +2188,6 @@ lubbock_fail0:
free_irq(irq, dev);
 #endif
  err_irq1:
-   device_unregister(dev-gadget.dev);
- err_device_add:
if (gpio_is_valid(dev-mach-gpio_pullup))
gpio_free(dev-mach-gpio_pullup);
  err_gpio_pullup:
@@ -,7 +2213,6 @@ static int __exit pxa25x_udc_remove(struct 
platform_device *pdev)
return -EBUSY;
 
usb_del_gadget_udc(dev-gadget);
-   device_unregister(dev-gadget.dev);
dev-pullup = 0;
pullup(dev);
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 032/100] usb: gadget: s3c-hsotg: switch over to usb_gadget_map/unmap_request()

2013-02-26 Thread Felipe Balbi
we have generic implementations for a reason,
let's use them.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c-hsotg.c | 46 +-
 1 file changed, 5 insertions(+), 41 deletions(-)

diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index 8ae0bd9..2812fa5 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -39,8 +39,6 @@
 
 #include s3c-hsotg.h
 
-#define DMA_ADDR_INVALID (~((dma_addr_t)0))
-
 static const char * const s3c_hsotg_supply_names[] = {
vusb_d,   /* digital USB supply, 1.2V */
vusb_a,   /* analog USB supply, 1.1V */
@@ -405,7 +403,6 @@ static struct usb_request 
*s3c_hsotg_ep_alloc_request(struct usb_ep *ep,
 
INIT_LIST_HEAD(req-queue);
 
-   req-req.dma = DMA_ADDR_INVALID;
return req-req;
 }
 
@@ -435,24 +432,12 @@ static void s3c_hsotg_unmap_dma(struct s3c_hsotg *hsotg,
struct s3c_hsotg_req *hs_req)
 {
struct usb_request *req = hs_req-req;
-   enum dma_data_direction dir;
-
-   dir = hs_ep-dir_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
 
/* ignore this if we're not moving any data */
if (hs_req-req.length == 0)
return;
 
-   if (hs_req-mapped) {
-   /* we mapped this, so unmap and remove the dma */
-
-   dma_unmap_single(hsotg-dev, req-dma, req-length, dir);
-
-   req-dma = DMA_ADDR_INVALID;
-   hs_req-mapped = 0;
-   } else {
-   dma_sync_single_for_cpu(hsotg-dev, req-dma, req-length, dir);
-   }
+   usb_gadget_unmap_request(hsotg-gadget, hs_req, hs_ep-dir_in);
 }
 
 /**
@@ -852,37 +837,16 @@ static int s3c_hsotg_map_dma(struct s3c_hsotg *hsotg,
 struct s3c_hsotg_ep *hs_ep,
 struct usb_request *req)
 {
-   enum dma_data_direction dir;
struct s3c_hsotg_req *hs_req = our_req(req);
-
-   dir = hs_ep-dir_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
+   int ret;
 
/* if the length is zero, ignore the DMA data */
if (hs_req-req.length == 0)
return 0;
 
-   if (req-dma == DMA_ADDR_INVALID) {
-   dma_addr_t dma;
-
-   dma = dma_map_single(hsotg-dev, req-buf, req-length, dir);
-
-   if (unlikely(dma_mapping_error(hsotg-dev, dma)))
-   goto dma_error;
-
-   if (dma  3) {
-   dev_err(hsotg-dev, %s: unaligned dma buffer\n,
-   __func__);
-
-   dma_unmap_single(hsotg-dev, dma, req-length, dir);
-   return -EINVAL;
-   }
-
-   hs_req-mapped = 1;
-   req-dma = dma;
-   } else {
-   dma_sync_single_for_cpu(hsotg-dev, req-dma, req-length, dir);
-   hs_req-mapped = 0;
-   }
+   ret = usb_gadget_map_request(hsotg-gadget, req, hs_ep-dir_in);
+   if (ret)
+   goto dma_error;
 
return 0;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 037/100] usb: gadget: lpc32xx_udc: switch over to usb_gadget_map/unmap_request()

2013-02-26 Thread Felipe Balbi
we have generic implementations for a reason,
let's use them

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/lpc32xx_udc.c | 39 ---
 1 file changed, 4 insertions(+), 35 deletions(-)

diff --git a/drivers/usb/gadget/lpc32xx_udc.c b/drivers/usb/gadget/lpc32xx_udc.c
index 67c3ef9..1478327 100644
--- a/drivers/usb/gadget/lpc32xx_udc.c
+++ b/drivers/usb/gadget/lpc32xx_udc.c
@@ -1469,23 +1469,7 @@ static void done(struct lpc32xx_ep *ep, struct 
lpc32xx_request *req, int status)
status = req-req.status;
 
if (ep-lep) {
-   enum dma_data_direction direction;
-
-   if (ep-is_in)
-   direction = DMA_TO_DEVICE;
-   else
-   direction = DMA_FROM_DEVICE;
-
-   if (req-mapped) {
-   dma_unmap_single(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   direction);
-   req-req.dma = 0;
-   req-mapped = 0;
-   } else
-   dma_sync_single_for_cpu(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   direction);
+   usb_gadget_unmap_request(udc-gadget, req-req, ep-is_in);
 
/* Free DDs */
udc_dd_free(udc, req-dd_desc_ptr);
@@ -1841,26 +1825,11 @@ static int lpc32xx_ep_queue(struct usb_ep *_ep,
}
 
if (ep-lep) {
-   enum dma_data_direction direction;
struct lpc32xx_usbd_dd_gad *dd;
 
-   /* Map DMA pointer */
-   if (ep-is_in)
-   direction = DMA_TO_DEVICE;
-   else
-   direction = DMA_FROM_DEVICE;
-
-   if (req-req.dma == 0) {
-   req-req.dma = dma_map_single(
-   ep-udc-gadget.dev.parent,
-   req-req.buf, req-req.length, direction);
-   req-mapped = 1;
-   } else {
-   dma_sync_single_for_device(
-   ep-udc-gadget.dev.parent, req-req.dma,
-   req-req.length, direction);
-   req-mapped = 0;
-   }
+   status = usb_gadget_map_request(udc-gadget, _req, ep-is_in);
+   if (status)
+   return status;
 
/* For the request, build a list of DDs */
dd = udc_dd_alloc(udc);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 038/100] usb: gadget: mv_udc_core: switch over to usb_gadget_map/unmap_request()

2013-02-26 Thread Felipe Balbi
we have generic implementations for a reason,
let's use them

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/mv_udc_core.c | 53 +---
 1 file changed, 6 insertions(+), 47 deletions(-)

diff --git a/drivers/usb/gadget/mv_udc_core.c b/drivers/usb/gadget/mv_udc_core.c
index be35573..7f4d19d 100644
--- a/drivers/usb/gadget/mv_udc_core.c
+++ b/drivers/usb/gadget/mv_udc_core.c
@@ -237,18 +237,7 @@ static void done(struct mv_ep *ep, struct mv_req *req, int 
status)
dma_pool_free(udc-dtd_pool, curr_td, curr_td-td_dma);
}
 
-   if (req-mapped) {
-   dma_unmap_single(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ((ep_dir(ep) == EP_DIR_IN) ?
-   DMA_TO_DEVICE : DMA_FROM_DEVICE));
-   req-req.dma = DMA_ADDR_INVALID;
-   req-mapped = 0;
-   } else
-   dma_sync_single_for_cpu(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ((ep_dir(ep) == EP_DIR_IN) ?
-   DMA_TO_DEVICE : DMA_FROM_DEVICE));
+   usb_gadget_unmap_request(udc-gadget, req-req, ep_dir(ep));
 
if (status  (status != -ESHUTDOWN))
dev_info(udc-dev-dev, complete %s req %p stat %d len %u/%u,
@@ -732,21 +721,9 @@ mv_ep_queue(struct usb_ep *_ep, struct usb_request *_req, 
gfp_t gfp_flags)
req-ep = ep;
 
/* map virtual address to hardware */
-   if (req-req.dma == DMA_ADDR_INVALID) {
-   req-req.dma = dma_map_single(ep-udc-gadget.dev.parent,
-   req-req.buf,
-   req-req.length, ep_dir(ep)
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   req-mapped = 1;
-   } else {
-   dma_sync_single_for_device(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ep_dir(ep)
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   req-mapped = 0;
-   }
+   retval = usb_gadget_map_request(udc-gadget, _req, ep_dir(ep));
+   if (retval)
+   return retval;
 
req-req.status = -EINPROGRESS;
req-req.actual = 0;
@@ -780,18 +757,7 @@ mv_ep_queue(struct usb_ep *_ep, struct usb_request *_req, 
gfp_t gfp_flags)
return 0;
 
 err_unmap_dma:
-   if (req-mapped) {
-   dma_unmap_single(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ((ep_dir(ep) == EP_DIR_IN) ?
-   DMA_TO_DEVICE : DMA_FROM_DEVICE));
-   req-req.dma = DMA_ADDR_INVALID;
-   req-mapped = 0;
-   } else
-   dma_sync_single_for_cpu(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ((ep_dir(ep) == EP_DIR_IN) ?
-   DMA_TO_DEVICE : DMA_FROM_DEVICE));
+   usb_gadget_unmap_request(udc-gadget, _req, ep_dir(ep));
 
return retval;
 }
@@ -1528,14 +1494,7 @@ udc_prime_status(struct mv_udc *udc, u8 direction, u16 
status, bool empty)
 
return 0;
 out:
-   if (req-mapped) {
-   dma_unmap_single(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ((ep_dir(ep) == EP_DIR_IN) ?
-   DMA_TO_DEVICE : DMA_FROM_DEVICE));
-   req-req.dma = DMA_ADDR_INVALID;
-   req-mapped = 0;
-   }
+   usb_gadget_unmap_request(udc-gadget, req-req, ep_dir(ep));
 
return retval;
 }
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 040/100] usb: dwc3: core: explicitly setup and cleanup event buffers

2013-02-26 Thread Felipe Balbi
Make the call to dwc3_event_buffers_setup()
and dwc3_event_buffers_cleanup() explicit,
so it's easier to implement PM.

Tested-by: Vivek Gautam gautam.vi...@samsung.com
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.c | 32 +---
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index ffa6b00..4743508 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -337,12 +337,6 @@ static int dwc3_core_init(struct dwc3 *dwc)
 
dwc3_writel(dwc-regs, DWC3_GCTL, reg);
 
-   ret = dwc3_event_buffers_setup(dwc);
-   if (ret) {
-   dev_err(dwc-dev, failed to setup event buffers\n);
-   goto err0;
-   }
-
return 0;
 
 err0:
@@ -351,8 +345,6 @@ err0:
 
 static void dwc3_core_exit(struct dwc3 *dwc)
 {
-   dwc3_event_buffers_cleanup(dwc);
-
usb_phy_shutdown(dwc-usb2_phy);
usb_phy_shutdown(dwc-usb3_phy);
 }
@@ -480,6 +472,12 @@ static int dwc3_probe(struct platform_device *pdev)
goto err0;
}
 
+   ret = dwc3_event_buffers_setup(dwc);
+   if (ret) {
+   dev_err(dwc-dev, failed to setup event buffers\n);
+   goto err1;
+   }
+
mode = DWC3_MODE(dwc-hwparams.hwparams0);
 
switch (mode) {
@@ -488,7 +486,7 @@ static int dwc3_probe(struct platform_device *pdev)
ret = dwc3_gadget_init(dwc);
if (ret) {
dev_err(dev, failed to initialize gadget\n);
-   goto err1;
+   goto err2;
}
break;
case DWC3_MODE_HOST:
@@ -496,7 +494,7 @@ static int dwc3_probe(struct platform_device *pdev)
ret = dwc3_host_init(dwc);
if (ret) {
dev_err(dev, failed to initialize host\n);
-   goto err1;
+   goto err2;
}
break;
case DWC3_MODE_DRD:
@@ -504,32 +502,32 @@ static int dwc3_probe(struct platform_device *pdev)
ret = dwc3_host_init(dwc);
if (ret) {
dev_err(dev, failed to initialize host\n);
-   goto err1;
+   goto err2;
}
 
ret = dwc3_gadget_init(dwc);
if (ret) {
dev_err(dev, failed to initialize gadget\n);
-   goto err1;
+   goto err2;
}
break;
default:
dev_err(dev, Unsupported mode of operation %d\n, mode);
-   goto err1;
+   goto err2;
}
dwc-mode = mode;
 
ret = dwc3_debugfs_init(dwc);
if (ret) {
dev_err(dev, failed to initialize debugfs\n);
-   goto err2;
+   goto err3;
}
 
pm_runtime_allow(dev);
 
return 0;
 
-err2:
+err3:
switch (mode) {
case DWC3_MODE_DEVICE:
dwc3_gadget_exit(dwc);
@@ -546,6 +544,9 @@ err2:
break;
}
 
+err2:
+   dwc3_event_buffers_cleanup(dwc);
+
 err1:
dwc3_core_exit(dwc);
 
@@ -583,6 +584,7 @@ static int dwc3_remove(struct platform_device *pdev)
break;
}
 
+   dwc3_event_buffers_cleanup(dwc);
dwc3_free_event_buffers(dwc);
dwc3_core_exit(dwc);
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 041/100] usb: dwc3: gadget: introduce and use enable/disable irq methods

2013-02-26 Thread Felipe Balbi
we don't need to enable IRQs until we have
a gadget driver loaded and ready to work,
so let's delay IRQ enable to -udc_start()
and IRQ disable to -udc_stop().

While at that, also move the related use of
request_irq() and free_irq().

Tested-by: Vivek Gautam gautam.vi...@samsung.com
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/gadget.c | 80 ++-
 1 file changed, 45 insertions(+), 35 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 65493b6..db20317 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1469,6 +1469,32 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int 
is_on)
return ret;
 }
 
+static void dwc3_gadget_enable_irq(struct dwc3 *dwc)
+{
+   u32 reg;
+
+   /* Enable all but Start and End of Frame IRQs */
+   reg = (DWC3_DEVTEN_VNDRDEVTSTRCVEDEN |
+   DWC3_DEVTEN_EVNTOVERFLOWEN |
+   DWC3_DEVTEN_CMDCMPLTEN |
+   DWC3_DEVTEN_ERRTICERREN |
+   DWC3_DEVTEN_WKUPEVTEN |
+   DWC3_DEVTEN_ULSTCNGEN |
+   DWC3_DEVTEN_CONNECTDONEEN |
+   DWC3_DEVTEN_USBRSTEN |
+   DWC3_DEVTEN_DISCONNEVTEN);
+
+   dwc3_writel(dwc-regs, DWC3_DEVTEN, reg);
+}
+
+static void dwc3_gadget_disable_irq(struct dwc3 *dwc)
+{
+   /* mask all interrupts */
+   dwc3_writel(dwc-regs, DWC3_DEVTEN, 0x00);
+}
+
+static irqreturn_t dwc3_interrupt(int irq, void *_dwc);
+
 static int dwc3_gadget_start(struct usb_gadget *g,
struct usb_gadget_driver *driver)
 {
@@ -1476,6 +1502,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,
struct dwc3_ep  *dep;
unsigned long   flags;
int ret = 0;
+   int irq;
u32 reg;
 
spin_lock_irqsave(dwc-lock, flags);
@@ -1536,6 +1563,17 @@ static int dwc3_gadget_start(struct usb_gadget *g,
dwc-ep0state = EP0_SETUP_PHASE;
dwc3_ep0_out_start(dwc);
 
+   irq = platform_get_irq(to_platform_device(dwc-dev), 0);
+   ret = request_irq(irq, dwc3_interrupt, IRQF_SHARED,
+   dwc3, dwc);
+   if (ret) {
+   dev_err(dwc-dev, failed to request irq #%d -- %d\n,
+   irq, ret);
+   goto err1;
+   }
+
+   dwc3_gadget_enable_irq(dwc);
+
spin_unlock_irqrestore(dwc-lock, flags);
 
return 0;
@@ -1554,9 +1592,14 @@ static int dwc3_gadget_stop(struct usb_gadget *g,
 {
struct dwc3 *dwc = gadget_to_dwc(g);
unsigned long   flags;
+   int irq;
 
spin_lock_irqsave(dwc-lock, flags);
 
+   dwc3_gadget_disable_irq(dwc);
+   irq = platform_get_irq(to_platform_device(dwc-dev), 0);
+   free_irq(irq, dwc);
+
__dwc3_gadget_ep_disable(dwc-eps[0]);
__dwc3_gadget_ep_disable(dwc-eps[1]);
 
@@ -2454,7 +2497,6 @@ int dwc3_gadget_init(struct dwc3 *dwc)
 {
u32 reg;
int ret;
-   int irq;
 
dwc-ctrl_req = dma_alloc_coherent(dwc-dev, sizeof(*dwc-ctrl_req),
dwc-ctrl_req_addr, GFP_KERNEL);
@@ -2510,33 +2552,11 @@ int dwc3_gadget_init(struct dwc3 *dwc)
if (ret)
goto err4;
 
-   irq = platform_get_irq(to_platform_device(dwc-dev), 0);
-
-   ret = request_irq(irq, dwc3_interrupt, IRQF_SHARED,
-   dwc3, dwc);
-   if (ret) {
-   dev_err(dwc-dev, failed to request irq #%d -- %d\n,
-   irq, ret);
-   goto err5;
-   }
-
reg = dwc3_readl(dwc-regs, DWC3_DCFG);
reg |= DWC3_DCFG_LPM_CAP;
dwc3_writel(dwc-regs, DWC3_DCFG, reg);
 
-   /* Enable all but Start and End of Frame IRQs */
-   reg = (DWC3_DEVTEN_VNDRDEVTSTRCVEDEN |
-   DWC3_DEVTEN_EVNTOVERFLOWEN |
-   DWC3_DEVTEN_CMDCMPLTEN |
-   DWC3_DEVTEN_ERRTICERREN |
-   DWC3_DEVTEN_WKUPEVTEN |
-   DWC3_DEVTEN_ULSTCNGEN |
-   DWC3_DEVTEN_CONNECTDONEEN |
-   DWC3_DEVTEN_USBRSTEN |
-   DWC3_DEVTEN_DISCONNEVTEN);
-   dwc3_writel(dwc-regs, DWC3_DEVTEN, reg);
-
-   /* automatic phy suspend only on recent versions */
+   /* Enable USB2 LPM and automatic phy suspend only on recent versions */
if (dwc-revision = DWC3_REVISION_194A) {
dwc3_gadget_usb2_phy_suspend(dwc, false);
dwc3_gadget_usb3_phy_suspend(dwc, false);
@@ -2545,15 +2565,11 @@ int dwc3_gadget_init(struct dwc3 *dwc)
ret = usb_add_gadget_udc(dwc-dev, dwc-gadget);
if (ret) {

[PATCH 039/100] usb: musb: gadget: switch over to usb_gadget_map/unmap_request()

2013-02-26 Thread Felipe Balbi
we have generic implementations for a reason,
let's use them

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_gadget.c | 158 ++---
 1 file changed, 53 insertions(+), 105 deletions(-)

diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index e363033..bb62c7c 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -90,9 +90,6 @@
 
 /* --- */
 
-#define is_buffer_mapped(req) (is_dma_capable()  \
-   (req-map_state != UN_MAPPED))
-
 /* Maps the buffer to dma  */
 
 static inline void map_dma_buffer(struct musb_request *request,
@@ -101,8 +98,6 @@ static inline void map_dma_buffer(struct musb_request 
*request,
int compatible = true;
struct dma_controller *dma = musb-dma_controller;
 
-   request-map_state = UN_MAPPED;
-
if (!is_dma_capable() || !musb_ep-dma)
return;
 
@@ -117,55 +112,14 @@ static inline void map_dma_buffer(struct musb_request 
*request,
if (!compatible)
return;
 
-   if (request-request.dma == DMA_ADDR_INVALID) {
-   request-request.dma = dma_map_single(
-   musb-controller,
-   request-request.buf,
-   request-request.length,
-   request-tx
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   request-map_state = MUSB_MAPPED;
-   } else {
-   dma_sync_single_for_device(musb-controller,
-   request-request.dma,
-   request-request.length,
-   request-tx
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   request-map_state = PRE_MAPPED;
-   }
+   (void) usb_gadget_map_request(musb-g, request-request, request-tx);
 }
 
 /* Unmap the buffer from dma and maps it back to cpu */
 static inline void unmap_dma_buffer(struct musb_request *request,
struct musb *musb)
 {
-   if (!is_buffer_mapped(request))
-   return;
-
-   if (request-request.dma == DMA_ADDR_INVALID) {
-   dev_vdbg(musb-controller,
-   not unmapping a never mapped buffer\n);
-   return;
-   }
-   if (request-map_state == MUSB_MAPPED) {
-   dma_unmap_single(musb-controller,
-   request-request.dma,
-   request-request.length,
-   request-tx
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   request-request.dma = DMA_ADDR_INVALID;
-   } else { /* PRE_MAPPED */
-   dma_sync_single_for_cpu(musb-controller,
-   request-request.dma,
-   request-request.length,
-   request-tx
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   }
-   request-map_state = UN_MAPPED;
+   usb_gadget_unmap_request(musb-g, request-request, request-tx);
 }
 
 /*
@@ -365,7 +319,7 @@ static void txstate(struct musb *musb, struct musb_request 
*req)
csr);
 
 #ifndefCONFIG_MUSB_PIO_ONLY
-   if (is_buffer_mapped(req)) {
+   {
struct dma_controller   *c = musb-dma_controller;
size_t request_size;
 
@@ -688,7 +642,7 @@ static void rxstate(struct musb *musb, struct musb_request 
*req)
return;
}
 
-   if (is_cppi_enabled()  is_buffer_mapped(req)) {
+   if (is_cppi_enabled()) {
struct dma_controller   *c = musb-dma_controller;
struct dma_channel  *channel = musb_ep-dma;
 
@@ -731,14 +685,13 @@ static void rxstate(struct musb *musb, struct 
musb_request *req)
 
if (request-actual  request-length) {
 #ifdef CONFIG_USB_INVENTRA_DMA
-   if (is_buffer_mapped(req)) {
-   struct dma_controller   *c;
-   struct dma_channel  *channel;
-   int use_dma = 0;
-   int transfer_size;
+   struct dma_controller   *c;
+   struct dma_channel  *channel;
+   int use_dma = 0;
+   int transfer_size;
 
-   c = musb-dma_controller;
-   channel = musb_ep-dma;
+   c = musb-dma_controller;
+   channel = musb_ep-dma;
 
/* We use DMA Req mode 0 in rx_csr, and DMA controller operates in
  

Re: [PATCH v9 0/9] Add tested id switch and vbus connect detect support for Chipidea

2013-02-26 Thread Peter Chen
On Sun, Feb 17, 2013 at 05:24:34PM +0800, Peter Chen wrote:

Hi Alex, 

Ping

 Changes for v9:
 - Some small comments from Alex like: variable comment for otg event
 additional newline. [3/9]
 - Import function tell show if the controller has otg capable, if
 the controller supports both host and device, we think it is otg
 capable, and can read OTGSC. [3/9]
 - Merge two otg patches [v8 3/8] and [v8 4/8] to one [v9 3/9]. [3/9]
 - Add inline to ci_hdrc_gadget_destroy if CONFIG_USB_CHIPIDEA_UDC
 is not defined, it can fix one build warning defined but not used
 [3/9]
 - One comment from Felipe about changing calling gadget disconnect
 API at chipidea's udc driver. I move calling ci-driver-disconnect
 from _gadget_stop_activity to which calls _gadget_stop_activity except
 ci13xxx_stop, as udc core will call disconnect when do rmmod gadget. [7/9]
 - Add ci core probe's return value to ci's platform_data, we do this
 for getting core's probe's result at platform layer, and quit it
 if the core's probe fails. [8/9] [9/9]
 
 Changes for v8:
 - Add ci_supports_gadget helper to know if the controller
 supports gadget, if the controller supports gadget, it
 needs to read otgsc to know the vbus value, basically,
 if the controller supports gadget, it will support host
 as well [3/8]
 - At ci_hdrc_probe, it needs to add free memory at error path
 [3/8]
 - Cosolidate ci-driver = NULL at ci13xxx_stop
 [8/8]
 
 Changes for v7:
 For Patch 8/8, we only need to set ci-driver to NULL when usb cable
 is not connected, for other changes, it will case some runtime pm
 unmatch and un-align with udc-core  composite driver problems.
 
 Changes for v6:
 - Add Alex comments for init/destroy function [3/8] [4/8]
 - Remove memset(ci-gadget, 0, sizeof(ci-gadget)) at destory function [4/8]
 - Add Kishon's comment: Change the format of struct usb_otg otg at 
 drivers/usb/chipidea/ci.h
 [1/8]
 - Add comments for CI_VBUS_STABLE_TIMEOUT [3/8]
 - Change the otg_set_peripheral return value check as the fully
 chipidea driver users don't need it. [4/8]
 - Fix one bug that the oops when re-plug in usb cable after
 rmmod gadget [8/8]
 
 Anyone who has tested this patchset, please give a tested-by, thanks.
 
 This patchset adds tested otg id switch function and
 vbus connect/disconnect detection for chipidea driver.
 The mainly design of id/vbus handling follows msm otg driver.
 I hope the msm usb maintainer can have a look of this patchset,
 and give some comments, and move the whole msm usb driver to
 chipidea framework if possible in the future.
 
 This patch is fully tested at imx6 sabresd platform.
 My chipidea repo: https://github.com/hzpeterchen/linux-usb.git
 which is rebased of Sascha's git
 (git://git.pengutronix.de/git/imx/linux-2.6.git 
 tags/usb-chipidea-otg-for-next)
 
 At sascha's tag, it finishes some dr_mode and phy_type patches,
 in that way, we can choose host-only and gadget-only function at
 dts file as well as we can choose different phy setting.
 
 Besides sascha's work, there are some Michael Grzeschik/Marc Kleine-Budde
 usbmisc patch, imx chipidea suspend/resume patch, and one pin control
 patch for imx6
 
 Peter Chen (9):
   Revert USB: chipidea: add vbus detect for udc
   usb: chipidea: add otg file
   usb: chipidea: add otg id switch and vbus connect/disconnect detect
   usb: chipidea: udc: add pullup/pulldown dp at hw_device_state
   usb: chipidea: udc: retire the flag CI13_PULLUP_ON_VBUS
   usb: chipidea: imx: add internal vbus regulator control
   usb: chipidea: udc: fix the oops when plugs in usb cable after rmmod
 gadget
   usb: chipidea: tell platform layer the ci core probe's result
   usb: chipidea: imx: fix the error that using uninitialized pointer
 
  drivers/usb/chipidea/Makefile  |2 +-
  drivers/usb/chipidea/bits.h|   10 ++
  drivers/usb/chipidea/ci.h  |   14 +++-
  drivers/usb/chipidea/ci13xxx_imx.c |   85 
  drivers/usb/chipidea/ci13xxx_msm.c |1 -
  drivers/usb/chipidea/core.c|  192 
 
  drivers/usb/chipidea/host.c|6 +
  drivers/usb/chipidea/host.h|6 +-
  drivers/usb/chipidea/otg.c |   68 +
  drivers/usb/chipidea/otg.h |9 ++
  drivers/usb/chipidea/udc.c |  118 ++
  drivers/usb/chipidea/udc.h |4 +
  include/linux/usb/chipidea.h   |2 +-
  13 files changed, 405 insertions(+), 112 deletions(-)
  create mode 100644 drivers/usb/chipidea/otg.c
  create mode 100644 drivers/usb/chipidea/otg.h
 
 
 --
 To unsubscribe from this list: send the line unsubscribe linux-usb in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 

-- 

Best Regards,
Peter Chen

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[PATCH 043/100] usb: dwc3: core: add power management support

2013-02-26 Thread Felipe Balbi
Add support for basic power management on
the dwc3 driver. While there is still lots
to improve for full PM support, this minimal
patch will already make sure that we survive
suspend-to-ram and suspend-to-disk without
major issues.

Cc: Vikas C Sajjan vikas.saj...@linaro.org
Tested-by: Vivek Gautam gautam.vi...@samsung.com
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.c   | 118 ++
 drivers/usb/dwc3/core.h   |  33 +
 drivers/usb/dwc3/gadget.c |  61 
 3 files changed, 212 insertions(+)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 4743508..75a9f88 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -591,6 +591,123 @@ static int dwc3_remove(struct platform_device *pdev)
return 0;
 }
 
+#ifdef CONFIG_PM
+static int dwc3_prepare(struct device *dev)
+{
+   struct dwc3 *dwc = dev_get_drvdata(dev);
+   unsigned long   flags;
+
+   spin_lock_irqsave(dwc-lock, flags);
+
+   switch (dwc-mode) {
+   case DWC3_MODE_DEVICE:
+   case DWC3_MODE_DRD:
+   dwc3_gadget_prepare(dwc);
+   /* FALLTHROUGH */
+   case DWC3_MODE_HOST:
+   default:
+   dwc3_event_buffers_cleanup(dwc);
+   break;
+   }
+
+   spin_unlock_irqrestore(dwc-lock, flags);
+
+   return 0;
+}
+
+static void dwc3_complete(struct device *dev)
+{
+   struct dwc3 *dwc = dev_get_drvdata(dev);
+   unsigned long   flags;
+
+   spin_lock_irqsave(dwc-lock, flags);
+
+   switch (dwc-mode) {
+   case DWC3_MODE_DEVICE:
+   case DWC3_MODE_DRD:
+   dwc3_gadget_complete(dwc);
+   /* FALLTHROUGH */
+   case DWC3_MODE_HOST:
+   default:
+   dwc3_event_buffers_setup(dwc);
+   break;
+   }
+
+   spin_unlock_irqrestore(dwc-lock, flags);
+}
+
+static int dwc3_suspend(struct device *dev)
+{
+   struct dwc3 *dwc = dev_get_drvdata(dev);
+   unsigned long   flags;
+
+   spin_lock_irqsave(dwc-lock, flags);
+
+   switch (dwc-mode) {
+   case DWC3_MODE_DEVICE:
+   case DWC3_MODE_DRD:
+   dwc3_gadget_suspend(dwc);
+   /* FALLTHROUGH */
+   case DWC3_MODE_HOST:
+   default:
+   /* do nothing */
+   break;
+   }
+
+   dwc-gctl = dwc3_readl(dwc-regs, DWC3_GCTL);
+   spin_unlock_irqrestore(dwc-lock, flags);
+
+   usb_phy_shutdown(dwc-usb3_phy);
+   usb_phy_shutdown(dwc-usb2_phy);
+
+   return 0;
+}
+
+static int dwc3_resume(struct device *dev)
+{
+   struct dwc3 *dwc = dev_get_drvdata(dev);
+   unsigned long   flags;
+
+   usb_phy_init(dwc-usb3_phy);
+   usb_phy_init(dwc-usb2_phy);
+   msleep(100);
+
+   spin_lock_irqsave(dwc-lock, flags);
+
+   dwc3_writel(dwc-regs, DWC3_GCTL, dwc-gctl);
+
+   switch (dwc-mode) {
+   case DWC3_MODE_DEVICE:
+   case DWC3_MODE_DRD:
+   dwc3_gadget_resume(dwc);
+   /* FALLTHROUGH */
+   case DWC3_MODE_HOST:
+   default:
+   /* do nothing */
+   break;
+   }
+
+   spin_unlock_irqrestore(dwc-lock, flags);
+
+   pm_runtime_disable(dev);
+   pm_runtime_set_active(dev);
+   pm_runtime_enable(dev);
+
+   return 0;
+}
+
+static const struct dev_pm_ops dwc3_dev_pm_ops = {
+   .prepare= dwc3_prepare,
+   .complete   = dwc3_complete,
+
+   SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend, dwc3_resume)
+};
+
+#define DWC3_PM_OPS(dwc3_dev_pm_ops)
+#else
+#define DWC3_PM_OPSNULL
+#endif
+
 #ifdef CONFIG_OF
 static const struct of_device_id of_dwc3_match[] = {
{
@@ -607,6 +724,7 @@ static struct platform_driver dwc3_driver = {
.driver = {
.name   = dwc3,
.of_match_table = of_match_ptr(of_dwc3_match),
+   .pm = DWC3_PM_OPS,
},
 };
 
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 35e4d3c..52e48e2 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -626,6 +626,8 @@ struct dwc3_scratchpad_array {
  * @mode: mode of operation
  * @usb2_phy: pointer to USB2 PHY
  * @usb3_phy: pointer to USB3 PHY
+ * @dcfg: saved contents of DCFG register
+ * @gctl: saved contents of GCTL register
  * @is_selfpowered: true when we are selfpowered
  * @three_stage_setup: set if we perform a three phase setup
  * @ep0_bounced: true when we used bounce buffer
@@ -675,6 +677,10 @@ struct dwc3 {
void __iomem*regs;
size_t  regs_size;
 
+   /* used for suspend/resume */
+   u32 dcfg;
+   u32 gctl;
+
u32 num_event_buffers;
u32 u1u2;
u32 maximum_speed;
@@ -885,4 +891,31 @@ static inline void dwc3_gadget_exit(struct dwc3 *dwc)
 { }

[PATCH 048/100] usb: dwc3: pci: add basic suspend/resume support

2013-02-26 Thread Felipe Balbi
this patch adds basic PM support for the
PCI glue layer.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-pci.c | 38 ++
 1 file changed, 38 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index e8d7768..227d4a7 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -212,11 +212,49 @@ static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = {
 };
 MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table);
 
+#ifdef CONFIG_PM
+static int dwc3_pci_suspend(struct device *dev)
+{
+   struct pci_dev  *pci = to_pci_dev(dev);
+
+   pci_disable_device(pci);
+
+   return 0;
+}
+
+static int dwc3_pci_resume(struct device *dev)
+{
+   struct pci_dev  *pci = to_pci_dev(dev);
+   int ret;
+
+   ret = pci_enable_device(pci);
+   if (ret) {
+   dev_err(dev, can't re-enable device -- %d\n, ret);
+   return ret;
+   }
+
+   pci_set_master(pci);
+
+   return 0;
+}
+
+static const struct dev_pm_ops dwc3_pci_dev_pm_ops = {
+   SET_SYSTEM_SLEEP_PM_OPS(dwc3_pci_suspend, dwc3_pci_resume)
+};
+
+#define DEV_PM_OPS (dwc3_pci_dev_pm_ops)
+#else
+#define DEV_PM_OPS NULL
+#endif /* CONFIG_PM */
+
 static struct pci_driver dwc3_pci_driver = {
.name   = dwc3-pci,
.id_table   = dwc3_pci_id_table,
.probe  = dwc3_pci_probe,
.remove = dwc3_pci_remove,
+   .driver = {
+   .pm = DEV_PM_OPS,
+   },
 };
 
 MODULE_AUTHOR(Felipe Balbi ba...@ti.com);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 049/100] usb: dwc3: omap: bail out early on non-DT boot

2013-02-26 Thread Felipe Balbi
OMAP5 won't support non-DT boot, so instead of:

if (node)
foo();

return 0;

which returns zero even on non-DT boot, we have
to bail out early if node isn't a valid pointer:

if (!node)
return -ENODEV;

foo();

return 0;

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-omap.c | 16 +---
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index f340023..2a56b93 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -352,6 +352,11 @@ static int dwc3_omap_probe(struct platform_device *pdev)
 
void __iomem*base;
 
+   if (!node) {
+   dev_err(dev, missing OF node\n);
+   return -ENODEV;
+   }
+
omap = devm_kzalloc(dev, sizeof(*omap), GFP_KERNEL);
if (!omap) {
dev_err(dev, not enough memory\n);
@@ -442,13 +447,10 @@ static int dwc3_omap_probe(struct platform_device *pdev)
 
dwc3_omap_enable_irqs(omap);
 
-   if (node) {
-   ret = of_platform_populate(node, NULL, NULL, dev);
-   if (ret) {
-   dev_err(pdev-dev,
-   failed to add create dwc3 core\n);
-   return ret;
-   }
+   ret = of_platform_populate(node, NULL, NULL, dev);
+   if (ret) {
+   dev_err(dev, failed to add create dwc3 core\n);
+   return ret;
}
 
return 0;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 047/100] usb: dwc3: exynos: add basic suspend/resume support

2013-02-26 Thread Felipe Balbi
From: Vikas Sajjan vikas.saj...@linaro.org

Adds suspend and resume callbacks to exynos dwc3 driver as part of
power management support.

This change does gating of dwc3 clock during suspend/resume cycles.

Signed-off-by: Abhilash Kesavan a.kesa...@samsung.com
Signed-off-by: Vikas C Sajjan vikas.saj...@linaro.org
CC: Doug Anderson diand...@chromium.org
Tested-by: Vivek Gautam gautam.vi...@samsung.com

[ ba...@ti.com : refreshed to current linus/master ]

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-exynos.c | 34 ++
 1 file changed, 34 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
index b082bec..e12e452 100644
--- a/drivers/usb/dwc3/dwc3-exynos.c
+++ b/drivers/usb/dwc3/dwc3-exynos.c
@@ -187,12 +187,46 @@ static const struct of_device_id exynos_dwc3_match[] = {
 MODULE_DEVICE_TABLE(of, exynos_dwc3_match);
 #endif
 
+#ifdef CONFIG_PM
+static int dwc3_exynos_suspend(struct device *dev)
+{
+   struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+
+   clk_disable(exynos-clk);
+
+   return 0;
+}
+
+static int dwc3_exynos_resume(struct device *dev)
+{
+   struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+
+   clk_enable(exynos-clk);
+
+   /* runtime set active to reflect active state. */
+   pm_runtime_disable(dev);
+   pm_runtime_set_active(dev);
+   pm_runtime_enable(dev);
+
+   return 0;
+}
+
+static const struct dev_pm_ops dwc3_exynos_dev_pm_ops = {
+   SET_SYSTEM_SLEEP_PM_OPS(dwc3_exynos_suspend, dwc3_exynos_resume)
+};
+
+#define DEV_PM_OPS (dwc3_exynos_dev_pm_ops)
+#else
+#define DEV_PM_OPS NULL
+#endif /* CONFIG_PM */
+
 static struct platform_driver dwc3_exynos_driver = {
.probe  = dwc3_exynos_probe,
.remove = dwc3_exynos_remove,
.driver = {
.name   = exynos-dwc3,
.of_match_table = of_match_ptr(exynos_dwc3_match),
+   .pm = DEV_PM_OPS,
},
 };
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 053/100] usb: musb: gadget: delete wrong comment

2013-02-26 Thread Felipe Balbi
Those comments haven't been updated for a long
time, so much that they don't make sense anymore.

Best to remove them.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_gadget.c | 108 -
 1 file changed, 108 deletions(-)

diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index bb62c7c..296698b 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -46,48 +46,6 @@
 #include musb_core.h
 
 
-/* MUSB PERIPHERAL status 3-mar-2006:
- *
- * - EP0 seems solid.  It passes both USBCV and usbtest control cases.
- *   Minor glitches:
- *
- * + remote wakeup to Linux hosts work, but saw USBCV failures;
- *   in one test run (operator error?)
- * + endpoint halt tests -- in both usbtest and usbcv -- seem
- *   to break when dma is enabled ... is something wrongly
- *   clearing SENDSTALL?
- *
- * - Mass storage behaved ok when last tested.  Network traffic patterns
- *   (with lots of short transfers etc) need retesting; they turn up the
- *   worst cases of the DMA, since short packets are typical but are not
- *   required.
- *
- * - TX/IN
- * + both pio and dma behave in with network and g_zero tests
- * + no cppi throughput issues other than no-hw-queueing
- * + failed with FLAT_REG (DaVinci)
- * + seems to behave with double buffering, PIO -and- CPPI
- * + with gadgetfs + AIO, requests got lost?
- *
- * - RX/OUT
- * + both pio and dma behave in with network and g_zero tests
- * + dma is slow in typical case (short_not_ok is clear)
- * + double buffering ok with PIO
- * + double buffering *FAILS* with CPPI, wrong data bytes sometimes
- * + request lossage observed with gadgetfs
- *
- * - ISO not tested ... might work, but only weakly isochronous
- *
- * - Gadget driver disabling of softconnect during bind() is ignored; so
- *   drivers can't hold off host requests until userspace is ready.
- *   (Workaround:  they can turn it off later.)
- *
- * - PORTABILITY (assumes PIO works):
- * + DaVinci, basically works with cppi dma
- * + OMAP 2430, ditto with mentor dma
- * + TUSB 6010, platform-specific dma in the works
- */
-
 /* --- */
 
 /* Maps the buffer to dma  */
@@ -229,41 +187,6 @@ static inline int max_ep_writesize(struct musb *musb, 
struct musb_ep *ep)
return ep-packet_sz;
 }
 
-
-#ifdef CONFIG_USB_INVENTRA_DMA
-
-/* Peripheral tx (IN) using Mentor DMA works as follows:
-   Only mode 0 is used for transfers = wPktSize,
-   mode 1 is used for larger transfers,
-
-   One of the following happens:
-   - Host sends IN token which causes an endpoint interrupt
-   - TxAvail
-   - if DMA is currently busy, exit.
-   - if queue is non-empty, txstate().
-
-   - Request is queued by the gadget driver.
-   - if queue was previously empty, txstate()
-
-   txstate()
-   - start
- /\- setup DMA
- | (data is transferred to the FIFO, then sent out when
- | IN token(s) are recd from Host.
- | - DMA interrupt on completion
- |calls TxAvail.
- |   - stop DMA, ~DMAENAB,
- |   - set TxPktRdy for last short pkt or zlp
- |   - Complete Request
- |   - Continue next request (call txstate)
- |___|
-
- * Non-Mentor DMA engines can of course work differently, such as by
- * upleveling from irq-per-packet to irq-per-buffer.
- */
-
-#endif
-
 /*
  * An endpoint is transmitting data. This can be called either from
  * the IRQ routine or from ep.queue() to kickstart a request on an
@@ -570,37 +493,6 @@ void musb_g_tx(struct musb *musb, u8 epnum)
 
 /*  */
 
-#ifdef CONFIG_USB_INVENTRA_DMA
-
-/* Peripheral rx (OUT) using Mentor DMA works as follows:
-   - Only mode 0 is used.
-
-   - Request is queued by the gadget class driver.
-   - if queue was previously empty, rxstate()
-
-   - Host sends OUT token which causes an endpoint interrupt
- /\  - RxReady
- |   - if request queued, call rxstate
- | /\  - setup DMA
- | |- DMA interrupt on completion
- | |   - RxReady
- | | - stop DMA
- | | - ack the read
- | | - if data recd = max expected
- | |   by the request, or host
- | |   

[PATCH 055/100] usb: musb: make davinci and da8xx glues depend on BROKEN

2013-02-26 Thread Felipe Balbi
those two glues are still including mach/
headers and no active developement has been
going on those glues for quite some time.

Apparently, for da8xx glue, only initial commit
3ee076de (usb: musb: introduce DA8xx/OMAP-L1x
glue layer) has been tested. All other patches
seem to have been compile-tested only.

For davinci glue layer, last real commit dates
back from 2010, with commit f405387 (USB: MUSB:
fix kernel WARNING/oops when unloading module
in OTG mode).

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/Kconfig | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index dfb57f2..0f1d3e0 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -39,10 +39,12 @@ choice
 config USB_MUSB_DAVINCI
tristate DaVinci
depends on ARCH_DAVINCI_DMx
+   depends on BROKEN
 
 config USB_MUSB_DA8XX
tristate DA8xx/OMAP-L1x
depends on ARCH_DAVINCI_DA8XX
+   depends on BROKEN
 
 config USB_MUSB_TUSB6010
tristate TUSB6010
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 056/100] usb: musb: dsps: add missing include

2013-02-26 Thread Felipe Balbi
linux/sizes.h is the header defining SZ_4
and SZ_16M, we shouldn't depend on indirect
inclusion so let's explicitly include it.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_dsps.c | 1 +
 drivers/usb/musb/ux500_dma.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 6bb8971..dfaa024 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -38,6 +38,7 @@
 #include linux/module.h
 #include linux/usb/nop-usb-xceiv.h
 #include linux/platform_data/usb-omap.h
+#include linux/sizes.h
 
 #include linux/of.h
 #include linux/of_device.h
diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c
index 039e567..12dd6ed 100644
--- a/drivers/usb/musb/ux500_dma.c
+++ b/drivers/usb/musb/ux500_dma.c
@@ -30,6 +30,7 @@
 #include linux/dma-mapping.h
 #include linux/dmaengine.h
 #include linux/pfn.h
+#include linux/sizes.h
 #include linux/platform_data/usb-musb-ux500.h
 #include musb_core.h
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 058/100] usb: musb: dsps: fix possible compile warning

2013-02-26 Thread Felipe Balbi
if CONFIG_OF is disabled, np will be unused
and that will give us a compile warning. This
patch just avoids it.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_dsps.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index dfaa024..4b49874 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -597,14 +597,13 @@ err0:
 
 static int dsps_probe(struct platform_device *pdev)
 {
-   struct device_node *np = pdev-dev.of_node;
const struct of_device_id *match;
const struct dsps_musb_wrapper *wrp;
struct dsps_glue *glue;
struct resource *iomem;
int ret, i;
 
-   match = of_match_node(musb_dsps_of_match, np);
+   match = of_match_node(musb_dsps_of_match, pdev-dev.of_node);
if (!match) {
dev_err(pdev-dev, fail to get matching of_match struct\n);
ret = -EINVAL;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 059/100] usb: musb: gadget: fix compile warning

2013-02-26 Thread Felipe Balbi
Fix the following compile warning:

drivers/usb/musb/musb_gadget.c: In function ‘rxstate’:
drivers/usb/musb/musb_gadget.c:714:22: warning: comparison of distinct pointer 
types lacks a cast [enabled by default]

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_gadget.c | 13 -
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index 296698b..1fcd987 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -580,7 +580,7 @@ static void rxstate(struct musb *musb, struct musb_request 
*req)
struct dma_controller   *c;
struct dma_channel  *channel;
int use_dma = 0;
-   int transfer_size;
+   unsigned int transfer_size;
 
c = musb-dma_controller;
channel = musb_ep-dma;
@@ -622,7 +622,8 @@ static void rxstate(struct musb *musb, struct musb_request 
*req)
csr | MUSB_RXCSR_DMAMODE);
musb_writew(epio, MUSB_RXCSR, csr);
 
-   transfer_size = min(request-length - 
request-actual,
+   transfer_size = min_t(unsigned int,
+   request-length - 
request-actual,
channel-max_len);
musb_ep-dma-desired_mode = 1;
 
@@ -652,7 +653,7 @@ static void rxstate(struct musb *musb, struct musb_request 
*req)
if (request-actual  request-length) {
struct dma_controller *c;
struct dma_channel *channel;
-   int transfer_size = 0;
+   unsigned int transfer_size = 0;
 
c = musb-dma_controller;
channel = musb_ep-dma;
@@ -661,11 +662,13 @@ static void rxstate(struct musb *musb, struct 
musb_request *req)
if (fifo_count  musb_ep-packet_sz)
transfer_size = fifo_count;
else if (request-short_not_ok)
-   transfer_size = min(request-length -
+   transfer_size = min_t(unsigned int,
+   request-length -
request-actual,
channel-max_len);
else
-   transfer_size = min(request-length -
+   transfer_size = min_t(unsigned int,
+   request-length -
request-actual,
(unsigned)fifo_count);
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 060/100] usb: musb: Kconfig: drop unnecessary dependencies

2013-02-26 Thread Felipe Balbi
those glues can build cleanly anywhere.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/Kconfig | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index 0f1d3e0..f55d1fc 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -52,7 +52,6 @@ config USB_MUSB_TUSB6010
 
 config USB_MUSB_OMAP2PLUS
tristate OMAP2430 and onwards
-   depends on ARCH_OMAP2PLUS
 
 config USB_MUSB_AM35X
tristate AM35x
@@ -60,7 +59,6 @@ config USB_MUSB_AM35X
 
 config USB_MUSB_DSPS
tristate TI DSPS platforms
-   depends on SOC_TI81XX || SOC_AM33XX
 
 config USB_MUSB_BLACKFIN
tristate Blackfin
@@ -68,7 +66,6 @@ config USB_MUSB_BLACKFIN
 
 config USB_MUSB_UX500
tristate U8500 and U5500
-   depends on (ARCH_U8500  AB8500_USB)
 
 endchoice
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 061/100] usb: dwc3: core: remove bogus comment to our structure

2013-02-26 Thread Felipe Balbi
that irq field has been removed already. This
patch just removes its documentation.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 52e48e2..80f763f 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -618,7 +618,6 @@ struct dwc3_scratchpad_array {
  * @gadget_driver: pointer to the gadget driver
  * @regs: base address for our registers
  * @regs_size: address space size
- * @irq: IRQ number
  * @num_event_buffers: calculated number of event buffers
  * @u1u2: only used on revisions 1.83a for workaround
  * @maximum_speed: maximum speed requested (mainly for testing purposes)
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 062/100] usb: dwc3: add a flags field to event buffer

2013-02-26 Thread Felipe Balbi
that way we know if a particular event buffer
has pending events, or not.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.h | 5 +
 1 file changed, 5 insertions(+)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 80f763f..e7b0679 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -369,6 +369,8 @@ struct dwc3_trb;
  * @list: a list of event buffers
  * @buf: _THE_ buffer
  * @length: size of this buffer
+ * @lpos: event offset
+ * @flags: flags related to this event buffer
  * @dma: dma_addr_t
  * @dwc: pointer to DWC controller
  */
@@ -376,6 +378,9 @@ struct dwc3_event_buffer {
void*buf;
unsignedlength;
unsigned intlpos;
+   unsigned intflags;
+
+#define DWC3_EVENT_PENDING BIT(0)
 
dma_addr_t  dma;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 063/100] usb: dwc3: add count field to event buffer

2013-02-26 Thread Felipe Balbi
we can cache the last read value of the event
buffer count register on this field, for later
handling.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index e7b0679..5e87cc0 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -371,6 +371,7 @@ struct dwc3_trb;
  * @length: size of this buffer
  * @lpos: event offset
  * @flags: flags related to this event buffer
+ * @count: cache of last read event count register
  * @dma: dma_addr_t
  * @dwc: pointer to DWC controller
  */
@@ -379,6 +380,7 @@ struct dwc3_event_buffer {
unsignedlength;
unsigned intlpos;
unsigned intflags;
+   unsigned intcount;
 
 #define DWC3_EVENT_PENDING BIT(0)
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 064/100] usb: dwc3: gadget: move to threaded IRQ

2013-02-26 Thread Felipe Balbi
by moving to threaded IRQs, we allow our IRQ
priorities to be configurable when running with
realtime patch. Also, since we're running in
thread context, we can call functions which
might sleep, such as sysfs_notify() without
problems.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/gadget.c | 86 +--
 1 file changed, 60 insertions(+), 26 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 73b0b7f..a7bea72 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1496,6 +1496,7 @@ static void dwc3_gadget_disable_irq(struct dwc3 *dwc)
 }
 
 static irqreturn_t dwc3_interrupt(int irq, void *_dwc);
+static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc);
 
 static int dwc3_gadget_start(struct usb_gadget *g,
struct usb_gadget_driver *driver)
@@ -1566,8 +1567,8 @@ static int dwc3_gadget_start(struct usb_gadget *g,
dwc3_ep0_out_start(dwc);
 
irq = platform_get_irq(to_platform_device(dwc-dev), 0);
-   ret = request_irq(irq, dwc3_interrupt, IRQF_SHARED,
-   dwc3, dwc);
+   ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt,
+   IRQF_SHARED | IRQF_ONESHOT, dwc3, dwc);
if (ret) {
dev_err(dwc-dev, failed to request irq #%d -- %d\n,
irq, ret);
@@ -2432,40 +2433,73 @@ static void dwc3_process_event_entry(struct dwc3 *dwc,
}
 }
 
+static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc)
+{
+   struct dwc3 *dwc = _dwc;
+   unsigned long flags;
+   irqreturn_t ret = IRQ_NONE;
+   int i;
+
+   spin_lock_irqsave(dwc-lock, flags);
+
+   for (i = 0; i  dwc-num_event_buffers; i++) {
+   struct dwc3_event_buffer *evt;
+   int left;
+
+   evt = dwc-ev_buffs[i];
+   left = evt-count;
+
+   if (!(evt-flags  DWC3_EVENT_PENDING))
+   continue;
+
+   while (left  0) {
+   union dwc3_event event;
+
+   event.raw = *(u32 *) (evt-buf + evt-lpos);
+
+   dwc3_process_event_entry(dwc, event);
+
+   /*
+* FIXME we wrap around correctly to the next entry as
+* almost all entries are 4 bytes in size. There is one
+* entry which has 12 bytes which is a regular entry
+* followed by 8 bytes data. ATM I don't know how
+* things are organized if we get next to the a
+* boundary so I worry about that once we try to handle
+* that.
+*/
+   evt-lpos = (evt-lpos + 4) % DWC3_EVENT_BUFFERS_SIZE;
+   left -= 4;
+
+   dwc3_writel(dwc-regs, DWC3_GEVNTCOUNT(i), 4);
+   }
+
+   evt-count = 0 ;
+   evt-flags = ~DWC3_EVENT_PENDING;
+   ret = IRQ_HANDLED;
+   }
+
+   spin_unlock_irqrestore(dwc-lock, flags);
+
+   return ret;
+}
+
 static irqreturn_t dwc3_process_event_buf(struct dwc3 *dwc, u32 buf)
 {
struct dwc3_event_buffer *evt;
-   int left;
u32 count;
 
+   evt = dwc-ev_buffs[buf];
+
count = dwc3_readl(dwc-regs, DWC3_GEVNTCOUNT(buf));
count = DWC3_GEVNTCOUNT_MASK;
if (!count)
return IRQ_NONE;
 
-   evt = dwc-ev_buffs[buf];
-   left = count;
-
-   while (left  0) {
-   union dwc3_event event;
-
-   event.raw = *(u32 *) (evt-buf + evt-lpos);
-
-   dwc3_process_event_entry(dwc, event);
-   /*
-* XXX we wrap around correctly to the next entry as almost all
-* entries are 4 bytes in size. There is one entry which has 12
-* bytes which is a regular entry followed by 8 bytes data. ATM
-* I don't know how things are organized if were get next to the
-* a boundary so I worry about that once we try to handle that.
-*/
-   evt-lpos = (evt-lpos + 4) % DWC3_EVENT_BUFFERS_SIZE;
-   left -= 4;
-
-   dwc3_writel(dwc-regs, DWC3_GEVNTCOUNT(buf), 4);
-   }
+   evt-count = count;
+   evt-flags |= DWC3_EVENT_PENDING;
 
-   return IRQ_HANDLED;
+   return IRQ_WAKE_THREAD;
 }
 
 static irqreturn_t dwc3_interrupt(int irq, void *_dwc)
@@ -2480,7 +2514,7 @@ static irqreturn_t dwc3_interrupt(int irq, void *_dwc)
irqreturn_t status;
 
status = dwc3_process_event_buf(dwc, i);
-   if (status == IRQ_HANDLED)
+   if (status == IRQ_WAKE_THREAD)
ret = status;
}
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line 

[PATCH 065/100] usb: common: introduce usb_state_string()

2013-02-26 Thread Felipe Balbi
this function will receive enum usb_device_state
and return a human-readable string from it or,
case an unknown value is passed as argument,
the string UNKNOWN.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/usb-common.c | 21 +
 include/linux/usb/ch9.h  |  9 +
 2 files changed, 30 insertions(+)

diff --git a/drivers/usb/usb-common.c b/drivers/usb/usb-common.c
index d29503e..070b681 100644
--- a/drivers/usb/usb-common.c
+++ b/drivers/usb/usb-common.c
@@ -32,4 +32,25 @@ const char *usb_speed_string(enum usb_device_speed speed)
 }
 EXPORT_SYMBOL_GPL(usb_speed_string);
 
+const char *usb_state_string(enum usb_device_state state)
+{
+   static const char *const names[] = {
+   [USB_STATE_NOTATTACHED] = not attached,
+   [USB_STATE_ATTACHED] = attached,
+   [USB_STATE_POWERED] = powered,
+   [USB_STATE_RECONNECTING] = reconnecting,
+   [USB_STATE_UNAUTHENTICATED] = unauthenticated,
+   [USB_STATE_DEFAULT] = default,
+   [USB_STATE_ADDRESS] = addresssed,
+   [USB_STATE_CONFIGURED] = configured,
+   [USB_STATE_SUSPENDED] = suspended,
+   };
+
+   if (state  0 || state = ARRAY_SIZE(names))
+   return UNKNOWN;
+
+   return names[state];
+}
+EXPORT_SYMBOL_GPL(usb_state_string);
+
 MODULE_LICENSE(GPL);
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index 9c210f2..27603bc 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -43,4 +43,13 @@
  */
 extern const char *usb_speed_string(enum usb_device_speed speed);
 
+
+/**
+ * usb_state_string - Returns human readable name for the state.
+ * @state: The state to return a human-readable name for. If it's not
+ * any of the states devices in usb_device_state_string enum,
+ * the string UNKNOWN will be returned.
+ */
+extern const char *usb_state_string(enum usb_device_state state);
+
 #endif /* __LINUX_USB_CH9_H */
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 01/11] usb: dwc3: core: don't forget to free coherent memory

2013-02-26 Thread Felipe Balbi
commit 3921426 (usb: dwc3: core: move
event buffer allocation out of
dwc3_core_init()) introduced a memory leak
of the coherent memory we use as event
buffers on dwc3 driver.

If the driver is compiled as a dynamically
loadable module and use constantly loads
and unloads the driver, we will continue
to leak the coherent memory allocated during
-probe() because dwc3_free_event_buffers()
is never called during -remove().

Cc: sta...@vger.kernel.org # v3.7 v3.8
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 094..ffa6b00 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -583,6 +583,7 @@ static int dwc3_remove(struct platform_device *pdev)
break;
}
 
+   dwc3_free_event_buffers(dwc);
dwc3_core_exit(dwc);
 
return 0;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 068/100] usb: dwc3: remove our homebrew state mechanism

2013-02-26 Thread Felipe Balbi
We can reuse the generic implementation via
our struct usb_gadget.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.h |  7 ---
 drivers/usb/dwc3/ep0.c  | 34 +-
 2 files changed, 17 insertions(+), 24 deletions(-)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 5e87cc0..1a2e481 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -494,12 +494,6 @@ enum dwc3_link_state {
DWC3_LINK_STATE_MASK= 0x0f,
 };
 
-enum dwc3_device_state {
-   DWC3_DEFAULT_STATE,
-   DWC3_ADDRESS_STATE,
-   DWC3_CONFIGURED_STATE,
-};
-
 /* TRB Length, PCM and Status */
 #define DWC3_TRB_SIZE_MASK (0x00ff)
 #define DWC3_TRB_SIZE_LENGTH(n)((n)  DWC3_TRB_SIZE_MASK)
@@ -721,7 +715,6 @@ struct dwc3 {
enum dwc3_ep0_next  ep0_next_event;
enum dwc3_ep0_state ep0state;
enum dwc3_link_statelink_state;
-   enum dwc3_device_state  dev_state;
 
u16 isoch_delay;
u16 u2sel;
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index ec4b563..4bdca7d 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -394,10 +394,13 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
u32 wIndex;
u32 reg;
int ret;
+   enum usb_device_state   state;
 
wValue = le16_to_cpu(ctrl-wValue);
wIndex = le16_to_cpu(ctrl-wIndex);
recip = ctrl-bRequestType  USB_RECIP_MASK;
+   state = dwc-gadget.state;
+
switch (recip) {
case USB_RECIP_DEVICE:
 
@@ -409,7 +412,7 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
 * default control pipe
 */
case USB_DEVICE_U1_ENABLE:
-   if (dwc-dev_state != DWC3_CONFIGURED_STATE)
+   if (state != USB_STATE_CONFIGURED)
return -EINVAL;
if (dwc-speed != DWC3_DSTS_SUPERSPEED)
return -EINVAL;
@@ -423,7 +426,7 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
break;
 
case USB_DEVICE_U2_ENABLE:
-   if (dwc-dev_state != DWC3_CONFIGURED_STATE)
+   if (state != USB_STATE_CONFIGURED)
return -EINVAL;
if (dwc-speed != DWC3_DSTS_SUPERSPEED)
return -EINVAL;
@@ -493,6 +496,7 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
 
 static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
 {
+   enum usb_device_state state = dwc-gadget.state;
u32 addr;
u32 reg;
 
@@ -502,7 +506,7 @@ static int dwc3_ep0_set_address(struct dwc3 *dwc, struct 
usb_ctrlrequest *ctrl)
return -EINVAL;
}
 
-   if (dwc-dev_state == DWC3_CONFIGURED_STATE) {
+   if (state == USB_STATE_CONFIGURED) {
dev_dbg(dwc-dev, trying to set address when configured\n);
return -EINVAL;
}
@@ -512,13 +516,10 @@ static int dwc3_ep0_set_address(struct dwc3 *dwc, struct 
usb_ctrlrequest *ctrl)
reg |= DWC3_DCFG_DEVADDR(addr);
dwc3_writel(dwc-regs, DWC3_DCFG, reg);
 
-   if (addr) {
-   dwc-dev_state = DWC3_ADDRESS_STATE;
+   if (addr)
usb_gadget_set_state(dwc-gadget, USB_STATE_ADDRESS);
-   } else {
-   dwc-dev_state = DWC3_DEFAULT_STATE;
+   else
usb_gadget_set_state(dwc-gadget, USB_STATE_DEFAULT);
-   }
 
return 0;
 }
@@ -535,6 +536,7 @@ static int dwc3_ep0_delegate_req(struct dwc3 *dwc, struct 
usb_ctrlrequest *ctrl)
 
 static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
 {
+   enum usb_device_state state = dwc-gadget.state;
u32 cfg;
int ret;
u32 reg;
@@ -542,16 +544,15 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct 
usb_ctrlrequest *ctrl)
dwc-start_config_issued = false;
cfg = le16_to_cpu(ctrl-wValue);
 
-   switch (dwc-dev_state) {
-   case DWC3_DEFAULT_STATE:
+   switch (state) {
+   case USB_STATE_DEFAULT:
return -EINVAL;
break;
 
-   case DWC3_ADDRESS_STATE:
+   case USB_STATE_ADDRESS:
ret = dwc3_ep0_delegate_req(dwc, ctrl);
/* if the cfg matches and the cfg is non zero */
if (cfg  (!ret || (ret == USB_GADGET_DELAYED_STATUS))) {
-   dwc-dev_state = DWC3_CONFIGURED_STATE;
usb_gadget_set_state(dwc-gadget,
USB_STATE_CONFIGURED);
 
@@ -568,13 +569,11 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct 
usb_ctrlrequest *ctrl)
}
break;
 
-   case 

[PATCH 069/100] usb: dwc3: debugfs: add two missing Link States

2013-02-26 Thread Felipe Balbi
for Reset and Resume we were going to print
UNKNOWN when we actually knew what those
were.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/debugfs.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
index 4a752e7..c740c76 100644
--- a/drivers/usb/dwc3/debugfs.c
+++ b/drivers/usb/dwc3/debugfs.c
@@ -577,6 +577,12 @@ static int dwc3_link_state_show(struct seq_file *s, void 
*unused)
case DWC3_LINK_STATE_LPBK:
seq_printf(s, Loopback\n);
break;
+   case DWC3_LINK_STATE_RESET:
+   seq_printf(s, Reset\n);
+   break;
+   case DWC3_LINK_STATE_RESUME:
+   seq_printf(s, Resume\n);
+   break;
default:
seq_printf(s, UNKNOWN %d\n, reg);
}
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 06/11] usb: gadget: pxa27x: fix gadget-dev registration

2013-02-26 Thread Felipe Balbi
Whenever -udc_start() gets called, gadget driver
has already being bound to the udc controller, which
means that gadget-dev had to be already initialized
and added to driver model.

This patch fixes pxa27x mistake.

Tested-by: Robert Jarzmik robert.jarz...@free.fr
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pxa27x_udc.c | 18 --
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c
index f7d2579..2fc8676 100644
--- a/drivers/usb/gadget/pxa27x_udc.c
+++ b/drivers/usb/gadget/pxa27x_udc.c
@@ -1814,11 +1814,6 @@ static int pxa27x_udc_start(struct usb_gadget *g,
udc-gadget.dev.driver = driver-driver;
dplus_pullup(udc, 1);
 
-   retval = device_add(udc-gadget.dev);
-   if (retval) {
-   dev_err(udc-dev, device_add error %d\n, retval);
-   goto fail;
-   }
if (!IS_ERR_OR_NULL(udc-transceiver)) {
retval = otg_set_peripheral(udc-transceiver-otg,
udc-gadget);
@@ -1876,7 +1871,6 @@ static int pxa27x_udc_stop(struct usb_gadget *g,
 
udc-driver = NULL;
 
-   device_del(udc-gadget.dev);
 
if (!IS_ERR_OR_NULL(udc-transceiver))
return otg_set_peripheral(udc-transceiver-otg, NULL);
@@ -2480,13 +2474,24 @@ static int __init pxa_udc_probe(struct platform_device 
*pdev)
driver_name, udc-irq, retval);
goto err_irq;
}
+
+   retval = device_add(udc-gadget.dev);
+   if (retval) {
+   dev_err(udc-dev, device_add error %d\n, retval);
+   goto err_dev_add;
+   }
+
retval = usb_add_gadget_udc(pdev-dev, udc-gadget);
if (retval)
goto err_add_udc;
 
pxa_init_debugfs(udc);
+
return 0;
+
 err_add_udc:
+   device_unregister(udc-gadget.dev);
+err_dev_add:
free_irq(udc-irq, udc);
 err_irq:
iounmap(udc-regs);
@@ -2507,6 +2512,7 @@ static int __exit pxa_udc_remove(struct platform_device 
*_dev)
int gpio = udc-mach-gpio_pullup;
 
usb_del_gadget_udc(udc-gadget);
+   device_del(udc-gadget.dev);
usb_gadget_unregister_driver(udc-driver);
free_irq(udc-irq, udc);
pxa_cleanup_debugfs(udc);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 071/100] usb: dwc3: debugfs: mark our regset structure const

2013-02-26 Thread Felipe Balbi
nobody should be modifying that structure and
debugfs has already being fixed to take const
arguments, so we won't cause any new compile
warnings.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/debugfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
index 5512560..a1bac9a 100644
--- a/drivers/usb/dwc3/debugfs.c
+++ b/drivers/usb/dwc3/debugfs.c
@@ -59,7 +59,7 @@
.offset = DWC3_ ##nm - DWC3_GLOBALS_REGS_START, \
 }
 
-static struct debugfs_reg32 dwc3_regs[] = {
+static const struct debugfs_reg32 dwc3_regs[] = {
dump_register(GSBUSCFG0),
dump_register(GSBUSCFG1),
dump_register(GTXTHRCFG),
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 070/100] usb: dwc3: debugfs: when unknown, print only the state value

2013-02-26 Thread Felipe Balbi
whenever we grab an unknown link_state we
were printing the entire register value as
a integer but that's hardly useful; instead,
let's print only the bogus state value.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/debugfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
index c740c76..5512560 100644
--- a/drivers/usb/dwc3/debugfs.c
+++ b/drivers/usb/dwc3/debugfs.c
@@ -584,7 +584,7 @@ static int dwc3_link_state_show(struct seq_file *s, void 
*unused)
seq_printf(s, Resume\n);
break;
default:
-   seq_printf(s, UNKNOWN %d\n, reg);
+   seq_printf(s, UNKNOWN %d\n, state);
}
 
return 0;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 11/11] usb: gadget: s3c2410: fix build breakage

2013-02-26 Thread Felipe Balbi
add missing semicolon to fix compile breakage.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c2410_udc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
index 9404858..08f8965 100644
--- a/drivers/usb/gadget/s3c2410_udc.c
+++ b/drivers/usb/gadget/s3c2410_udc.c
@@ -1668,7 +1668,7 @@ static void s3c2410_udc_enable(struct s3c2410_udc *dev)
 static int s3c2410_udc_start(struct usb_gadget *g,
struct usb_gadget_driver *driver)
 {
-   struct s3c2410_udc *udc = to_s3c2410(g)
+   struct s3c2410_udc *udc = to_s3c2410(g);
 
dprintk(DEBUG_NORMAL, %s() '%s'\n, __func__, driver-driver.name);
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 073/100] usb: dwc3: core: avoid checkpatch.pl warning

2013-02-26 Thread Felipe Balbi
trivial patch to avoid over 80-chars rule
break. No functional changes.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 75a9f88..b81b335 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -140,7 +140,8 @@ static void dwc3_free_one_event_buffer(struct dwc3 *dwc,
  * Returns a pointer to the allocated event buffer structure on success
  * otherwise ERR_PTR(errno).
  */
-static struct dwc3_event_buffer *dwc3_alloc_one_event_buffer(struct dwc3 *dwc, 
unsigned length)
+static struct dwc3_event_buffer *dwc3_alloc_one_event_buffer(struct dwc3 *dwc,
+   unsigned length)
 {
struct dwc3_event_buffer*evt;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 080/100] usb: gadget: atmel_usba_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/atmel_usba_udc.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/gadget/atmel_usba_udc.c 
b/drivers/usb/gadget/atmel_usba_udc.c
index 1deba35..b5c1352 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -1885,9 +1885,6 @@ static int __init usba_udc_probe(struct platform_device 
*pdev)
dev_info(pdev-dev, FIFO at 0x%08lx mapped at %p\n,
 (unsigned long)fifo-start, udc-fifo);
 
-   udc-gadget.dev.parent = pdev-dev;
-   udc-gadget.dev.dma_mask = pdev-dev.dma_mask;
-
platform_set_drvdata(pdev, udc);
 
/* Make sure we start from a clean slate */
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 082/100] usb: gadget: fusb300_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core nos sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/fusb300_udc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/fusb300_udc.c b/drivers/usb/gadget/fusb300_udc.c
index 5c9dd06..7f48aa6 100644
--- a/drivers/usb/gadget/fusb300_udc.c
+++ b/drivers/usb/gadget/fusb300_udc.c
@@ -1420,8 +1420,6 @@ static int __init fusb300_probe(struct platform_device 
*pdev)
fusb300-gadget.ops = fusb300_gadget_ops;
 
fusb300-gadget.max_speed = USB_SPEED_HIGH;
-   fusb300-gadget.dev.parent = pdev-dev;
-   fusb300-gadget.dev.dma_mask = pdev-dev.dma_mask;
fusb300-gadget.dev.release = pdev-dev.release;
fusb300-gadget.name = udc_name;
fusb300-reg = reg;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 083/100] usb: gadget: goku_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/goku_udc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/goku_udc.c b/drivers/usb/gadget/goku_udc.c
index 8a6c666..c02cbdd 100644
--- a/drivers/usb/gadget/goku_udc.c
+++ b/drivers/usb/gadget/goku_udc.c
@@ -1754,8 +1754,6 @@ static int goku_probe(struct pci_dev *pdev, const struct 
pci_device_id *id)
dev-gadget.max_speed = USB_SPEED_FULL;
 
/* the gadget abstracts/virtualizes the controller */
-   dev-gadget.dev.parent = pdev-dev;
-   dev-gadget.dev.dma_mask = pdev-dev.dma_mask;
dev-gadget.dev.release = gadget_release;
dev-gadget.name = driver_name;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 087/100] usb: dwc3: gadget: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/gadget.c | 5 -
 1 file changed, 5 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 6e168df..0e05485 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2571,11 +2571,6 @@ int dwc3_gadget_init(struct dwc3 *dwc)
dwc-gadget.speed   = USB_SPEED_UNKNOWN;
dwc-gadget.dev.parent  = dwc-dev;
dwc-gadget.sg_supported= true;
-
-   dma_set_coherent_mask(dwc-gadget.dev, dwc-dev-coherent_dma_mask);
-
-   dwc-gadget.dev.dma_parms   = dwc-dev-dma_parms;
-   dwc-gadget.dev.dma_mask= dwc-dev-dma_mask;
dwc-gadget.dev.release = dwc3_gadget_release;
dwc-gadget.name= dwc3-gadget;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 090/100] usb: gadget: net2272: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/net2272.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/net2272.c b/drivers/usb/gadget/net2272.c
index 78c8bb5..bfb55d3 100644
--- a/drivers/usb/gadget/net2272.c
+++ b/drivers/usb/gadget/net2272.c
@@ -2235,8 +2235,6 @@ static struct net2272 *net2272_probe_init(struct device 
*dev, unsigned int irq)
ret-gadget.max_speed = USB_SPEED_HIGH;
 
/* the gadget abstracts/virtualizes the controller */
-   ret-gadget.dev.parent = dev;
-   ret-gadget.dev.dma_mask = dev-dma_mask;
ret-gadget.dev.release = net2272_gadget_release;
ret-gadget.name = driver_name;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 091/100] usb: gadget: net2280: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/net2280.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c
index 2089d9b..6ce2513 100644
--- a/drivers/usb/gadget/net2280.c
+++ b/drivers/usb/gadget/net2280.c
@@ -2710,8 +2710,6 @@ static int net2280_probe (struct pci_dev *pdev, const 
struct pci_device_id *id)
dev-gadget.max_speed = USB_SPEED_HIGH;
 
/* the gadget abstracts/virtualizes the controller */
-   dev-gadget.dev.parent = pdev-dev;
-   dev-gadget.dev.dma_mask = pdev-dev.dma_mask;
dev-gadget.dev.release = gadget_release;
dev-gadget.name = driver_name;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 092/100] usb: gadget: omap_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/omap_udc.c | 5 -
 1 file changed, 5 deletions(-)

diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c
index b17f1a7..43dc517 100644
--- a/drivers/usb/gadget/omap_udc.c
+++ b/drivers/usb/gadget/omap_udc.c
@@ -2630,12 +2630,7 @@ omap_udc_setup(struct platform_device *odev, struct 
usb_phy *xceiv)
udc-gadget.speed = USB_SPEED_UNKNOWN;
udc-gadget.max_speed = USB_SPEED_FULL;
udc-gadget.name = driver_name;
-
udc-gadget.dev.release = omap_udc_release;
-   udc-gadget.dev.parent = odev-dev;
-   if (use_dma)
-   udc-gadget.dev.dma_mask = odev-dev.dma_mask;
-
udc-transceiver = xceiv;
 
/* ep0 is special; put it right after the SETUP buffer */
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 094/100] usb: gadget: pxa25x_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pxa25x_udc.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index 0431802..a301b60 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -2134,9 +2134,6 @@ static int __init pxa25x_udc_probe(struct platform_device 
*pdev)
dev-timer.function = udc_watchdog;
dev-timer.data = (unsigned long) dev;
 
-   dev-gadget.dev.parent = pdev-dev;
-   dev-gadget.dev.dma_mask = pdev-dev.dma_mask;
-
the_controller = dev;
platform_set_drvdata(pdev, dev);
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 095/100] usb: gadget: pxa27x_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pxa27x_udc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c
index 3276a6d..5fda425 100644
--- a/drivers/usb/gadget/pxa27x_udc.c
+++ b/drivers/usb/gadget/pxa27x_udc.c
@@ -2453,8 +2453,6 @@ static int pxa_udc_probe(struct platform_device *pdev)
goto err_map;
}
 
-   udc-gadget.dev.parent = pdev-dev;
-   udc-gadget.dev.dma_mask = NULL;
udc-vbus_sensed = 0;
 
the_controller = udc;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 099/100] usb: gadget: s3c2410_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c2410_udc.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
index a669081..e15d1bb 100644
--- a/drivers/usb/gadget/s3c2410_udc.c
+++ b/drivers/usb/gadget/s3c2410_udc.c
@@ -1824,9 +1824,6 @@ static int s3c2410_udc_probe(struct platform_device *pdev)
goto err_mem;
}
 
-   udc-gadget.dev.parent = pdev-dev;
-   udc-gadget.dev.dma_mask = pdev-dev.dma_mask;
-
the_controller = udc;
platform_set_drvdata(pdev, udc);
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 100/100] usb: musb: gadget: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_gadget.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index 1fcd987..786b397 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -1730,8 +1730,6 @@ int musb_gadget_setup(struct musb *musb)
musb-g.speed = USB_SPEED_UNKNOWN;
 
/* this gadget abstracts/virtualizes the controller */
-   musb-g.dev.parent = musb-controller;
-   musb-g.dev.dma_mask = musb-controller-dma_mask;
musb-g.dev.release = musb_gadget_release;
musb-g.name = musb_driver_name;
musb-g.is_otg = 1;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 089/100] usb: gadget: mv_udc_core: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/mv_udc_core.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/mv_udc_core.c b/drivers/usb/gadget/mv_udc_core.c
index 7f4d19d..b306111 100644
--- a/drivers/usb/gadget/mv_udc_core.c
+++ b/drivers/usb/gadget/mv_udc_core.c
@@ -2268,8 +2268,6 @@ static int mv_udc_probe(struct platform_device *pdev)
udc-gadget.max_speed = USB_SPEED_HIGH; /* support dual speed */
 
/* the gadget abstracts/virtualizes the controller */
-   udc-gadget.dev.parent = pdev-dev;
-   udc-gadget.dev.dma_mask = pdev-dev.dma_mask;
udc-gadget.dev.release = gadget_release;
udc-gadget.name = driver_name; /* gadget name */
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 093/100] usb: gadget: pch_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pch_udc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c
index e8c9afd..c1db902 100644
--- a/drivers/usb/gadget/pch_udc.c
+++ b/drivers/usb/gadget/pch_udc.c
@@ -3193,8 +3193,6 @@ static int pch_udc_probe(struct pci_dev *pdev,
if (retval)
goto finished;
 
-   dev-gadget.dev.parent = pdev-dev;
-   dev-gadget.dev.dma_mask = pdev-dev.dma_mask;
dev-gadget.dev.release = gadget_release;
dev-gadget.name = KBUILD_MODNAME;
dev-gadget.max_speed = USB_SPEED_HIGH;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 097/100] usb: gadget: s3c-hsotg: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c-hsotg.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index 2812fa5..9d2330d 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -2927,7 +2927,6 @@ static int s3c_hsotg_udc_start(struct usb_gadget *gadget,
hsotg-driver = driver;
hsotg-gadget.dev.driver = driver-driver;
hsotg-gadget.dev.of_node = hsotg-dev-of_node;
-   hsotg-gadget.dev.dma_mask = hsotg-dev-dma_mask;
hsotg-gadget.speed = USB_SPEED_UNKNOWN;
 
ret = regulator_bulk_enable(ARRAY_SIZE(hsotg-supplies),
@@ -3534,8 +3533,6 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
hsotg-gadget.max_speed = USB_SPEED_HIGH;
hsotg-gadget.ops = s3c_hsotg_gadget_ops;
hsotg-gadget.name = dev_name(dev);
-   hsotg-gadget.dev.parent = dev;
-   hsotg-gadget.dev.dma_mask = dev-dma_mask;
hsotg-gadget.dev.release = s3c_hsotg_release;
 
/* reset the system */
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 096/100] usb: gadget: r8a66597-udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/r8a66597-udc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/r8a66597-udc.c 
b/drivers/usb/gadget/r8a66597-udc.c
index a67d477..2de775d 100644
--- a/drivers/usb/gadget/r8a66597-udc.c
+++ b/drivers/usb/gadget/r8a66597-udc.c
@@ -1915,8 +1915,6 @@ static int __init r8a66597_probe(struct platform_device 
*pdev)
 
r8a66597-gadget.ops = r8a66597_gadget_ops;
r8a66597-gadget.max_speed = USB_SPEED_HIGH;
-   r8a66597-gadget.dev.parent = pdev-dev;
-   r8a66597-gadget.dev.dma_mask = pdev-dev.dma_mask;
r8a66597-gadget.dev.release = pdev-dev.release;
r8a66597-gadget.name = udc_name;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 098/100] usb: gadget: s3c-hsudc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c-hsudc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/s3c-hsudc.c b/drivers/usb/gadget/s3c-hsudc.c
index 7fc3de5..8db7b10 100644
--- a/drivers/usb/gadget/s3c-hsudc.c
+++ b/drivers/usb/gadget/s3c-hsudc.c
@@ -1306,8 +1306,6 @@ static int s3c_hsudc_probe(struct platform_device *pdev)
hsudc-gadget.max_speed = USB_SPEED_HIGH;
hsudc-gadget.ops = s3c_hsudc_gadget_ops;
hsudc-gadget.name = dev_name(dev);
-   hsudc-gadget.dev.parent = dev;
-   hsudc-gadget.dev.dma_mask = dev-dma_mask;
hsudc-gadget.ep0 = hsudc-ep[0].ep;
hsudc-gadget.is_otg = 0;
hsudc-gadget.is_a_peripheral = 0;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 084/100] usb: gadget: goku_udc: remove unused macro

2013-02-26 Thread Felipe Balbi
DMA_ADDR_INVALID isn't used anymore on goku_udc,
we can just delete it.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/goku_udc.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/gadget/goku_udc.c b/drivers/usb/gadget/goku_udc.c
index c02cbdd..1c070f4 100644
--- a/drivers/usb/gadget/goku_udc.c
+++ b/drivers/usb/gadget/goku_udc.c
@@ -51,8 +51,6 @@
 #defineDRIVER_DESC TC86C001 USB Device Controller
 #defineDRIVER_VERSION  30-Oct 2003
 
-#defineDMA_ADDR_INVALID(~(dma_addr_t)0)
-
 static const char driver_name [] = goku_udc;
 static const char driver_desc [] = DRIVER_DESC;
 
@@ -275,7 +273,6 @@ goku_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
if (!req)
return NULL;
 
-   req-req.dma = DMA_ADDR_INVALID;
INIT_LIST_HEAD(req-queue);
return req-req;
 }
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 088/100] usb: gadget: mv_u3d_core: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/mv_u3d_core.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/mv_u3d_core.c b/drivers/usb/gadget/mv_u3d_core.c
index e5735fc..e6521b1 100644
--- a/drivers/usb/gadget/mv_u3d_core.c
+++ b/drivers/usb/gadget/mv_u3d_core.c
@@ -1955,8 +1955,6 @@ static int mv_u3d_probe(struct platform_device *dev)
u3d-gadget.speed = USB_SPEED_UNKNOWN;  /* speed */
 
/* the gadget abstracts/virtualizes the controller */
-   u3d-gadget.dev.parent = dev-dev;
-   u3d-gadget.dev.dma_mask = dev-dev.dma_mask;
u3d-gadget.dev.release = mv_u3d_gadget_release;
u3d-gadget.name = driver_name; /* gadget name */
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 079/100] usb: gadget: amd5536udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/amd5536udc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
index eec4461..c994122 100644
--- a/drivers/usb/gadget/amd5536udc.c
+++ b/drivers/usb/gadget/amd5536udc.c
@@ -3244,8 +3244,6 @@ static int udc_pci_probe(
dev-phys_addr = resource;
dev-irq = pdev-irq;
dev-pdev = pdev;
-   dev-gadget.dev.parent = pdev-dev;
-   dev-gadget.dev.dma_mask = pdev-dev.dma_mask;
 
/* general probing */
if (udc_probe(dev) == 0)
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 085/100] usb: gadget: imx_udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/imx_udc.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/gadget/imx_udc.c b/drivers/usb/gadget/imx_udc.c
index 9c5b745..c29d9e8 100644
--- a/drivers/usb/gadget/imx_udc.c
+++ b/drivers/usb/gadget/imx_udc.c
@@ -1461,9 +1461,6 @@ static int __init imx_udc_probe(struct platform_device 
*pdev)
imx_usb-clk = clk;
imx_usb-dev = pdev-dev;
 
-   imx_usb-gadget.dev.parent = pdev-dev;
-   imx_usb-gadget.dev.dma_mask = pdev-dev.dma_mask;
-
platform_set_drvdata(pdev, imx_usb);
 
usb_init_data(imx_usb);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 086/100] usb: gadget: m66592-udc: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/m66592-udc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/gadget/m66592-udc.c b/drivers/usb/gadget/m66592-udc.c
index eb61d0b..ae33e53 100644
--- a/drivers/usb/gadget/m66592-udc.c
+++ b/drivers/usb/gadget/m66592-udc.c
@@ -1608,8 +1608,6 @@ static int __init m66592_probe(struct platform_device 
*pdev)
 
m66592-gadget.ops = m66592_gadget_ops;
m66592-gadget.max_speed = USB_SPEED_HIGH;
-   m66592-gadget.dev.parent = pdev-dev;
-   m66592-gadget.dev.dma_mask = pdev-dev.dma_mask;
m66592-gadget.dev.release = pdev-dev.release;
m66592-gadget.name = udc_name;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 078/100] usb: gadget: chipidea: remove unnecessary initializations

2013-02-26 Thread Felipe Balbi
udc-core now sets dma-related and parent fields
for us, we don't need to do it ourselves.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/chipidea/udc.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 1b65ac8..e303fd4 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1717,9 +1717,6 @@ static int udc_start(struct ci13xxx *ci)
 
INIT_LIST_HEAD(ci-gadget.ep_list);
 
-   ci-gadget.dev.dma_mask = dev-dma_mask;
-   ci-gadget.dev.coherent_dma_mask = dev-coherent_dma_mask;
-   ci-gadget.dev.parent   = dev;
ci-gadget.dev.release  = udc_release;
 
/* alloc resources */
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 074/100] usb: gadget: pxa27x_udc: drop ARCH_PXA dependency

2013-02-26 Thread Felipe Balbi
This driver can compile in any arch quite
easily by just removing a few headers and
dropping cpu_is_* check from module_init.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/Kconfig  |  1 -
 drivers/usb/gadget/pxa27x_udc.c | 11 ++-
 2 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 5a0c541..50586ff 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -258,7 +258,6 @@ config USB_RENESAS_USBHS_UDC
 
 config USB_PXA27X
tristate PXA 27x
-   depends on ARCH_PXA  (PXA27x || PXA3xx)
select USB_OTG_UTILS
help
   Intel's PXA 27x series XScale ARM v5TE processors include
diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c
index 07ce147..def73f2 100644
--- a/drivers/usb/gadget/pxa27x_udc.c
+++ b/drivers/usb/gadget/pxa27x_udc.c
@@ -24,14 +24,12 @@
 #include linux/gpio.h
 #include linux/slab.h
 #include linux/prefetch.h
-
-#include asm/byteorder.h
-#include mach/hardware.h
+#include linux/byteorder/generic.h
+#include linux/platform_data/pxa2xx_udc.h
 
 #include linux/usb.h
 #include linux/usb/ch9.h
 #include linux/usb/gadget.h
-#include mach/udc.h
 
 #include pxa27x_udc.h
 
@@ -2624,15 +2622,10 @@ static struct platform_driver udc_driver = {
 
 static int __init udc_init(void)
 {
-   if (!cpu_is_pxa27x()  !cpu_is_pxa3xx())
-   return -ENODEV;
-
-   printk(KERN_INFO %s: version %s\n, driver_name, DRIVER_VERSION);
return platform_driver_probe(udc_driver, pxa_udc_probe);
 }
 module_init(udc_init);
 
-
 static void __exit udc_exit(void)
 {
platform_driver_unregister(udc_driver);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 075/100] usb: gadget: pxa27x_udc: switch over to module_platform_driver

2013-02-26 Thread Felipe Balbi
just removing some boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pxa27x_udc.c | 15 +++
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c
index def73f2..3276a6d 100644
--- a/drivers/usb/gadget/pxa27x_udc.c
+++ b/drivers/usb/gadget/pxa27x_udc.c
@@ -2410,7 +2410,7 @@ static struct pxa_udc memory = {
  * Perform basic init : allocates udc clock, creates sysfs files, requests
  * irq.
  */
-static int __init pxa_udc_probe(struct platform_device *pdev)
+static int pxa_udc_probe(struct platform_device *pdev)
 {
struct resource *regs;
struct pxa_udc *udc = memory;
@@ -2612,6 +2612,7 @@ static struct platform_driver udc_driver = {
.name   = pxa27x-udc,
.owner  = THIS_MODULE,
},
+   .probe  = pxa_udc_probe,
.remove = __exit_p(pxa_udc_remove),
.shutdown   = pxa_udc_shutdown,
 #ifdef CONFIG_PM
@@ -2620,17 +2621,7 @@ static struct platform_driver udc_driver = {
 #endif
 };
 
-static int __init udc_init(void)
-{
-   return platform_driver_probe(udc_driver, pxa_udc_probe);
-}
-module_init(udc_init);
-
-static void __exit udc_exit(void)
-{
-   platform_driver_unregister(udc_driver);
-}
-module_exit(udc_exit);
+module_platform_driver(udc_driver);
 
 MODULE_DESCRIPTION(DRIVER_DESC);
 MODULE_AUTHOR(Robert Jarzmik);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 077/100] usb: gadget: udc-core: initialize parent

2013-02-26 Thread Felipe Balbi
if udc-core always does it, we can delete
some extra lines from all UDC drivers. Besides,
it avoids mistakes from happening and propagating.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/udc-core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c
index 08d5df7..80dcc72 100644
--- a/drivers/usb/gadget/udc-core.c
+++ b/drivers/usb/gadget/udc-core.c
@@ -184,6 +184,7 @@ int usb_add_gadget_udc(struct device *parent, struct 
usb_gadget *gadget)
goto err1;
 
dev_set_name(gadget-dev, gadget);
+   gadget-dev.parent = parent;
 
dma_set_coherent_mas(gadget-dev, parent-coherent_dma_mask);
gadget-dev.dma_parms = parent-dma_parms;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 076/100] usb: gadget: udc-core: copy dma-related parameters from parent

2013-02-26 Thread Felipe Balbi
gadget's device pointer now is guaranteed to
have valid dma_mask, dma_parms and coherent_dma_mask
fields since we're always copying from our
parent device.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/udc-core.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c
index 8a1eeb2..08d5df7 100644
--- a/drivers/usb/gadget/udc-core.c
+++ b/drivers/usb/gadget/udc-core.c
@@ -185,6 +185,10 @@ int usb_add_gadget_udc(struct device *parent, struct 
usb_gadget *gadget)
 
dev_set_name(gadget-dev, gadget);
 
+   dma_set_coherent_mas(gadget-dev, parent-coherent_dma_mask);
+   gadget-dev.dma_parms = parent-dma_parms;
+   gadget-dev.dma_mask = dev-dma_mask;
+
ret = device_register(gadget-dev);
if (ret)
goto err2;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 07/11] usb: gadget: make usb functions to load before gadget driver

2013-02-26 Thread Felipe Balbi
From: Kishon Vijay Abraham I kis...@ti.com

The current ordering in makefile makes gadget
drivers be loaded before usb functions which
causes usb_get_function_instance() to fail when
gadget modules are statically linked to the
kernel binary.

Changed the ordering here so that USB functions
are loaded before gadget drivers.

Note that this is only a temporary solution and
a more robust fix is needed in the long run.

Signed-off-by: Kishon Vijay Abraham I kis...@ti.com
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/Makefile | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
index 97a13c3..82fb225 100644
--- a/drivers/usb/gadget/Makefile
+++ b/drivers/usb/gadget/Makefile
@@ -35,6 +35,12 @@ mv_udc-y := mv_udc_core.o
 obj-$(CONFIG_USB_FUSB300)  += fusb300_udc.o
 obj-$(CONFIG_USB_MV_U3D)   += mv_u3d_core.o
 
+# USB Functions
+obj-$(CONFIG_USB_F_ACM)+= f_acm.o
+f_ss_lb-y  := f_loopback.o f_sourcesink.o
+obj-$(CONFIG_USB_F_SS_LB)  += f_ss_lb.o
+obj-$(CONFIG_USB_U_SERIAL) += u_serial.o
+
 #
 # USB gadget drivers
 #
@@ -74,9 +80,3 @@ obj-$(CONFIG_USB_G_WEBCAM)+= g_webcam.o
 obj-$(CONFIG_USB_G_NCM)+= g_ncm.o
 obj-$(CONFIG_USB_G_ACM_MS) += g_acm_ms.o
 obj-$(CONFIG_USB_GADGET_TARGET)+= tcm_usb_gadget.o
-
-# USB Functions
-obj-$(CONFIG_USB_F_ACM)+= f_acm.o
-f_ss_lb-y  := f_loopback.o f_sourcesink.o
-obj-$(CONFIG_USB_F_SS_LB)  += f_ss_lb.o
-obj-$(CONFIG_USB_U_SERIAL) += u_serial.o
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 09/11] usb: gadget: pxa25x: fix gadget-dev registration

2013-02-26 Thread Felipe Balbi
Whenever -udc_start() gets called, gadget driver
has already being bound to the udc controller, which
means that gadget-dev had to be already initialized
and added to driver model.

This patch fixes pxa25x mistake.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pxa25x_udc.c | 20 +++-
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index 2bbcdce..9aa9dd5 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -1266,13 +1266,6 @@ static int pxa25x_udc_start(struct usb_gadget *g,
dev-gadget.dev.driver = driver-driver;
dev-pullup = 1;
 
-   retval = device_add (dev-gadget.dev);
-   if (retval) {
-   dev-driver = NULL;
-   dev-gadget.dev.driver = NULL;
-   return retval;
-   }
-
/* ... then enable host detection and ep0; and we're ready
 * for set_configuration as well as eventual disconnect.
 */
@@ -1331,7 +1324,6 @@ static int pxa25x_udc_stop(struct usb_gadget*g,
dev-gadget.dev.driver = NULL;
dev-driver = NULL;
 
-   device_del (dev-gadget.dev);
dump_state(dev);
 
return 0;
@@ -2146,6 +2138,13 @@ static int __init pxa25x_udc_probe(struct 
platform_device *pdev)
dev-gadget.dev.parent = pdev-dev;
dev-gadget.dev.dma_mask = pdev-dev.dma_mask;
 
+   retval = device_add(dev-gadget.dev);
+   if (retval) {
+   dev-driver = NULL;
+   dev-gadget.dev.driver = NULL;
+   goto err_device_add;
+   }
+
the_controller = dev;
platform_set_drvdata(pdev, dev);
 
@@ -2196,6 +2195,8 @@ lubbock_fail0:
free_irq(irq, dev);
 #endif
  err_irq1:
+   device_unregister(dev-gadget.dev);
+ err_device_add:
if (gpio_is_valid(dev-mach-gpio_pullup))
gpio_free(dev-mach-gpio_pullup);
  err_gpio_pullup:
@@ -2217,10 +2218,11 @@ static int __exit pxa25x_udc_remove(struct 
platform_device *pdev)
 {
struct pxa25x_udc *dev = platform_get_drvdata(pdev);
 
-   usb_del_gadget_udc(dev-gadget);
if (dev-driver)
return -EBUSY;
 
+   usb_del_gadget_udc(dev-gadget);
+   device_unregister(dev-gadget.dev);
dev-pullup = 0;
pullup(dev);
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 072/100] usb: dwc3: debugfs: improve debugfs file creation

2013-02-26 Thread Felipe Balbi
when commit 388e5c5 (usb: dwc3: remove dwc3
dependency on host AND gadget.) changed the
way debugfs files are created, it failed to
note that 'mode' is necessary in Dual Role
mode only while 'testmode' and 'link_state'
are valid in Dual Role and Peripheral-only
builds. Fix this while also converting pre-
processor conditional to C conditionals.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/debugfs.c | 41 ++---
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
index a1bac9a..8b23d045 100644
--- a/drivers/usb/dwc3/debugfs.c
+++ b/drivers/usb/dwc3/debugfs.c
@@ -667,28 +667,31 @@ int dwc3_debugfs_init(struct dwc3 *dwc)
goto err1;
}
 
-#if IS_ENABLED(CONFIG_USB_DWC3_GADGET)
-   file = debugfs_create_file(mode, S_IRUGO | S_IWUSR, root,
-   dwc, dwc3_mode_fops);
-   if (!file) {
-   ret = -ENOMEM;
-   goto err1;
+   if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) {
+   file = debugfs_create_file(mode, S_IRUGO | S_IWUSR, root,
+   dwc, dwc3_mode_fops);
+   if (!file) {
+   ret = -ENOMEM;
+   goto err1;
+   }
}
 
-   file = debugfs_create_file(testmode, S_IRUGO | S_IWUSR, root,
-   dwc, dwc3_testmode_fops);
-   if (!file) {
-   ret = -ENOMEM;
-   goto err1;
-   }
-
-   file = debugfs_create_file(link_state, S_IRUGO | S_IWUSR, root,
-   dwc, dwc3_link_state_fops);
-   if (!file) {
-   ret = -ENOMEM;
-   goto err1;
+   if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) ||
+   IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
+   file = debugfs_create_file(testmode, S_IRUGO | S_IWUSR, root,
+   dwc, dwc3_testmode_fops);
+   if (!file) {
+   ret = -ENOMEM;
+   goto err1;
+   }
+
+   file = debugfs_create_file(link_state, S_IRUGO | S_IWUSR, 
root,
+   dwc, dwc3_link_state_fops);
+   if (!file) {
+   ret = -ENOMEM;
+   goto err1;
+   }
}
-#endif
 
return 0;
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 08/11] usb: gadget: s3c2410: fix gadget-dev registration

2013-02-26 Thread Felipe Balbi
Whenever -udc_start() gets called, gadget driver
has already being bound to the udc controller, which
means that gadget-dev had to be already initialized
and added to driver model.

This patch fixes s3c2410 mistake.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c2410_udc.c | 26 +++---
 1 file changed, 11 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
index fc07b43..9404858 100644
--- a/drivers/usb/gadget/s3c2410_udc.c
+++ b/drivers/usb/gadget/s3c2410_udc.c
@@ -1669,7 +1669,6 @@ static int s3c2410_udc_start(struct usb_gadget *g,
struct usb_gadget_driver *driver)
 {
struct s3c2410_udc *udc = to_s3c2410(g)
-   int retval;
 
dprintk(DEBUG_NORMAL, %s() '%s'\n, __func__, driver-driver.name);
 
@@ -1677,22 +1676,10 @@ static int s3c2410_udc_start(struct usb_gadget *g,
udc-driver = driver;
udc-gadget.dev.driver = driver-driver;
 
-   /* Bind the driver */
-   retval = device_add(udc-gadget.dev);
-   if (retval) {
-   dev_err(udc-gadget.dev, Error in device_add() : %d\n, 
retval);
-   goto register_error;
-   }
-
/* Enable udc */
s3c2410_udc_enable(udc);
 
return 0;
-
-register_error:
-   udc-driver = NULL;
-   udc-gadget.dev.driver = NULL;
-   return retval;
 }
 
 static int s3c2410_udc_stop(struct usb_gadget *g,
@@ -1700,7 +1687,6 @@ static int s3c2410_udc_stop(struct usb_gadget *g,
 {
struct s3c2410_udc *udc = to_s3c2410(g);
 
-   device_del(udc-gadget.dev);
udc-driver = NULL;
 
/* Disable udc */
@@ -1842,6 +1828,13 @@ static int s3c2410_udc_probe(struct platform_device 
*pdev)
udc-gadget.dev.parent = pdev-dev;
udc-gadget.dev.dma_mask = pdev-dev.dma_mask;
 
+   /* Bind the driver */
+   retval = device_add(udc-gadget.dev);
+   if (retval) {
+   dev_err(udc-gadget.dev, Error in device_add() : %d\n, 
retval);
+   goto err_device_add;
+   }
+
the_controller = udc;
platform_set_drvdata(pdev, udc);
 
@@ -1930,6 +1923,8 @@ err_gpio_claim:
 err_int:
free_irq(IRQ_USBD, udc);
 err_map:
+   device_unregister(udc-gadget.dev);
+err_device_add:
iounmap(base_addr);
 err_mem:
release_mem_region(rsrc_start, rsrc_len);
@@ -1947,10 +1942,11 @@ static int s3c2410_udc_remove(struct platform_device 
*pdev)
 
dev_dbg(pdev-dev, %s()\n, __func__);
 
-   usb_del_gadget_udc(udc-gadget);
if (udc-driver)
return -EBUSY;
 
+   usb_del_gadget_udc(udc-gadget);
+   device_unregister(udc-gadget.dev);
debugfs_remove(udc-regs_info);
 
if (udc_info  !udc_info-udc_command 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 05/11] usb: chipidea: register debugging sysfs on our device

2013-02-26 Thread Felipe Balbi
Don't register anything non-generic under
the gadget's device as we don't really *own*
it.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/chipidea/udc.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 2f45bba..f64fbea 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1767,7 +1767,7 @@ static int udc_start(struct ci13xxx *ci)
goto put_transceiver;
}
 
-   retval = dbg_create_files(ci-gadget.dev);
+   retval = dbg_create_files(ci-dev);
if (retval)
goto unreg_device;
 
@@ -1796,7 +1796,7 @@ remove_trans:
 
dev_err(dev, error = %i\n, retval);
 remove_dbg:
-   dbg_remove_files(ci-gadget.dev);
+   dbg_remove_files(ci-dev);
 unreg_device:
device_unregister(ci-gadget.dev);
 put_transceiver:
@@ -1836,7 +1836,7 @@ static void udc_stop(struct ci13xxx *ci)
if (ci-global_phy)
usb_put_phy(ci-transceiver);
}
-   dbg_remove_files(ci-gadget.dev);
+   dbg_remove_files(ci-dev);
device_unregister(ci-gadget.dev);
/* my kobject is dynamic, I swear! */
memset(ci-gadget, 0, sizeof(ci-gadget));
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 02/11] usb: dwc3: omap: fix a typo on of_device_id

2013-02-26 Thread Felipe Balbi
s/matach/match

No functional changes

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-omap.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index 22f337f..90171f7 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -465,20 +465,20 @@ static int dwc3_omap_remove(struct platform_device *pdev)
return 0;
 }
 
-static const struct of_device_id of_dwc3_matach[] = {
+static const struct of_device_id of_dwc3_match[] = {
{
ti,dwc3,
},
{ },
 };
-MODULE_DEVICE_TABLE(of, of_dwc3_matach);
+MODULE_DEVICE_TABLE(of, of_dwc3_match);
 
 static struct platform_driver dwc3_omap_driver = {
.probe  = dwc3_omap_probe,
.remove = dwc3_omap_remove,
.driver = {
.name   = omap-dwc3,
-   .of_match_table = of_dwc3_matach,
+   .of_match_table = of_dwc3_match,
},
 };
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 04/11] usb: dwc3: gadget: remove unnecessary code

2013-02-26 Thread Felipe Balbi
the params variables on dwc3_gadget_conndone_interrupt()
is only memset() to zero but never used in
that function, so we can safely drop the variable
and memset() call.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/gadget.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index a04342f..82e160e 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2159,7 +2159,6 @@ static void dwc3_gadget_phy_suspend(struct dwc3 *dwc, u8 
speed)
 
 static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 {
-   struct dwc3_gadget_ep_cmd_params params;
struct dwc3_ep  *dep;
int ret;
u32 reg;
@@ -2167,8 +2166,6 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 
*dwc)
 
dev_vdbg(dwc-dev, %s\n, __func__);
 
-   memset(params, 0x00, sizeof(params));
-
reg = dwc3_readl(dwc-regs, DWC3_DSTS);
speed = reg  DWC3_DSTS_CONNECTSPD;
dwc-speed = speed;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 03/11] usb: dwc3: glue layers shouldn't know about the core IP

2013-02-26 Thread Felipe Balbi
remove inclusion of core.h from all glue
layers as they don't need to know details
about the core IP.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-exynos.c | 2 --
 drivers/usb/dwc3/dwc3-omap.c   | 2 --
 drivers/usb/dwc3/dwc3-pci.c| 2 --
 3 files changed, 6 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
index b50da53..b082bec 100644
--- a/drivers/usb/dwc3/dwc3-exynos.c
+++ b/drivers/usb/dwc3/dwc3-exynos.c
@@ -23,8 +23,6 @@
 #include linux/usb/nop-usb-xceiv.h
 #include linux/of.h
 
-#include core.h
-
 struct dwc3_exynos {
struct platform_device  *dwc3;
struct platform_device  *usb2_phy;
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index 90171f7..afa05e3 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -54,8 +54,6 @@
 #include linux/usb/otg.h
 #include linux/usb/nop-usb-xceiv.h
 
-#include core.h
-
 /*
  * All these registers belong to OMAP's Wrapper around the
  * DesignWare USB3 Core.
diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index 7d70f44..e8d7768 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -45,8 +45,6 @@
 #include linux/usb/otg.h
 #include linux/usb/nop-usb-xceiv.h
 
-#include core.h
-
 /* FIXME define these in linux/pci_ids.h */
 #define PCI_VENDOR_ID_SYNOPSYS 0x16c3
 #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB30xabcd
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 066/100] usb: gadget: introduce gadget state tracking

2013-02-26 Thread Felipe Balbi
that's useful information to expose to userland.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/udc-core.c | 23 +++
 include/linux/usb/gadget.h|  9 +
 2 files changed, 32 insertions(+)

diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c
index 40b1d88..8a1eeb2 100644
--- a/drivers/usb/gadget/udc-core.c
+++ b/drivers/usb/gadget/udc-core.c
@@ -101,6 +101,16 @@ EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);
 
 /* - */
 
+void usb_gadget_set_state(struct usb_gadget *gadget,
+   enum usb_device_state state)
+{
+   gadget-state = state;
+   sysfs_notify(gadget-dev.kobj, NULL, status);
+}
+EXPORT_SYMBOL_GPL(usb_gadget_set_state);
+
+/* - */
+
 /**
  * usb_gadget_udc_start - tells usb device controller to start up
  * @gadget: The gadget we want to get started
@@ -197,6 +207,8 @@ int usb_add_gadget_udc(struct device *parent, struct 
usb_gadget *gadget)
if (ret)
goto err4;
 
+   usb_gadget_set_state(gadget, USB_STATE_NOTATTACHED);
+
mutex_unlock(udc_lock);
 
return 0;
@@ -406,6 +418,16 @@ static ssize_t usb_udc_softconn_store(struct device *dev,
 }
 static DEVICE_ATTR(soft_connect, S_IWUSR, NULL, usb_udc_softconn_store);
 
+static ssize_t usb_gadget_state_show(struct device *dev,
+   struct device_attribute *attr, char *buf)
+{
+   struct usb_udc  *udc = container_of(dev, struct usb_udc, dev);
+   struct usb_gadget   *gadget = udc-gadget;
+
+   return sprintf(buf, %s\n, usb_state_string(gadget-state));
+}
+static DEVICE_ATTR(state, S_IRUGO, usb_gadget_state_show, NULL);
+
 #define USB_UDC_SPEED_ATTR(name, param)
\
 ssize_t usb_udc_##param##_show(struct device *dev, \
struct device_attribute *attr, char *buf)   \
@@ -439,6 +461,7 @@ static USB_UDC_ATTR(a_alt_hnp_support);
 static struct attribute *usb_udc_attrs[] = {
dev_attr_srp.attr,
dev_attr_soft_connect.attr,
+   dev_attr_state.attr,
dev_attr_current_speed.attr,
dev_attr_maximum_speed.attr,
 
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 2e297e8..32b734d 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -482,6 +482,7 @@ struct usb_gadget_ops {
  * @speed: Speed of current connection to USB host.
  * @max_speed: Maximal speed the UDC can handle.  UDC must support this
  *  and all slower speeds.
+ * @state: the state we are now (attached, suspended, configured, etc)
  * @sg_supported: true if we can handle scatter-gather
  * @is_otg: True if the USB device port uses a Mini-AB jack, so that the
  * gadget driver must provide a USB OTG descriptor.
@@ -525,6 +526,7 @@ struct usb_gadget {
struct list_headep_list;/* of usb_ep */
enum usb_device_speed   speed;
enum usb_device_speed   max_speed;
+   enum usb_device_state   state;
unsignedsg_supported:1;
unsignedis_otg:1;
unsignedis_a_peripheral:1;
@@ -959,6 +961,13 @@ extern void usb_gadget_unmap_request(struct usb_gadget 
*gadget,
 
 /*-*/
 
+/* utility to set gadget state properly */
+
+extern void usb_gadget_set_state(struct usb_gadget *gadget,
+   enum usb_device_state state);
+
+/*-*/
+
 /* utility wrapping a simple endpoint selection policy */
 
 extern struct usb_ep *usb_ep_autoconfig(struct usb_gadget *,
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 00/11] usb: gadget: bug fixes

2013-02-26 Thread Felipe Balbi
Hi all,

here are the fixes I plan to send when v3.9-rc1. There's
still time to change things as the merge window hasn't
closed, so please test and let me know.

cheers

Felipe Balbi (10):
  usb: dwc3: core: don't forget to free coherent memory
  usb: dwc3: omap: fix a typo on of_device_id
  usb: dwc3: glue layers shouldn't know about the core IP
  usb: dwc3: gadget: remove unnecessary code
  usb: chipidea: register debugging sysfs on our device
  usb: gadget: pxa27x: fix gadget-dev registration
  usb: gadget: s3c2410: fix gadget-dev registration
  usb: gadget: pxa25x: fix gadget-dev registration
  usb: gadget: imx_udc: fix gadget-dev registration
  usb: gadget: s3c2410: fix build breakage

Kishon Vijay Abraham I (1):
  usb: gadget: make usb functions to load before gadget driver

 drivers/usb/chipidea/udc.c   |  6 +++---
 drivers/usb/dwc3/core.c  |  1 +
 drivers/usb/dwc3/dwc3-exynos.c   |  2 --
 drivers/usb/dwc3/dwc3-omap.c |  8 +++-
 drivers/usb/dwc3/dwc3-pci.c  |  2 --
 drivers/usb/dwc3/gadget.c|  3 ---
 drivers/usb/gadget/Makefile  | 12 ++--
 drivers/usb/gadget/imx_udc.c | 20 
 drivers/usb/gadget/pxa25x_udc.c  | 20 +++-
 drivers/usb/gadget/pxa27x_udc.c  | 18 --
 drivers/usb/gadget/s3c2410_udc.c | 28 
 11 files changed, 56 insertions(+), 64 deletions(-)

-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 050/100] usb: dwc3: omap: fix error path

2013-02-26 Thread Felipe Balbi
There was a possibility that we would leak
two nop-xceiv platform_devices, leave pm runtime
counter incremented (unbalanced), leave
pm_runtime_enable()'d and IRQs unmasked.

Fix all of those in one go.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-omap.c | 27 ++-
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index 2a56b93..b448479 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -246,6 +246,12 @@ err1:
return ret;
 }
 
+static void dwc3_omap_unregister_phys(struct dwc3_omap *omap)
+{
+   platform_device_unregister(omap-usb2_phy);
+   platform_device_unregister(omap-usb3_phy);
+}
+
 static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap)
 {
struct dwc3_omap*omap = _omap;
@@ -405,7 +411,7 @@ static int dwc3_omap_probe(struct platform_device *pdev)
ret = pm_runtime_get_sync(dev);
if (ret  0) {
dev_err(dev, get_sync failed with err %d\n, ret);
-   return ret;
+   goto err0;
}
 
reg = dwc3_omap_readl(omap-base, USBOTGSS_UTMI_OTG_STATUS);
@@ -442,7 +448,7 @@ static int dwc3_omap_probe(struct platform_device *pdev)
if (ret) {
dev_err(dev, failed to request IRQ #%d -- %d\n,
omap-irq, ret);
-   return ret;
+   goto err1;
}
 
dwc3_omap_enable_irqs(omap);
@@ -450,19 +456,30 @@ static int dwc3_omap_probe(struct platform_device *pdev)
ret = of_platform_populate(node, NULL, NULL, dev);
if (ret) {
dev_err(dev, failed to add create dwc3 core\n);
-   return ret;
+   goto err2;
}
 
return 0;
+
+err2:
+   dwc3_omap_disable_irqs(omap);
+
+err1:
+   dwc3_omap_unregister_phys(omap);
+   pm_runtime_put_sync(dev);
+
+err0:
+   pm_runtime_disable(dev);
+
+   return ret;
 }
 
 static int dwc3_omap_remove(struct platform_device *pdev)
 {
struct dwc3_omap*omap = platform_get_drvdata(pdev);
 
-   platform_device_unregister(omap-usb2_phy);
-   platform_device_unregister(omap-usb3_phy);
dwc3_omap_disable_irqs(omap);
+   dwc3_omap_unregister_phys(omap);
pm_runtime_put_sync(pdev-dev);
pm_runtime_disable(pdev-dev);
device_for_each_child(pdev-dev, NULL, dwc3_omap_remove_core);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 051/100] usb: musb: core: remove unnecessary pr_info()

2013-02-26 Thread Felipe Balbi
there's really no need for that message. It's
been a while since it printed something useful.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_core.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 60b41cc..a68ff27 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2299,8 +2299,6 @@ static int __init musb_init(void)
if (usb_disabled())
return 0;
 
-   pr_info(%s: version  MUSB_VERSION , ?dma?, otg (peripheral+host)\n,
-   musb_driver_name);
return platform_driver_register(musb_driver);
 }
 module_init(musb_init);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 054/100] usb: musb: force PIO-only if we're building multiplatform kernels

2013-02-26 Thread Felipe Balbi
MUSB still needs lots of work on the DMA part
if we want to enable multiple DMA engines on
a multiplatform kernel. Meanwhile, we're forcing
PIO-only so that we, at least, have a working
driver.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index 45b19e2..dfb57f2 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -72,6 +72,7 @@ endchoice
 
 choice
prompt 'MUSB DMA mode'
+   default MUSB_PIO_ONLY if ARCH_MULTIPLATFORM
default USB_UX500_DMA if USB_MUSB_UX500
default USB_INVENTRA_DMA if USB_MUSB_OMAP2PLUS || USB_MUSB_BLACKFIN
default USB_TI_CPPI_DMA if USB_MUSB_DAVINCI
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 046/100] usb: dwc3: omap: add basic suspend/resume support

2013-02-26 Thread Felipe Balbi
this patch implements basic suspend/resume
functionality for the OMAP glue layer.

Tested-by: Vivek Gautam gautam.vi...@samsung.com
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-omap.c | 56 
 1 file changed, 56 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index 9888dcc..f340023 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -124,6 +124,8 @@ struct dwc3_omap {
int irq;
void __iomem*base;
 
+   u32 utmi_otg_status;
+
u32 dma_status:1;
 };
 
@@ -474,12 +476,66 @@ static const struct of_device_id of_dwc3_match[] = {
 };
 MODULE_DEVICE_TABLE(of, of_dwc3_match);
 
+#ifdef CONFIG_PM
+static int dwc3_omap_prepare(struct device *dev)
+{
+   struct dwc3_omap*omap = dev_get_drvdata(dev);
+
+   dwc3_omap_disable_irqs(omap);
+
+   return 0;
+}
+
+static void dwc3_omap_complete(struct device *dev)
+{
+   struct dwc3_omap*omap = dev_get_drvdata(dev);
+
+   dwc3_omap_enable_irqs(omap);
+}
+
+static int dwc3_omap_suspend(struct device *dev)
+{
+   struct dwc3_omap*omap = dev_get_drvdata(dev);
+
+   omap-utmi_otg_status = dwc3_omap_readl(omap-base,
+   USBOTGSS_UTMI_OTG_STATUS);
+
+   return 0;
+}
+
+static int dwc3_omap_resume(struct device *dev)
+{
+   struct dwc3_omap*omap = dev_get_drvdata(dev);
+
+   dwc3_omap_writel(omap-base, USBOTGSS_UTMI_OTG_STATUS,
+   omap-utmi_otg_status);
+
+   pm_runtime_disable(dev);
+   pm_runtime_set_active(dev);
+   pm_runtime_enable(dev);
+
+   return 0;
+}
+
+static const struct dev_pm_ops dwc3_omap_dev_pm_ops = {
+   .prepare= dwc3_omap_prepare,
+   .complete   = dwc3_omap_complete,
+
+   SET_SYSTEM_SLEEP_PM_OPS(dwc3_omap_suspend, dwc3_omap_resume)
+};
+
+#define DEV_PM_OPS (dwc3_omap_dev_pm_ops)
+#else
+#define DEV_PM_OPS NULL
+#endif /* CONFIG_PM */
+
 static struct platform_driver dwc3_omap_driver = {
.probe  = dwc3_omap_probe,
.remove = dwc3_omap_remove,
.driver = {
.name   = omap-dwc3,
.of_match_table = of_dwc3_match,
+   .pm = DEV_PM_OPS,
},
 };
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 044/100] usb: dwc3: omap: introduce enable/disable IRQ methods

2013-02-26 Thread Felipe Balbi
they will be re-used on suspend/resume implementation.

Tested-by: Vivek Gautam gautam.vi...@samsung.com
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-omap.c | 45 +---
 1 file changed, 30 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index afa05e3..65f549d 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -307,6 +307,34 @@ static int dwc3_omap_remove_core(struct device *dev, void 
*c)
return 0;
 }
 
+static void dwc3_omap_enable_irqs(struct dwc3_omap *omap)
+{
+   u32 reg;
+
+   /* enable all IRQs */
+   reg = USBOTGSS_IRQO_COREIRQ_ST;
+   dwc3_omap_writel(omap-base, USBOTGSS_IRQENABLE_SET_0, reg);
+
+   reg = (USBOTGSS_IRQ1_OEVT |
+   USBOTGSS_IRQ1_DRVVBUS_RISE |
+   USBOTGSS_IRQ1_CHRGVBUS_RISE |
+   USBOTGSS_IRQ1_DISCHRGVBUS_RISE |
+   USBOTGSS_IRQ1_IDPULLUP_RISE |
+   USBOTGSS_IRQ1_DRVVBUS_FALL |
+   USBOTGSS_IRQ1_CHRGVBUS_FALL |
+   USBOTGSS_IRQ1_DISCHRGVBUS_FALL |
+   USBOTGSS_IRQ1_IDPULLUP_FALL);
+
+   dwc3_omap_writel(omap-base, USBOTGSS_IRQENABLE_SET_1, reg);
+}
+
+static void dwc3_omap_disable_irqs(struct dwc3_omap *omap)
+{
+   /* disable all IRQs */
+   dwc3_omap_writel(omap-base, USBOTGSS_IRQENABLE_SET_1, 0x00);
+   dwc3_omap_writel(omap-base, USBOTGSS_IRQENABLE_SET_0, 0x00);
+}
+
 static int dwc3_omap_probe(struct platform_device *pdev)
 {
struct dwc3_omap_data   *pdata = pdev-dev.platform_data;
@@ -422,21 +450,7 @@ static int dwc3_omap_probe(struct platform_device *pdev)
return ret;
}
 
-   /* enable all IRQs */
-   reg = USBOTGSS_IRQO_COREIRQ_ST;
-   dwc3_omap_writel(omap-base, USBOTGSS_IRQENABLE_SET_0, reg);
-
-   reg = (USBOTGSS_IRQ1_OEVT |
-   USBOTGSS_IRQ1_DRVVBUS_RISE |
-   USBOTGSS_IRQ1_CHRGVBUS_RISE |
-   USBOTGSS_IRQ1_DISCHRGVBUS_RISE |
-   USBOTGSS_IRQ1_IDPULLUP_RISE |
-   USBOTGSS_IRQ1_DRVVBUS_FALL |
-   USBOTGSS_IRQ1_CHRGVBUS_FALL |
-   USBOTGSS_IRQ1_DISCHRGVBUS_FALL |
-   USBOTGSS_IRQ1_IDPULLUP_FALL);
-
-   dwc3_omap_writel(omap-base, USBOTGSS_IRQENABLE_SET_1, reg);
+   dwc3_omap_enable_irqs(omap);
 
if (node) {
ret = of_platform_populate(node, NULL, NULL, dev);
@@ -456,6 +470,7 @@ static int dwc3_omap_remove(struct platform_device *pdev)
 
platform_device_unregister(omap-usb2_phy);
platform_device_unregister(omap-usb3_phy);
+   dwc3_omap_disable_irqs(omap);
pm_runtime_put_sync(pdev-dev);
pm_runtime_disable(pdev-dev);
device_for_each_child(pdev-dev, NULL, dwc3_omap_remove_core);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 052/100] usb: musb: switch over to devm_ioremap_resource()

2013-02-26 Thread Felipe Balbi
this will make sure that request_memory_region() will
be called and that we don't need to manually call
iounmap() on -remove().

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/musb/musb_core.c | 11 ++-
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index a68ff27..48609ea 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2014,7 +2014,6 @@ static int musb_probe(struct platform_device *pdev)
 {
struct device   *dev = pdev-dev;
int irq = platform_get_irq_byname(pdev, mc);
-   int status;
struct resource *iomem;
void __iomem*base;
 
@@ -2022,24 +2021,19 @@ static int musb_probe(struct platform_device *pdev)
if (!iomem || irq = 0)
return -ENODEV;
 
-   base = ioremap(iomem-start, resource_size(iomem));
+   base = devm_ioremap_resource(dev, iomem);
if (!base) {
dev_err(dev, ioremap failed\n);
return -ENOMEM;
}
 
-   status = musb_init_controller(dev, irq, base);
-   if (status  0)
-   iounmap(base);
-
-   return status;
+   return musb_init_controller(dev, irq, base);
 }
 
 static int musb_remove(struct platform_device *pdev)
 {
struct device   *dev = pdev-dev;
struct musb *musb = dev_to_musb(dev);
-   void __iomem*ctrl_base = musb-ctrl_base;
 
/* this gets called on rmmod.
 *  - Host mode: host may still be active
@@ -2050,7 +2044,6 @@ static int musb_remove(struct platform_device *pdev)
musb_shutdown(pdev);
 
musb_free(musb);
-   iounmap(ctrl_base);
device_init_wakeup(dev, 0);
 #ifndef CONFIG_MUSB_PIO_ONLY
dma_set_mask(dev, *dev-parent-dma_mask);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 045/100] usb: dwc3: omap: remove unused fields from private structure

2013-02-26 Thread Felipe Balbi
we're not using those fields of the structure,
might as well remove them.

Tested-by: Vivek Gautam gautam.vi...@samsung.com
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/dwc3-omap.c | 12 
 1 file changed, 12 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index 65f549d..9888dcc 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -124,9 +124,6 @@ struct dwc3_omap {
int irq;
void __iomem*base;
 
-   void*context;
-   u32 resource_size;
-
u32 dma_status:1;
 };
 
@@ -352,7 +349,6 @@ static int dwc3_omap_probe(struct platform_device *pdev)
u32 reg;
 
void __iomem*base;
-   void*context;
 
omap = devm_kzalloc(dev, sizeof(*omap), GFP_KERNEL);
if (!omap) {
@@ -386,16 +382,8 @@ static int dwc3_omap_probe(struct platform_device *pdev)
return ret;
}
 
-   context = devm_kzalloc(dev, resource_size(res), GFP_KERNEL);
-   if (!context) {
-   dev_err(dev, couldn't allocate dwc3 context memory\n);
-   return -ENOMEM;
-   }
-
spin_lock_init(omap-lock);
 
-   omap-resource_size = resource_size(res);
-   omap-context   = context;
omap-dev   = dev;
omap-irq   = irq;
omap-base  = base;
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 042/100] usb: dwc3: gadget: save state of pullups

2013-02-26 Thread Felipe Balbi
This will be used during resume to verify
if we should reconnect our pullups or not.

Tested-by: Vivek Gautam gautam.vi...@samsung.com
Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/dwc3/core.h   | 1 +
 drivers/usb/dwc3/gadget.c | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index b417506..35e4d3c 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -704,6 +704,7 @@ struct dwc3 {
unsigneddelayed_status:1;
unsignedneeds_fifo_resize:1;
unsignedresize_fifos:1;
+   unsignedpullups_connected:1;
 
enum dwc3_ep0_next  ep0_next_event;
enum dwc3_ep0_state ep0state;
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index db20317..04e4812 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1425,8 +1425,10 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int 
is_on)
if (dwc-revision = DWC3_REVISION_194A)
reg = ~DWC3_DCTL_KEEP_CONNECT;
reg |= DWC3_DCTL_RUN_STOP;
+   dwc-pullups_connected = true;
} else {
reg = ~DWC3_DCTL_RUN_STOP;
+   dwc-pullups_connected = false;
}
 
dwc3_writel(dwc-regs, DWC3_DCTL, reg);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 036/100] usb: gadget: fusb300: switch over to usb_gadget_map/unmap_request()

2013-02-26 Thread Felipe Balbi
we have generic implementations for a reason,
let's use them

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/fusb300_udc.c | 17 +++--
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/gadget/fusb300_udc.c b/drivers/usb/gadget/fusb300_udc.c
index 2d3c8b3..5c9dd06 100644
--- a/drivers/usb/gadget/fusb300_udc.c
+++ b/drivers/usb/gadget/fusb300_udc.c
@@ -938,25 +938,22 @@ IDMA_RESET:
 static void  fusb300_set_idma(struct fusb300_ep *ep,
struct fusb300_request *req)
 {
-   dma_addr_t d;
+   int ret;
 
-   d = dma_map_single(NULL, req-req.buf, req-req.length, DMA_TO_DEVICE);
-
-   if (dma_mapping_error(NULL, d)) {
-   printk(KERN_DEBUG dma_mapping_error\n);
+   ret = usb_gadget_map_request(ep-fusb300-gadget,
+   req-req, DMA_TO_DEVICE);
+   if (ret)
return;
-   }
-
-   dma_sync_single_for_device(NULL, d, req-req.length, DMA_TO_DEVICE);
 
fusb300_enable_bit(ep-fusb300, FUSB300_OFFSET_IGER0,
FUSB300_IGER0_EEPn_PRD_INT(ep-epnum));
 
-   fusb300_fill_idma_prdtbl(ep, d, req-req.length);
+   fusb300_fill_idma_prdtbl(ep, req-req.dma, req-req.length);
/* check idma is done */
fusb300_wait_idma_finished(ep);
 
-   dma_unmap_single(NULL, d, req-req.length, DMA_TO_DEVICE);
+   usb_gadget_unmap_request(ep-fusb300-gadget,
+   req-req, DMA_TO_DEVICE);
 }
 
 static void in_ep_fifo_handler(struct fusb300_ep *ep)
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 029/100] usb: gadget: pxa27x_udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/pxa27x_udc.c | 12 +---
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c
index 2fc8676..1c5bfaa 100644
--- a/drivers/usb/gadget/pxa27x_udc.c
+++ b/drivers/usb/gadget/pxa27x_udc.c
@@ -1871,7 +1871,6 @@ static int pxa27x_udc_stop(struct usb_gadget *g,
 
udc-driver = NULL;
 
-
if (!IS_ERR_OR_NULL(udc-transceiver))
return otg_set_peripheral(udc-transceiver-otg, NULL);
return 0;
@@ -2456,9 +2455,9 @@ static int __init pxa_udc_probe(struct platform_device 
*pdev)
goto err_map;
}
 
-   device_initialize(udc-gadget.dev);
udc-gadget.dev.parent = pdev-dev;
udc-gadget.dev.dma_mask = NULL;
+   udc-gadget.register_my_device = true;
udc-vbus_sensed = 0;
 
the_controller = udc;
@@ -2475,12 +2474,6 @@ static int __init pxa_udc_probe(struct platform_device 
*pdev)
goto err_irq;
}
 
-   retval = device_add(udc-gadget.dev);
-   if (retval) {
-   dev_err(udc-dev, device_add error %d\n, retval);
-   goto err_dev_add;
-   }
-
retval = usb_add_gadget_udc(pdev-dev, udc-gadget);
if (retval)
goto err_add_udc;
@@ -2490,8 +2483,6 @@ static int __init pxa_udc_probe(struct platform_device 
*pdev)
return 0;
 
 err_add_udc:
-   device_unregister(udc-gadget.dev);
-err_dev_add:
free_irq(udc-irq, udc);
 err_irq:
iounmap(udc-regs);
@@ -2512,7 +2503,6 @@ static int __exit pxa_udc_remove(struct platform_device 
*_dev)
int gpio = udc-mach-gpio_pullup;
 
usb_del_gadget_udc(udc-gadget);
-   device_del(udc-gadget.dev);
usb_gadget_unregister_driver(udc-driver);
free_irq(udc-irq, udc);
pxa_cleanup_debugfs(udc);
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 027/100] usb: renesas_usbhs: gadget: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/renesas_usbhs/mod_gadget.c | 11 ++-
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c 
b/drivers/usb/renesas_usbhs/mod_gadget.c
index 78fca97..5d5fab0 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -976,15 +976,12 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
/*
 * init gadget
 */
-   dev_set_name(gpriv-gadget.dev, gadget);
gpriv-gadget.dev.parent= dev;
gpriv-gadget.dev.release   = usbhs_mod_gadget_release;
gpriv-gadget.name  = renesas_usbhs_udc;
gpriv-gadget.ops   = usbhsg_gadget_ops;
gpriv-gadget.max_speed = USB_SPEED_HIGH;
-   ret = device_register(gpriv-gadget.dev);
-   if (ret  0)
-   goto err_add_udc;
+   gpriv-gadget.register_my_device = true;
 
INIT_LIST_HEAD(gpriv-gadget.ep_list);
 
@@ -1014,15 +1011,13 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
 
ret = usb_add_gadget_udc(dev, gpriv-gadget);
if (ret)
-   goto err_register;
+   goto err_add_udc;
 
 
dev_info(dev, gadget probed\n);
 
return 0;
 
-err_register:
-   device_unregister(gpriv-gadget.dev);
 err_add_udc:
kfree(gpriv-uep);
 
@@ -1038,8 +1033,6 @@ void usbhs_mod_gadget_remove(struct usbhs_priv *priv)
 
usb_del_gadget_udc(gpriv-gadget);
 
-   device_unregister(gpriv-gadget.dev);
-
kfree(gpriv-uep);
kfree(gpriv);
 }
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 035/100] usb: gadget: fsl_udc_core: switch over to usb_gadget_map/unmap_request()

2013-02-26 Thread Felipe Balbi
we have generic implementations for a reason,
let's use them

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/fsl_udc_core.c | 51 ++-
 1 file changed, 13 insertions(+), 38 deletions(-)

diff --git a/drivers/usb/gadget/fsl_udc_core.c 
b/drivers/usb/gadget/fsl_udc_core.c
index f33b900..c948241 100644
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -185,20 +185,7 @@ static void done(struct fsl_ep *ep, struct fsl_req *req, 
int status)
dma_pool_free(udc-td_pool, curr_td, curr_td-td_dma);
}
 
-   if (req-mapped) {
-   dma_unmap_single(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ep_is_in(ep)
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   req-req.dma = DMA_ADDR_INVALID;
-   req-mapped = 0;
-   } else
-   dma_sync_single_for_cpu(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ep_is_in(ep)
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
+   usb_gadget_unmap_request(ep-udc-gadget, req-req, ep_is_in(ep));
 
if (status  (status != -ESHUTDOWN))
VDBG(complete %s req %p stat %d len %u/%u,
@@ -888,6 +875,7 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, 
gfp_t gfp_flags)
struct fsl_req *req = container_of(_req, struct fsl_req, req);
struct fsl_udc *udc;
unsigned long flags;
+   int ret;
 
/* catch various bogus parameters */
if (!_req || !req-req.complete || !req-req.buf
@@ -910,22 +898,9 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, 
gfp_t gfp_flags)
 
req-ep = ep;
 
-   /* map virtual address to hardware */
-   if (req-req.dma == DMA_ADDR_INVALID) {
-   req-req.dma = dma_map_single(ep-udc-gadget.dev.parent,
-   req-req.buf,
-   req-req.length, ep_is_in(ep)
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   req-mapped = 1;
-   } else {
-   dma_sync_single_for_device(ep-udc-gadget.dev.parent,
-   req-req.dma, req-req.length,
-   ep_is_in(ep)
-   ? DMA_TO_DEVICE
-   : DMA_FROM_DEVICE);
-   req-mapped = 0;
-   }
+   ret = usb_gadget_map_request(ep-udc-gadget, req-req, ep_is_in(ep));
+   if (ret)
+   return ret;
 
req-req.status = -EINPROGRESS;
req-req.actual = 0;
@@ -1290,6 +1265,7 @@ static int ep0_prime_status(struct fsl_udc *udc, int 
direction)
 {
struct fsl_req *req = udc-status_req;
struct fsl_ep *ep;
+   int ret;
 
if (direction == EP_DIR_IN)
udc-ep0_dir = USB_DIR_IN;
@@ -1307,10 +1283,9 @@ static int ep0_prime_status(struct fsl_udc *udc, int 
direction)
req-req.complete = NULL;
req-dtd_count = 0;
 
-   req-req.dma = dma_map_single(ep-udc-gadget.dev.parent,
-   req-req.buf, req-req.length,
-   ep_is_in(ep) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
-   req-mapped = 1;
+   ret = usb_gadget_map_request(ep-udc-gadget, req-req, ep_is_in(ep));
+   if (ret)
+   return ret;
 
if (fsl_req_to_dtd(req, GFP_ATOMIC) == 0)
fsl_queue_td(ep, req);
@@ -1353,6 +1328,7 @@ static void ch9getstatus(struct fsl_udc *udc, u8 
request_type, u16 value,
u16 tmp = 0;/* Status, cpu endian */
struct fsl_req *req;
struct fsl_ep *ep;
+   int ret;
 
ep = udc-eps[0];
 
@@ -1390,10 +1366,9 @@ static void ch9getstatus(struct fsl_udc *udc, u8 
request_type, u16 value,
req-req.complete = NULL;
req-dtd_count = 0;
 
-   req-req.dma = dma_map_single(ep-udc-gadget.dev.parent,
-   req-req.buf, req-req.length,
-   ep_is_in(ep) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
-   req-mapped = 1;
+   ret = usb_gadget_map_request(ep-udc-gadget, req-req, ep_is_in(ep));
+   if (ret)
+   goto stall;
 
/* prime the data phase */
if ((fsl_req_to_dtd(req, GFP_ATOMIC) == 0))
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 031/100] usb: gadget: drop now unnecessary flag

2013-02-26 Thread Felipe Balbi
We don't need the -register_my_device flag
anymore because all UDC drivers have been
properly converted.

Let's remove every history of it.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/chipidea/udc.c |  1 -
 drivers/usb/dwc3/gadget.c  |  1 -
 drivers/usb/gadget/amd5536udc.c|  1 -
 drivers/usb/gadget/at91_udc.c  |  1 -
 drivers/usb/gadget/atmel_usba_udc.c|  1 -
 drivers/usb/gadget/bcm63xx_udc.c   |  1 -
 drivers/usb/gadget/dummy_hcd.c |  1 -
 drivers/usb/gadget/fsl_qe_udc.c|  1 -
 drivers/usb/gadget/fsl_udc_core.c  |  1 -
 drivers/usb/gadget/fusb300_udc.c   |  1 -
 drivers/usb/gadget/goku_udc.c  |  1 -
 drivers/usb/gadget/imx_udc.c   |  1 -
 drivers/usb/gadget/lpc32xx_udc.c   |  1 -
 drivers/usb/gadget/m66592-udc.c|  1 -
 drivers/usb/gadget/mv_u3d_core.c   |  1 -
 drivers/usb/gadget/mv_udc_core.c   |  1 -
 drivers/usb/gadget/net2272.c   |  1 -
 drivers/usb/gadget/net2280.c   |  1 -
 drivers/usb/gadget/omap_udc.c  |  1 -
 drivers/usb/gadget/pch_udc.c   |  1 -
 drivers/usb/gadget/pxa25x_udc.c|  1 -
 drivers/usb/gadget/pxa27x_udc.c|  1 -
 drivers/usb/gadget/r8a66597-udc.c  |  1 -
 drivers/usb/gadget/s3c-hsotg.c |  1 -
 drivers/usb/gadget/s3c-hsudc.c |  1 -
 drivers/usb/gadget/s3c2410_udc.c   |  1 -
 drivers/usb/gadget/udc-core.c  | 18 +++---
 drivers/usb/musb/musb_gadget.c |  1 -
 drivers/usb/renesas_usbhs/mod_gadget.c |  1 -
 include/linux/usb/gadget.h |  4 
 30 files changed, 7 insertions(+), 43 deletions(-)

diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index e95e8bb..1b65ac8 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1721,7 +1721,6 @@ static int udc_start(struct ci13xxx *ci)
ci-gadget.dev.coherent_dma_mask = dev-coherent_dma_mask;
ci-gadget.dev.parent   = dev;
ci-gadget.dev.release  = udc_release;
-   ci-gadget.register_my_device = true;
 
/* alloc resources */
ci-qh_pool = dma_pool_create(ci13xxx_qh, dev,
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 10bb161..65493b6 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2499,7 +2499,6 @@ int dwc3_gadget_init(struct dwc3 *dwc)
dwc-gadget.dev.dma_parms   = dwc-dev-dma_parms;
dwc-gadget.dev.dma_mask= dwc-dev-dma_mask;
dwc-gadget.dev.release = dwc3_gadget_release;
-   dwc-gadget.register_my_device  = true;
dwc-gadget.name= dwc3-gadget;
 
/*
diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
index eee01ea..eec4461 100644
--- a/drivers/usb/gadget/amd5536udc.c
+++ b/drivers/usb/gadget/amd5536udc.c
@@ -3275,7 +3275,6 @@ static int udc_probe(struct udc *dev)
dev-gadget.dev.release = gadget_release;
dev-gadget.name = name;
dev-gadget.max_speed = USB_SPEED_HIGH;
-   dev-gadget.register_my_device = true;
 
/* init registers, interrupts, ... */
startup_registers(dev);
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c
index 47b7e58..9936de9 100644
--- a/drivers/usb/gadget/at91_udc.c
+++ b/drivers/usb/gadget/at91_udc.c
@@ -1726,7 +1726,6 @@ static int at91udc_probe(struct platform_device *pdev)
 
/* init software state */
udc = controller;
-   udc-gadget.register_my_device = true;
udc-gadget.dev.parent = dev;
if (pdev-dev.of_node)
at91udc_of_init(udc, pdev-dev.of_node);
diff --git a/drivers/usb/gadget/atmel_usba_udc.c 
b/drivers/usb/gadget/atmel_usba_udc.c
index b9efe4d..c134ca2 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -1902,7 +1902,6 @@ static int __init usba_udc_probe(struct platform_device 
*pdev)
 
udc-gadget.dev.parent = pdev-dev;
udc-gadget.dev.dma_mask = pdev-dev.dma_mask;
-   udc-gadget.register_my_device = true;
 
platform_set_drvdata(pdev, udc);
 
diff --git a/drivers/usb/gadget/bcm63xx_udc.c b/drivers/usb/gadget/bcm63xx_udc.c
index c020b87..d4f73e1 100644
--- a/drivers/usb/gadget/bcm63xx_udc.c
+++ b/drivers/usb/gadget/bcm63xx_udc.c
@@ -2374,7 +2374,6 @@ static int bcm63xx_udc_probe(struct platform_device *pdev)
udc-gadget.dev.parent = dev;
udc-gadget.dev.release = bcm63xx_udc_gadget_release;
udc-gadget.dev.dma_mask = dev-dma_mask;
-   udc-gadget.register_my_device = true;
 
if (!pd-use_fullspeed  !use_fullspeed)
udc-gadget.max_speed = USB_SPEED_HIGH;
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
index a6950aa..c4f27d5 100644
--- a/drivers/usb/gadget/dummy_hcd.c
+++ b/drivers/usb/gadget/dummy_hcd.c
@@ -983,7 +983,6 @@ static int dummy_udc_probe(struct platform_device *pdev)

[PATCH 030/100] usb: chipidea: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/chipidea/udc.c | 13 ++---
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index f64fbea..e95e8bb 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1717,11 +1717,11 @@ static int udc_start(struct ci13xxx *ci)
 
INIT_LIST_HEAD(ci-gadget.ep_list);
 
-   dev_set_name(ci-gadget.dev, gadget);
ci-gadget.dev.dma_mask = dev-dma_mask;
ci-gadget.dev.coherent_dma_mask = dev-coherent_dma_mask;
ci-gadget.dev.parent   = dev;
ci-gadget.dev.release  = udc_release;
+   ci-gadget.register_my_device = true;
 
/* alloc resources */
ci-qh_pool = dma_pool_create(ci13xxx_qh, dev,
@@ -1761,15 +1761,9 @@ static int udc_start(struct ci13xxx *ci)
hw_enable_vbus_intr(ci);
}
 
-   retval = device_register(ci-gadget.dev);
-   if (retval) {
-   put_device(ci-gadget.dev);
-   goto put_transceiver;
-   }
-
retval = dbg_create_files(ci-dev);
if (retval)
-   goto unreg_device;
+   goto put_transceiver;
 
if (!IS_ERR_OR_NULL(ci-transceiver)) {
retval = otg_set_peripheral(ci-transceiver-otg,
@@ -1797,8 +1791,6 @@ remove_trans:
dev_err(dev, error = %i\n, retval);
 remove_dbg:
dbg_remove_files(ci-dev);
-unreg_device:
-   device_unregister(ci-gadget.dev);
 put_transceiver:
if (!IS_ERR_OR_NULL(ci-transceiver)  ci-global_phy)
usb_put_phy(ci-transceiver);
@@ -1837,7 +1829,6 @@ static void udc_stop(struct ci13xxx *ci)
usb_put_phy(ci-transceiver);
}
dbg_remove_files(ci-dev);
-   device_unregister(ci-gadget.dev);
/* my kobject is dynamic, I swear! */
memset(ci-gadget, 0, sizeof(ci-gadget));
 }
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 023/100] usb: gadget: r8a66597-udc: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/r8a66597-udc.c | 12 ++--
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/gadget/r8a66597-udc.c 
b/drivers/usb/gadget/r8a66597-udc.c
index f46a1b7..ae94c0e 100644
--- a/drivers/usb/gadget/r8a66597-udc.c
+++ b/drivers/usb/gadget/r8a66597-udc.c
@@ -1837,7 +1837,6 @@ static int __exit r8a66597_remove(struct platform_device 
*pdev)
clk_put(r8a66597-clk);
}
 
-   device_unregister(r8a66597-gadget.dev);
kfree(r8a66597);
return 0;
 }
@@ -1915,17 +1914,12 @@ static int __init r8a66597_probe(struct platform_device 
*pdev)
r8a66597-irq_sense_low = irq_trigger == IRQF_TRIGGER_LOW;
 
r8a66597-gadget.ops = r8a66597_gadget_ops;
-   dev_set_name(r8a66597-gadget.dev, gadget);
r8a66597-gadget.max_speed = USB_SPEED_HIGH;
r8a66597-gadget.dev.parent = pdev-dev;
r8a66597-gadget.dev.dma_mask = pdev-dev.dma_mask;
r8a66597-gadget.dev.release = pdev-dev.release;
r8a66597-gadget.name = udc_name;
-   ret = device_register(r8a66597-gadget.dev);
-   if (ret  0) {
-   dev_err(pdev-dev, device_register failed\n);
-   goto clean_up;
-   }
+   r8a66597-gadget.register_my_device = true;
 
init_timer(r8a66597-timer);
r8a66597-timer.function = r8a66597_timer;
@@ -1939,7 +1933,7 @@ static int __init r8a66597_probe(struct platform_device 
*pdev)
dev_err(pdev-dev, cannot get clock \%s\\n,
clk_name);
ret = PTR_ERR(r8a66597-clk);
-   goto clean_up_dev;
+   goto clean_up;
}
clk_enable(r8a66597-clk);
}
@@ -2007,8 +2001,6 @@ clean_up2:
clk_disable(r8a66597-clk);
clk_put(r8a66597-clk);
}
-clean_up_dev:
-   device_unregister(r8a66597-gadget.dev);
 clean_up:
if (r8a66597) {
if (r8a66597-sudmac_reg)
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 024/100] usb: gadget: s3c-hsotg: let udc-core manage gadget-dev

2013-02-26 Thread Felipe Balbi
By simply setting a flag, we can drop some
boilerplate code.

Signed-off-by: Felipe Balbi ba...@ti.com
---
 drivers/usb/gadget/s3c-hsotg.c | 14 +-
 1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index c26564f..5fbd233 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -3567,17 +3567,13 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
 
dev_info(dev, regs %p, irq %d\n, hsotg-regs, hsotg-irq);
 
-   device_initialize(hsotg-gadget.dev);
-
-   dev_set_name(hsotg-gadget.dev, gadget);
-
hsotg-gadget.max_speed = USB_SPEED_HIGH;
hsotg-gadget.ops = s3c_hsotg_gadget_ops;
hsotg-gadget.name = dev_name(dev);
-
hsotg-gadget.dev.parent = dev;
hsotg-gadget.dev.dma_mask = dev-dma_mask;
hsotg-gadget.dev.release = s3c_hsotg_release;
+   hsotg-gadget.register_my_device = true;
 
/* reset the system */
 
@@ -3658,12 +3654,6 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
 
s3c_hsotg_phy_disable(hsotg);
 
-   ret = device_add(hsotg-gadget.dev);
-   if (ret) {
-   put_device(hsotg-gadget.dev);
-   goto err_ep_mem;
-   }
-
ret = usb_add_gadget_udc(pdev-dev, hsotg-gadget);
if (ret)
goto err_ep_mem;
@@ -3702,10 +3692,8 @@ static int s3c_hsotg_remove(struct platform_device *pdev)
}
 
s3c_hsotg_phy_disable(hsotg);
-
clk_disable_unprepare(hsotg-clk);
 
-   device_unregister(hsotg-gadget.dev);
return 0;
 }
 
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


  1   2   3   4   >