int __init latte_init_keypad(void)
{
	char *get_cid, *get_carrier, *get_keycaps;

	board_get_cid_tag(&get_cid);
	board_get_carrier_tag(&get_carrier);
	board_get_keycaps_tag(&get_keycaps);
	if (system_rev < 2) {
		latte_keypad_data.name = "latte-keypad-v0";
		latte_keypad_matrix_info.keymap =  latte_keymap_x0;
	}

	if (system_rev == 2)
		latte_keypad_data.name = "latte-keypad-v1";

	if (platform_device_register(&latte_reset_keys_device))
		printk(KERN_WARNING "%s: register reset key fail\n", __func__);

	return platform_device_register(&latte_keypad_device);
}
int __init chacha_init_keypad(void)
{
	char *get_cid;
	char *get_carrier;
	char *get_keycaps;
	uint8_t cid_len;

	KEY_LOGD("%s\n",	__func__);
	board_get_cid_tag(&get_cid);
	board_get_carrier_tag(&get_carrier);
	board_get_keycaps_tag(&get_keycaps);
	KEY_LOGI("%s: get CID: %s\n\tCarrier: %s, Keycaps: %s\n",
		__func__, get_cid, get_carrier, get_keycaps);
	cid_len = strlen(get_cid);

	if (cid_len) {
		if (strstr(SKU_BOPOMO, get_cid) != NULL) {

			chacha_keypad_data.name = "chacha-keypad-bopomo";

		} else if (strstr(SKU_FRA, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(0, 3)] = KEY_W;
			chacha_keymap[KEYMAP_INDEX(3, 0)] = KEY_Z;
			chacha_keymap[KEYMAP_INDEX(3, 4)] = KEY_A;
			chacha_keypad_nav_map[1].code = KEY_Q;
			chacha_keypad_data.name = "chacha-keypad-fra";

		} else if (strstr(SKU_ITA, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(4, 3)] = KEY_F15;
			chacha_keypad_data.name = "chacha-keypad-ita";

		} else if (strstr(SKU_TUR, get_cid) != NULL) {

			chacha_keypad_data.name = "chacha-keypad-tur";

		} else if (strstr(SKU_ELL, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(4, 3)] = KEY_F15;
			chacha_keypad_data.name = "chacha-keypad-ell";

		} else if (strstr(SKU_GER, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(0, 3)] = KEY_Y;
			chacha_keymap[KEYMAP_INDEX(5, 4)] = KEY_Z;
			chacha_keypad_data.name = "chacha-keypad-ger";

		} else if (strstr(SKU_ARA, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(4, 3)] = KEY_F15;
			chacha_keypad_data.name = "chacha-keypad-ara";

		} else if (strstr(SKU_ESN, get_cid) != NULL) {

			chacha_keypad_data.name = "chacha-keypad-esn";

		} else if (strstr(SKU_NOR, get_cid) != NULL) {

			chacha_keypad_data.name = "chacha-keypad-nor";

		} else if (strstr(SKU_RUS, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(4, 3)] = KEY_F15;
			chacha_keymap[KEYMAP_INDEX(3, 5)] = KEY_F16;
			chacha_keypad_data.name = "chacha-keypad-rus";

		} else if (strstr(SKU_HK, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(4, 3)] = KEY_F15;
			chacha_keypad_data.name = "chacha-keypad-hk";

		} else if (strstr(SKU_CN, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(4, 3)] = KEY_F15;
			chacha_keypad_data.name = "chacha-keypad-cn";

		} else if (strstr(SKU_AW, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(4, 3)] = KEY_F15;
			chacha_keypad_data.name = "chacha-keypad-aw";

		} else if (strstr(SKU_THAI, get_cid) != NULL) {

			chacha_keymap[KEYMAP_INDEX(4, 3)] = KEY_F15;
			chacha_keypad_data.name = "chacha-keypad-tai";

		} else if (strstr(SKU_STROKE_ENG, get_cid) != NULL) {

			chacha_keypad_data.name = "chacha-keypad-steng";

		} else {

			if (strstr(SKU_WWE, get_cid) == NULL)
				KEY_LOGI("%s: CID not matched\n", __func__);

		}
	}

	if (platform_device_register(&chacha_reset_keys_device))
		KEY_LOGE("%s: register reset key fail\n", __func__);

	return platform_device_register(&chacha_keypad_device);
}
int __init vision_init_keypad(void)
{
	char *get_cid;
	char *get_carrier;
	char *get_keycaps;
	uint8_t cid_len;

	printk(KERN_DEBUG "%s\n",	__func__);
	board_get_cid_tag(&get_cid);
	board_get_carrier_tag(&get_carrier);
	board_get_keycaps_tag(&get_keycaps);
	printk(KERN_DEBUG "%s: get CID: %s\n\tCarrier: %s, Keycaps: %s\n",
		__func__, get_cid, get_carrier, get_keycaps);
	cid_len = strlen(get_cid);

	if (cid_len) {
		if (strstr(SKU_WWE, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-wwe";

		} else if (strstr(SKU_WWE_BOPOMO, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-wwe-bopomo";

		} else if (strstr(SKU_FRA, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(0, 2)] = KEY_APOSTROPHE;
			vision_pmic_keymap[KEYMAP_INDEX(5, 0)] = KEY_SEARCH;
			vision_pmic_keymap[KEYMAP_INDEX(5, 1)] = KEY_W;
			vision_pmic_keymap[KEYMAP_INDEX(5, 4)] = KEY_Q;
			vision_pmic_keymap[KEYMAP_INDEX(5, 5)] = KEY_Z;
			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_pmic_keymap[KEYMAP_INDEX(6, 5)] = KEY_A;
			vision_keypad_data.name = "vision-keypad-fra";

		} else if (strstr(SKU_ITA, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-ita";

		} else if (strstr(SKU_TUR, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(0, 2)] = KEY_APOSTROPHE;
			vision_pmic_keymap[KEYMAP_INDEX(5, 0)] = KEY_SEARCH;
			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-tur";

		} else if (strstr(SKU_ELL, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-ell";

		} else if (strstr(SKU_GER, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(0, 2)] = KEY_SLASH;
			vision_pmic_keymap[KEYMAP_INDEX(3, 5)] = KEY_Z;
			vision_pmic_keymap[KEYMAP_INDEX(5, 0)] = KEY_SEARCH;
			vision_pmic_keymap[KEYMAP_INDEX(5, 1)] = KEY_Y;
			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-ger";

		} else if (strstr(SKU_ARA, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(0, 2)] = KEY_F16;
			vision_pmic_keymap[KEYMAP_INDEX(5, 0)] = KEY_SEARCH;
			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-ara";

		} else if (strstr(SKU_ESN, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(0, 2)] = KEY_APOSTROPHE;
			vision_pmic_keymap[KEYMAP_INDEX(5, 0)] = KEY_SEARCH;
			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-esn";

		} else if (strstr(SKU_NOR, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(0, 1)] = KEY_F16;
			vision_pmic_keymap[KEYMAP_INDEX(0, 2)] = KEY_F17;
			vision_pmic_keymap[KEYMAP_INDEX(1, 2)] = KEY_F18;
			vision_pmic_keymap[KEYMAP_INDEX(5, 0)] = KEY_SEARCH;
			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-nor";

		} else if (strstr(SKU_RUS, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(0, 1)] = KEY_F16;
			vision_pmic_keymap[KEYMAP_INDEX(0, 2)] = KEY_SEMICOLON;
			vision_pmic_keymap[KEYMAP_INDEX(0, 6)] = KEY_F17;
			vision_pmic_keymap[KEYMAP_INDEX(2, 0)] = KEY_F18;
			vision_pmic_keymap[KEYMAP_INDEX(4, 0)] = KEY_DOT;
			vision_pmic_keymap[KEYMAP_INDEX(5, 0)] = KEY_SEARCH;
			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-rus";

		} else if (strstr(SKU_HK, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-hk";

		} else if (strstr(SKU_SEA, get_cid) != NULL) {

			vision_pmic_keymap[KEYMAP_INDEX(6, 3)] = KEY_TAB;
			vision_keypad_data.name = "vision-keypad-sea";

		}
	}

	if (platform_device_register(&vision_reset_keys_device))
		printk(KERN_WARNING "%s: register reset key fail\n", __func__);

	return platform_device_register(&vision_keypad_input_device);
}