|
@@ -109,3 +109,195 @@ static struct gpio_keys_button ldp_gpio_keys_buttons[] = {
|
|
|
.debounce_interval = 30,
|
|
|
},
|
|
|
[3] = {
|
|
|
+ .code = KEY_F3,
|
|
|
+ .gpio = 104,
|
|
|
+ .desc = "func 3",
|
|
|
+ .active_low = 1,
|
|
|
+ .debounce_interval = 30,
|
|
|
+ },
|
|
|
+ [4] = {
|
|
|
+ .code = KEY_F4,
|
|
|
+ .gpio = 105,
|
|
|
+ .desc = "func 4",
|
|
|
+ .active_low = 1,
|
|
|
+ .debounce_interval = 30,
|
|
|
+ },
|
|
|
+ [5] = {
|
|
|
+ .code = KEY_LEFT,
|
|
|
+ .gpio = 106,
|
|
|
+ .desc = "left sw",
|
|
|
+ .active_low = 1,
|
|
|
+ .debounce_interval = 30,
|
|
|
+ },
|
|
|
+ [6] = {
|
|
|
+ .code = KEY_RIGHT,
|
|
|
+ .gpio = 107,
|
|
|
+ .desc = "right sw",
|
|
|
+ .active_low = 1,
|
|
|
+ .debounce_interval = 30,
|
|
|
+ },
|
|
|
+ [7] = {
|
|
|
+ .code = KEY_UP,
|
|
|
+ .gpio = 108,
|
|
|
+ .desc = "up sw",
|
|
|
+ .active_low = 1,
|
|
|
+ .debounce_interval = 30,
|
|
|
+ },
|
|
|
+ [8] = {
|
|
|
+ .code = KEY_DOWN,
|
|
|
+ .gpio = 109,
|
|
|
+ .desc = "down sw",
|
|
|
+ .active_low = 1,
|
|
|
+ .debounce_interval = 30,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct gpio_keys_platform_data ldp_gpio_keys = {
|
|
|
+ .buttons = ldp_gpio_keys_buttons,
|
|
|
+ .nbuttons = ARRAY_SIZE(ldp_gpio_keys_buttons),
|
|
|
+ .rep = 1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device ldp_gpio_keys_device = {
|
|
|
+ .name = "gpio-keys",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &ldp_gpio_keys,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_smsc911x_platform_data smsc911x_cfg = {
|
|
|
+ .cs = LDP_SMSC911X_CS,
|
|
|
+ .gpio_irq = LDP_SMSC911X_GPIO,
|
|
|
+ .gpio_reset = -EINVAL,
|
|
|
+ .flags = SMSC911X_USE_32BIT,
|
|
|
+};
|
|
|
+
|
|
|
+static inline void __init ldp_init_smsc911x(void)
|
|
|
+{
|
|
|
+ gpmc_smsc911x_init(&smsc911x_cfg);
|
|
|
+}
|
|
|
+
|
|
|
+/* LCD */
|
|
|
+
|
|
|
+static int ldp_backlight_gpio;
|
|
|
+static int ldp_lcd_enable_gpio;
|
|
|
+
|
|
|
+#define LCD_PANEL_RESET_GPIO 55
|
|
|
+#define LCD_PANEL_QVGA_GPIO 56
|
|
|
+
|
|
|
+static int ldp_panel_enable_lcd(struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+ if (gpio_is_valid(ldp_lcd_enable_gpio))
|
|
|
+ gpio_direction_output(ldp_lcd_enable_gpio, 1);
|
|
|
+ if (gpio_is_valid(ldp_backlight_gpio))
|
|
|
+ gpio_direction_output(ldp_backlight_gpio, 1);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void ldp_panel_disable_lcd(struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+ if (gpio_is_valid(ldp_lcd_enable_gpio))
|
|
|
+ gpio_direction_output(ldp_lcd_enable_gpio, 0);
|
|
|
+ if (gpio_is_valid(ldp_backlight_gpio))
|
|
|
+ gpio_direction_output(ldp_backlight_gpio, 0);
|
|
|
+}
|
|
|
+
|
|
|
+static struct panel_generic_dpi_data ldp_panel_data = {
|
|
|
+ .name = "nec_nl2432dr22-11b",
|
|
|
+ .platform_enable = ldp_panel_enable_lcd,
|
|
|
+ .platform_disable = ldp_panel_disable_lcd,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_dss_device ldp_lcd_device = {
|
|
|
+ .name = "lcd",
|
|
|
+ .driver_name = "generic_dpi_panel",
|
|
|
+ .type = OMAP_DISPLAY_TYPE_DPI,
|
|
|
+ .phy.dpi.data_lines = 18,
|
|
|
+ .data = &ldp_panel_data,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_dss_device *ldp_dss_devices[] = {
|
|
|
+ &ldp_lcd_device,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_dss_board_info ldp_dss_data = {
|
|
|
+ .num_devices = ARRAY_SIZE(ldp_dss_devices),
|
|
|
+ .devices = ldp_dss_devices,
|
|
|
+ .default_device = &ldp_lcd_device,
|
|
|
+};
|
|
|
+
|
|
|
+static void __init ldp_display_init(void)
|
|
|
+{
|
|
|
+ int r;
|
|
|
+
|
|
|
+ static struct gpio gpios[] __initdata = {
|
|
|
+ {LCD_PANEL_RESET_GPIO, GPIOF_OUT_INIT_HIGH, "LCD RESET"},
|
|
|
+ {LCD_PANEL_QVGA_GPIO, GPIOF_OUT_INIT_HIGH, "LCD QVGA"},
|
|
|
+ };
|
|
|
+
|
|
|
+ r = gpio_request_array(gpios, ARRAY_SIZE(gpios));
|
|
|
+ if (r) {
|
|
|
+ pr_err("Cannot request LCD GPIOs, error %d\n", r);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ omap_display_init(&ldp_dss_data);
|
|
|
+}
|
|
|
+
|
|
|
+static int ldp_twl_gpio_setup(struct device *dev, unsigned gpio, unsigned ngpio)
|
|
|
+{
|
|
|
+ int r;
|
|
|
+
|
|
|
+ struct gpio gpios[] = {
|
|
|
+ {gpio + 7 , GPIOF_OUT_INIT_LOW, "LCD ENABLE"},
|
|
|
+ {gpio + 15, GPIOF_OUT_INIT_LOW, "LCD BACKLIGHT"},
|
|
|
+ };
|
|
|
+
|
|
|
+ r = gpio_request_array(gpios, ARRAY_SIZE(gpios));
|
|
|
+ if (r) {
|
|
|
+ pr_err("Cannot request LCD GPIOs, error %d\n", r);
|
|
|
+ ldp_backlight_gpio = -EINVAL;
|
|
|
+ ldp_lcd_enable_gpio = -EINVAL;
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+
|
|
|
+ ldp_backlight_gpio = gpio + 15;
|
|
|
+ ldp_lcd_enable_gpio = gpio + 7;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct twl4030_gpio_platform_data ldp_gpio_data = {
|
|
|
+ .setup = ldp_twl_gpio_setup,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply ldp_vmmc1_supply[] = {
|
|
|
+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
|
|
|
+};
|
|
|
+
|
|
|
+/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
|
|
|
+static struct regulator_init_data ldp_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(ldp_vmmc1_supply),
|
|
|
+ .consumer_supplies = ldp_vmmc1_supply,
|
|
|
+};
|
|
|
+
|
|
|
+/* ads7846 on SPI */
|
|
|
+static struct regulator_consumer_supply ldp_vaux1_supplies[] = {
|
|
|
+ REGULATOR_SUPPLY("vcc", "spi1.0"),
|
|
|
+};
|
|
|
+
|
|
|
+/* VAUX1 */
|
|
|
+static struct regulator_init_data ldp_vaux1 = {
|
|
|
+ .constraints = {
|
|
|
+ .min_uV = 3000000,
|