Date: Sat, 25 Jul 2009 10:25:28 GMT From: Sylvestre Gallon <syl@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 166540 for review Message-ID: <200907251025.n6PAPSSl079587@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166540 Change 166540 by syl@syl_atuin on 2009/07/25 10:25:07 Implements dci_clock_on. Implements dci_clock_off. Implements dci_pull_up. Implements dci_pull_down. Implements dci_wakeup_peer. Affected files ... .. //depot/projects/soc2009/syl_usb/src/sys/dev/usb/controller/s3c24xxdci.c#14 edit .. //depot/projects/soc2009/syl_usb/src/sys/dev/usb/controller/s3c24xxdci.h#10 edit Differences ... ==== //depot/projects/soc2009/syl_usb/src/sys/dev/usb/controller/s3c24xxdci.c#14 (text+ko) ==== @@ -151,31 +151,68 @@ static void s3c24dci_clocks_on(struct s3c24dci_softc *sc) { + if (sc->sc_flags.clocks_off && + sc->sc_flags.port_powered) { + DPRINTFN(5, "\n"); + + if (sc->sc_clocks_on) { + (sc->sc_clocks_on) (sc->sc_clocks_arg); + } + sc->sc_flags.clocks_off = 0; + } } static void s3c24dci_clocks_off(struct s3c24dci_softc *sc) { + if (!sc->sc_flags.clocks_off) { + DPRINTFN(5, "\n"); + + if (sc->sc_clocks_off) { + (sc->sc_clocks_off) (sc->sc_clocks_arg); + } + sc->sc_flags.clocks_off = 1; + } } static void s3c24dci_pull_up(struct s3c24dci_softc *sc) { + /* pullup D+, if possible */ + if (!sc->sc_flags.d_pulled_up && + sc->sc_flags.port_powered) { + sc->sc_flags.d_pulled_up = 1; + (sc->sc_pull_up) (sc->sc_pull_arg); + } } static void s3c24dci_pull_down(struct s3c24dci_softc *sc) { + /* pulldown D+, if possible */ + if (sc->sc_flags.d_pulled_up) { + sc->sc_flags.d_pulled_up = 0; + (sc->sc_pull_down) (sc->sc_pull_arg); + } } static void s3c24dci_wakeup_peer(struct s3c24dci_softc *sc) { + if (!(sc->sc_flags.status_suspend)) { + return; + } + S3C24XX_DCI_WRITE_4(sc, S3C24_DCI_PWR, S3C24_DCI_MCU_RESUME); + /* wait 8 milliseconds */ + /* Wait for reset to complete. */ + usb_pause_mtx(&sc->sc_bus.bus_mtx, hz / 125); + + S3C24XX_DCI_WRITE_4(sc, S3C24_DCI_FUNC_ADDR, 0); } ==== //depot/projects/soc2009/syl_usb/src/sys/dev/usb/controller/s3c24xxdci.h#10 (text+ko) ==== @@ -245,6 +245,14 @@ bus_space_tag_t sc_io_tag; bus_space_handle_t sc_io_hdl; + void (*sc_clocks_on) (void *arg); + void (*sc_clocks_off) (void *arg); + void *sc_clocks_arg; + + void (*sc_pull_up) (void *arg); + void (*sc_pull_down) (void *arg); + void *sc_pull_arg; + uint8_t sc_rt_addr; /* root HUB address */ uint8_t sc_dv_addr; /* device address */ uint8_t sc_conf; /* root HUB config */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907251025.n6PAPSSl079587>