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),那么我就要仔细的加输出信息帮助我们理解。
 

int s3c_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

static struct gpio_keys_button smdk6410_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,移动开发,driver,职场,休闲,powerButton,smdk6410)