diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-01-27 18:48:51 -0800 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-01-27 18:48:51 -0800 |
| commit | 81178581cf2a7491a998572b2bae72a0bf4ff5b6 (patch) | |
| tree | fbb9ef5637c02011dc4919e812c1f860dca71919 /usb | |
| parent | f2ec6d71bba130efa1a586362ec0871b831fb952 (diff) | |
| download | patches-81178581cf2a7491a998572b2bae72a0bf4ff5b6.tar.gz | |
more patches
Diffstat (limited to 'usb')
| -rw-r--r-- | usb/usb-musb-add-context-save-and-restore-support.patch | 397 | ||||
| -rw-r--r-- | usb/usb-musb-deprecate-what-we-don-t-use.patch | 58 | ||||
| -rw-r--r-- | usb/usb-musb-get-rid-of-omap_readl-writel.patch | 227 | ||||
| -rw-r--r-- | usb/usb-musb-only-print-info-message-if-probe-is-successful.patch | 61 | ||||
| -rw-r--r-- | usb/usb-musb-tusb6010-use-resource_size.patch | 28 | ||||
| -rw-r--r-- | usb/usb-musb-unmap-base-if-we-can-t-probe.patch | 41 | ||||
| -rw-r--r-- | usb/usb-musb-we-already-tested-for-dyn_fifo.patch | 46 | ||||
| -rw-r--r-- | usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch | 56 |
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; + } + |
