void init_hwinfo() { /* start the on-chip PHY and its PLL */ phy_on(AM335X_USBCTRL0); usb_delay(5); phy_on(AM335X_USBCTRL1); usb_delay(5); /* Force enable of CLKDCOLDO clock */ out32(AM335X_CM_CLKDCOLDO_DPLL_PER, DPLL_CLKDCOLDO_GATE_CTRL); }
static void as3525v2_disconnect(void) { /* Disable clock */ CGU_USB = 0; usb_delay(); bitclr32(&CGU_PERI, CGU_USB_CLOCK_ENABLE); }
static void as3525v2_disconnect(void) { /* Disconnect */ DCTL |= DCTL_sftdiscon; sleep(HZ/20); /* Disable clock */ CGU_USB = 0; usb_delay(); bitclr32(&CGU_PERI, CGU_USB_CLOCK_ENABLE); }
static void as3525v2_connect(void) { logf("usb-drv: init as3525v2"); /* 1) enable usb core clock */ bitset32(&CGU_PERI, CGU_USB_CLOCK_ENABLE); usb_delay(); /* 2) enable usb phy clock */ CCU_USB = (CCU_USB & ~(3<<24)) | (1 << 24); /* ?? */ /* PHY clock */ CGU_USB = 1<<5 /* enable */ | 0 << 2 | 0; /* source = ? (24MHz crystal?) */ usb_delay(); /* 3) clear "stop pclk" */ PCGCCTL &= ~0x1; usb_delay(); /* 4) clear "power clamp" */ PCGCCTL &= ~0x4; usb_delay(); /* 5) clear "reset power down module" */ PCGCCTL &= ~0x8; usb_delay(); /* 6) set "power on program done" */ DCTL |= DCTL_pwronprgdone; usb_delay(); /* 7) core soft reset */ GRSTCTL |= GRSTCTL_csftrst; usb_delay(); /* 8) hclk soft reset */ GRSTCTL |= GRSTCTL_hsftrst; usb_delay(); /* 9) flush and reset everything */ GRSTCTL |= 0x3f; usb_delay(); /* 10) force device mode*/ GUSBCFG &= ~GUSBCFG_force_host_mode; GUSBCFG |= GUSBCFG_force_device_mode; usb_delay(); /* 11) Do something that is probably CCU related but undocumented*/ CCU_USB |= 0x1000; CCU_USB &= ~0x300000; usb_delay(); /* 12) reset usb core parameters (dev addr, speed, ...) */ DCFG = 0; usb_delay(); }