Android系统--灯光系统驱动编写
Android系统开发--Android灯光系统tiny4412_led_class驱动编写
框架分析
- led_classdev_4412结构体 - 创建led_classdev_4412结构体 
- 分配结构体空间 
 
struct led_classdev_4412 {
    struct led_classdev cdev;
    int gpio;
};
struct led_classdev {
	const char		*name;
	int			 brightness;
	int			 max_brightness;
	int			 flags;
	/* Lower 16 bits reflect status */
#define LED_SUSPENDED		(1 << 0)
	/* Upper 16 bits reflect control information */
#define LED_CORE_SUSPENDRESUME	(1 << 16)
	/* Set LED brightness level */
	/* Must not sleep, use a workqueue if needed */
	void		(*brightness_set)(struct led_classdev *led_cdev,
					  enum led_brightness brightness);
	/* Get LED brightness level */
	enum led_brightness (*brightness_get)(struct led_classdev *led_cdev);
	/*
	 * Activate hardware accelerated blink, delays are in milliseconds
	 * and if both are zero then a sensible default should be chosen.
	 * The call should adjust the timings in that case and if it can't
	 * match the values specified exactly.
	 * Deactivate blinking again when the brightness is set to a fixed
	 * value via the brightness_set() callback.
	 */
	int		(*blink_set)(struct led_classdev *led_cdev,
				     unsigned long *delay_on,
				     unsigned long *delay_off);
	struct device		*dev;
	struct list_head	 node;			/* LED Device list */
	const char		*default_trigger;	/* Trigger to use */
	unsigned long		 blink_delay_on, blink_delay_off;
	struct timer_list	 blink_timer;
	int			 blink_brightness;
#ifdef CONFIG_LEDS_TRIGGERS
	/* Protects the trigger data below */
	struct rw_semaphore	 trigger_lock;
	struct led_trigger	*trigger;
	struct list_head	 trig_list;
	void			*trigger_data;
#endif
};
 led_devs = kzalloc(sizeof(struct led_classdev_4412) * sizeof(led_gpios)/sizeof(led_gpios[0]), GFP_KERNEL);
- 设置led_classdev_4412中属性,并注册结构体--led_classdev_register 
- led_classdev_4412属性如下: - led_cdev->max_brightness 
- led_cdev->brightness_set 
- led_cdev->flags 
- led_cdev->brightness 
- led_cdev->name 
 
实现代码如下:
struct led_desc {
 int gpio;
 char *name;
};
static struct led_desc led_gpios[] = {
 {EXYNOS4212_GPM4(0), "led1"},
 {EXYNOS4212_GPM4(1), "led2"},
 {EXYNOS4212_GPM4(2), "led3"},
 {EXYNOS4212_GPM4(3), "led4"},
};
for (i = 0; i < sizeof(led_gpios)/sizeof(led_gpios[0]); i++)
 {
     s3c_gpio_cfgpin(led_gpios[i].gpio, S3C_GPIO_OUTPUT);
     gpio_set_value(led_gpios[i].gpio, 1);               //设置为LED_OFF
     led_devs[i].cdev.max_brightness = LED_FULL;
     led_devs[i].cdev.brightness_set = brightness_set_4412;
     led_devs[i].cdev.flags = LED_CORE_SUSPENDRESUME;
     led_devs[i].cdev.brightness = LED_OFF;
     led_devs[i].cdev.name = led_gpios[i].name;          //设置为对应的引脚设备名
     led_devs[i].gpio = led_gpios[i].gpio;               //记录对应引脚                
     /* 3. led_classdev_register */
     ret = led_classdev_register(NULL, &led_devs[i].cdev);
     /*注册失败之后,将之前注册的设备注销,并且释放空间*/
     if (ret) {
         i--;
     while (i >= 0) {
             led_classdev_unregister(&led_devs[i].cdev);
             i--;
         }
     kfree(led_devs);
     return -EIO;
     }
 }
 return 0;
}
Android系统--灯光系统驱动编写的更多相关文章
- Android系统篇之—-编写简单的驱动程序并且将其编译到内核源码中【转】
		本文转载自:大神 通过之前的一篇文章,我们了解了 Android中的Binder机制和远程服务调用 在这篇文章中主要介绍了Android中的应用在调用一些系统服务的时候的原理,那么接下来就继续来介绍一 ... 
- Android系统篇之—-编写系统服务并且将其编译到系统源码中【转】
		本文转载自:http://www.wjdiankong.cn/android%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B-%E7%BC%96%E5%86%99%E7%B3% ... 
- 第一章  Android系统移植与驱动开发概述
		本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ... 
- 浅谈Android系统移植、Linux设备驱动
		一.Android系统架构 第一层:Linux内核 包括驱动程序,管理内存.进程.电源等资源的程序 第二层:C/C++代码库 包括Linux的.so文件以及嵌入到APK程序中的NDK代码 第三层:An ... 
- 在Ubuntu上为Android系统编写Linux内核驱动程序(老罗学习笔记1)
		这里,我们不会为真实的硬件设备编写内核驱动程序.为了方便描述为Android系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4字节的寄存器,它可读可写.想起我们第一次学习程序语 ... 
- 在Ubuntu上为Android系统编写Linux内核驱动程序
		文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6568411 在智能手机时代,每个品牌的手机都有 ... 
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
		在Android 2.3(Gingerbread) 系统的时候,我写过一篇关于“Android 震动马达系统“的文章,当时的Linux内核还是2.6版本的.写那篇文章的目的,是想彻底的了解从硬件到驱动 ... 
- Android系统移植与驱动开发
		21世纪,Android发展非常迅速,在市场上占有很大的比例,遥遥领先与iOS,很大程度上是因为任何人都可以利用Android的源代码定制完全属于自己的嵌入式开发系统,而不需要向Google交一分钱. ... 
- Android系统开发--灯光系统之电池灯的流程分析
		Android系统开发--Android灯光系统之电池灯的流程分析 前期系统准备 运行初始化,创建系统服务 创建电池服务,获得电池灯;创建监听者监听上报电池事件: mSystemServiceMana ... 
随机推荐
- 用VS2010进行CMAKE的时候“LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”
			由于要编译LTP,LTP在MINGW下又不能编译,所以忍痛安装了VS2010+CMAKE. 由于VS在本科时候虐我千百遍,所以一直心存阴影... 转入正题,当cmake的时候, 它提示 “LINK : ... 
- 实现 iPhone 电子书的分页显示功能的代码
			本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650497 原文地址:实现 iPhone 电子书的分页显示功能的代码作者:醉吻 ... 
- 关于在react和node中,经常出现的const
			const是定义一个常量,在ECM6当中,定义局部变量可以用let.定义全局变量用var......这是ECM6的新特性,好吧,包子在这里只是记录一下,希望大家在将来写react或者node的时候,不 ... 
- kubectl工具的windows安装方法
			1.首先安装Chocolatey 参考:https://chocolatey.org/install#install-with-powershellexe windows7+以上操作系统的cmd sh ... 
- Object.defineProperties()
			w https://docs.microsoft.com/en-us/scripting/javascript/reference/object-defineproperty-function-jav ... 
- MySQL错误日志提示innodb_table_stats和innodb_index_stats不存在故障处理
			查看MySQL error日志,发现有如下报错 7efbc586f700 InnoDB: Error: Table "mysql"."innodb_table_stats ... 
- MySQL中too many connections超出最大连接数的处理方法
			MySQL最大连接数的问题 在MySQL的源码中,默认最大的连接数是16384 {"max_connections", OPT_MAX_CONNECTIONS, "The ... 
- 我的Android进阶之旅------>Android使用cmd窗口进行adb logcat时出现中文乱码问题的解决办法
			今天用CMD命令进行adb logcat时显示一堆的乱码,乱码如下: C:\Users\Administrator>adb logcat -s logcat --------- beginnin ... 
- Android-实现切换Fragment页功能
			场景:使用Fragment实现切页. 类结构: 一:Activity Activity中使用getSupportFragmentManager().beginTransaction()来填充一个Fra ... 
- 试着利用BAPI 寻找F-59创建凭证的函数
			功能块代码 F-59开发类 FIBP事务说明 支付请求 事物:FBP1Screen 0BKPF-BLART = AB________________________________________从程 ... 
