aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/mach-ux500/board-mop500-wlan.c
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-05-18 23:16:54 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-05-23 08:29:23 +0200
commit0119664ee6eb134c26ccd78fc0885741f0f1c036 (patch)
treee9386a0ca0cfbfe97fff610e178fa69d51a26864 /arch/arm/mach-ux500/board-mop500-wlan.c
parent4f4ef8517117b92f596da8482a55d67a34384817 (diff)
cw1200: Integration with mach-ux500
CW1200 platform data is defined and set in arch/arm/mach-ux500. TODO: WLAN regulators are defined but not handled. Waiting for support in mach-ux500. Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Change-Id: If368398af1ca22366bb44c3bb8c7e3b1484cab1b Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/23353 Reviewed-by: Janusz DZIEDZIC <janusz.dziedzic@tieto.com> Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
Diffstat (limited to 'arch/arm/mach-ux500/board-mop500-wlan.c')
-rw-r--r--arch/arm/mach-ux500/board-mop500-wlan.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-wlan.c b/arch/arm/mach-ux500/board-mop500-wlan.c
new file mode 100644
index 00000000000..c24069600ca
--- /dev/null
+++ b/arch/arm/mach-ux500/board-mop500-wlan.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011
+ *
+ * Author: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+#include <asm/mach-types.h>
+#include <mach/irqs-board-mop500.h>
+#include "../drivers/staging/cw1200/cw1200_plat.h"
+
+static void cw1200_release(struct device *dev);
+
+static struct resource cw1200_href_resources[] = {
+ {
+ .start = 215,
+ .end = 215,
+ .flags = IORESOURCE_IO,
+ .name = "cw1200_reset",
+ },
+#ifdef CONFIG_CW1200_USE_GPIO_IRQ
+ {
+ .start = NOMADIK_GPIO_TO_IRQ(216),
+ .end = NOMADIK_GPIO_TO_IRQ(216),
+ .flags = IORESOURCE_IRQ,
+ .name = "cw1200_irq",
+ },
+#endif /* CONFIG_CW1200_USE_GPIO_IRQ */
+};
+
+static struct resource cw1200_href60_resources[] = {
+ {
+ .start = 85,
+ .end = 85,
+ .flags = IORESOURCE_IO,
+ .name = "cw1200_reset",
+ },
+#ifdef CONFIG_CW1200_USE_GPIO_IRQ
+ {
+ .start = NOMADIK_GPIO_TO_IRQ(4),
+ .end = NOMADIK_GPIO_TO_IRQ(4),
+ .flags = IORESOURCE_IRQ,
+ .name = "cw1200_irq",
+ },
+#endif /* CONFIG_CW1200_USE_GPIO_IRQ */
+};
+
+static struct cw1200_platform_data cw1200_platform_data = {
+ .regulator_vdd = "vdd",
+ .regulator_vio = "vio",
+};
+
+static struct platform_device cw1200_device = {
+ .name = "cw1200",
+ .dev = {
+ .platform_data = &cw1200_platform_data,
+ .release = cw1200_release,
+ },
+};
+
+const struct cw1200_platform_data *cw1200_get_platform_data(void)
+{
+ return &cw1200_platform_data;
+}
+EXPORT_SYMBOL_GPL(cw1200_get_platform_data);
+
+int __init mop500_wlan_init(void)
+{
+ if (machine_is_snowball() ||
+ machine_is_u8500() ||
+ machine_is_u5500() ||
+ machine_is_nomadik()) {
+ cw1200_device.num_resources =
+ ARRAY_SIZE(cw1200_href_resources);
+ cw1200_device.resource = cw1200_href_resources;
+ } else if (machine_is_hrefv60()) {
+ cw1200_device.num_resources =
+ ARRAY_SIZE(cw1200_href60_resources);
+ cw1200_device.resource = cw1200_href60_resources;
+ } else {
+ dev_err(&cw1200_device.dev,
+ "Unsupported mach type %d "
+ "(check mach-types.h)\n",
+ __machine_arch_type);
+ return -ENOTSUPP;
+ }
+
+ if (machine_is_snowball())
+ cw1200_platform_data.mmc_id = "mmc2";
+ else
+ cw1200_platform_data.mmc_id = "mmc3";
+
+ cw1200_platform_data.reset = &cw1200_device.resource[0];
+#ifdef CONFIG_CW1200_USE_GPIO_IRQ
+ cw1200_platform_data.irq = &cw1200_device.resource[1];
+#endif /* #ifdef CONFIG_CW1200_USE_GPIO_IRQ */
+
+ cw1200_device.dev.release = cw1200_release;
+
+ return platform_device_register(&cw1200_device);
+}
+
+static void cw1200_release(struct device *dev)
+{
+ /* Do nothing: release is handled by SDIO stack */
+}