smdk6410 android driver powerbutton
前提:我们公司买的是Yosun公司的开发板,BSP是:YosunAP-Android EC_2.1_RTM1.0-20101124-9a5
一个驱动开发(修改)的思路很重要,对于按键驱动我认为只要抓住4点就可以了,
1.硬件按下后,软件可控制的入口在哪里。这里我找到了/driver/input/keyboad/gpio_keys.c中的static int __devinit gpio_keys_probe(struct platform_device *pdev),那么我就要仔细的加输出信息帮助我们理解。
ints3c_gpio_keys[]=
{
IRQ_EINT(0),
IRQ_EINT(1),
IRQ_EINT(2),
IRQ_EINT(3),
IRQ_EINT(4),
};
2.对于具体的操作系统处理上的区别:
wince:外部中断只要中断,事件,线程,就可以清晰了。
linux:也一样,这里她有自己的处理逻辑,我们只能按照这个来。
gpio_keys_probe处理所有按键,假如我们这里只处理IRQ_EINT(15)。
那么根据下面
1.arch/arm/amch-s3c6410/mach-smdk6410.c
staticstructgpio_keys_buttonsmdk6410_buttons[]={
{
.gpio=S3C64XX_GPN(15),
.code=KEY_ENTER,
.desc="Enter",
.active_low=1,
.wakeup=0,
}; 将会发给android上层为enter键码。
3.内核层如何与应用层交互。
此时上层android-sdk就可以使用onKeyDown来实现上下等等操作。我们这里按照硬件的顺序添加 0 1 2 ,分别运行test0 test1, test2应用程序,从而完成整个开发。
4.如何将你的驱动添加到系统中去。
static struct gpio_keys_button smdk6410_buttons[] = {
{
.gpio = S3C64XX_GPN(0),
.code = 158,
.desc = "Down",
.active_low = 1,
.wakeup = 0,
},
{
.gpio = S3C64XX_GPN(1),
.code = KEY_ENTER,
.desc = "Enter",
.active_low = 1,
.wakeup = 0,
},
{
.gpio = S3C64XX_GPN(2),
.code = KEY_HOME,
.desc = "Home",
.active_low = 1,
.wakeup = 0,
},
{
.gpio = S3C64XX_GPN(3),
.code = KEY_POWER,
.desc = "Power",
.active_low = 1,
.wakeup = 0,
},
{
.gpio = S3C64XX_GPN(4),
.code = KEY_TAB,
.desc = "Tab",
.active_low = 1,
.wakeup = 0,
},
};
static struct gpio_keys_platform_data smdk6410_button_data = {
.buttons = smdk6410_buttons,
.nbuttons = ARRAY_SIZE(smdk6410_buttons),
};
static struct platform_device smdk6410_device_button = {
.name = "gpio-keys",
.id = 1,
.dev = {
.platform_data = &smdk6410_button_data,
},
};
static struct platform_device *smdk6410_devices[] __initdata = {
更多相关文章
- android键盘钩子 android按键劫持
- android arm64硬件实现加速crc32算法
- Android 输入系统 与 按键
- 关于Android上面配置硬件加速的问题
- Android 7.1 Launcher3 支持按键操作显示所有应用
- Android系统移植(二)-按键移植
- 为Android扩展一个硬件模块需要做两件事: