summaryrefslogtreecommitdiffstats
path: root/sys/arm/samsung/exynos/exynos5_ehci.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arm/samsung/exynos/exynos5_ehci.c')
-rw-r--r--sys/arm/samsung/exynos/exynos5_ehci.c42
1 files changed, 15 insertions, 27 deletions
diff --git a/sys/arm/samsung/exynos/exynos5_ehci.c b/sys/arm/samsung/exynos/exynos5_ehci.c
index 84e4c5f..2f61824 100644
--- a/sys/arm/samsung/exynos/exynos5_ehci.c
+++ b/sys/arm/samsung/exynos/exynos5_ehci.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2013 Ruslan Bukin <br@bsdpad.com>
+ * Copyright (c) 2013-2014 Ruslan Bukin <br@bsdpad.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -55,6 +55,9 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <machine/resource.h>
+#include <arm/samsung/exynos/exynos5_common.h>
+#include <arm/samsung/exynos/exynos5_pmu.h>
+
#include "gpio_if.h"
#include "opt_platform.h"
@@ -64,11 +67,6 @@ __FBSDID("$FreeBSD$");
#define GPIO_INPUT 0
#define PIN_USB 161
-/* PWR control */
-#define EXYNOS5_PWR_USBHOST_PHY 0x708
-#define PHY_POWER_ON 1
-#define PHY_POWER_OFF 0
-
/* SYSREG */
#define EXYNOS5_SYSREG_USB2_PHY 0x0
#define USB2_MODE_HOST 0x1
@@ -91,12 +89,10 @@ static int exynos_ehci_probe(device_t dev);
struct exynos_ehci_softc {
device_t dev;
ehci_softc_t base;
- struct resource *res[5];
+ struct resource *res[4];
bus_space_tag_t host_bst;
- bus_space_tag_t pwr_bst;
bus_space_tag_t sysreg_bst;
bus_space_handle_t host_bsh;
- bus_space_handle_t pwr_bsh;
bus_space_handle_t sysreg_bsh;
};
@@ -105,7 +101,6 @@ static struct resource_spec exynos_ehci_spec[] = {
{ SYS_RES_MEMORY, 0, RF_ACTIVE },
{ SYS_RES_MEMORY, 1, RF_ACTIVE },
{ SYS_RES_MEMORY, 2, RF_ACTIVE },
- { SYS_RES_MEMORY, 3, RF_ACTIVE },
{ SYS_RES_IRQ, 0, RF_ACTIVE },
{ -1, 0 }
};
@@ -185,10 +180,8 @@ reset_hsic_hub(struct exynos_ehci_softc *esc, phandle_t hub)
device_t gpio_dev;
pcell_t pin;
- /* TODO(imax): check that hub is compatible with "smsc,usb3503" */
+ /* TODO: check that hub is compatible with "smsc,usb3503" */
if (!OF_hasprop(hub, "freebsd,reset-gpio")) {
- device_printf(esc->dev,
- "cannot detect reset GPIO pin for HSIC hub\n");
return (1);
}
@@ -201,7 +194,7 @@ reset_hsic_hub(struct exynos_ehci_softc *esc, phandle_t hub)
/* Get the GPIO device, we need this to give power to USB */
gpio_dev = devclass_get_device(devclass_find("gpio"), 0);
if (gpio_dev == NULL) {
- device_printf(esc->dev, "cant find gpio_dev\n");
+ device_printf(esc->dev, "Cant find gpio device\n");
return (1);
}
@@ -225,8 +218,7 @@ phy_init(struct exynos_ehci_softc *esc)
EXYNOS5_SYSREG_USB2_PHY, USB2_MODE_HOST);
/* Power ON phy */
- bus_space_write_4(esc->pwr_bst, esc->pwr_bsh,
- EXYNOS5_PWR_USBHOST_PHY, PHY_POWER_ON);
+ usb2_phy_power_on();
reg = bus_space_read_4(esc->host_bst, esc->host_bsh, 0x0);
reg &= ~(HOST_CTRL_CLK_MASK |
@@ -284,13 +276,9 @@ exynos_ehci_attach(device_t dev)
esc->host_bst = rman_get_bustag(esc->res[1]);
esc->host_bsh = rman_get_bushandle(esc->res[1]);
- /* PWR registers */
- esc->pwr_bst = rman_get_bustag(esc->res[2]);
- esc->pwr_bsh = rman_get_bushandle(esc->res[2]);
-
/* SYSREG */
- esc->sysreg_bst = rman_get_bustag(esc->res[3]);
- esc->sysreg_bsh = rman_get_bushandle(esc->res[3]);
+ esc->sysreg_bst = rman_get_bustag(esc->res[2]);
+ esc->sysreg_bsh = rman_get_bushandle(esc->res[2]);
/* get all DMA memory */
if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(dev),
@@ -309,7 +297,7 @@ exynos_ehci_attach(device_t dev)
phy_init(esc);
/* Setup interrupt handler */
- err = bus_setup_intr(dev, esc->res[4], INTR_TYPE_BIO | INTR_MPSAFE,
+ err = bus_setup_intr(dev, esc->res[3], INTR_TYPE_BIO | INTR_MPSAFE,
NULL, (driver_intr_t *)ehci_interrupt, sc,
&sc->sc_intr_hdl);
if (err) {
@@ -322,7 +310,7 @@ exynos_ehci_attach(device_t dev)
sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);
if (!sc->sc_bus.bdev) {
device_printf(dev, "Could not add USB device\n");
- err = bus_teardown_intr(dev, esc->res[4],
+ err = bus_teardown_intr(dev, esc->res[3],
sc->sc_intr_hdl);
if (err)
device_printf(dev, "Could not tear down irq,"
@@ -343,7 +331,7 @@ exynos_ehci_attach(device_t dev)
device_delete_child(dev, sc->sc_bus.bdev);
sc->sc_bus.bdev = NULL;
- err = bus_teardown_intr(dev, esc->res[4],
+ err = bus_teardown_intr(dev, esc->res[3],
sc->sc_intr_hdl);
if (err)
device_printf(dev, "Could not tear down irq,"
@@ -382,8 +370,8 @@ exynos_ehci_detach(device_t dev)
bus_space_write_4(sc->sc_io_tag, sc->sc_io_hdl,
EHCI_USBINTR, 0);
- if (esc->res[4] && sc->sc_intr_hdl) {
- err = bus_teardown_intr(dev, esc->res[4],
+ if (esc->res[3] && sc->sc_intr_hdl) {
+ err = bus_teardown_intr(dev, esc->res[3],
sc->sc_intr_hdl);
if (err) {
device_printf(dev, "Could not tear down irq,"
OpenPOWER on IntegriCloud