设为首页 加入收藏

TOP

Android 背光驱动
2014-11-24 08:34:52 来源: 作者: 【 】 浏览:0
Tags: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 这样的函数实现创建节点。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android驱动例子(LED灯控制) 下一篇Linux移植随笔:解决Tslib的问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)
·想要自学数据分析, (2025-12-27 02:49:14)
·Java 集合框架 - 菜 (2025-12-27 02:19:36)
·Java集合框架最全详 (2025-12-27 02:19:33)