|
@@ -284,3 +284,85 @@ static struct regulator_init_data omap3evm_vmmc1 = {
|
|
},
|
|
},
|
|
.num_consumer_supplies = ARRAY_SIZE(omap3evm_vmmc1_supply),
|
|
.num_consumer_supplies = ARRAY_SIZE(omap3evm_vmmc1_supply),
|
|
.consumer_supplies = omap3evm_vmmc1_supply,
|
|
.consumer_supplies = omap3evm_vmmc1_supply,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
|
|
|
|
+static struct regulator_init_data omap3evm_vsim = {
|
|
|
|
+ .constraints = {
|
|
|
|
+ .min_uV = 1800000,
|
|
|
|
+ .max_uV = 3000000,
|
|
|
|
+ .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(omap3evm_vsim_supply),
|
|
|
|
+ .consumer_supplies = omap3evm_vsim_supply,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct omap2_hsmmc_info mmc[] = {
|
|
|
|
+ {
|
|
|
|
+ .mmc = 1,
|
|
|
|
+ .caps = MMC_CAP_4_BIT_DATA,
|
|
|
|
+ .gpio_cd = -EINVAL,
|
|
|
|
+ .gpio_wp = 63,
|
|
|
|
+ .deferred = true,
|
|
|
|
+ },
|
|
|
|
+#ifdef CONFIG_WL12XX_PLATFORM_DATA
|
|
|
|
+ {
|
|
|
|
+ .name = "wl1271",
|
|
|
|
+ .mmc = 2,
|
|
|
|
+ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
|
|
|
|
+ .gpio_wp = -EINVAL,
|
|
|
|
+ .gpio_cd = -EINVAL,
|
|
|
|
+ .nonremovable = true,
|
|
|
|
+ },
|
|
|
|
+#endif
|
|
|
|
+ {} /* Terminator */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct gpio_led gpio_leds[] = {
|
|
|
|
+ {
|
|
|
|
+ .name = "omap3evm::ledb",
|
|
|
|
+ /* normally not visible (board underside) */
|
|
|
|
+ .default_trigger = "default-on",
|
|
|
|
+ .gpio = -EINVAL, /* gets replaced */
|
|
|
|
+ .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 int omap3evm_twl_gpio_setup(struct device *dev,
|
|
|
|
+ unsigned gpio, unsigned ngpio)
|
|
|
|
+{
|
|
|
|
+ int r, lcd_bl_en;
|
|
|
|
+
|
|
|
|
+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
|
|
|
+ mmc[0].gpio_cd = gpio + 0;
|
|
|
|
+ omap_hsmmc_late_init(mmc);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Most GPIOs are for USB OTG. Some are mostly sent to
|
|
|
|
+ * the P2 connector; notably LEDA for the LCD backlight.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
|
|
|
|
+ lcd_bl_en = get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2 ?
|
|
|
|
+ GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
|
|
|
|
+ r = gpio_request_one(gpio + TWL4030_GPIO_MAX, lcd_bl_en, "EN_LCD_BKL");
|
|
|
|
+ if (r)
|
|
|
|
+ printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
|