@ -88,6 +88,8 @@ static int exynos_usb_parse_dt(const void *blob, struct exynos_ehci *exynos)
/* Setup the EHCI host controller. */
static void setup_usb_phy ( struct exynos_usb_phy * usb )
{
u32 hsic_ctrl ;
set_usbhost_mode ( USB20_PHY_CFG_HOST_LINK_EN ) ;
set_usbhost_phy_ctrl ( POWER_USB_HOST_PHY_CTRL_EN ) ;
@ -112,6 +114,32 @@ static void setup_usb_phy(struct exynos_usb_phy *usb)
clrbits_le32 ( & usb - > usbphyctrl0 ,
HOST_CTRL0_LINKSWRST |
HOST_CTRL0_UTMISWRST ) ;
/* HSIC Phy Setting */
hsic_ctrl = ( HSIC_CTRL_FORCESUSPEND |
HSIC_CTRL_FORCESLEEP |
HSIC_CTRL_SIDDQ ) ;
clrbits_le32 ( & usb - > hsicphyctrl1 , hsic_ctrl ) ;
clrbits_le32 ( & usb - > hsicphyctrl2 , hsic_ctrl ) ;
hsic_ctrl = ( ( ( HSIC_CTRL_REFCLKDIV_12 & HSIC_CTRL_REFCLKDIV_MASK )
< < HSIC_CTRL_REFCLKDIV_SHIFT )
| ( ( HSIC_CTRL_REFCLKSEL & HSIC_CTRL_REFCLKSEL_MASK )
< < HSIC_CTRL_REFCLKSEL_SHIFT )
| HSIC_CTRL_UTMISWRST ) ;
setbits_le32 ( & usb - > hsicphyctrl1 , hsic_ctrl ) ;
setbits_le32 ( & usb - > hsicphyctrl2 , hsic_ctrl ) ;
udelay ( 10 ) ;
clrbits_le32 ( & usb - > hsicphyctrl1 , HSIC_CTRL_PHYSWRST |
HSIC_CTRL_UTMISWRST ) ;
clrbits_le32 ( & usb - > hsicphyctrl2 , HSIC_CTRL_PHYSWRST |
HSIC_CTRL_UTMISWRST ) ;
udelay ( 20 ) ;
/* EHCI Ctrl setting */
@ -125,6 +153,8 @@ static void setup_usb_phy(struct exynos_usb_phy *usb)
/* Reset the EHCI host controller. */
static void reset_usb_phy ( struct exynos_usb_phy * usb )
{
u32 hsic_ctrl ;
/* HOST_PHY reset */
setbits_le32 ( & usb - > usbphyctrl0 ,
HOST_CTRL0_PHYSWRST |
@ -133,6 +163,15 @@ static void reset_usb_phy(struct exynos_usb_phy *usb)
HOST_CTRL0_FORCESUSPEND |
HOST_CTRL0_FORCESLEEP ) ;
/* HSIC Phy reset */
hsic_ctrl = ( HSIC_CTRL_FORCESUSPEND |
HSIC_CTRL_FORCESLEEP |
HSIC_CTRL_SIDDQ |
HSIC_CTRL_PHYSWRST ) ;
setbits_le32 ( & usb - > hsicphyctrl1 , hsic_ctrl ) ;
setbits_le32 ( & usb - > hsicphyctrl2 , hsic_ctrl ) ;
set_usbhost_phy_ctrl ( POWER_USB_HOST_PHY_CTRL_DISABLE ) ;
}