一线脉冲的背光方式

目前我们调过的一线脉冲的背光方式均是16个亮度等级的,所以以此为例。

先解释一下,一线脉冲的背光调节方式简单的讲就是,来一个脉冲,亮度发生一次变化。

当第一个脉冲发生后,此时会有最大电流,也就是背光亮度的最大等级;此后,每来一个脉冲,亮度就降一级,这个过程是循环出现的,解释见下图:

正是因为这个过程是可循环的,所以计算当前亮度调节需要的脉冲个数时,还要考虑当前所在的亮度等级,

具体代码如下:

static void mdss_dsi_panel_bklt_pulse(struct mdss_dsi_ctrl_pdata *ctrl, int level)
{
	int int_level;
	int pulse_num_need;
	int pulse_num_actrul;
	int i;

/*计算需要配置的亮度等级按16级算的话,应该是等级几*/
	int_level = level * 16;
	int_level /= ctrl->bklt_max;
	int_level += 1;

	if (int_level >= 16)
		int_level = 16;

	if(level == 0){
		if (gpio_is_valid(ctrl->bl_gpio)){
			gpio_set_value((ctrl->bl_gpio), 0);
			mdelay(2.5);//msleep(2.5);
		}
		ctrl->bl_old_pulse_num = 0;
		return;
	}

/*计算需要的相对脉冲个数,亮度等级越高,需要的脉冲数越少*/
	pulse_num_need = 16 - int_level;	
/*需要的相对脉冲和当期脉冲数一样时,无需调节,直接退出*/
	if((pulse_num_need + 1) == ctrl->bl_old_pulse_num)
		return;
/*计算绝对脉冲个数,需要的相对脉冲大于当前脉冲数时,发送需要脉冲个数的差值*/
	if((pulse_num_need + 1 ) > ctrl->bl_old_pulse_num){
		pulse_num_actrul = pulse_num_need + 1 - ctrl->bl_old_pulse_num - 1;
	}else{	/*否则把当前周期需要的脉冲补满,再发送需要的相对脉冲个数*/
		pulse_num_actrul = 16 - ctrl->bl_old_pulse_num + pulse_num_need;
	}

	ctrl->bl_old_pulse_num = pulse_num_need + 1;

	gpio_set_value((ctrl->bl_gpio), 0);
	udelay(0.5);//usleep(0.5);
	/*发送需要的绝对脉冲个数,注意当前计算少一个脉冲,最后发*/
	for(i = 0; i < pulse_num_actrul; i++){
		if (gpio_is_valid(ctrl->bl_gpio)){
			gpio_set_value((ctrl->bl_gpio), 1);
			udelay(0.5);//usleep(0.5);
			gpio_set_value((ctrl->bl_gpio), 0);
			udelay(0.5);//usleep(0.5);
		}
	}
    /*计算差值问题,最后一个脉冲需要的延时更长,单独拿出来*/
	if (gpio_is_valid(ctrl->bl_gpio)){
		gpio_set_value((ctrl->bl_gpio), 1);
		mdelay(2);//msleep(2);
	}
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值