Date: Wed, 06 Jun 2007 19:00:42 +0100 From: Rui Paulo <rpaulo@fnop.net> To: Joe Marcus Clarke <marcus@FreeBSD.org> Cc: Rui Paulo <rpaulo@fnop.net>, current@FreeBSD.org Subject: Re: MacBook patches Message-ID: <86bqftgdyt.wl%rpaulo@fnop.net> In-Reply-To: <86ejkpge09.wl%rpaulo@fnop.net> References: <86k5vffjz8.wl%rpaulo@fnop.net> <86ejkx56y6.wl%rpaulo@fnop.net> <465EF64B.9000505@FreeBSD.org> <86fy5drlro.wl%rpaulo@fnop.net> <465EFCDF.5010903@FreeBSD.org> <86ira6saqv.wl%rpaulo@fnop.net> <466469E4.2070106@FreeBSD.org> <86ejkpge09.wl%rpaulo@fnop.net>
next in thread | previous in thread | raw e-mail | index | archive | help
--Multipart_Wed_Jun__6_19:00:42_2007-1
Content-Type: text/plain; charset=US-ASCII
At Wed, 06 Jun 2007 18:59:50 +0100,
Rui Paulo wrote:
>
> [1 <text/plain; US-ASCII (7bit)>]
> At Mon, 04 Jun 2007 15:37:08 -0400,
> Joe Marcus Clarke wrote:
> >
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > Rui Paulo wrote:
> > > At Thu, 31 May 2007 12:50:39 -0400,
> > > Joe Marcus Clarke wrote:
> > >>> I can try to make this work for you if you are willing to test :-)
> > >> Sure.
> > >
> > > Grab my p4 branch and then apply the attached patch.
> >
> > This doesn't seem to do anything different that the previous version:
>
> Can you try the attached version?
> Thanks.
Oops, blank file. Sorry.
--
Rui Paulo
--Multipart_Wed_Jun__6_19:00:42_2007-1
Content-Type: application/octet-stream; type=patch
Content-Disposition: attachment; filename="backlight.diff"
Content-Transfer-Encoding: 7bit
==== //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlight.c#5 - /home/rpaulo/p4/rpaulo-macbook/dev/backlight/backlight.c ====
--- /tmp/tmp.90382.50 Wed Jun 6 19:00:01 2007
+++ /home/rpaulo/p4/rpaulo-macbook/dev/backlight/backlight.c Wed Jun 6 18:55:41 2007
@@ -65,8 +65,15 @@ static int backlight_detach(device_t);
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 },
@@ -75,6 +82,26 @@ struct backlight_model backlight_models[
"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 }
};
@@ -348,6 +375,125 @@ macbook_level(SYSCTL_HANDLER_ARGS)
curlevel = (level * (BACKLIGHT_MB_MAX - BACKLIGHT_MB_MIN)
/ 100) + BACKLIGHT_MB_MIN;
macbook_set_current(sc, curlevel);
+
+ *(unsigned int *)oidp->oid_arg1 = level;
+ sc->sc_level = curlevel;
+
+ }
+
+ 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;
+ uint32_t state;
+
+ 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;
+
+
+ bus_write_4(sc->sc_res, 0x4dc, 5);
+ state = bus_read_4(sc->sc_res, 0x7ae4);
+ bus_write_4(sc->sc_res, 0x7ae4, state);
+
+ device_printf(dev, "%d\n", macbookpro_get_current(sc));
+
+ 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;
+
+ 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;
==== //depot/projects/soc2007/rpaulo-macbook/dev/backlight/backlightvar.h#2 - /home/rpaulo/p4/rpaulo-macbook/dev/backlight/backlightvar.h ====
--- /tmp/tmp.90382.109 Wed Jun 6 19:00:01 2007
+++ /home/rpaulo/p4/rpaulo-macbook/dev/backlight/backlightvar.h Sat Jun 2 15:30:59 2007
@@ -65,3 +65,12 @@ struct backlight_model {
#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
--Multipart_Wed_Jun__6_19:00:42_2007-1--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86bqftgdyt.wl%rpaulo>
