您的位置:首页 > 其它

am335x LCD背光问题

2016-04-21 16:45 260 查看
/****************************************************************
*              am335x backlight problem
*
* 本问记录am335x背光问题的解决过程。
*
*                          Tony Liu, 2016-4-21, Shenzhen
***************************************************************/

1.现象
在app中,根据QSlider的变化,调节背光的亮度。变化范围10-100。
当QSlider调节到最低时,背光变量。

2.问题分析
2.1 查看QSlider的变化,此时的值其实是0,而不是label显示的10。
在串口中输入:
echo 100 > /sys/class/backlight/pwm-backlight/brightness
echo 50 > /sys/class/backlight/pwm-backlight/brightness
发现背光的亮度随着输入的值减小,逐渐变暗。
输入0,却发现背光变亮。
echo 0 > /sys/class/backlight/pwm-backlight/brightness
进一步确定当出入参数为0时有问题。

2.2 驱动代码如下,目前只跟到这里,有时间再跟。
//每次设置pwm都会调用下面的函数
kernel/driver/video/backlight/pwm_bl.c
static int pwm_backlight_update_status(struct backlight_device *bl)
{
struct pwm_bl_data *pb = dev_get_drvdata(&bl->dev);
int brightness = bl->props.brightness;
int max = bl->props.max_brightness;

if (bl->props.power != FB_BLANK_UNBLANK)
brightness = 0;

if (bl->props.fb_blank != FB_BLANK_UNBLANK)
brightness = 0;

if (pb->notify)
brightness = pb->notify(pb->dev, brightness);

if (brightness == 0) {              //当传入的参数为0时调用,问题就出在这里
pwm_set_duty_ns(pb->pwm, 0);
pwm_stop(pb->pwm);
} else {                            //传入参数是1-100时,调用
brightness = pb->lth_brightness +
(brightness * (pb->period - pb->lth_brightness) / max);
pwm_set_period_ns(pb->pwm, pb->period);
pwm_set_duty_ns(pb->pwm, brightness);
pwm_start(pb->pwm);
}

if (pb->notify_after)
pb->notify_after(pb->dev, brightness);

return 0;
}

3.解决方法:
在QT中进行更改,设置slider的最大值和最小值,并更新到显示的label.
ui->slider->setMaximum(100);
ui->slider->setMinimum(10);
//transform int to QString, base 10
ui->label->setText(QString::number(ui->slider->minimum(), 10));
ui->label_2->setText(QString::number(ui->slider->maximum(), 10));
这样一来,就不会出现QSlider的值是0的情况,传给底层的参数也不会为0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: