diff -ru celinux-040503.vansky/drivers/char/minipc-kbd.c cel2.new/drivers/char/minipc-kbd.c --- celinux-040503.vansky/drivers/char/minipc-kbd.c 2008-10-02 10:11:37.000000000 +0200 +++ cel2.new/drivers/char/minipc-kbd.c 2008-10-01 17:17:15.000000000 +0200 @@ -374,30 +374,22 @@ scancode = KEY_RESERVED; //wjx filter the = key break; - case KEY_F5: - if (key_down_flag && !(cur_keys[0] & (1U << 6) && cur_keys[16] & (1U << 6))) // wjx 2008.2.27 change the lcd light (filter Fn + Ctrl + F1 change light ) - { -#if 0 - lcd_pwm_dut = REG_PWM_DUT (0) + 60; - if (lcd_pwm_dut > 300) + case KEY_F4: + if (key_down_flag) { + lcd_pwm_dut = REG_PWM_DUT (0)*2/3 ; + if (lcd_pwm_dut <0) lcd_pwm_dut = 0; __lcd_set_backlight_level (lcd_pwm_dut); -#else - if (REG_PWM_DUT (0) != 0) - { - __lcd_set_backlight_level (0); //wjx close the lcd backlight - } - else - { - __lcd_set_backlight_level (300); //wjx open the backlight - } -#endif - fn_f5_flag = 1; - } - else - { - fn_f5_flag = 0; } + scancode = KEY_RESERVED; //wjx filter the = key + break; + case KEY_F5: + if (key_down_flag) { + lcd_pwm_dut = (REG_PWM_DUT (0)+1)*3/2; + if (lcd_pwm_dut > 300) + lcd_pwm_dut = 300; + __lcd_set_backlight_level (lcd_pwm_dut); + } scancode = KEY_RESERVED; //wjx filter the F5 key break; case KEY_F20: diff -ru celinux-040503.vansky/drivers/input/input.c cel2.new/drivers/input/input.c --- celinux-040503.vansky/drivers/input/input.c 2008-10-02 10:11:37.000000000 +0200 +++ cel2.new/drivers/input/input.c 2008-09-30 20:37:50.000000000 +0200 @@ -78,9 +78,9 @@ return; #ifdef CONFIG_FB_JZ //wjx - if(REG_PWM_DUT(0) == 0 ) //wjx turn on the backlight if the backlight is off + if((0x80®_PWM_CTR(0)) == 0 ) //wjx turn on the backlight if the backlight is off { - __lcd_set_backlight_level(300); + __lcd_set_backlight_level(-1); // Resume backlight with previous level } #endif diff -ru celinux-040503.vansky/drivers/sound/ak4642en.c cel2.new/drivers/sound/ak4642en.c --- celinux-040503.vansky/drivers/sound/ak4642en.c 2008-10-02 10:11:39.000000000 +0200 +++ cel2.new/drivers/sound/ak4642en.c 2008-10-07 20:21:31.000000000 +0200 @@ -586,6 +586,9 @@ codec_volume = 4; else if ( val > 90 && val <= 100 ) codec_volume = 2; + val=100-val; + if(val>100||val<0) val=0; + codec_volume=2*val+(val/2)+2; i2s_codec_write(0x0a, codec_volume); i2s_codec_write(0x0d, codec_volume); diff -ru celinux-040503.vansky/drivers/video/Jzlcd.h cel2.new/drivers/video/Jzlcd.h --- celinux-040503.vansky/drivers/video/Jzlcd.h 2008-10-02 10:11:39.000000000 +0200 +++ cel2.new/drivers/video/Jzlcd.h 2008-12-15 23:21:13.000000000 +0100 @@ -825,15 +825,21 @@ #define GPIO_PWM0 94 //wjx +#define __gpio_as_pwm() \ +do { \ + REG_GPIO_GPAUR(2) &= 0xCFFFFFFF; \ + REG_GPIO_GPAUR(2) |= 0x10000000; \ +} while (0) + inline void __lcd_set_backlight_level(int n) { - REG_PWM_DUT(0) = n; + if(n>0) REG_PWM_DUT(0) = n; REG_PWM_PER(0) = 299; if(n) { -// __gpio_as_pwm(); __gpio_as_output(GPIO_PWM0); __gpio_set_pin(GPIO_PWM0); + __gpio_as_pwm(); REG_PWM_CTR(0) = 0xbf; } else