anributtnlight流程分析(一)—river.doc

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
anributtnlight流程分析(一)—river.doc

android button light 流程分析(一)一driver 一、led-class led-class是button light driver的核心层,代码位于drivers/leds/目录下,提供了一些数据結 构和接口,其中创建了一个leds设备类,用于管理系统所有的led,代码如下: [cpp] view plaincopyprint? static int _init leds_init(void) { leds_class = class_create(THIS_MODULEJ leds); if (IS一ERR(leds一class)) return PTR_ERR(leds_class); leds_class-suspend = led_suspend; leds class-resume = led resume; return 0; TOC \o 1-5 \h \z } 10. static void _exit leds_exit(void) { class一destroy(leds_class); } 15. subsys—initcall(leds_init); module—exit(leds—exit); 创建成功后我们可以在/sys/class 0录下面看到leds 0录,并注册了统一的休眠和唤醒函数: [cpp] view plaincopyprint? /** * led_classdev_suspend - suspend an led_classdev. * @led_cdev: the led_classdev to suspend. */ 5- void led_classdev_suspend(struct led_classdev *led_cdev) { led_cdev-flags |= LED^SUSPENDED; led一cdev-brightness_set(led_cdev, 0); } EXPORT_SYMBOL_GPL(led_classdev_suspend); 11. /** * led_classdev_resume - resume an led一classdev, * @led_cdev: the led_classdev to resume. */ 16? void led—classdev—resume(struct led—classdev *led一cdev) 17, { 18? led—cdev-brightness—set(led—cdev, led_cdev-brightness); led_cdev-flags = ~LED一SUSPENDED; } EXPORT_SYMBOL_GPL(led_classdev_resume); 22. 23? static int led_suspend(struct device *dev, pm_message_t state) { struct led_classdev *led_cdev = dev_get_drvdata(dev); 26. if (led_cdev-flags LED—CORE一SUSPENDRESUME) led—classdev—suspend(led_cdev); 29. return 0; } 32. static int led_resume(struct device *dev) { struct led_classdev *led_cdev = dev_get_drvdata(dev); 36. if (led—cdev-flags LED—CORE—SUSPENDRESUME) led—classdev_resume(led_cdev); 39. return 0j } suspend主要设置一下标志并将led关W,resume主要清除志并将led恢复之前亮度。 同时led-class提供了结构体led classdev作为统一的led没备模型:define LED_CORE_SUSPENDRESUME(1 16)12 6 7 8 9 10 11 #define LED_CORE_SUSPENDRESUME (1 16) 12 13 14 15 16 17 /* Set LED brightness level */ /* Must not sleep, use a workqueue if needed */ void (*brightness_set)(struct led—classdev *led_cdevJ enum led一brightness brightness); /* Get LED brightne

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档