omap: panda: add mmc5/wl1271 device support
authorPanduranga Mallireddy <panduranga_mallireddy@ti.com>
Tue, 15 Feb 2011 08:40:35 +0000 (03:40 -0500)
committerTony Lindgren <tony@atomide.com>
Tue, 22 Feb 2011 16:37:03 +0000 (08:37 -0800)
Add MMC5 support on PANDA, which has the wl1271 device hardwired to.

The wl1271 is a 4-wire, 1.8V, embedded SDIO WLAN device with an
external IRQ line, and power-controlled by a GPIO-based fixed regulator.

Based on the patch for mmc3/wl1271 device support for zoom by Ohad
Ben-Cohen <ohad@wizery.com>
Signed-off-by: Panduranga Mallireddy <panduranga_mallireddy@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/board-omap4panda.c

index d56bef15d3c5c66c4fb7c2723209a4e5526a73a5..3dd241b9515970491d0e97e1ff0c0f1ee76d88b0 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/i2c/twl.h>
 #include <linux/regulator/machine.h>
 #include <linux/regulator/fixed.h>
+#include <linux/wl12xx.h>
 
 #include <mach/hardware.h>
 #include <mach/omap4-common.h>
@@ -47,6 +48,7 @@
 #define GPIO_HUB_POWER         1
 #define GPIO_HUB_NRESET                62
 #define GPIO_WIFI_PMENA                43
+#define GPIO_WIFI_IRQ          53
 
 static struct gpio_led gpio_leds[] = {
        {
@@ -163,6 +165,15 @@ static struct omap2_hsmmc_info mmc[] = {
                .gpio_wp        = -EINVAL,
                .gpio_cd        = -EINVAL,
        },
+       {
+               .name           = "wl1271",
+               .mmc            = 5,
+               .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
+               .gpio_wp        = -EINVAL,
+               .gpio_cd        = -EINVAL,
+               .ocr_mask       = MMC_VDD_165_195,
+               .nonremovable   = true,
+       },
        {}      /* Terminator */
 };
 
@@ -204,6 +215,12 @@ static struct platform_device omap_vwlan_device = {
        },
 };
 
+struct wl12xx_platform_data omap_panda_wlan_data  __initdata = {
+       .irq = OMAP_GPIO_IRQ(GPIO_WIFI_IRQ),
+       /* PANDA ref clock is 38.4 MHz */
+       .board_ref_clock = 2,
+};
+
 static int omap4_twl6030_hsmmc_late_init(struct device *dev)
 {
        int ret = 0;
@@ -447,6 +464,9 @@ static void __init omap4_panda_init(void)
                package = OMAP_PACKAGE_CBL;
        omap4_mux_init(board_mux, package);
 
+       if (wl12xx_set_platform_data(&omap_panda_wlan_data))
+               pr_err("error setting wl12xx data\n");
+
        omap4_panda_i2c_init();
        platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
        platform_device_register(&omap_vwlan_device);