MTK6573平台修改LCM的最高亮度,有几种方法修改。
1.修改中检测,把上层的亮度值加转换,限制最大值。比如最大的亮度,上层写到sys 里是255,那我在中间层把这个值变为200,那驱动层收到的值就是200.
这样最大亮度就降低了。同理,可以把最小亮度给提高一些。
看下面代码 找到lights.c文件
tatic struct light_state_t g_notification;
static struct light_state_t g_battery;
static int g_backlight = 200;
static int g_trackball = -1;
static int g_buttons = 0;
static int g_attention = 0;
/* TRACKBALL BACKLIGHT */
char const*const TRACKBALL_FILE
= "/sys/class/leds/jogball-backlight/brightness";
/* RED LED */
char const*const RED_LED_FILE
= "/sys/class/leds/red/brightness";
char const*const RED_TRIGGER_FILE
= "/sys/class/leds/red/trigger";
char const*const RED_DELAY_ON_FILE
= "/sys/class/leds/red/delay_on";
char const*const RED_DELAY_OFF_FILE
= "/sys/class/leds/red/delay_off";
/* GREEN LED */
char const*const GREEN_LED_FILE
= "/sys/class/leds/green/brightness";
char const*const GREEN_TRIGGER_FILE
= "/sys/class/leds/green/trigger";
char const*const GREEN_DELAY_ON_FILE
= "/sys/class/leds/green/delay_on";
char const*const GREEN_DELAY_OFF_FILE
= "/sys/class/leds/green/delay_off";
/* BLUE LED */
char const*const BLUE_LED_FILE
= "/sys/class/leds/blue/brightness";
char const*const BLUE_TRIGGER_FILE
= "/sys/class/leds/blue/trigger";
char const*const BLUE_DELAY_ON_FILE
= "/sys/class/leds/blue/delay_on";
char const*const BLUE_DELAY_OFF_FILE
= "/sys/class/leds/blue/delay_off";
/* LCD BACKLIGHT */
char const*const LCD_FILE
= "/sys/class/leds/lcd-backlight/brightness";
/* KEYBOARD BACKLIGHT */
char const*const KEYBOARD_FILE
= "/sys/class/leds/keyboard-backlight/brightness";// 屏的接口文件。
/* BUTTON BACKLIGHT */
char const*const BUTTON_FILE
= "/sys/class/leds/button-backlight/brightness";
set_light_backlight(struct light_device_t* dev,
struct light_state_t const* state)
{
int err = 0;
int brightness = rgb_to_brightness(state);
pthread_mutex_lock(&g_lock);
LOGD("%s: brightness=%d start+++\n", __func__, brightness);
if(brightness>200)
brightness=200;//这里就是把上层传下来的给变换了。
g_backlight = brightness;
err = write_int(LCD_FILE, brightness);
if (g_haveTrackballLight) {
handle_trackball_light_locked(dev);
}
pthread_mutex_unlock(&g_lock);
return err;
}
这是在中间层来实现。
二,当然也可以在我们的pwm,驱动里来做,
static int backlight_set_pwm(int pwm_num, u32 level, u32 div)
{
struct pwm_spec_config pwm_setting;
pwm_setting.pwm_no = pwm_num;
pwm_setting.mode = PWM_MODE_FIFO; //new mode fifo and periodical mode
pwm_setting.clk_div = div;
pwm_setting.clk_src = PWM_CLK_NEW_MODE_BLOCK;//PWM_CLK_NEW_MODE_BLOCK_DIV_BY_1625;
pwm_setting.PWM_MODE_FIFO_REGS.IDLE_VALUE = 0;
pwm_setting.PWM_MODE_FIFO_REGS.GUARD_VALUE = 0;
pwm_setting.PWM_MODE_FIFO_REGS.STOP_BITPOS_VALUE = 63;
pwm_setting.PWM_MODE_FIFO_REGS.HDURATION = 4;
pwm_setting.PWM_MODE_FIFO_REGS.LDURATION = 4;
pwm_setting.PWM_MODE_FIFO_REGS.GDURATION = 0;
pwm_setting.PWM_MODE_FIFO_REGS.WAVE_NUM = 0;
LEDS_DEBUG("[LED]backlight_set_pwm:duty is %d\n", level);
if(level <= 32)
{
pwm_setting.PWM_MODE_FIFO_REGS.SEND_DATA0 = (1 << level) - 1 ;
pwm_setting.PWM_MODE_FIFO_REGS.SEND_DATA1 = 0 ;
}else if(level>32 && level <=64)
{
//level -= 32;//32
if(level>28)level=28; //因为硬件的亮度等级是0--31,32个等级。我们把硬件的最大亮度等级设置为28,也达到了目的。
pwm_setting.PWM_MODE_FIFO_REGS.SEND_DATA0 = 0xFFFFFFFF ;
pwm_setting.PWM_MODE_FIFO_REGS.SEND_DATA1 = (1 << level) - 1;
}else
{
LEDS_DEBUG("[LED]Error level in backlight\n");
}
pwm_set_spec_config(&pwm_setting);
//printk("[LED]PWM con register is %x \n", INREG32(PWM_BASE + 0x0150));
return 0;
}