本来想直接利用内核中的按键驱动,在板文件中添加下面的平台信息,但是按键没有用,发现存在下面的一些现象:
1.在dev/input下面没有生成event*设备文件(只有一个mice文件,我已经在内核配置中选择了keyboards->gpio buttons,这个问题最为严重,没有找到原因,请指点!!)
2.在sys/devices/platform目录下已经存在gpio-keys说明按键的平台信息还是添加进去啦
做过下面的尝试:
1.把下面的.gpio =S3C2410_GPG0_EINT8, ,改成gpio =S3C2410_GPG0 这是无奈之下这样做了,我不太清楚这个地方是填写哪个
2.修改了一下gpio_keys.c :添加了
int s3c_gpio_keys[] = {
IRQ_EINT8,
IRQ_EINT11,
IRQ_EINT13,
IRQ_EINT14,
IRQ_EINT15,
IRQ_EINT19,
};
在gpio_keys_probe函数中获取中断号的代码改成 irq = s3c_gpio_keys;
这种方法也没有成功
在友善公司自己带的linux2.9.24.4内核的
static struct gpio_keys_button mini2440_buttons[] = {
{
.gpio =S3C2410_GPG0_EINT8, //按键1,
.code = KEY_DOWN,
.desc = "DOWN",
.active_low = 1,
},
{
.gpio = S3C2410_GPG3_EINT11, // 按键2
.code = KEY_UP,
.desc = "Up",
.active_low = 1,
},
{
.gpio = S3C2410_GPG5_EINT13, //按键3
.code = KEY_LEFT,
.desc = "Left",
.active_low =1,
},
{
.gpio = S3C2410_GPG6_EINT14, //按键4
.code = KEY_RIGHT,
.desc = "Right",
.active_low =1,
},
{
.gpio = S3C2410_GPG7_EINT15, //按键5
.code = KEY_TAB,
.desc = "Tab",
.active_low =1,
},
{
.gpio =S3C2410_GPG11_EINT19, //按键6
.code = KEY_POWER,
.desc = "Power",
.active_low =1,
},
};
static struct gpio_keys_platform_data mini2440_button_data = {
.buttons = mini2440_buttons,
.nbuttons = ARRAY_SIZE(mini2440_buttons),
};
static struct platform_device mini2440_device_button = {
.name = "gpio_keys",
.id = -1,
.dev = {
.platform_data = &mini2440_button_data,
},
};
static struct platform_device *mini2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_nand,
&mini2440_device_dm9k,
&s3c_device_rtc,
&mini2440_device_led,
&mini2440_device_button, //添加平台设备
};