depends on CW1200 && MMC
        help
          Enable support for the CW1200 connected via an SDIO bus.
+         By default this driver only supports the Sagrad SG901-1091/1098 EVK
+         and similar designs that utilize a hardware reset circuit. To
+         support different CW1200 SDIO designs you will need to override
+         the default platform data by calling cw1200_sdio_set_platform_data()
+         in your board setup file.
 
 config CW1200_WLAN_SPI
        tristate "Support SPI platforms"
        depends on CW1200 && SPI
        help
-         Enables support for the CW1200 connected via a SPI bus.
-
-config CW1200_WLAN_SAGRAD
-       tristate "Support Sagrad SG901-1091/1098 modules"
-       depends on CW1200_WLAN_SDIO
-       help
-         This provides the platform data glue to support the
-         Sagrad SG901-1091/1098 modules in their standard SDIO EVK.
-         It also includes example SPI platform data.
+         Enables support for the CW1200 connected via a SPI bus.  You will
+         need to add appropriate platform data glue in your board setup
+         file.
 
 menu "Driver debug features"
        depends on CW1200 && DEBUG_FS
 
 
 cw1200_wlan_sdio-y := cw1200_sdio.o
 cw1200_wlan_spi-y := cw1200_spi.o
-cw1200_wlan_sagrad-y := cw1200_sagrad.o
 
 obj-$(CONFIG_CW1200) += cw1200_core.o
 obj-$(CONFIG_CW1200_WLAN_SDIO) += cw1200_wlan_sdio.o
 obj-$(CONFIG_CW1200_WLAN_SPI) += cw1200_wlan_spi.o
-obj-$(CONFIG_CW1200_WLAN_SAGRAD) += cw1200_wlan_sagrad.o
 
+++ /dev/null
-/*
- * Platform glue data for ST-Ericsson CW1200 driver
- *
- * Copyright (c) 2013, Sagrad, Inc
- * Author: Solomon Peachy <speachy@sagrad.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/module.h>
-#include <linux/platform_data/cw1200_platform.h>
-
-MODULE_AUTHOR("Solomon Peachy <speachy@sagrad.com>");
-MODULE_DESCRIPTION("ST-Ericsson CW1200 Platform glue driver");
-MODULE_LICENSE("GPL");
-
-/* Define just one of these.  Feel free to customize as needed */
-#define SAGRAD_1091_1098_EVK_SDIO
-/* #define SAGRAD_1091_1098_EVK_SPI */
-
-#ifdef SAGRAD_1091_1098_EVK_SDIO
-static int cw1200_power_ctrl(const struct cw1200_platform_data_sdio *pdata,
-                            bool enable)
-{
-       /* Control 3v3 and 1v8 to hardware as appropriate */
-       /* Note this is not needed if it's controlled elsewhere or always on */
-
-       /* May require delay for power to stabilize */
-       return 0;
-}
-
-static int cw1200_clk_ctrl(const struct cw1200_platform_data_sdio *pdata,
-                          bool enable)
-{
-       /* Turn CLK_32K off and on as appropriate. */
-       /* Note this is not needed if it's always on */
-
-       /* May require delay for clock to stabilize */
-       return 0;
-}
-
-static struct cw1200_platform_data_sdio cw1200_platform_data = {
-       .ref_clk = 38400,
-       .have_5ghz = false,
-#if 0
-       .reset = GPIO_RF_RESET, /* Replace as appropriate */
-       .powerup = GPIO_RF_POWERUP, /* Replace as appropriate */
-       .irq = GPIO_TO_IRQ(GPIO_RF_IRQ), /* Replace as appropriate */
-#endif
-       .power_ctrl = cw1200_power_ctrl,
-       .clk_ctrl = cw1200_clk_ctrl,
-/*     .macaddr = ??? */
-       .sdd_file = "sdd_sagrad_1091_1098.bin",
-};
-#endif
-
-#ifdef SAGRAD_1091_1098_EVK_SPI
-static int cw1200_power_ctrl(const struct cw1200_platform_data_spi *pdata,
-                            bool enable)
-{
-       /* Control 3v3 and 1v8 to hardware as appropriate */
-       /* Note this is not needed if it's controlled elsewhere or always on */
-
-       /* May require delay for power to stabilize */
-       return 0;
-}
-static int cw1200_clk_ctrl(const struct cw1200_platform_data_spi *pdata,
-                          bool enable)
-{
-       /* Turn CLK_32K off and on as appropriate. */
-       /* Note this is not needed if it's always on */
-
-       /* May require delay for clock to stabilize */
-       return 0;
-}
-
-static struct cw1200_platform_data_spi cw1200_platform_data = {
-       .ref_clk = 38400,
-       .spi_bits_per_word = 16,
-       .reset = GPIO_RF_RESET, /* Replace as appropriate */
-       .powerup = GPIO_RF_POWERUP, /* Replace as appropriate */
-       .power_ctrl = cw1200_power_ctrl,
-       .clk_ctrl = cw1200_clk_ctrl,
-/*     .macaddr = ??? */
-       .sdd_file = "sdd_sagrad_1091_1098.bin",
-};
-static struct spi_board_info myboard_spi_devices[] __initdata = {
-       {
-               .modalias = "cw1200_wlan_spi",
-               .max_speed_hz = 10000000, /* 52MHz Max */
-               .bus_num = 0,
-               .irq = WIFI_IRQ,
-               .platform_data = &cw1200_platform_data,
-               .chip_select = 0,
-       },
-};
-#endif
-
-
-const void *cw1200_get_platform_data(void)
-{
-       return &cw1200_platform_data;
-}
-EXPORT_SYMBOL_GPL(cw1200_get_platform_data);
 
 
 #define SDIO_BLOCK_SIZE (512)
 
+/* Default platform data for Sagrad modules */
+static struct cw1200_platform_data_sdio sagrad_109x_evk_platform_data = {
+       .ref_clk = 38400,
+       .have_5ghz = false,
+       .sdd_file = "sdd_sagrad_1091_1098.bin",
+};
+
+/* Allow platform data to be overridden */
+static struct cw1200_platform_data_sdio *global_plat_data = &sagrad_109x_evk_platform_data;
+
+void __init cw1200_sdio_set_platform_data(struct cw1200_platform_data_sdio *pdata)
+{
+       global_plat_data = pdata;
+}
+
 struct hwbus_priv {
        struct sdio_func        *func;
        struct cw1200_common    *core;
 
 /* Probe Function to be called by SDIO stack when device is discovered */
 static int cw1200_sdio_probe(struct sdio_func *func,
-                                      const struct sdio_device_id *id)
+                            const struct sdio_device_id *id)
 {
        struct hwbus_priv *self;
        int status;
 
        func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
 
-       self->pdata = cw1200_get_platform_data();
+       self->pdata = global_plat_data; /* FIXME */
        self->func = func;
        sdio_set_drvdata(func, self);
        sdio_claim_host(func);
        const struct cw1200_platform_data_sdio *pdata;
        int ret;
 
-       pdata = cw1200_get_platform_data();
+       /* FIXME -- this won't support multiple devices */
+       pdata = global_plat_data;
 
        if (cw1200_sdio_on(pdata)) {
                ret = -1;
 static void __exit cw1200_sdio_exit(void)
 {
        const struct cw1200_platform_data_sdio *pdata;
-       pdata = cw1200_get_platform_data();
+
+       /* FIXME -- this won't support multiple devices */
+       pdata = global_plat_data;
        sdio_unregister_driver(&sdio_driver);
        cw1200_sdio_off(pdata);
 }
 
        const char *sdd_file;  /* if NULL, will use default for detected hw type */
 };
 
-const void *cw1200_get_platform_data(void);
+
+/* An example of SPI support in your board setup file:
+
+   static struct cw1200_platform_data_spi cw1200_platform_data = {
+       .ref_clk = 38400,
+       .spi_bits_per_word = 16,
+       .reset = GPIO_RF_RESET,
+       .powerup = GPIO_RF_POWERUP,
+       .macaddr = wifi_mac_addr,
+       .sdd_file = "sdd_sagrad_1091_1098.bin",
+  };
+  static struct spi_board_info myboard_spi_devices[] __initdata = {
+       {
+               .modalias = "cw1200_wlan_spi",
+               .max_speed_hz = 52000000,
+               .bus_num = 0,
+               .irq = WIFI_IRQ,
+               .platform_data = &cw1200_platform_data,
+               .chip_select = 0,
+       },
+  };
+
+ */
+
+/* An example of SDIO support in your board setup file:
+
+  static struct cw1200_platform_data_sdio my_cw1200_platform_data = {
+       .ref_clk = 38400,
+       .have_5ghz = false,
+       .sdd_file = "sdd_myplatform.bin",
+  };
+  cw1200_sdio_set_platform_data(&my_cw1200_platform_data);
+
+ */
+
+void __init cw1200_sdio_set_platform_data(struct cw1200_platform_data_sdio *pdata);
 
 #endif /* CW1200_PLAT_H_INCLUDED */