微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于Dragon Board 410c开发板的按键和轨迹球驱动实现代码

基于Dragon Board 410c开发板的按键和轨迹球驱动实现代码

时间:02-21 来源:互联网 点击:

前言:

在上一篇博客《基于Dragon Board 410c开发板的触摸屏驱动编写》中,我已经描述了触摸屏驱动编写过程,以及其架构,这篇博客我会跟大家讲述一下按键和轨迹球驱动。

一、按键和轨迹球驱动

MSM具有按键和轨迹球的功能,对应的驱动程序在文件arch/arm/mach-msm/board-mahimahi-keypad.c中,接下来开始介绍此文件的实现流程。

(1)文件board-mahimahi-keypad.c中的全局定义代码如下所示:

staTIc struct gpio_event_info *mahimahi_input_info[] = {  
    &mahimahi_keypad_matrix_info.info,      // 键盘矩阵  
    &mahimahi_keypad_key_info.info,         // 键盘信息  
    &jogball_x_axis.info.info,              // 轨迹球X方向信息  
    &jogball_y_axis.info.info,              // 轨迹球Y方向信息  
};  
staTIc struct gpio_event_platform_data mahimahi_input_data = {  
    .names = {  
        "mahimahi-keypad",                  // 按键设备  
        "mahimahi-nav",                     // 轨迹球设备  
        NULL,  
    },  
    .info = mahimahi_input_info,  
    .info_count = ARRAY_SIZE(mahimahi_input_info),  
    .power = jogball_power,  
};


staTIc struct platform_device mahimahi_input_device = {  
    .name = GPIO_EVENT_DEV_NAME,  
    .id = 0,  
    .dev = {  
        .platform_data = &mahimahi_input_data,  
    },  
}; 

按键和轨迹球是通过GPIO系统来实现的,因此定义了gpio_event_info类型的数组。

"mahimahi-keypad"和"mahimahi-nav"分别是两个设备的名称。

gpio_event_info 指针各式的数组mahimahi_input_info中包含了mahimahi_keypad_matrix_info.info,mahimahi_keypad_key_ info.info,jogball_x_axis.info.info和jogball_y_axis.info.info。

按键驱动是一个利用GPIO矩阵的驱动,由gpio_event_matrix_info矩阵定义,定义还需要包含按键的GPIO矩阵和input设备的信息,内容如下所示:

staTIc unsigned int mahimahi_col_gpios[] = { 33, 32, 31 };

static unsigned int mahimahi_row_gpios[] = { 42, 41, 40 };

#define KEYMAP_INDEX(col, row)  ((col)*ARRAY_
SIZE(mahimahi_row_gpios) + (row))  
#define KEYMAP_SIZE     (ARRAY_SIZE(mahimahi_col_gpios) * \  
                 ARRAY_SIZE(mahimahi_row_gpios))  
static const unsigned short mahimahi_keymap
[KEYMAP_SIZE] = {         // 按键映射关系  
    [KEYMAP_INDEX(0, 0)] = KEY_VOLUMEUP, /* 115 */  
    [KEYMAP_INDEX(0, 1)] = KEY_VOLUMEDOWN, /* 114 */  
    [KEYMAP_INDEX(1, 1)] = MATRIX_KEY(1, BTN_MOUSE),  
};  
static struct gpio_event_matrix_info mahimahi
_keypad_matrix_info = {  
    .info.func = gpio_event_matrix_func,     
// 关键函数实现  
    .keymap = mahimahi_keymap,  
    .output_gpios = mahimahi_col_gpios,  
    .input_gpios = mahimahi_row_gpios,  
    .noutputs = ARRAY_SIZE(mahimahi_col_gpios),  
    .ninputs = ARRAY_SIZE(mahimahi_row_gpios),  
    .settle_time.tv.nsec = 40 * NSEC_PER_USEC,  
    .poll_time.tv.nsec = 20 * NSEC_PER_MSEC,  
    .flags = (GPIOKPF_LEVEL_TRIGGERED_IRQ |  
          GPIOKPF_REMOVE_PHANTOM_KEYS |  
          GPIOKPF_PRINT_UNMAPPED_KEYS),  
};  
static struct gpio_event_direct_entry mahimahi_
keypad_key_map[] = { // Power按键  
    {  
        .gpio   = MAHIMAHI_GPIO_POWER_KEY,  
        .code   = KEY_POWER,  
    },  
};  
static struct gpio_event_input_info mahimahi_
keypad_key_info = {  
    .info.func = gpio_event_input_func,       
// 关键函数实现  
    .info.no_suspend = true,  
    .flags = 0,  
    .type = EV_KEY,  
    .keymap = mahimahi_keypad_key_map,  
    .keymap_size = ARRAY_SIZE(mahimahi_keypad_key_map)  
}; 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top