|
@@ -174,3 +174,197 @@ static struct omap_dss_board_info devkit8000_dss_data = {
|
|
|
|
|
|
static uint32_t board_keymap[] = {
|
|
static uint32_t board_keymap[] = {
|
|
KEY(0, 0, KEY_1),
|
|
KEY(0, 0, KEY_1),
|
|
|
|
+ KEY(1, 0, KEY_2),
|
|
|
|
+ KEY(2, 0, KEY_3),
|
|
|
|
+ KEY(0, 1, KEY_4),
|
|
|
|
+ KEY(1, 1, KEY_5),
|
|
|
|
+ KEY(2, 1, KEY_6),
|
|
|
|
+ KEY(3, 1, KEY_F5),
|
|
|
|
+ KEY(0, 2, KEY_7),
|
|
|
|
+ KEY(1, 2, KEY_8),
|
|
|
|
+ KEY(2, 2, KEY_9),
|
|
|
|
+ KEY(3, 2, KEY_F6),
|
|
|
|
+ KEY(0, 3, KEY_F7),
|
|
|
|
+ KEY(1, 3, KEY_0),
|
|
|
|
+ KEY(2, 3, KEY_F8),
|
|
|
|
+ PERSISTENT_KEY(4, 5),
|
|
|
|
+ KEY(4, 4, KEY_VOLUMEUP),
|
|
|
|
+ KEY(5, 5, KEY_VOLUMEDOWN),
|
|
|
|
+ 0
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct matrix_keymap_data board_map_data = {
|
|
|
|
+ .keymap = board_keymap,
|
|
|
|
+ .keymap_size = ARRAY_SIZE(board_keymap),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct twl4030_keypad_data devkit8000_kp_data = {
|
|
|
|
+ .keymap_data = &board_map_data,
|
|
|
|
+ .rows = 6,
|
|
|
|
+ .cols = 6,
|
|
|
|
+ .rep = 1,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct gpio_led gpio_leds[];
|
|
|
|
+
|
|
|
|
+static int devkit8000_twl_gpio_setup(struct device *dev,
|
|
|
|
+ unsigned gpio, unsigned ngpio)
|
|
|
|
+{
|
|
|
|
+ int ret;
|
|
|
|
+
|
|
|
|
+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
|
|
|
+ mmc[0].gpio_cd = gpio + 0;
|
|
|
|
+ omap_hsmmc_late_init(mmc);
|
|
|
|
+
|
|
|
|
+ /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
|
|
|
+ gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
|
|
|
+
|
|
|
|
+ /* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */
|
|
|
|
+ devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0;
|
|
|
|
+ ret = gpio_request_one(devkit8000_lcd_device.reset_gpio,
|
|
|
|
+ GPIOF_OUT_INIT_LOW, "LCD_PWREN");
|
|
|
|
+ if (ret < 0) {
|
|
|
|
+ devkit8000_lcd_device.reset_gpio = -EINVAL;
|
|
|
|
+ printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* gpio + 7 is "DVI_PD" (out, active low) */
|
|
|
|
+ dvi_panel.power_down_gpio = gpio + 7;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct twl4030_gpio_platform_data devkit8000_gpio_data = {
|
|
|
|
+ .use_leds = true,
|
|
|
|
+ .pulldowns = BIT(1) | BIT(2) | BIT(6) | BIT(8) | BIT(13)
|
|
|
|
+ | BIT(15) | BIT(16) | BIT(17),
|
|
|
|
+ .setup = devkit8000_twl_gpio_setup,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct regulator_consumer_supply devkit8000_vpll1_supplies[] = {
|
|
|
|
+ REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
|
|
|
|
+ REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
|
|
|
|
+static struct regulator_init_data devkit8000_vmmc1 = {
|
|
|
|
+ .constraints = {
|
|
|
|
+ .min_uV = 1850000,
|
|
|
|
+ .max_uV = 3150000,
|
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
|
+ | REGULATOR_CHANGE_MODE
|
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
|
+ },
|
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(devkit8000_vmmc1_supply),
|
|
|
|
+ .consumer_supplies = devkit8000_vmmc1_supply,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* VPLL1 for digital video outputs */
|
|
|
|
+static struct regulator_init_data devkit8000_vpll1 = {
|
|
|
|
+ .constraints = {
|
|
|
|
+ .min_uV = 1800000,
|
|
|
|
+ .max_uV = 1800000,
|
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_MODE
|
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
|
+ },
|
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(devkit8000_vpll1_supplies),
|
|
|
|
+ .consumer_supplies = devkit8000_vpll1_supplies,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* VAUX4 for ads7846 and nubs */
|
|
|
|
+static struct regulator_init_data devkit8000_vio = {
|
|
|
|
+ .constraints = {
|
|
|
|
+ .min_uV = 1800000,
|
|
|
|
+ .max_uV = 1800000,
|
|
|
|
+ .apply_uV = true,
|
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_MODE
|
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
|
+ },
|
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(devkit8000_vio_supply),
|
|
|
|
+ .consumer_supplies = devkit8000_vio_supply,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct twl4030_platform_data devkit8000_twldata = {
|
|
|
|
+ /* platform_data for children goes here */
|
|
|
|
+ .gpio = &devkit8000_gpio_data,
|
|
|
|
+ .vmmc1 = &devkit8000_vmmc1,
|
|
|
|
+ .vpll1 = &devkit8000_vpll1,
|
|
|
|
+ .vio = &devkit8000_vio,
|
|
|
|
+ .keypad = &devkit8000_kp_data,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static int __init devkit8000_i2c_init(void)
|
|
|
|
+{
|
|
|
|
+ omap3_pmic_get_config(&devkit8000_twldata,
|
|
|
|
+ TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_AUDIO,
|
|
|
|
+ TWL_COMMON_REGULATOR_VDAC);
|
|
|
|
+ omap3_pmic_init("tps65930", &devkit8000_twldata);
|
|
|
|
+ /* Bus 3 is attached to the DVI port where devices like the pico DLP
|
|
|
|
+ * projector don't work reliably with 400kHz */
|
|
|
|
+ omap_register_i2c_bus(3, 400, NULL, 0);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct gpio_led gpio_leds[] = {
|
|
|
|
+ {
|
|
|
|
+ .name = "led1",
|
|
|
|
+ .default_trigger = "heartbeat",
|
|
|
|
+ .gpio = 186,
|
|
|
|
+ .active_low = true,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "led2",
|
|
|
|
+ .default_trigger = "mmc0",
|
|
|
|
+ .gpio = 163,
|
|
|
|
+ .active_low = true,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "ledB",
|
|
|
|
+ .default_trigger = "none",
|
|
|
|
+ .gpio = 153,
|
|
|
|
+ .active_low = true,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "led3",
|
|
|
|
+ .default_trigger = "none",
|
|
|
|
+ .gpio = 164,
|
|
|
|
+ .active_low = true,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct gpio_led_platform_data gpio_led_info = {
|
|
|
|
+ .leds = gpio_leds,
|
|
|
|
+ .num_leds = ARRAY_SIZE(gpio_leds),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device leds_gpio = {
|
|
|
|
+ .name = "leds-gpio",
|
|
|
|
+ .id = -1,
|
|
|
|
+ .dev = {
|
|
|
|
+ .platform_data = &gpio_led_info,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct gpio_keys_button gpio_buttons[] = {
|
|
|
|
+ {
|
|
|
|
+ .code = BTN_EXTRA,
|
|
|
|
+ .gpio = 26,
|
|
|
|
+ .desc = "user",
|
|
|
|
+ .wakeup = 1,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct gpio_keys_platform_data gpio_key_info = {
|
|
|
|
+ .buttons = gpio_buttons,
|
|
|
|
+ .nbuttons = ARRAY_SIZE(gpio_buttons),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device keys_gpio = {
|
|
|
|
+ .name = "gpio-keys",
|
|
|
|
+ .id = -1,
|