From owner-p4-projects@FreeBSD.ORG Thu Aug 16 17:46:25 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 142EA16A46C; Thu, 16 Aug 2007 17:46:25 +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 BF42D16A469 for ; Thu, 16 Aug 2007 17:46:24 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id AE59813C428 for ; Thu, 16 Aug 2007 17:46:24 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l7GHkOAJ001342 for ; Thu, 16 Aug 2007 17:46:24 GMT (envelope-from rpaulo@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l7GHkOej001339 for perforce@freebsd.org; Thu, 16 Aug 2007 17:46:24 GMT (envelope-from rpaulo@FreeBSD.org) Date: Thu, 16 Aug 2007 17:46:24 GMT Message-Id: <200708161746.l7GHkOej001339@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to rpaulo@FreeBSD.org using -f From: Rui Paulo To: Perforce Change Reviews Cc: Subject: PERFORCE change 125225 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: Thu, 16 Aug 2007 17:46:25 -0000 http://perforce.freebsd.org/chv.cgi?CH=125225 Change 125225 by rpaulo@rpaulo_alpha on 2007/08/16 17:46:20 Add MacBook Pro support. Doesn't work yet. Affected files ... .. //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlight.c#12 edit .. //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlightvar.h#4 edit Differences ... ==== //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlight.c#12 (text+ko) ==== @@ -23,7 +23,7 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlight.c#11 $ + * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlight.c#12 $ * */ @@ -64,8 +64,14 @@ static int macbook_attach(device_t); static int macbook_enable(SYSCTL_HANDLER_ARGS); static int macbook_level(SYSCTL_HANDLER_ARGS); +static int macbookpro_attach(device_t); +static int macbookpro_enable(SYSCTL_HANDLER_ARGS); +static int macbookpro_level(SYSCTL_HANDLER_ARGS); struct backlight_model backlight_models[] = { + /* + * MacBook. + */ { "MacBook1,1", 0x8086, 0x27a2, "MacBook Core Duo Backlight Control", macbook_attach, macbook_enable, macbook_level }, @@ -74,6 +80,25 @@ "MacBook Core 2 Duo Backlight Control", macbook_attach, macbook_enable, macbook_level }, + /* + * MacBook Pro. + */ + { "MacBookPro1,1", 0x1002, 0x71c5, + "MacBook Pro Core Duo (15-inch) Backlight Control", + macbookpro_attach, macbookpro_enable, macbookpro_level }, + + { "MacBookPro1,2", 0x1002, 0x71c5, + "MacBook Pro Core Duo (17-inch) Backlight Control", + macbookpro_attach, macbookpro_enable, macbookpro_level }, + + { "MacBookPro2,1", 0x1002, 0x71c5, + "MacBook Pro Core 2 Duo (17-inch) Backlight Control", + macbookpro_attach, macbookpro_enable, macbookpro_level }, + + { "MacBookPro2,2", 0x1002, 0x71c5, + "MacBook Pro Core 2 Duo (15-inch) Backlight Control", + macbookpro_attach, macbookpro_enable, macbookpro_level }, + { NULL, 0, 0 } }; @@ -339,3 +364,110 @@ return (error); } + +/* + * Apple's MacBook Pro specific functions. + */ +static uint32_t +macbookpro_get_current(struct backlight_softc *sc) +{ + uint32_t level; + + level = bus_read_4(sc->sc_res, BACKLIGHT_MBP_OFFSET); + level = level >> BACKLIGHT_MBP_CUR_SHIFT; + + return (level); +} + +static void +macbookpro_set_current(struct backlight_softc *sc, uint32_t value) +{ + uint32_t newlevel; + + newlevel = 0x00000001 | (value << BACKLIGHT_MBP_CUR_SHIFT); + + bus_write_4(sc->sc_res, BACKLIGHT_MBP_OFFSET, newlevel); + + return; +} + +static int +macbookpro_attach(device_t dev) +{ + struct backlight_softc *sc = device_get_softc(dev); + int rid; + + rid = PCIR_BAR(0); + sc->sc_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + + if (sc->sc_res == NULL) + return (ENOMEM); + + sc->sc_enable = macbookpro_get_current(sc) >= BACKLIGHT_MBP_MIN ? + 1 : 0; + sc->sc_level = macbookpro_get_current(sc); + + return (0); +} + +static int +macbookpro_enable(SYSCTL_HANDLER_ARGS) +{ + struct backlight_softc *sc = (struct backlight_softc *) arg1; + int error; + unsigned int enable; + + enable = macbookpro_get_current(sc) >= BACKLIGHT_MBP_MIN ? 1 : 0; + + error = sysctl_handle_int(oidp, &enable, 0, req); + if (error == 0 && req->newptr != NULL) { + enable = *(unsigned int *)req->newptr; + + switch (enable) { + case 0: + macbookpro_set_current(sc, 0); + break; + case 1: + macbookpro_set_current(sc, sc->sc_level); + break; + default: + return EINVAL; + } + *(unsigned int *)oidp->oid_arg1 = enable; + } + + return (error); +} + +static int +macbookpro_level(SYSCTL_HANDLER_ARGS) +{ + struct backlight_softc *sc = (struct backlight_softc *) arg1; + int error; + uint32_t curlevel; + unsigned int level; + + curlevel = macbookpro_get_current(sc); + + level = (curlevel - BACKLIGHT_MBP_MIN) * 100 / + (BACKLIGHT_MBP_MAX - BACKLIGHT_MBP_MIN); + + error = sysctl_handle_int(oidp, &level, 0, req); + + if (error == 0 && req->newptr != NULL) { + level = *(unsigned int *)req->newptr; + + if (level > 100) + return (EINVAL); + + curlevel = (level * (BACKLIGHT_MBP_MAX - BACKLIGHT_MBP_MIN) + / 100) + BACKLIGHT_MBP_MIN; + macbookpro_set_current(sc, curlevel); + + *(unsigned int *)oidp->oid_arg1 = level; + sc->sc_level = curlevel; + } + + return (error); +} ==== //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlightvar.h#4 (text+ko) ==== @@ -23,7 +23,7 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlightvar.h#3 $ + * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlightvar.h#4 $ * */ @@ -62,3 +62,11 @@ #define BACKLIGHT_MB_MAX 0x94 #define BACKLIGHT_MB_OFF 0x12 #define BACKLIGHT_MB_ON 0x1f + +/* + * MacBook Pro specific. + */ +#define BACKLIGHT_MBP_OFFSET 0x7af8 /* register offset */ +#define BACKLIGHT_MBP_CUR_SHIFT 0x08 +#define BACKLIGHT_MBP_MIN 0x00 +#define BACKLIGHT_MBP_MAX 0xff