Denis Carikli (GNUtoo@no-log.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2559
-gerrit
commit 48d5cfafa914d2a93860388b2b451dda3ac12ba6 Author: Denis 'GNUtoo' Carikli GNUtoo@no-log.org Date: Thu Feb 28 16:23:57 2013 +0100
Lenovo ThinkPad X60: try(and fails) to turn the screen brightness on.
The code has been taken from the result of i915tool and converted.
It works when used as a SeaBIOS generated option rom but fails here.
Change-Id: I45edd59e7beee1308a374075c06aa521f7eda6a5 Signed-off-by: Denis 'GNUtoo' Carikli GNUtoo@no-log.org --- src/mainboard/lenovo/x60/i915.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
diff --git a/src/mainboard/lenovo/x60/i915.c b/src/mainboard/lenovo/x60/i915.c index 420a9fe..1e0a079 100644 --- a/src/mainboard/lenovo/x60/i915.c +++ b/src/mainboard/lenovo/x60/i915.c @@ -42,11 +42,16 @@ #include <cpu/amd/mtrr.h> #include <cpu/x86/msr.h> #include "i915io.h" +#include "i915_reg.h"
enum { vmsg = 1, vio = 2, vspin = 4, };
+ +#define BACKLIGHT_REFCLK_DIVISOR 128 +#define DEFAULT_BACKLIGHT_PWM_FREQ 200 + static int verbose = 0;
static unsigned int *mmio; @@ -72,6 +77,27 @@ static void io_i915_WRITE32(unsigned long val, unsigned long addr) outl(addr, addrport); outl(val, dataport); } +u32 get_default_max_backlight(void); +u32 get_default_max_backlight(void) +{ + u32 refclk_freq_mhz = 100; //hardcoded for gen3; + u32 max_pwm = refclk_freq_mhz * 1000000 / + (BACKLIGHT_REFCLK_DIVISOR * DEFAULT_BACKLIGHT_PWM_FREQ); + return max_pwm; +} + +void intel_panel_actually_set_backlight(unsigned long bar, u32 level); +void intel_panel_actually_set_backlight(unsigned long bar, u32 level) +{ + /* hardcoded for gen3 */ + u32 tmp; + printk(BIOS_SPEW, "[vga:%s], ", __func__); + printk(BIOS_SPEW, "set backlight PWM = %d\n", level); + tmp = io_i915_READ32(bar + BLC_PWM_CTL); + level <<= 1; + tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK; + io_i915_WRITE32(bar + BLC_PWM_CTL, tmp | level); +}
/* @@ -251,6 +277,8 @@ int i915lightup(unsigned int pphysbase, (void *)graphics, 8192*1024); memset((void *)graphics, 0xff, 8192*1024);
+ intel_panel_actually_set_backlight((unsigned long)mmio, get_default_max_backlight()); + printk(BIOS_SPEW, "%ld microseconds\n", globalmicroseconds()); i915_init_done = 1; oprom_is_loaded = 1;