之前齐师兄问我,是不是应该有一个文件记录背光灯的亮度,我说理论上有,但是在哪里我真的还没有见过。只知道在调LCD驱动的时候会调用一个背光控制的函数,传进来一个亮度值就可以配置亮度了,至于这个函数是谁调用的,以及和上层是怎么联系的,自己一直没想过,最近系统的看了一下,特作此总结。

路径:root/andriod/kernel/drivers/video/

在Mdss_dsi_panel.c文件里,有一个背光控制函数static void mdss_dsi_panel_bl_ctrl(struct mdss_panel_data *pdata,u32 bl_level)

背光的亮度就是根据这个参数值bl_level进行调节的。

首先看看谁调用的这个函数:

在mdss_dsi_panel_init()函数里,有这么一句ctrl_pdata->panel_data.set_backlight =mdss_dsi_panel_bl_ctrl;

然后看看panel_data.set_backlight是在哪里调用的。

用搜索功能排除万难后发现,在Mdss_fb.c()文件里有函数

void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl){

…… ……;

pdata->set_backlight(pdata, temp);//其中pdata就是从mdss_dsi_panel.c那传过来的结构体。

…… ……;

}

继续找函数调用的地方:

static void mdss_fb_set_bl_brightness(struct led_classdev *led_cdev, enum led_brightness value)
{
…… ……;
mdss_fb_set_backlight(mfd, bl_lvl);
…… ……;
}
继续:

static struct led_classdev backlight_led = {
.name           = "lcd-backlight",
.brightness     = MDSS_MAX_BL_BRIGHTNESS,
.brightness_set = mdss_fb_set_bl_brightness,
.max_brightness = MDSS_MAX_BL_BRIGHTNESS,
};

可以看到,这个mdss_fb_set_bl_brightness()函数又是某个结构体的回调函数。那么我们来看看这个结构体是在哪里定义,以及其中的britness_set函数是在哪里调用的。

继续条件搜索,排除无关文件,可以定位到:

路径:root/android/kernel/drivers/leds/Led-class.c

在这个文件里这样一些关于设备文件的操作:

static ssize_t led_brightness_show(struct device *dev,struct device_attribute *attr, char *buf)
{
struct led_classdev *led_cdev = dev_get_drvdata(dev);
return snprintf(buf, LED_BUFF_SIZE, "%u\n", led_cdev->brightness);
}

static ssize_t led_brightness_store(struct device *dev,struct device_attribute *attr, const char *buf, size_t size)
{
struct led_classdev *led_cdev = dev_get_drvdata(dev);
…… ……;
__led_set_brightness(led_cdev, state);
return size;
}

继续看__led_set_brightness()函数的定义:

static inline void__led_set_brightness(struct led_classdev *led_cdev,enum led_brightness value)
{
if (value > led_cdev->max_brightness)
value = led_cdev->max_brightness;
led_cdev->brightness = value;
if (!(led_cdev->flags & LED_SUSPENDED))
led_cdev->brightness_set(led_cdev, value);
}

最后就是设备文件操作的调用了:

__ATTR(brightness, 0644,led_brightness_show, led_brightness_store)

至此,所有的谜团都解开了。

当上层应用修改亮度时(比如用手指化冻亮度调节的进度条),亮度的数值会存到一个名为“brightness”的文件里,并且这时候底层会调用led_brightness_store()函数把当前亮度值存到led_cdev->brightness变量里,且调用配置好的背光调节函数来修改背光。

当上层函数想要获取当前背光时,就会调用led_brightness_show()函数,此时底层就会把当前驱动里的背光亮度值返回

MSM8909平台 LED背光的控制相关推荐

  1. 高通平台GPIO模拟PWM控制背光

    很多时候由于节省硬件资源,降低成本,会把PWM控制芯片去掉或者是改做它用,导致当我们想用PWM方式控制背光时只能使用带有clk功能的GPIO口.本篇文档就来讲解下如何使用GPIO模拟PWM功能进行背光 ...

  2. 苹果展开新显示器带动高阶需求:Mini LED背光技术

    TrendForce LED 研究(LEDinside)指出,苹果甫发表一款采用全新 LED 背光方案的 Pro Display XDR 32 吋 6K 显示器,带动显示器产业积极找寻高阶产品的新技术 ...

  3. LED背光十大领先技术优势

    LED作为LCD的背光源,与传统背光技术相比,除了在色域范围的优势外,还有很多独特的优点,归纳为十个方面: 1)LED背光源有更好的色域.其色彩表现力强于CCFL背光源,可对显示色彩数量不足的液晶技术 ...

  4. LED背光在数码相框的设计解决方案

    近年来传统纸质相片相框的吸引力已日渐消退,随着数码相机和手机相机的普及,数码相框市场正方兴未艾.数码相框具有内置的扬声器和耳机,可以通过MP3功能实现动人的画面,由此我们不难预计相当比例的传统相框将被 ...

  5. WH5097D有源矩阵驱动的Mini LED背光应用方案

    Miniled技术为lcd的全面升级版,Miniled的背光层在单位面积内可以容纳更多LED,从而大大提高背光源数量,因此可以进行区域亮度调节的设计,从而在个别区域实现关闭led从而达到完全的黑色,不 ...

  6. ESP32在阿里云平台使用MQTT协议控制RGB灯

    ESP32在阿里云平台使用MQTT协议控制RGB灯 本章内容是在ESP-IDF的\examples\protocols\mqtt\tcp工程上进行修改,实现ESP32在阿里云平台使用MQTT协议控制R ...

  7. LED驱动及控制实验------问题总结

    实验平台:博创移动开发箱4412 在LED驱动及控制实验中,遇到了大概如下几个问题: 1.在进行驱动模块插入时,输入 insmod driver/s3c-leds.ko命令时候,终端提示如下: [ 1 ...

  8. 树莓派c语言led,用树莓派实现RGB LED的颜色控制——C语言版本号

    用树莓派实现RGB LED的颜色控制 RGB色彩模式是工业界的一种颜色标准.是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代 表红.绿. ...

  9. python rgb led控件_Raspberry Pi-用树莓派实现RGB LED的颜色控制——Python版本-电路城论坛 - 电子工程师学习交流园地...

    用树莓派实现RGB LED的颜色控制 RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代 表红.绿. ...

最新文章

  1. 自定义view-波纹扩散(圆扩散)
  2. CSS3秘笈第三版涵盖HTML5学习笔记13~17章
  3. 网络编程学习笔记(shutdown函数)
  4. 智能老旧模糊照片修复——C++实现GFPGAN模型推理
  5. mysql查询活跃连接,mysql – 使用大量可能的连接进行查询的最佳方法
  6. BugKuCTF WEB 头等舱
  7. 6万人砍不下来一部拼多多手机,背后原来是这个原因。
  8. 定义mysql日志_请教:如何查看mysql数据定义操作的日志
  9. ++操作你还在使用加锁去保证线程的安全吗?确定不了解一下CAS机制?
  10. 限流算法-令牌桶算法
  11. linux语言 ctrl命令,linux下Ctrl命令组合
  12. 逻辑回归LR vs 支持向量机SVM
  13. 马斯克要买地当「城主」/ 苹果手表引入ChatGPT/ 小鹏辟谣多名核心高管离职…今日更多新鲜事在此...
  14. 《非暴力沟通两性篇》读书笔记
  15. linux常用免杀,【kali linux】详细分析两个免杀远控 了解远控和免杀原理
  16. 游戏人物装备技能数据表怎么设计(整理)
  17. matlab 生成静音文件,matlab去除静音段
  18. 按键精灵 html转txt文件,按键精灵怎么把变量输出写入TXT文本
  19. python 计算器 loop_python计算器实现 Yeah
  20. scrap python_Python Web Scrap实用指南

热门文章

  1. MySQL-一条sql语句的执行顺序
  2. 001_SpringBoot入门
  3. 071_设置日期方法
  4. 018_html文件路径
  5. 给定数组 求和等于固定值 算法_[见题拆题] 大厂面试算法真题解析 - 第一期开张...
  6. Android开发日常笔记
  7. python测试框架untest怎么循环执行_Python自动化测试-Unittest单元测试框架详解
  8. anaconda怎么运行python程序_Heartrate:如追综心跳般实时动态可视化监测Python程序运行...
  9. Mybatis的一对一查询以及延迟加载
  10. java一句话木马连接_webshell一句话木马大全