--作者: 赖玉平(peter lai)aulyp@163.com

ANDROID里,自带的背光亮度调节,会调用哪个接口?

会调用

/sys/class/leds/lcd-backlight/brightness

而这个brightness节点,是如何声明的呢

请看LED驱动里的这么一句

static DEVICE_ATTR(brightness, /*NAME*/

0644, /*权限*/

led_brightness_show, /*Read Point*/

led_brightness_store); /*Write Point*/

这就是声明brightness的。

这里调用了led_brightness_store做为写背光函数,也就是调节时用到,它最终会调用到显示驱动里的PWM操作函数,实现背光调节。

分析:

在LED驱动中,led_classdev_register ()函数,调用device_create()创建了操作结构体空间leds_class,

led_cdev->dev = device_create(leds_class, parent, 0, led_cdev,"%s", led_cdev->name);

关键是填充led_cdev结构体。

在led_brightness_store函数里,调用led_set_brightness设置背光亮度,最终是调用了

led_cdev->brightness_set(led_cdev, value);实现操作,这个操作,会调用哪里的函数呢?它是显示驱动里的brightness_set()函数。

请注意看,在显示驱动里(S3cfb_lte480wv.c),有这么一段代码,

static struct led_classdev smdk_backlight_led = {

.name = "lcd-backlight",

.brightness = SMDK_DEFAULT_BACKLIGHT_BRIGHTNESS,

.brightness_set = smdk_brightness_set,

};

把brightness_set指向了smdk_brightness_set()函数。这就有戏看了,终于找到真正操作函数了。

当然,LED驱动是如何与显示驱动关联起来的,这一套机制,得看一下

static int smdk_bl_probe(struct platform_device *pdev)

{

led_classdev_register(&pdev->dev, &smdk_backlight_led);

return 0;

}

原来使用了led_classdev_register(),它是由LEDS驱动提供的函数,

#include 传过来的。

这就把smdk_backlight_led 结构体指针传给了LEDS驱动,里面就有smdk_brightness_set函数的指针,所以,LEDS里的led_cdev->brightness_set能调用到这边来,呵呵。原来是这样。

注册背光的控制节点

/sys/class/leds/lcd-backlight/brightness

是在这个函数 platform_driver_register() à

smdk_bl_probe() à led_classdev_register(&pdev->dev, &smdk_backlight_led);

在smdk_backlight_led结构体里,设置了节点名称lcd-backlight和控制接口等。

而led_classdev_register()是led-class里的函数。最终调用了device_createp 这样的函数实现创建节点。

更多相关文章

  1. android ViewTreeObserver详细讲解
  2. Android(安卓)web services8 参数介绍
  3. cocos2dx中利用xcode 调用java中的函数
  4. Android中的Java与JavaScript方法互调
  5. 使用Retrofit+LiveData时的Error/Loading处理
  6. h5和app交互
  7. android baseadapter的getview调用两次
  8. ArcGIS for Android示例解析之GP服务调用-----ViewShed
  9. android RecyclerView局部刷新

随机推荐

  1. Android中弹出输入法界面不影响app界面布
  2. android之CTS兼容性测试
  3. [置顶] Android超精准计步器开发-Dylan计
  4. Android系统分析之带着问题看Handler
  5. android studio 在线更新android sdk,遇到
  6. 使用 Android快速开发框架 Afinal 0.3 快
  7. 系出名门Android(5) - 控件(View)之TextV
  8. Android清除缓存功能实现
  9. 33、Android 中子fragment控制父对象改变
  10. Android:创建可穿戴应用 - 自定义布局