Basic backlight support for MacBook Pro
I made some modifications to the original bl1.c program from Nicolas Boichat. In summary, this modifications allow:
Specify an absolute brightness value
Let x be the absolute brightness value, such that 0<x<16, that is, the value must between 1 and 15, where 1 is the minimum brightness level before turning off the screen, and 15 is the maximum brightness supported by the LCD screen.
For example:
./bl1 15
./bl1 1
Specify an increment or decrement (delta)
Let d be the delta, and x the current brightness value, then the new brightness value y is y=x+d, and 0<y<16.
y = min(max(1, x + d), 15)
Source code
/*
* Apple Macbook Pro LCD backlight control
*
* Copyright (C) 2006 Nicolas Boichat <nicolas @boichat.ch>
* Copyright (C) 2006 Felipe Alfaro Solana <felipe_alfaro @linuxmail.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#include <stdio .h>
#include <sys /io.h>
#include <stdlib .h>
void init()
{
if (ioperm(0xB2, 0xB3, 1) < 0)
{
perror("ioperm failed (you should be root).");
exit(2);
}
}
int get_current_value()
{
outb(0x03, 0xB3);
outb(0xBF, 0xB2);
char t = inb(0xB3) >> 4;
return t;
}
int calculate_new_value(const char *arg)
{
int val, new = atoi(arg);
if (arg[0] == '+' || arg[0] == '-')
val = new + get_current_value();
else
val = new;
if (val > 15)
val = 15;
else if (val < 1)
val = 1;
return val;
}
int main(int argc, char** argv)
{
if (argc > 2)
{
printf("Usage:\n");
printf("%s : read current value\n", argv[0]);
printf("%s value : write value [0-15]\n", argv[0]);
exit(1);
}
init();
if (argc < 2)
{
printf("Current value : %d\n", get_current_value());
exit(0);
}
if (argc == 2)
{
int value = calculate_new_value(argv[1]);
outb(0x04 | (value << 4), 0xB3);
outb(0xBF, 0xB2);
printf("new value: %d\n", value);
}
return 0;
}
[...] On 11/5/06, Felipe Alfaro Solana wrote: > On 10/4/06, Artur Boicu wrote: > > Dear friends, > > How cand I install Ubuntu on my Mac. It asks me to set up a partition > > called Yaboot. > > Could you give me a step by step instructions? > > Maybe these posts I wrote some time ago may help you: > > http://felipe-alfaro.org/blog/2006/08/19/installing-ubuntu-linux-on-a-macbook-pro/ > http://felipe-alfaro.org/blog/2006/09/19/installing-refit-on-the-hidden-efi-system-partition/ > http://felipe-alfaro.org/blog/2006/09/11/basic-backlight-support-for-macbook-pro/ > http://felipe-alfaro.org/blog/2006/09/11/modifying-screen-brightness-on-ac-state-changes/ > [...]
» Re: installing Ubuntu on Mac - ubuntu.sitebolt.net said this on November 5th, 2006 at 22:46
Thank you, this works great on iMac version “5,1″ as well (also known as “Late 2006″).
windi said this on January 8th, 2008 at 11:37
i’m looking for a toll like that but i’m newbie… i’ve got an iMac Alu (mid 2007) 20″ with ATI HD2400Pro.
How to make bli.c work on my computer (i’m under Ubuntu Gusty - Studio version)
Reply at : bouboulabulle[at]caramail.com
Thx !
Bouboune said this on March 29th, 2008 at 04:27
Hi. I could not get your source file to compile. I fixed one error — extra spaces in the include files. But there must be other errors that I don’t understand. Fortunately, I found a pre-compiled binary on another Ubuntu page. You were credited with program.
Here are the errors:
backlight.increment.c: In function ‘calculate_new_value’:
backlight.increment.c:48: error: stray ‘\342’ in program
backlight.increment.c:48: error: stray ‘\200’ in program
backlight.increment.c:48: error: stray ‘\230’ in program
backlight.increment.c:48: error: stray ‘\342’ in program
backlight.increment.c:48: error: stray ‘\200’ in program
backlight.increment.c:48: error: stray ‘\231’ in program
backlight.increment.c:48: error: expected expression before ‘||’ token
backlight.increment.c:48: error: stray ‘\342’ in program
backlight.increment.c:48: error: stray ‘\200’ in program
backlight.increment.c:48: error: stray ‘\230’ in program
backlight.increment.c:48: error: stray ‘\342’ in program
backlight.increment.c:48: error: stray ‘\200’ in program
backlight.increment.c:48: error: stray ‘\231’ in program
backlight.increment.c: In function ‘main’:
backlight.increment.c:65: error: stray ‘\342’ in program
backlight.increment.c:65: error: stray ‘\200’ in program
backlight.increment.c:65: error: stray ‘\235’ in program
backlight.increment.c:65: error: ‘Usage’ undeclared (first use in this function)
backlight.increment.c:65: error: (Each undeclared identifier is reported only once
backlight.increment.c:65: error: for each function it appears in.)
backlight.increment.c:65: error: expected ‘)’ before ‘:’ token
backlight.increment.c:65: error: stray ‘\’ in program
backlight.increment.c:65: error: stray ‘\342’ in program
backlight.increment.c:65: error: stray ‘\200’ in program
backlight.increment.c:65: error: stray ‘\235’ in program
backlight.increment.c:66: error: stray ‘\342’ in program
backlight.increment.c:66: error: stray ‘\200’ in program
backlight.increment.c:66: error: stray ‘\235’ in program
backlight.increment.c:66: error: expected expression before ‘%’ token
backlight.increment.c:66: error: stray ‘\’ in program
backlight.increment.c:66: error: stray ‘\342’ in program
backlight.increment.c:66: error: stray ‘\200’ in program
backlight.increment.c:66: error: stray ‘\235’ in program
backlight.increment.c:67: error: stray ‘\342’ in program
backlight.increment.c:67: error: stray ‘\200’ in program
backlight.increment.c:67: error: stray ‘\235’ in program
backlight.increment.c:67: error: expected expression before ‘%’ token
backlight.increment.c:67: error: stray ‘\’ in program
backlight.increment.c:67: error: stray ‘\342’ in program
backlight.increment.c:67: error: stray ‘\200’ in program
backlight.increment.c:67: error: stray ‘\235’ in program
backlight.increment.c:75: error: stray ‘\342’ in program
backlight.increment.c:75: error: stray ‘\200’ in program
backlight.increment.c:75: error: stray ‘\235’ in program
backlight.increment.c:75: error: ‘Current’ undeclared (first use in this function)
backlight.increment.c:75: error: expected ‘)’ before ‘value’
backlight.increment.c:75: error: stray ‘\’ in program
backlight.increment.c:75: error: stray ‘\342’ in program
backlight.increment.c:75: error: stray ‘\200’ in program
backlight.increment.c:75: error: stray ‘\235’ in program
backlight.increment.c:82: error: stray ‘\303’ in program
backlight.increment.c:82: error: stray ‘\227’ in program
backlight.increment.c:82: error: expected ‘)’ before numeric constant
backlight.increment.c:82: error: too few arguments to function ‘outb’
backlight.increment.c:84: error: stray ‘\342’ in program
backlight.increment.c:84: error: stray ‘\200’ in program
backlight.increment.c:84: error: stray ‘\235’ in program
backlight.increment.c:84: error: ‘new’ undeclared (first use in this function)
backlight.increment.c:84: error: expected ‘)’ before ‘value’
backlight.increment.c:84: error: stray ‘\’ in program
backlight.increment.c:84: error: stray ‘\342’ in program
backlight.increment.c:84: error: stray ‘\200’ in program
backlight.increment.c:84: error: stray ‘\235’ in program
AndrewL733 said this on May 18th, 2008 at 00:28