zoukankan      html  css  js  c++  java
  • am335x LCD背光问题

    /****************************************************************
     *              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。
  • 相关阅读:
    Shell使用
    从一道面试题谈linux下fork的运行机制
    老了,问题定位难了,xml编码解析
    javacc
    C++概述
    Notepad++中设置Windows、Unix、Mac三种行尾换行符格式间的转换
    玩转html5(一)-----盘点html5新增的那些酷酷的input类型和属性
    Java Drp项目实战—— 环境搭建
    cocos2d-x游戏开发 跑酷(八) 对象管理 碰撞检測
    电话拨号盘(带触摸振动反馈)
  • 原文地址:https://www.cnblogs.com/helloworldtoyou/p/5417605.html
Copyright © 2011-2022 走看看