aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2010-01-27 18:48:51 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2010-01-27 18:48:51 -0800
commit81178581cf2a7491a998572b2bae72a0bf4ff5b6 (patch)
treefbb9ef5637c02011dc4919e812c1f860dca71919 /usb
parentf2ec6d71bba130efa1a586362ec0871b831fb952 (diff)
downloadpatches-81178581cf2a7491a998572b2bae72a0bf4ff5b6.tar.gz
more patches
Diffstat (limited to 'usb')
-rw-r--r--usb/usb-musb-add-context-save-and-restore-support.patch397
-rw-r--r--usb/usb-musb-deprecate-what-we-don-t-use.patch58
-rw-r--r--usb/usb-musb-get-rid-of-omap_readl-writel.patch227
-rw-r--r--usb/usb-musb-only-print-info-message-if-probe-is-successful.patch61
-rw-r--r--usb/usb-musb-tusb6010-use-resource_size.patch28
-rw-r--r--usb/usb-musb-unmap-base-if-we-can-t-probe.patch41
-rw-r--r--usb/usb-musb-we-already-tested-for-dyn_fifo.patch46
-rw-r--r--usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch56
8 files changed, 914 insertions, 0 deletions
diff --git a/usb/usb-musb-add-context-save-and-restore-support.patch b/usb/usb-musb-add-context-save-and-restore-support.patch
new file mode 100644
index 00000000000000..aa002981403966
--- /dev/null
+++ b/usb/usb-musb-add-context-save-and-restore-support.patch
@@ -0,0 +1,397 @@
+From felipe.balbi@nokia.com Wed Jan 27 18:19:15 2010
+From: Ajay Kumar Gupta <ajay.gupta@ti.com>
+Date: Thu, 21 Jan 2010 15:33:52 +0200
+Subject: usb: musb: Add context save and restore support
+To: Greg KH <greg@kroah.com>
+Cc: Ajay Kumar Gupta <ajay.gupta@ti.com>, Anand Gadiyar <gadiyar@ti.com>, Felipe Balbi <felipe.balbi@nokia.com>
+Message-ID: <1264080838-9452-2-git-send-email-felipe.balbi@nokia.com>
+
+
+From: Ajay Kumar Gupta <ajay.gupta@ti.com>
+
+Adding support for MUSB register save and restore during system
+suspend and resume.
+
+Changes:
+ - Added musb_save/restore_context() functions
+ - Added platform specific musb_platform_save/restore_context()
+ to handle platform specific jobs.
+ - Maintaining BlackFin compatibility by adding read/write
+ functions for registers which are not available in BlackFin
+
+Tested system suspend and resume on OMAP3EVM board.
+
+Signed-off-by: Anand Gadiyar <gadiyar@ti.com>
+Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
+Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/musb/musb_core.c | 146 +++++++++++++++++++++++++++++++++++++++++++
+ drivers/usb/musb/musb_core.h | 39 +++++++++++
+ drivers/usb/musb/musb_regs.h | 90 ++++++++++++++++++++++++++
+ drivers/usb/musb/omap2430.c | 16 ++++
+ 4 files changed, 291 insertions(+)
+
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -2167,6 +2167,148 @@ static int __exit musb_remove(struct pla
+
+ #ifdef CONFIG_PM
+
++static struct musb_context_registers musb_context;
++
++void musb_save_context(struct musb *musb)
++{
++ int i;
++ void __iomem *musb_base = musb->mregs;
++
++ if (is_host_enabled(musb)) {
++ musb_context.frame = musb_readw(musb_base, MUSB_FRAME);
++ musb_context.testmode = musb_readb(musb_base, MUSB_TESTMODE);
++ }
++ musb_context.power = musb_readb(musb_base, MUSB_POWER);
++ musb_context.intrtxe = musb_readw(musb_base, MUSB_INTRTXE);
++ musb_context.intrrxe = musb_readw(musb_base, MUSB_INTRRXE);
++ musb_context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE);
++ musb_context.index = musb_readb(musb_base, MUSB_INDEX);
++ musb_context.devctl = musb_readb(musb_base, MUSB_DEVCTL);
++
++ for (i = 0; i < MUSB_C_NUM_EPS; ++i) {
++ musb_writeb(musb_base, MUSB_INDEX, i);
++ musb_context.index_regs[i].txmaxp =
++ musb_readw(musb_base, 0x10 + MUSB_TXMAXP);
++ musb_context.index_regs[i].txcsr =
++ musb_readw(musb_base, 0x10 + MUSB_TXCSR);
++ musb_context.index_regs[i].rxmaxp =
++ musb_readw(musb_base, 0x10 + MUSB_RXMAXP);
++ musb_context.index_regs[i].rxcsr =
++ musb_readw(musb_base, 0x10 + MUSB_RXCSR);
++
++ if (musb->dyn_fifo) {
++ musb_context.index_regs[i].txfifoadd =
++ musb_read_txfifoadd(musb_base);
++ musb_context.index_regs[i].rxfifoadd =
++ musb_read_rxfifoadd(musb_base);
++ musb_context.index_regs[i].txfifosz =
++ musb_read_txfifosz(musb_base);
++ musb_context.index_regs[i].rxfifosz =
++ musb_read_rxfifosz(musb_base);
++ }
++ if (is_host_enabled(musb)) {
++ musb_context.index_regs[i].txtype =
++ musb_readb(musb_base, 0x10 + MUSB_TXTYPE);
++ musb_context.index_regs[i].txinterval =
++ musb_readb(musb_base, 0x10 + MUSB_TXINTERVAL);
++ musb_context.index_regs[i].rxtype =
++ musb_readb(musb_base, 0x10 + MUSB_RXTYPE);
++ musb_context.index_regs[i].rxinterval =
++ musb_readb(musb_base, 0x10 + MUSB_RXINTERVAL);
++
++ musb_context.index_regs[i].txfunaddr =
++ musb_read_txfunaddr(musb_base, i);
++ musb_context.index_regs[i].txhubaddr =
++ musb_read_txhubaddr(musb_base, i);
++ musb_context.index_regs[i].txhubport =
++ musb_read_txhubport(musb_base, i);
++
++ musb_context.index_regs[i].rxfunaddr =
++ musb_read_rxfunaddr(musb_base, i);
++ musb_context.index_regs[i].rxhubaddr =
++ musb_read_rxhubaddr(musb_base, i);
++ musb_context.index_regs[i].rxhubport =
++ musb_read_rxhubport(musb_base, i);
++ }
++ }
++
++ musb_writeb(musb_base, MUSB_INDEX, musb_context.index);
++
++ musb_platform_save_context(&musb_context);
++}
++
++void musb_restore_context(struct musb *musb)
++{
++ int i;
++ void __iomem *musb_base = musb->mregs;
++ void __iomem *ep_target_regs;
++
++ musb_platform_restore_context(&musb_context);
++
++ if (is_host_enabled(musb)) {
++ musb_writew(musb_base, MUSB_FRAME, musb_context.frame);
++ musb_writeb(musb_base, MUSB_TESTMODE, musb_context.testmode);
++ }
++ musb_writeb(musb_base, MUSB_POWER, musb_context.power);
++ musb_writew(musb_base, MUSB_INTRTXE, musb_context.intrtxe);
++ musb_writew(musb_base, MUSB_INTRRXE, musb_context.intrrxe);
++ musb_writeb(musb_base, MUSB_INTRUSBE, musb_context.intrusbe);
++ musb_writeb(musb_base, MUSB_DEVCTL, musb_context.devctl);
++
++ for (i = 0; i < MUSB_C_NUM_EPS; ++i) {
++ musb_writeb(musb_base, MUSB_INDEX, i);
++ musb_writew(musb_base, 0x10 + MUSB_TXMAXP,
++ musb_context.index_regs[i].txmaxp);
++ musb_writew(musb_base, 0x10 + MUSB_TXCSR,
++ musb_context.index_regs[i].txcsr);
++ musb_writew(musb_base, 0x10 + MUSB_RXMAXP,
++ musb_context.index_regs[i].rxmaxp);
++ musb_writew(musb_base, 0x10 + MUSB_RXCSR,
++ musb_context.index_regs[i].rxcsr);
++
++ if (musb->dyn_fifo) {
++ musb_write_txfifosz(musb_base,
++ musb_context.index_regs[i].txfifosz);
++ musb_write_rxfifosz(musb_base,
++ musb_context.index_regs[i].rxfifosz);
++ musb_write_txfifoadd(musb_base,
++ musb_context.index_regs[i].txfifoadd);
++ musb_write_rxfifoadd(musb_base,
++ musb_context.index_regs[i].rxfifoadd);
++ }
++
++ if (is_host_enabled(musb)) {
++ musb_writeb(musb_base, 0x10 + MUSB_TXTYPE,
++ musb_context.index_regs[i].txtype);
++ musb_writeb(musb_base, 0x10 + MUSB_TXINTERVAL,
++ musb_context.index_regs[i].txinterval);
++ musb_writeb(musb_base, 0x10 + MUSB_RXTYPE,
++ musb_context.index_regs[i].rxtype);
++ musb_writeb(musb_base, 0x10 + MUSB_RXINTERVAL,
++
++ musb_context.index_regs[i].rxinterval);
++ musb_write_txfunaddr(musb_base, i,
++ musb_context.index_regs[i].txfunaddr);
++ musb_write_txhubaddr(musb_base, i,
++ musb_context.index_regs[i].txhubaddr);
++ musb_write_txhubport(musb_base, i,
++ musb_context.index_regs[i].txhubport);
++
++ ep_target_regs =
++ musb_read_target_reg_base(i, musb_base);
++
++ musb_write_rxfunaddr(ep_target_regs,
++ musb_context.index_regs[i].rxfunaddr);
++ musb_write_rxhubaddr(ep_target_regs,
++ musb_context.index_regs[i].rxhubaddr);
++ musb_write_rxhubport(ep_target_regs,
++ musb_context.index_regs[i].rxhubport);
++ }
++ }
++
++ musb_writeb(musb_base, MUSB_INDEX, musb_context.index);
++}
++
+ static int musb_suspend(struct device *dev)
+ {
+ struct platform_device *pdev = to_platform_device(dev);
+@@ -2188,6 +2330,8 @@ static int musb_suspend(struct device *d
+ */
+ }
+
++ musb_save_context(musb);
++
+ if (musb->set_clock)
+ musb->set_clock(musb->clock, 0);
+ else
+@@ -2209,6 +2353,8 @@ static int musb_resume_noirq(struct devi
+ else
+ clk_enable(musb->clock);
+
++ musb_restore_context(musb);
++
+ /* for static cmos like DaVinci, register values were preserved
+ * unless for some reason the whole soc powered down or the USB
+ * module got reset through the PSC (vs just being disabled).
+--- a/drivers/usb/musb/musb_core.h
++++ b/drivers/usb/musb/musb_core.h
+@@ -454,6 +454,45 @@ struct musb {
+ #endif
+ };
+
++#ifdef CONFIG_PM
++struct musb_csr_regs {
++ /* FIFO registers */
++ u16 txmaxp, txcsr, rxmaxp, rxcsr;
++ u16 rxfifoadd, txfifoadd;
++ u8 txtype, txinterval, rxtype, rxinterval;
++ u8 rxfifosz, txfifosz;
++ u8 txfunaddr, txhubaddr, txhubport;
++ u8 rxfunaddr, rxhubaddr, rxhubport;
++};
++
++struct musb_context_registers {
++
++#if defined(CONFIG_ARCH_OMAP34XX) || defined(CONFIG_ARCH_OMAP2430)
++ u32 otg_sysconfig, otg_forcestandby;
++#endif
++ u8 power;
++ u16 intrtxe, intrrxe;
++ u8 intrusbe;
++ u16 frame;
++ u8 index, testmode;
++
++ u8 devctl, misc;
++
++ struct musb_csr_regs index_regs[MUSB_C_NUM_EPS];
++};
++
++#if defined(CONFIG_ARCH_OMAP34XX) || defined(CONFIG_ARCH_OMAP2430)
++extern void musb_platform_save_context(struct musb_context_registers
++ *musb_context);
++extern void musb_platform_restore_context(struct musb_context_registers
++ *musb_context);
++#else
++#define musb_platform_save_context(x) do {} while (0)
++#define musb_platform_restore_context(x) do {} while (0)
++#endif
++
++#endif
++
+ static inline void musb_set_vbus(struct musb *musb, int is_on)
+ {
+ musb->board_set_vbus(musb, is_on);
+--- a/drivers/usb/musb/musb_regs.h
++++ b/drivers/usb/musb/musb_regs.h
+@@ -326,6 +326,26 @@ static inline void musb_write_rxfifoadd
+ musb_writew(mbase, MUSB_RXFIFOADD, c_off);
+ }
+
++static inline u8 musb_read_txfifosz(void __iomem *mbase)
++{
++ return musb_readb(mbase, MUSB_TXFIFOSZ);
++}
++
++static inline u16 musb_read_txfifoadd(void __iomem *mbase)
++{
++ return musb_readw(mbase, MUSB_TXFIFOADD);
++}
++
++static inline u8 musb_read_rxfifosz(void __iomem *mbase)
++{
++ return musb_readb(mbase, MUSB_RXFIFOSZ);
++}
++
++static inline u16 musb_read_rxfifoadd(void __iomem *mbase)
++{
++ return musb_readw(mbase, MUSB_RXFIFOADD);
++}
++
+ static inline u8 musb_read_configdata(void __iomem *mbase)
+ {
+ musb_writeb(mbase, MUSB_INDEX, 0);
+@@ -381,6 +401,36 @@ static inline void musb_write_txhubport
+ qh_h_port_reg);
+ }
+
++static inline u8 musb_read_rxfunaddr(void __iomem *mbase, u8 epnum)
++{
++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXFUNCADDR));
++}
++
++static inline u8 musb_read_rxhubaddr(void __iomem *mbase, u8 epnum)
++{
++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXHUBADDR));
++}
++
++static inline u8 musb_read_rxhubport(void __iomem *mbase, u8 epnum)
++{
++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXHUBPORT));
++}
++
++static inline u8 musb_read_txfunaddr(void __iomem *mbase, u8 epnum)
++{
++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_TXFUNCADDR));
++}
++
++static inline u8 musb_read_txhubaddr(void __iomem *mbase, u8 epnum)
++{
++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_TXHUBADDR));
++}
++
++static inline u8 musb_read_txhubport(void __iomem *mbase, u8 epnum)
++{
++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_TXHUBPORT));
++}
++
+ #else /* CONFIG_BLACKFIN */
+
+ #define USB_BASE USB_FADDR
+@@ -460,6 +510,22 @@ static inline void musb_write_rxfifoadd
+ {
+ }
+
++static inline u8 musb_read_txfifosz(void __iomem *mbase)
++{
++}
++
++static inline u16 musb_read_txfifoadd(void __iomem *mbase)
++{
++}
++
++static inline u8 musb_read_rxfifosz(void __iomem *mbase)
++{
++}
++
++static inline u16 musb_read_rxfifoadd(void __iomem *mbase)
++{
++}
++
+ static inline u8 musb_read_configdata(void __iomem *mbase)
+ {
+ return 0;
+@@ -505,6 +571,30 @@ static inline void musb_write_txhubport
+ {
+ }
+
++static inline u8 musb_read_rxfunaddr(void __iomem *mbase, u8 epnum)
++{
++}
++
++static inline u8 musb_read_rxhubaddr(void __iomem *mbase, u8 epnum)
++{
++}
++
++static inline u8 musb_read_rxhubport(void __iomem *mbase, u8 epnum)
++{
++}
++
++static inline u8 musb_read_txfunaddr(void __iomem *mbase, u8 epnum)
++{
++}
++
++static inline u8 musb_read_txhubaddr(void __iomem *mbase, u8 epnum)
++{
++}
++
++static inline void musb_read_txhubport(void __iomem *mbase, u8 epnum)
++{
++}
++
+ #endif /* CONFIG_BLACKFIN */
+
+ #endif /* __MUSB_REGS_H__ */
+--- a/drivers/usb/musb/omap2430.c
++++ b/drivers/usb/musb/omap2430.c
+@@ -255,6 +255,22 @@ int __init musb_platform_init(struct mus
+ return 0;
+ }
+
++#ifdef CONFIG_PM
++void musb_platform_save_context(struct musb_context_registers
++ *musb_context)
++{
++ musb_context->otg_sysconfig = omap_readl(OTG_SYSCONFIG);
++ musb_context->otg_forcestandby = omap_readl(OTG_FORCESTDBY);
++}
++
++void musb_platform_restore_context(struct musb_context_registers
++ *musb_context)
++{
++ omap_writel(musb_context->otg_sysconfig, OTG_SYSCONFIG);
++ omap_writel(musb_context->otg_forcestandby, OTG_FORCESTDBY);
++}
++#endif
++
+ int musb_platform_suspend(struct musb *musb)
+ {
+ u32 l;
diff --git a/usb/usb-musb-deprecate-what-we-don-t-use.patch b/usb/usb-musb-deprecate-what-we-don-t-use.patch
new file mode 100644
index 00000000000000..b60968c75b7c5b
--- /dev/null
+++ b/usb/usb-musb-deprecate-what-we-don-t-use.patch
@@ -0,0 +1,58 @@
+From felipe.balbi@nokia.com Wed Jan 27 18:21:16 2010
+From: Felipe Balbi <felipe.balbi@nokia.com>
+Date: Thu, 21 Jan 2010 15:33:55 +0200
+Subject: USB: musb: deprecate what we don't use
+To: Greg KH <greg@kroah.com>
+Message-ID: <1264080838-9452-5-git-send-email-felipe.balbi@nokia.com>
+
+
+after 2.6.34, those fields will be removed from
+struct musb_hdrc_platform_data, it's expected
+that other architectures are fixed by then.
+
+Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/usb/musb.h | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+--- a/include/linux/usb/musb.h
++++ b/include/linux/usb/musb.h
+@@ -30,26 +30,26 @@ struct musb_hdrc_eps_bits {
+ struct musb_hdrc_config {
+ /* MUSB configuration-specific details */
+ unsigned multipoint:1; /* multipoint device */
+- unsigned dyn_fifo:1; /* supports dynamic fifo sizing */
+- unsigned soft_con:1; /* soft connect required */
+- unsigned utm_16:1; /* utm data witdh is 16 bits */
++ unsigned dyn_fifo:1 __deprecated; /* supports dynamic fifo sizing */
++ unsigned soft_con:1 __deprecated; /* soft connect required */
++ unsigned utm_16:1 __deprecated; /* utm data witdh is 16 bits */
+ unsigned big_endian:1; /* true if CPU uses big-endian */
+ unsigned mult_bulk_tx:1; /* Tx ep required for multbulk pkts */
+ unsigned mult_bulk_rx:1; /* Rx ep required for multbulk pkts */
+ unsigned high_iso_tx:1; /* Tx ep required for HB iso */
+ unsigned high_iso_rx:1; /* Rx ep required for HD iso */
+- unsigned dma:1; /* supports DMA */
+- unsigned vendor_req:1; /* vendor registers required */
++ unsigned dma:1 __deprecated; /* supports DMA */
++ unsigned vendor_req:1 __deprecated; /* vendor registers required */
+
+ u8 num_eps; /* number of endpoints _with_ ep0 */
+- u8 dma_channels; /* number of dma channels */
++ u8 dma_channels __deprecated; /* number of dma channels */
+ u8 dyn_fifo_size; /* dynamic size in bytes */
+- u8 vendor_ctrl; /* vendor control reg width */
+- u8 vendor_stat; /* vendor status reg witdh */
+- u8 dma_req_chan; /* bitmask for required dma channels */
++ u8 vendor_ctrl __deprecated; /* vendor control reg width */
++ u8 vendor_stat __deprecated; /* vendor status reg witdh */
++ u8 dma_req_chan __deprecated; /* bitmask for required dma channels */
+ u8 ram_bits; /* ram address size */
+
+- struct musb_hdrc_eps_bits *eps_bits;
++ struct musb_hdrc_eps_bits *eps_bits __deprecated;
+ #ifdef CONFIG_BLACKFIN
+ /* A GPIO controlling VRSEL in Blackfin */
+ unsigned int gpio_vrsel;
diff --git a/usb/usb-musb-get-rid-of-omap_readl-writel.patch b/usb/usb-musb-get-rid-of-omap_readl-writel.patch
new file mode 100644
index 00000000000000..dca6ce46ba4256
--- /dev/null
+++ b/usb/usb-musb-get-rid-of-omap_readl-writel.patch
@@ -0,0 +1,227 @@
+From felipe.balbi@nokia.com Wed Jan 27 18:19:46 2010
+From: Felipe Balbi <felipe.balbi@nokia.com>
+Date: Thu, 21 Jan 2010 15:33:53 +0200
+Subject: USB: musb: get rid of omap_readl/writel
+To: Greg KH <greg@kroah.com>
+Message-ID: <1264080838-9452-3-git-send-email-felipe.balbi@nokia.com>
+
+
+we have those addresses already ioremaped, so let's
+use our __raw_readl/writel wrappers.
+
+Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/musb/musb_core.c | 4 +--
+ drivers/usb/musb/musb_core.h | 12 +++++-----
+ drivers/usb/musb/omap2430.c | 48 ++++++++++++++++++++++---------------------
+ drivers/usb/musb/omap2430.h | 32 ++++++++++++----------------
+ 4 files changed, 47 insertions(+), 49 deletions(-)
+
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -2234,7 +2234,7 @@ void musb_save_context(struct musb *musb
+
+ musb_writeb(musb_base, MUSB_INDEX, musb_context.index);
+
+- musb_platform_save_context(&musb_context);
++ musb_platform_save_context(musb, &musb_context);
+ }
+
+ void musb_restore_context(struct musb *musb)
+@@ -2243,7 +2243,7 @@ void musb_restore_context(struct musb *m
+ void __iomem *musb_base = musb->mregs;
+ void __iomem *ep_target_regs;
+
+- musb_platform_restore_context(&musb_context);
++ musb_platform_restore_context(musb, &musb_context);
+
+ if (is_host_enabled(musb)) {
+ musb_writew(musb_base, MUSB_FRAME, musb_context.frame);
+--- a/drivers/usb/musb/musb_core.h
++++ b/drivers/usb/musb/musb_core.h
+@@ -482,13 +482,13 @@ struct musb_context_registers {
+ };
+
+ #if defined(CONFIG_ARCH_OMAP34XX) || defined(CONFIG_ARCH_OMAP2430)
+-extern void musb_platform_save_context(struct musb_context_registers
+- *musb_context);
+-extern void musb_platform_restore_context(struct musb_context_registers
+- *musb_context);
++extern void musb_platform_save_context(struct musb *musb,
++ struct musb_context_registers *musb_context);
++extern void musb_platform_restore_context(struct musb *musb,
++ struct musb_context_registers *musb_context);
+ #else
+-#define musb_platform_save_context(x) do {} while (0)
+-#define musb_platform_restore_context(x) do {} while (0)
++#define musb_platform_save_context(m, x) do {} while (0)
++#define musb_platform_restore_context(m, x) do {} while (0)
+ #endif
+
+ #endif
+--- a/drivers/usb/musb/omap2430.c
++++ b/drivers/usb/musb/omap2430.c
+@@ -220,7 +220,7 @@ int __init musb_platform_init(struct mus
+
+ musb_platform_resume(musb);
+
+- l = omap_readl(OTG_SYSCONFIG);
++ l = musb_readl(musb->mregs, OTG_SYSCONFIG);
+ l &= ~ENABLEWAKEUP; /* disable wakeup */
+ l &= ~NOSTDBY; /* remove possible nostdby */
+ l |= SMARTSTDBY; /* enable smart standby */
+@@ -233,17 +233,19 @@ int __init musb_platform_init(struct mus
+ */
+ if (!cpu_is_omap3430())
+ l |= AUTOIDLE; /* enable auto idle */
+- omap_writel(l, OTG_SYSCONFIG);
++ musb_writel(musb->mregs, OTG_SYSCONFIG, l);
+
+- l = omap_readl(OTG_INTERFSEL);
++ l = musb_readl(musb->mregs, OTG_INTERFSEL);
+ l |= ULPI_12PIN;
+- omap_writel(l, OTG_INTERFSEL);
++ musb_writel(musb->mregs, OTG_INTERFSEL, l);
+
+ pr_debug("HS USB OTG: revision 0x%x, sysconfig 0x%02x, "
+ "sysstatus 0x%x, intrfsel 0x%x, simenable 0x%x\n",
+- omap_readl(OTG_REVISION), omap_readl(OTG_SYSCONFIG),
+- omap_readl(OTG_SYSSTATUS), omap_readl(OTG_INTERFSEL),
+- omap_readl(OTG_SIMENABLE));
++ musb_readl(musb->mregs, OTG_REVISION),
++ musb_readl(musb->mregs, OTG_SYSCONFIG),
++ musb_readl(musb->mregs, OTG_SYSSTATUS),
++ musb_readl(musb->mregs, OTG_INTERFSEL),
++ musb_readl(musb->mregs, OTG_SIMENABLE));
+
+ omap_vbus_power(musb, musb->board_mode == MUSB_HOST, 1);
+
+@@ -256,18 +258,18 @@ int __init musb_platform_init(struct mus
+ }
+
+ #ifdef CONFIG_PM
+-void musb_platform_save_context(struct musb_context_registers
+- *musb_context)
++void musb_platform_save_context(struct musb *musb,
++ struct musb_context_registers *musb_context)
+ {
+- musb_context->otg_sysconfig = omap_readl(OTG_SYSCONFIG);
+- musb_context->otg_forcestandby = omap_readl(OTG_FORCESTDBY);
++ musb_context->otg_sysconfig = musb_readl(musb->mregs, OTG_SYSCONFIG);
++ musb_context->otg_forcestandby = musb_readl(musb->mregs, OTG_FORCESTDBY);
+ }
+
+-void musb_platform_restore_context(struct musb_context_registers
+- *musb_context)
++void musb_platform_restore_context(struct musb *musb,
++ struct musb_context_registers *musb_context)
+ {
+- omap_writel(musb_context->otg_sysconfig, OTG_SYSCONFIG);
+- omap_writel(musb_context->otg_forcestandby, OTG_FORCESTDBY);
++ musb_writel(musb->mregs, OTG_SYSCONFIG, musb_context->otg_sysconfig);
++ musb_writel(musb->mregs, OTG_FORCESTDBY, musb_context->otg_forcestandby);
+ }
+ #endif
+
+@@ -279,13 +281,13 @@ int musb_platform_suspend(struct musb *m
+ return 0;
+
+ /* in any role */
+- l = omap_readl(OTG_FORCESTDBY);
++ l = musb_readl(musb->mregs, OTG_FORCESTDBY);
+ l |= ENABLEFORCE; /* enable MSTANDBY */
+- omap_writel(l, OTG_FORCESTDBY);
++ musb_writel(musb->mregs, OTG_FORCESTDBY, l);
+
+- l = omap_readl(OTG_SYSCONFIG);
++ l = musb_readl(musb->mregs, OTG_SYSCONFIG);
+ l |= ENABLEWAKEUP; /* enable wakeup */
+- omap_writel(l, OTG_SYSCONFIG);
++ musb_writel(musb->mregs, OTG_SYSCONFIG, l);
+
+ otg_set_suspend(musb->xceiv, 1);
+
+@@ -311,13 +313,13 @@ static int musb_platform_resume(struct m
+ else
+ clk_enable(musb->clock);
+
+- l = omap_readl(OTG_SYSCONFIG);
++ l = musb_readl(musb->mregs, OTG_SYSCONFIG);
+ l &= ~ENABLEWAKEUP; /* disable wakeup */
+- omap_writel(l, OTG_SYSCONFIG);
++ musb_writel(musb->mregs, OTG_SYSCONFIG, l);
+
+- l = omap_readl(OTG_FORCESTDBY);
++ l = musb_readl(musb->mregs, OTG_FORCESTDBY);
+ l &= ~ENABLEFORCE; /* disable MSTANDBY */
+- omap_writel(l, OTG_FORCESTDBY);
++ musb_writel(musb->mregs, OTG_FORCESTDBY, l);
+
+ return 0;
+ }
+--- a/drivers/usb/musb/omap2430.h
++++ b/drivers/usb/musb/omap2430.h
+@@ -10,47 +10,43 @@
+ #ifndef __MUSB_OMAP243X_H__
+ #define __MUSB_OMAP243X_H__
+
+-#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430)
+-#include <mach/hardware.h>
+ #include <plat/usb.h>
+
+ /*
+ * OMAP2430-specific definitions
+ */
+
+-#define MENTOR_BASE_OFFSET 0
+-#if defined(CONFIG_ARCH_OMAP2430)
+-#define OMAP_HSOTG_BASE (OMAP243X_HS_BASE)
+-#elif defined(CONFIG_ARCH_OMAP3430)
+-#define OMAP_HSOTG_BASE (OMAP34XX_HSUSB_OTG_BASE)
+-#endif
+-#define OMAP_HSOTG(offset) (OMAP_HSOTG_BASE + 0x400 + (offset))
+-#define OTG_REVISION OMAP_HSOTG(0x0)
+-#define OTG_SYSCONFIG OMAP_HSOTG(0x4)
++#define OTG_REVISION 0x400
++
++#define OTG_SYSCONFIG 0x404
+ # define MIDLEMODE 12 /* bit position */
+ # define FORCESTDBY (0 << MIDLEMODE)
+ # define NOSTDBY (1 << MIDLEMODE)
+ # define SMARTSTDBY (2 << MIDLEMODE)
++
+ # define SIDLEMODE 3 /* bit position */
+ # define FORCEIDLE (0 << SIDLEMODE)
+ # define NOIDLE (1 << SIDLEMODE)
+ # define SMARTIDLE (2 << SIDLEMODE)
++
+ # define ENABLEWAKEUP (1 << 2)
+ # define SOFTRST (1 << 1)
+ # define AUTOIDLE (1 << 0)
+-#define OTG_SYSSTATUS OMAP_HSOTG(0x8)
++
++#define OTG_SYSSTATUS 0x408
+ # define RESETDONE (1 << 0)
+-#define OTG_INTERFSEL OMAP_HSOTG(0xc)
++
++#define OTG_INTERFSEL 0x40c
+ # define EXTCP (1 << 2)
+-# define PHYSEL 0 /* bit position */
++# define PHYSEL 0 /* bit position */
+ # define UTMI_8BIT (0 << PHYSEL)
+ # define ULPI_12PIN (1 << PHYSEL)
+ # define ULPI_8PIN (2 << PHYSEL)
+-#define OTG_SIMENABLE OMAP_HSOTG(0x10)
++
++#define OTG_SIMENABLE 0x410
+ # define TM1 (1 << 0)
+-#define OTG_FORCESTDBY OMAP_HSOTG(0x14)
+-# define ENABLEFORCE (1 << 0)
+
+-#endif /* CONFIG_ARCH_OMAP2430 */
++#define OTG_FORCESTDBY 0x414
++# define ENABLEFORCE (1 << 0)
+
+ #endif /* __MUSB_OMAP243X_H__ */
diff --git a/usb/usb-musb-only-print-info-message-if-probe-is-successful.patch b/usb/usb-musb-only-print-info-message-if-probe-is-successful.patch
new file mode 100644
index 00000000000000..d532e27d1e5416
--- /dev/null
+++ b/usb/usb-musb-only-print-info-message-if-probe-is-successful.patch
@@ -0,0 +1,61 @@
+From felipe.balbi@nokia.com Wed Jan 27 18:22:54 2010
+From: Felipe Balbi <felipe.balbi@nokia.com>
+Date: Thu, 21 Jan 2010 15:33:58 +0200
+Subject: USB: musb: only print info message if probe() is successful
+To: Greg KH <greg@kroah.com>
+Message-ID: <1264080838-9452-8-git-send-email-felipe.balbi@nokia.com>
+
+
+we were printing the info about musb probe too early where
+it was still possible for things to go wrong. Move the
+down right before the return 0 statement. While at that
+also convert pr_info to dev_info.
+
+Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/musb/musb_core.c | 25 ++++++++++++-------------
+ 1 file changed, 12 insertions(+), 13 deletions(-)
+
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -2004,19 +2004,6 @@ bad_config:
+ musb->irq_wake = 0;
+ }
+
+- pr_info("%s: USB %s mode controller at %p using %s, IRQ %d\n",
+- musb_driver_name,
+- ({char *s;
+- switch (musb->board_mode) {
+- case MUSB_HOST: s = "Host"; break;
+- case MUSB_PERIPHERAL: s = "Peripheral"; break;
+- default: s = "OTG"; break;
+- }; s; }),
+- ctrl,
+- (is_dma_capable() && musb->dma_controller)
+- ? "DMA" : "PIO",
+- musb->nIrq);
+-
+ /* host side needs more setup */
+ if (is_host_enabled(musb)) {
+ struct usb_hcd *hcd = musb_to_hcd(musb);
+@@ -2079,6 +2066,18 @@ bad_config:
+ if (status)
+ goto fail2;
+
++ dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n",
++ ({char *s;
++ switch (musb->board_mode) {
++ case MUSB_HOST: s = "Host"; break;
++ case MUSB_PERIPHERAL: s = "Peripheral"; break;
++ default: s = "OTG"; break;
++ }; s; }),
++ ctrl,
++ (is_dma_capable() && musb->dma_controller)
++ ? "DMA" : "PIO",
++ musb->nIrq);
++
+ return 0;
+
+ fail2:
diff --git a/usb/usb-musb-tusb6010-use-resource_size.patch b/usb/usb-musb-tusb6010-use-resource_size.patch
new file mode 100644
index 00000000000000..d6812d8cec0b9b
--- /dev/null
+++ b/usb/usb-musb-tusb6010-use-resource_size.patch
@@ -0,0 +1,28 @@
+From felipe.balbi@nokia.com Wed Jan 27 18:22:07 2010
+From: Felipe Balbi <felipe.balbi@nokia.com>
+Date: Thu, 21 Jan 2010 15:33:56 +0200
+Subject: USB: musb: tusb6010: use resource_size
+To: Greg KH <greg@kroah.com>
+Message-ID: <1264080838-9452-6-git-send-email-felipe.balbi@nokia.com>
+
+
+Trivial patch, no functional changes.
+
+Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/musb/tusb6010.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/musb/tusb6010.c
++++ b/drivers/usb/musb/tusb6010.c
+@@ -1118,7 +1118,7 @@ int __init musb_platform_init(struct mus
+ }
+ musb->sync = mem->start;
+
+- sync = ioremap(mem->start, mem->end - mem->start + 1);
++ sync = ioremap(mem->start, resource_size(mem));
+ if (!sync) {
+ pr_debug("ioremap for sync failed\n");
+ ret = -ENOMEM;
diff --git a/usb/usb-musb-unmap-base-if-we-can-t-probe.patch b/usb/usb-musb-unmap-base-if-we-can-t-probe.patch
new file mode 100644
index 00000000000000..97250dd03094e1
--- /dev/null
+++ b/usb/usb-musb-unmap-base-if-we-can-t-probe.patch
@@ -0,0 +1,41 @@
+From felipe.balbi@nokia.com Wed Jan 27 18:22:39 2010
+From: Felipe Balbi <felipe.balbi@nokia.com>
+Date: Thu, 21 Jan 2010 15:33:57 +0200
+Subject: USB: musb: unmap base if we can't probe
+To: Greg KH <greg@kroah.com>
+Message-ID: <1264080838-9452-7-git-send-email-felipe.balbi@nokia.com>
+
+
+when probe() fails, we should iounmap() the mapped address.
+
+Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/musb/musb_core.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -2110,6 +2110,7 @@ static int __init musb_probe(struct plat
+ {
+ struct device *dev = &pdev->dev;
+ int irq = platform_get_irq(pdev, 0);
++ int status;
+ struct resource *iomem;
+ void __iomem *base;
+
+@@ -2127,7 +2128,12 @@ static int __init musb_probe(struct plat
+ /* clobbered by use_dma=n */
+ orig_dma_mask = dev->dma_mask;
+ #endif
+- return musb_init_controller(dev, irq, base);
++
++ status = musb_init_controller(dev, irq, base);
++ if (status < 0)
++ iounmap(base);
++
++ return status;
+ }
+
+ static int __exit musb_remove(struct platform_device *pdev)
diff --git a/usb/usb-musb-we-already-tested-for-dyn_fifo.patch b/usb/usb-musb-we-already-tested-for-dyn_fifo.patch
new file mode 100644
index 00000000000000..b6338af868b422
--- /dev/null
+++ b/usb/usb-musb-we-already-tested-for-dyn_fifo.patch
@@ -0,0 +1,46 @@
+From felipe.balbi@nokia.com Wed Jan 27 18:20:45 2010
+From: Felipe Balbi <felipe.balbi@nokia.com>
+Date: Thu, 21 Jan 2010 15:33:54 +0200
+Subject: USB: musb: we already tested for dyn_fifo
+To: Greg KH <greg@kroah.com>
+Message-ID: <1264080838-9452-4-git-send-email-felipe.balbi@nokia.com>
+
+
+... and even added a flag to struct musb, so let's
+use that.
+
+Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/musb/musb_core.c | 19 ++++---------------
+ 1 file changed, 4 insertions(+), 15 deletions(-)
+
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -1398,21 +1398,10 @@ static int __init musb_core_init(u16 mus
+ musb->nr_endpoints = 1;
+ musb->epmask = 1;
+
+- if (reg & MUSB_CONFIGDATA_DYNFIFO) {
+- if (musb->config->dyn_fifo)
+- status = ep_config_from_table(musb);
+- else {
+- ERR("reconfigure software for Dynamic FIFOs\n");
+- status = -ENODEV;
+- }
+- } else {
+- if (!musb->config->dyn_fifo)
+- status = ep_config_from_hw(musb);
+- else {
+- ERR("reconfigure software for static FIFOs\n");
+- return -ENODEV;
+- }
+- }
++ if (musb->dyn_fifo)
++ status = ep_config_from_table(musb);
++ else
++ status = ep_config_from_hw(musb);
+
+ if (status < 0)
+ return status;
diff --git a/usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch b/usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch
new file mode 100644
index 00000000000000..4a0cdaa98f1ab5
--- /dev/null
+++ b/usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch
@@ -0,0 +1,56 @@
+From fujita.tomonori@lab.ntt.co.jp Wed Jan 27 18:29:57 2010
+From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Date: Mon, 25 Jan 2010 11:07:19 +0900
+Subject: USB: s3c-hsotg: replace deprecated dma_sync_single()
+To: gregkh@suse.de
+Cc: ben@simtec.co.uk, linux-usb@vger.kernel.org
+Message-ID: <20100125110353F.fujita.tomonori@lab.ntt.co.jp>
+
+
+This replaces deprecated dma_sync_single() with dma_sync_single_for_cpu().
+
+There is no functional change because dma_sync_single() simply calls
+dma_sync_single_for_cpu():
+
+static inline void __deprecated dma_sync_single(struct device *dev,
+ dma_addr_t addr, size_t size,
+ enum dma_data_direction dir)
+{
+ dma_sync_single_for_cpu(dev, addr, size, dir);
+}
+
+This fixes the following compile warnings:
+
+drivers/usb/gadget/s3c-hsotg.c: In function 's3c_hsotg_unmap_dma':
+drivers/usb/gadget/s3c-hsotg.c:376: warning: 'dma_sync_single' is deprecated (declared at /home/fujita/git/linux-2.6/include/linux/dma-mapping.h:109)
+drivers/usb/gadget/s3c-hsotg.c: In function 's3c_hsotg_map_dma':
+drivers/usb/gadget/s3c-hsotg.c:758: warning: 'dma_sync_single' is deprecated (declared at /home/fujita/git/linux-2.6/include/linux/dma-mapping.h:109)
+
+Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Acked-by: Ben Dooks <ben@simtec.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/s3c-hsotg.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/gadget/s3c-hsotg.c
++++ b/drivers/usb/gadget/s3c-hsotg.c
+@@ -374,7 +374,7 @@ static void s3c_hsotg_unmap_dma(struct s
+ req->dma = DMA_ADDR_INVALID;
+ hs_req->mapped = 0;
+ } else {
+- dma_sync_single(hsotg->dev, req->dma, req->length, dir);
++ dma_sync_single_for_cpu(hsotg->dev, req->dma, req->length, dir);
+ }
+ }
+
+@@ -756,7 +756,7 @@ static int s3c_hsotg_map_dma(struct s3c_
+ hs_req->mapped = 1;
+ req->dma = dma;
+ } else {
+- dma_sync_single(hsotg->dev, req->dma, req->length, dir);
++ dma_sync_single_for_cpu(hsotg->dev, req->dma, req->length, dir);
+ hs_req->mapped = 0;
+ }
+