|
@@ -407,3 +407,92 @@ static uint32_t board_keymap[] = {
|
|
KEY(3, 7, KEY_LEFT),
|
|
KEY(3, 7, KEY_LEFT),
|
|
|
|
|
|
KEY(4, 0, KEY_T),
|
|
KEY(4, 0, KEY_T),
|
|
|
|
+ KEY(4, 1, KEY_DOWN),
|
|
|
|
+ KEY(4, 2, KEY_RIGHT),
|
|
|
|
+ KEY(4, 4, KEY_LEFTCTRL),
|
|
|
|
+ KEY(4, 5, KEY_RIGHTALT),
|
|
|
|
+ KEY(4, 6, KEY_LEFTSHIFT),
|
|
|
|
+ KEY(4, 8, KEY_F10),
|
|
|
|
+
|
|
|
|
+ KEY(5, 0, KEY_Y),
|
|
|
|
+ KEY(5, 8, KEY_F11),
|
|
|
|
+
|
|
|
|
+ KEY(6, 0, KEY_U),
|
|
|
|
+
|
|
|
|
+ KEY(7, 0, KEY_I),
|
|
|
|
+ KEY(7, 1, KEY_F7),
|
|
|
|
+ KEY(7, 2, KEY_F8),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct matrix_keymap_data board_map_data = {
|
|
|
|
+ .keymap = board_keymap,
|
|
|
|
+ .keymap_size = ARRAY_SIZE(board_keymap),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct twl4030_keypad_data rx51_kp_data = {
|
|
|
|
+ .keymap_data = &board_map_data,
|
|
|
|
+ .rows = 8,
|
|
|
|
+ .cols = 8,
|
|
|
|
+ .rep = 1,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* Enable input logic and pull all lines up when eMMC is on. */
|
|
|
|
+static struct omap_board_mux rx51_mmc2_on_mux[] = {
|
|
|
|
+ OMAP3_MUX(SDMMC2_CMD, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT0, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT1, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT2, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT3, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT4, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT5, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT6, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT7, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
|
|
|
|
+ { .reg_offset = OMAP_MUX_TERMINATOR },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* Disable input logic and pull all lines down when eMMC is off. */
|
|
|
|
+static struct omap_board_mux rx51_mmc2_off_mux[] = {
|
|
|
|
+ OMAP3_MUX(SDMMC2_CMD, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT0, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT1, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT2, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT3, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT4, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT5, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT6, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ OMAP3_MUX(SDMMC2_DAT7, OMAP_PULL_ENA | OMAP_MUX_MODE0),
|
|
|
|
+ { .reg_offset = OMAP_MUX_TERMINATOR },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct omap_mux_partition *partition;
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Current flows to eMMC when eMMC is off and the data lines are pulled up,
|
|
|
|
+ * so pull them down. N.B. we pull 8 lines because we are using 8 lines.
|
|
|
|
+ */
|
|
|
|
+static void rx51_mmc2_remux(struct device *dev, int slot, int power_on)
|
|
|
|
+{
|
|
|
|
+ if (power_on)
|
|
|
|
+ omap_mux_write_array(partition, rx51_mmc2_on_mux);
|
|
|
|
+ else
|
|
|
|
+ omap_mux_write_array(partition, rx51_mmc2_off_mux);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct omap2_hsmmc_info mmc[] __initdata = {
|
|
|
|
+ {
|
|
|
|
+ .name = "external",
|
|
|
|
+ .mmc = 1,
|
|
|
|
+ .caps = MMC_CAP_4_BIT_DATA,
|
|
|
|
+ .cover_only = true,
|
|
|
|
+ .gpio_cd = 160,
|
|
|
|
+ .gpio_wp = -EINVAL,
|
|
|
|
+ .power_saving = true,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "internal",
|
|
|
|
+ .mmc = 2,
|
|
|
|
+ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
|
|
|
+ /* See also rx51_mmc2_remux */
|
|
|
|
+ .gpio_cd = -EINVAL,
|
|
|
|
+ .gpio_wp = -EINVAL,
|
|
|
|
+ .nonremovable = true,
|