基于Dragon Board 410c开发板的按键和轨迹球驱动实现代码
keypad_key_matrix _info和keypad _info是gpio_event_matrix_info类型的结构体,分别负责两个和一个按键的处理,
实际上,MSM平台基本上只有三个按键:Power,音量增加按键和音量减少按键。音量增加和音量减少的扫描码分别是KEY_VOLUMEUP(=115)和KEY_VOLUMEDOWN(=114)。
提示:音量控制的两个按键在全键盘的qwerty.kl有所定义,同时符合Linux的input设备和Android的按键标准。
轨迹球部分也是由GPIO实现的,由X方向和Y方向两部分组成,内容如下所示:
static uint32_t jogball_x_gpios[] = {
MAHIMAHI_GPIO_BALL_LEFT, MAHIMAHI_GPIO_BALL_RIGHT,
};
static uint32_t jogball_y_gpios[] = {
MAHIMAHI_GPIO_BALL_UP, MAHIMAHI_GPIO_BALL_DOWN,
};
static struct jog_axis_info jogball_x_axis = {
// X轴的内容
.info = {
.info.func = gpio_event_axis_func,
// 关键函数实现
.count = ARRAY_SIZE(jogball_x_gpios),
.dev = 1,
.type = EV_REL,
.code = REL_X,
.decoded_size = 1U << ARRAY_SIZE(jogball_x_gpios),
.map = jogball_axis_map,
.gpio = jogball_x_gpios,
.flags = GPIOEAF_PRINT_UNKNOWN_DIRECTION,
}
};
static struct jog_axis_info jogball_y_axis = {
// Y轴的内容
.info = {
.info.func = gpio_event_axis_func,
// 关键函数实现
.count = ARRAY_SIZE(jogball_y_gpios)
.dev = 1,
.type = EV_REL,
.code = REL_Y,
.decoded_size = 1U << ARRAY_SIZE(jogball_y_gpios),
.map = jogball_axis_map,
.gpio = jogball_y_gpios,
.flags = GPIOEAF_PRINT_UNKNOWN_DIRECTION,
}
};
在上述代码中,这里的轨迹球是用jog_axis_info类型的结构体进行定义的,这种设备的类型(type)是相对设备EV_REL。
注意:除了默认的AVRCP.kl和qwerty.kl之外,在MSM8916平台中新增了文件h2w_headset.kl文件。
DragonBoard 410c 开发板 相关文章:
