MIPS: Alchemy: abstract USB block control register access
Alchemy chips have one or more registers which control access to the usb blocks as well as PHY configuration. I don't want the OHCI/EHCI glues to know about the different registers and bits; new code hides the gory details of USB configuration from them. Signed-off-by: Manuel Lauss <manuel.lauss@googlemail.com> To: Linux-MIPS <linux-mips@linux-mips.org> Cc: linux-usb@vger.kernel.org Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Patchwork: https://patchwork.linux-mips.org/patch/2709/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org> create mode 100644 drivers/usb/host/alchemy-common.c
This commit is contained in:
committed by
Ralf Baechle
parent
694b8c35e9
commit
ce6bc92285
@@ -47,7 +47,6 @@
|
||||
* We only have to save/restore registers that aren't otherwise
|
||||
* done as part of a driver pm_* function.
|
||||
*/
|
||||
static unsigned int sleep_usb[2];
|
||||
static unsigned int sleep_sys_clocks[5];
|
||||
static unsigned int sleep_sys_pinfunc;
|
||||
static unsigned int sleep_static_memctlr[4][3];
|
||||
@@ -55,31 +54,6 @@ static unsigned int sleep_static_memctlr[4][3];
|
||||
|
||||
static void save_core_regs(void)
|
||||
{
|
||||
#ifndef CONFIG_SOC_AU1200
|
||||
/* Shutdown USB host/device. */
|
||||
sleep_usb[0] = au_readl(USB_HOST_CONFIG);
|
||||
|
||||
/* There appears to be some undocumented reset register.... */
|
||||
au_writel(0, 0xb0100004);
|
||||
au_sync();
|
||||
au_writel(0, USB_HOST_CONFIG);
|
||||
au_sync();
|
||||
|
||||
sleep_usb[1] = au_readl(USBD_ENABLE);
|
||||
au_writel(0, USBD_ENABLE);
|
||||
au_sync();
|
||||
|
||||
#else /* AU1200 */
|
||||
|
||||
/* enable access to OTG mmio so we can save OTG CAP/MUX.
|
||||
* FIXME: write an OTG driver and move this stuff there!
|
||||
*/
|
||||
au_writel(au_readl(USB_MSR_BASE + 4) | (1 << 6), USB_MSR_BASE + 4);
|
||||
au_sync();
|
||||
sleep_usb[0] = au_readl(0xb4020020); /* OTG_CAP */
|
||||
sleep_usb[1] = au_readl(0xb4020024); /* OTG_MUX */
|
||||
#endif
|
||||
|
||||
/* Clocks and PLLs. */
|
||||
sleep_sys_clocks[0] = au_readl(SYS_FREQCTRL0);
|
||||
sleep_sys_clocks[1] = au_readl(SYS_FREQCTRL1);
|
||||
@@ -123,22 +97,6 @@ static void restore_core_regs(void)
|
||||
au_writel(sleep_sys_pinfunc, SYS_PINFUNC);
|
||||
au_sync();
|
||||
|
||||
#ifndef CONFIG_SOC_AU1200
|
||||
au_writel(sleep_usb[0], USB_HOST_CONFIG);
|
||||
au_writel(sleep_usb[1], USBD_ENABLE);
|
||||
au_sync();
|
||||
#else
|
||||
/* enable access to OTG memory */
|
||||
au_writel(au_readl(USB_MSR_BASE + 4) | (1 << 6), USB_MSR_BASE + 4);
|
||||
au_sync();
|
||||
|
||||
/* restore OTG caps and port mux. */
|
||||
au_writel(sleep_usb[0], 0xb4020020 + 0); /* OTG_CAP */
|
||||
au_sync();
|
||||
au_writel(sleep_usb[1], 0xb4020020 + 4); /* OTG_MUX */
|
||||
au_sync();
|
||||
#endif
|
||||
|
||||
/* Restore the static memory controller configuration. */
|
||||
au_writel(sleep_static_memctlr[0][0], MEM_STCFG0);
|
||||
au_writel(sleep_static_memctlr[0][1], MEM_STTIME0);
|
||||
|
Reference in New Issue
Block a user