android button light 流程分析(一) — driver概要1.docx

android button light 流程分析(一) — driver概要1.docx

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

android button light 流程分析(一) — driver 一、led-classled-class是button light driver的核心层,代码位于drivers/leds/目录下,提供了一些数据结构和接口,其中创建了一个leds设备类,用于管理系统所有的led,代码如下:[cpp]view plaincopyprint?static?int?__init?leds_init(void)??{??????leds_class?=?class_create(THIS_MODULE,?leds);??????if?(IS_ERR(leds_class))??????????return?PTR_ERR(leds_class);??????leds_class-suspend?=?led_suspend;??????leds_class-resume?=?led_resume;??????return?0;??}????static?void?__exit?leds_exit(void)??{??????class_destroy(leds_class);??}????subsys_initcall(leds_init);??module_exit(leds_exit);??static int __init leds_init(void){leds_class = class_create(THIS_MODULE, leds);if (IS_ERR(leds_class))return PTR_ERR(leds_class);leds_class-suspend = led_suspend;leds_class-resume = led_resume;return 0;}static void __exit leds_exit(void){class_destroy(leds_class);}subsys_initcall(leds_init);module_exit(leds_exit);创建成功后我们可以在/sys/class目录下面看到leds目录,并注册了统一的休眠和唤醒函数:[cpp]view plaincopyprint?/**??*?led_classdev_suspend?-?suspend?an?led_classdev.??*?@led_cdev:?the?led_classdev?to?suspend.??*/??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);????/**??*?led_classdev_resume?-?resume?an?led_classdev.??*?@led_cdev:?the?led_classdev?to?resume.??*/??void?led_classdev_resume(struct?led_classdev?*led_cdev)??{??????led_cdev-brightness_set(led_cdev,?led_cdev-brightness);??????led_cdev-flags?=?~LED_SUSPENDED;??}??EXPORT_SYMBOL_GPL(led_classdev_resume);????static?int?led_suspend(struct?device?*dev,?pm_message_t?state)??{??????struct?led_classdev?*led_cdev?=?dev_get_drvdata(dev);????????if?(led_cdev-flags??LED_CORE_SUSPENDRESUME)??????????led_classdev_suspend(led_cdev);????????return?0;??}????static?int?led_resume(struct?device?*dev)??{??????struct?led_classdev?*led_cdev?=?dev_get_drvdata(dev);????????if?(led_cdev-flags??LED_CORE_SUSPENDRESUME)??????????led_classdev_resume(led_cdev);????????return?0;??}??/**

文档评论(0)

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

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

1亿VIP精品文档

相关文档