summaryrefslogtreecommitdiff
path: root/src/lpc/ao_usb_lpc.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-06-17 14:00:11 -0700
committerKeith Packard <keithp@keithp.com>2013-06-17 14:00:11 -0700
commit298e54856b5f8809b43f24407caa4a6be60822f3 (patch)
tree670b834a18ff24f4d35d2c0d171dc9324d52a886 /src/lpc/ao_usb_lpc.c
parentb3ad488477def157e277e239e81f164b49725925 (diff)
altos/lpc: Get the IRC turned off after boot time
This involved carefully moving the USB away from the IRC before turning it off. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lpc/ao_usb_lpc.c')
-rw-r--r--src/lpc/ao_usb_lpc.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lpc/ao_usb_lpc.c b/src/lpc/ao_usb_lpc.c
index aac0df04..e574f1e2 100644
--- a/src/lpc/ao_usb_lpc.c
+++ b/src/lpc/ao_usb_lpc.c
@@ -834,8 +834,9 @@ ao_usb_disable(void)
/* Turn off USB clock */
lpc_scb.usbclkdiv = 0;
- /* Disable USB PHY */
- lpc_scb.pdruncfg |= (1 << LPC_SCB_PDRUNCFG_USBPAD_PD);
+ /* Disable USB PHY and PLL */
+ lpc_scb.pdruncfg |= ((1 << LPC_SCB_PDRUNCFG_USBPAD_PD) |
+ (1 << LPC_SCB_PDRUNCFG_USBPLL_PD));
/* Disable USB registers and RAM */
lpc_scb.sysahbclkctrl &= ~((1 << LPC_SCB_SYSAHBCLKCTRL_USB) |
@@ -877,7 +878,6 @@ ao_usb_enable(void)
lpc_scb.pdruncfg &= ~(1 << LPC_SCB_PDRUNCFG_USBPLL_PD);
lpc_scb.usbpllclksel = (LPC_SCB_SYSPLLCLKSEL_SEL_SYSOSC << LPC_SCB_SYSPLLCLKSEL_SEL);
- lpc_scb.usbpllclkuen = (1 << LPC_SCB_USBPLLCLKUEN_ENA);
lpc_scb.usbpllclkuen = (0 << LPC_SCB_USBPLLCLKUEN_ENA);
lpc_scb.usbpllclkuen = (1 << LPC_SCB_USBPLLCLKUEN_ENA);
while (!(lpc_scb.usbpllclkuen & (1 << LPC_SCB_USBPLLCLKUEN_ENA)))
@@ -887,6 +887,10 @@ ao_usb_enable(void)
;
lpc_scb.usbclksel = 0;
+ lpc_scb.usbclkuen = (0 << LPC_SCB_USBCLKUEN_ENA);
+ lpc_scb.usbclkuen = (1 << LPC_SCB_USBCLKUEN_ENA);
+ while (!(lpc_scb.usbclkuen & (1 << LPC_SCB_USBCLKUEN_ENA)))
+ ;
/* Turn on USB clock, use 48MHz clock unchanged */
lpc_scb.usbclkdiv = 1;