wl12xx: add platform data passing support
authorOhad Ben-Cohen <ohad@wizery.com>
Wed, 15 Sep 2010 23:31:12 +0000 (01:31 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 21 Sep 2010 15:04:57 +0000 (11:04 -0400)
Add a simple mechanism to pass platform data to the
SDIO instances of wl12xx.

This way there is no confusion over who owns the 'embedded data',
typechecking is preserved, and no possibility for the wrong driver to
pick up the data.

Originally proposed by Russell King.

Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/Makefile
drivers/net/wireless/wl12xx/Kconfig
drivers/net/wireless/wl12xx/wl12xx_platform_data.c [new file with mode: 0644]
include/linux/wl12xx.h

index 5d4ce4d2b32bd9a71a63a1b6c25606f647b3d0bc..85af697574a6e6211733a334d0c49122bbc68b9b 100644 (file)
@@ -50,5 +50,7 @@ obj-$(CONFIG_ATH_COMMON)      += ath/
 obj-$(CONFIG_MAC80211_HWSIM)   += mac80211_hwsim.o
 
 obj-$(CONFIG_WL12XX)   += wl12xx/
+# small builtin driver bit
+obj-$(CONFIG_WL12XX_PLATFORM_DATA)     += wl12xx/wl12xx_platform_data.o
 
 obj-$(CONFIG_IWM)      += iwmc3200wifi/
index 2f98058be4510f217f17c5f09a0f832d5c5e8198..4a8bb25c1739d610295dfeeefe119ae06ca5ee45 100644 (file)
@@ -74,4 +74,7 @@ config WL1271_SDIO
          If you choose to build a module, it'll be called
          wl1271_sdio. Say N if unsure.
 
-
+config WL12XX_PLATFORM_DATA
+       bool
+       depends on WL1271_SDIO != n
+       default y
diff --git a/drivers/net/wireless/wl12xx/wl12xx_platform_data.c b/drivers/net/wireless/wl12xx/wl12xx_platform_data.c
new file mode 100644 (file)
index 0000000..973b110
--- /dev/null
@@ -0,0 +1,28 @@
+#include <linux/module.h>
+#include <linux/err.h>
+#include <linux/wl12xx.h>
+
+static const struct wl12xx_platform_data *platform_data;
+
+int __init wl12xx_set_platform_data(const struct wl12xx_platform_data *data)
+{
+       if (platform_data)
+               return -EBUSY;
+       if (!data)
+               return -EINVAL;
+
+       platform_data = kmemdup(data, sizeof(*data), GFP_KERNEL);
+       if (!platform_data)
+               return -ENOMEM;
+
+       return 0;
+}
+
+const struct wl12xx_platform_data *wl12xx_get_platform_data(void)
+{
+       if (!platform_data)
+               return ERR_PTR(-ENODEV);
+
+       return platform_data;
+}
+EXPORT_SYMBOL(wl12xx_get_platform_data);
index 015687a1776dadf030db250485de44e061ce0442..bd70563107fa77f97fca284b39f747cb149fd714 100644 (file)
@@ -31,4 +31,7 @@ struct wl12xx_platform_data {
        bool use_eeprom;
 };
 
+int wl12xx_set_platform_data(const struct wl12xx_platform_data *data);
+const struct wl12xx_platform_data *wl12xx_get_platform_data(void);
+
 #endif