From owner-p4-projects@FreeBSD.ORG Sat Jul 25 10:25:29 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5D91D1065672; Sat, 25 Jul 2009 10:25:29 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1DCDD106566C for ; Sat, 25 Jul 2009 10:25:29 +0000 (UTC) (envelope-from syl@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E664A8FC25 for ; Sat, 25 Jul 2009 10:25:28 +0000 (UTC) (envelope-from syl@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6PAPSc0079589 for ; Sat, 25 Jul 2009 10:25:28 GMT (envelope-from syl@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6PAPSSl079587 for perforce@freebsd.org; Sat, 25 Jul 2009 10:25:28 GMT (envelope-from syl@FreeBSD.org) Date: Sat, 25 Jul 2009 10:25:28 GMT Message-Id: <200907251025.n6PAPSSl079587@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to syl@FreeBSD.org using -f From: Sylvestre Gallon To: Perforce Change Reviews Cc: Subject: PERFORCE change 166540 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Jul 2009 10:25:30 -0000 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 */