PERFORCE change 131685 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Dec 26 03:17:19 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=131685
Change 131685 by hselasky at hselasky_laptop001 on 2007/12/26 11:17:04
Add proper shutdown method to the AT91 UDP.
Affected files ...
.. //depot/projects/usb/src/sys/arm/at91/at91_udp.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb/at9100_dci.c#6 edit
Differences ...
==== //depot/projects/usb/src/sys/arm/at91/at91_udp.c#3 (text+ko) ====
@@ -60,6 +60,7 @@
static device_probe_t at91_udp_probe;
static device_attach_t at91_udp_attach;
static device_detach_t at91_udp_detach;
+static device_shutdown_t at91_udp_shutdown;
struct at91_udp_softc {
struct at9100_dci_softc sc_dci; /* must be first */
@@ -236,7 +237,6 @@
sc->sc_vbus_intr_hdl = NULL;
goto error;
}
-
err = at9100_dci_init(&(sc->sc_dci));
if (!err) {
err = device_probe_and_attach(sc->sc_dci.sc_bus.bdev);
@@ -321,12 +321,27 @@
return (0);
}
+static int
+at91_udp_shutdown(device_t dev)
+{
+ struct at91_udp_softc *sc = device_get_softc(dev);
+ int err;
+
+ err = bus_generic_shutdown(dev);
+ if (err)
+ return (err);
+
+ at9100_dci_uninit(&(sc->sc_dci));
+
+ return (0);
+}
+
static device_method_t at91_udp_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, at91_udp_probe),
DEVMETHOD(device_attach, at91_udp_attach),
DEVMETHOD(device_detach, at91_udp_detach),
- DEVMETHOD(device_shutdown, bus_generic_shutdown),
+ DEVMETHOD(device_shutdown, at91_udp_shutdown),
/* Bus interface */
DEVMETHOD(bus_print_child, bus_generic_print_child),
==== //depot/projects/usb/src/sys/dev/usb/at9100_dci.c#6 (text+ko) ====
@@ -1418,9 +1418,6 @@
/* wait a little for things to stabilise */
DELAY(1000);
- /* enable Transceiver */
- AT91_UDP_WRITE_4(sc, AT91_UDP_TXVC, 0);
-
/* disable and clear all interrupts */
AT91_UDP_WRITE_4(sc, AT91_UDP_IDR, 0xFFFFFFFF);
AT91_UDP_WRITE_4(sc, AT91_UDP_ICR, 0xFFFFFFFF);
@@ -1460,6 +1457,23 @@
void
at9100_dci_uninit(struct at9100_dci_softc *sc)
{
+ mtx_lock(&(sc->sc_bus.mtx));
+
+ /* disable and clear all interrupts */
+ AT91_UDP_WRITE_4(sc, AT91_UDP_IDR, 0xFFFFFFFF);
+ AT91_UDP_WRITE_4(sc, AT91_UDP_ICR, 0xFFFFFFFF);
+
+ sc->sc_flags.port_powered = 0;
+ sc->sc_flags.status_vbus = 0;
+ sc->sc_flags.status_bus_reset = 0;
+ sc->sc_flags.status_suspend = 0;
+ sc->sc_flags.change_suspend = 0;
+ sc->sc_flags.change_connect = 1;
+
+ at9100_dci_pull_down(sc);
+ at9100_dci_clocks_off(sc);
+ mtx_unlock(&(sc->sc_bus.mtx));
+
return;
}
More information about the p4-projects
mailing list