Module Name: src Committed By: reinoud Date: Wed Sep 24 20:51:43 UTC 2014
Modified Files: src/sys/arch/arm/samsung: exynos_usb.c Log Message: Power up both vbus and overcurrent lines for USB To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/samsung/exynos_usb.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/samsung/exynos_usb.c diff -u src/sys/arch/arm/samsung/exynos_usb.c:1.10 src/sys/arch/arm/samsung/exynos_usb.c:1.11 --- src/sys/arch/arm/samsung/exynos_usb.c:1.10 Sun Sep 21 15:22:40 2014 +++ src/sys/arch/arm/samsung/exynos_usb.c Wed Sep 24 20:51:43 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: exynos_usb.c,v 1.10 2014/09/21 15:22:40 reinoud Exp $ */ +/* $NetBSD: exynos_usb.c,v 1.11 2014/09/24 20:51:43 reinoud Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: exynos_usb.c,v 1.10 2014/09/21 15:22:40 reinoud Exp $"); +__KERNEL_RCSID(1, "$NetBSD: exynos_usb.c,v 1.11 2014/09/24 20:51:43 reinoud Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -108,6 +108,16 @@ static struct exynos_gpio_pinset e5_uhos .pinset_func = 0, .pinset_mask = __BIT(5) | __BIT(6), }; +static struct exynos_gpio_pinset e5_usb3_bus0_pinset = { + .pinset_group = "GPK3", + .pinset_func = 2, + .pinset_mask = __BIT(0) | __BIT(1) | __BIT(3), +}; +static struct exynos_gpio_pinset e5_usb3_bus1_pinset = { + .pinset_group = "GPK2", + .pinset_func = 2, + .pinset_mask = __BIT(4) | __BIT(5) | __BIT(7), +}; #endif @@ -203,20 +213,52 @@ exynos_usb_attach(device_t parent, devic exynos_gpio_pinset_acquire(&e4_uhost_pwr_pinset); exynos_gpio_pinset_to_pindata(&e4_uhost_pwr_pinset, 6, &XuhostPWREN); exynos_gpio_pinset_to_pindata(&e4_uhost_pwr_pinset, 7, &XuhostOVERCUR); + + /* enable power and set Xuhost OVERCUR to inactive by pulling it up */ + exynos_gpio_pindata_ctl(&XuhostPWREN, GPIO_PIN_PULLUP); + exynos_gpio_pindata_ctl(&XuhostOVERCUR, GPIO_PIN_PULLUP); + DELAY(80000); } #endif #ifdef EXYNOS5 - if (IS_EXYNOS5_P()) { + if (IS_EXYNOS5410_P()) { + struct exynos_gpio_pindata Xovercur2, Xovercur3; + struct exynos_gpio_pindata Xvbus; + + /* BUS 0 */ + exynos_gpio_pinset_acquire(&e5_usb3_bus0_pinset); + exynos_gpio_pinset_to_pindata(&e5_usb3_bus0_pinset, 0, &Xovercur2); + exynos_gpio_pinset_to_pindata(&e5_usb3_bus0_pinset, 1, &Xovercur3); + exynos_gpio_pinset_to_pindata(&e5_usb3_bus0_pinset, 3, &Xvbus); + + /* enable power and set overcur inactive by pulling them up */ + exynos_gpio_pindata_ctl(&Xvbus, GPIO_PIN_PULLUP); + exynos_gpio_pindata_ctl(&Xovercur2, GPIO_PIN_PULLUP); + exynos_gpio_pindata_ctl(&Xovercur3, GPIO_PIN_PULLUP); + + /* BUS 1 */ + exynos_gpio_pinset_acquire(&e5_usb3_bus1_pinset); + exynos_gpio_pinset_to_pindata(&e5_usb3_bus1_pinset, 4, &Xovercur2); + exynos_gpio_pinset_to_pindata(&e5_usb3_bus1_pinset, 5, &Xovercur3); + exynos_gpio_pinset_to_pindata(&e5_usb3_bus1_pinset, 7, &Xvbus); + + /* enable power and set overcur inactive by pulling them up */ + exynos_gpio_pindata_ctl(&Xvbus, GPIO_PIN_PULLUP); + exynos_gpio_pindata_ctl(&Xovercur2, GPIO_PIN_PULLUP); + exynos_gpio_pindata_ctl(&Xovercur3, GPIO_PIN_PULLUP); + + /* enable power to the hub */ exynos_gpio_pinset_acquire(&e5_uhost_pwr_pinset); exynos_gpio_pinset_to_pindata(&e5_uhost_pwr_pinset, 5, &XuhostPWREN); exynos_gpio_pinset_to_pindata(&e5_uhost_pwr_pinset, 6, &XuhostOVERCUR); + + /* enable power and set Xuhost OVERCUR to inactive by pulling it up */ + exynos_gpio_pindata_ctl(&XuhostPWREN, GPIO_PIN_PULLUP); + exynos_gpio_pindata_ctl(&XuhostOVERCUR, GPIO_PIN_PULLUP); + DELAY(80000); } #endif - /* enable power and set Xuhost OVERCUR to inactive by pulling it up */ - exynos_gpio_pindata_ctl(&XuhostPWREN, GPIO_PIN_PULLUP); - exynos_gpio_pindata_ctl(&XuhostOVERCUR, GPIO_PIN_PULLUP); - DELAY(80000); /* init USB phys */ exynos_usb_phy_init(sc);