1.kernel部分修改
在mach-itop4412.c(arch/arm/mach-exynos下)static struct gpio_keys_button gpio_buttons[]添加
{
.gpio = EXYNOS4_GPX2(6),
//.code = 38,
.code = KEY_YCC_PHONE,
.desc = "BUTTON6",
.active_low = 1,
.wakeup = 0,
},
{
.gpio = EXYNOS4_GPX3(5),
//.code = 38,
.code = KEY_YCC_BREAK,
.desc = "BUTTON7",
.active_low = 1,
.wakeup = 0,
}
由于我所用的引脚冲突,需要在setup-keypad.c(arch/arm/mach-exynos下)注释掉冲突引脚,代码如下
#include <linux/gpio.h>
#include <plat/gpio-cfg.h>
void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols)
{
/* Keypads can be of various combinations, Just making sure */
#if defined(CONFIG_CPU_TYPE_SCP_SUPPER) || defined(CONFIG_CPU_TYPE_POP_SUPPER) || defined(CONFIG_CPU_TYPE_POP2G_SUPPER)
/* Set all the necessary GPX2 pins: KP_ROW[x] */
s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), 2,
S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
/*GPL2: KP_COL[x] */
s3c_gpio_cfgrange_nopull(EXYNOS4_GPL2(0), 1, S3C_GPIO_SFN(3));
#elif defined(CONFIG_CPU_TYPE_SCP_ELITE) || defined(CONFIG_CPU_TYPE_POP_ELITE) || defined(CONFIG_CPU_TYPE_POP2G_ELITE)
//ROW_6
/*s3c_gpio_cfgall_range(EXYNOS4_GPX2(6), 1,
S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
//ROW_7
s3c_gpio_cfgall_range(EXYNOS4_GPX2(7), 1,
S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
//ROW_8
s3c_gpio_cfgall_range(EXYNOS4_GPX3(0), 1,
S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
//ROW_13
s3c_gpio_cfgall_range(EXYNOS4_GPX3(5), 1,
S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
//COL_0
s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(0), 1, S3C_GPIO_SFN(3));
//COL_3
s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(3), 1, S3C_GPIO_SFN(3));
//COL_5
s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(5), 1, S3C_GPIO_SFN(3));
//COL_6
s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(6), 1, S3C_GPIO_SFN(3));*/
#endif
}
为了后面安卓系统调用,修改input.h(include/linux下)添加按键定义
#define KEY_YCC_PHONE 251
#define KEY_YCC_BREAK 252
linux部分修改就这样了
2.安卓部分修改,有点多
首先需要修改的是和kernel对应的文件Generic.kl(iTop4412_ICS_git\frameworks\base\data\keyboards)
key 251 KEY_YCC_PHONE
key 252 KEY_YCC_BREAK
然后依次修改下面文件了ANPKeyCodes.h(iTop4412_ICS_git\external\webkit\Source\WebKit\android\plugins)的enum ANPKeyCodes 下添加
kKeyYccPhone_ANPKeyCode = 211,
kKeyYccBreak_ANPKeyCode = 212,
attrs.xml(iTop4412_ICS_git\frameworks\base\core\res\res\values)的<attr name="keycode">下添加
<enum name="KEYCODE_KEY_YCC_PHONE" value="211" />
<enum name="KEYCODE_KEY_YCC_BREAK" value="212" />
Input.cpp(iTop4412_ICS_git\frameworks\base\libs\ui)的bool KeyEvent::isSystemKey(int32_t keyCode) 下添加
case AKEYCODE_KEY_YCC_PHONE:
case AKEYCODE_KEY_YCC_BREAK:
KeycodeLabels.h(iTop4412_ICS_git\frameworks\base\include\ui)的static const KeycodeLabel KEYCODES[]下添加
{ "KEY_YCC_PHONE", 211 },
{ "KEY_YCC_BREAK", 212 },
keycodes.h(iTop4412_ICS_git\frameworks\base\native\include\android)下添加
AKEYCODE_KEY_YCC_PHONE = 211,
AKEYCODE_KEY_YCC_BREAK = 212,
KeyEvent.java(iTop4412_ICS_git\frameworks\base\core\java\android\view)的public class KeyEvent extends InputEvent implements Parcelable下面添加
/** {@hide} */
public static final int KEYCODE_KEY_YCC_PHONE = 211;
/** {@hide} */
public static final int KEYCODE_KEY_YCC_BREAK = 212;
还有 private static void populateKeycodeSymbolicNames()里面添加
names.append(KEYCODE_KEY_YCC_PHONE, "KEYCODE_KEY_YCC_PHONE");
names.append(KEYCODE_KEY_YCC_BREAK, "KEYCODE_KEY_YCC_BREAK");
其实仔细看一下KeyEvent.java文件的public class KeyEvent extends InputEvent implements Parcelable下面有一段说明的
// NOTE: If you add a new keycode here you must also add it to:
// isSystem()
// native/include/android/keycodes.h
// frameworks/base/include/ui/KeycodeLabels.h
// external/webkit/WebKit/android/plugins/ANPKeyCodes.h
// frameworks/base/core/res/res/values/attrs.xml
// emulator?
// LAST_KEYCODE
// KEYCODE_SYMBOLIC_NAMES
//
// Also Android currently does not reserve code ranges for vendor-
// specific key codes. If you have new key codes to have, you
// MUST contribute a patch to the open source project to define
// those new codes. This is intended to maintain a consistent
// set of key code definitions across all Android devices.
// Symbolic names of all key codes.
写了需要修改的文件,可以按照他说的修改,名字什么的都是需要对应的,还需要和kernel对应起来,Android才能识别到kernel里面的按键
公司破电脑编译个Android真慢!
本人同时在搞uboot和kernel移植,uboot201607移植已经成功,kernel4.1.36移植也成功,在搞驱动中,有兴趣的可以一起学习,互相交流
QQ:792452536 QQ群:454224407