- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 四年级上册道德与法治全册总复习.pptx
- 结构专业图集-04G415-1:预应力混凝土折线形屋架(预应力钢筋为钢绞线 跨度18m~30m).pdf
- 电子商务基础与应用(慕课版)王华新习题和案例分析题答案.docx
- 走近马克思(暨南大学)中国大学MOOC(慕课)章节测验试题(答案).pdf
- 《日语 》期末考试复习题.docx
- 团体标准制修订经费-中国气象服务协会.PDF
- 《奉献主题班会》课件.ppt
- 人教版 (2024)七年级上册Starter Unit 1 Hello 课件+音频(共19张PPT).pptx VIP
- 装饰装修冬季施工方案.docx VIP
- 急性心衰合并肺部感染患者的护理疑难病例讨论.pptx
文档评论(0)