summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorBartosz Markowski <bartosz.markowski@tieto.com>2011-09-19 15:51:26 +0200
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:06:20 +0200
commitc60e43a2b31e86aee614ba7a7768b0139b9528fe (patch)
tree9b582eebfcc49ba5e1695cccfea8ee164d3adc28 /arch
parent68754d3ccb18ee1fff9c6ccad024b5cc6b534920 (diff)
WLAN: u5500: Add new wlan platform file for u5500
* Split board config files for u8500 and u5500 * Set sdi3 and mmc2 for u5500 WLAN ST-Ericsson ID: 352334 ST-Ericsson FOSS-OUT ID: Trivial Signed-off-by: Bartosz Markowski <bartosz.markowski@tieto.com> Change-Id: I9746591fe33c3c3748a50c86d01205fc0680f5d2 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/31410 Reviewed-by: Stefan NILSSON9 <stefan.xk.nilsson@stericsson.com> Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-ux500/board-mop500-wlan.c52
-rw-r--r--arch/arm/mach-ux500/board-u5500-wlan.c109
-rw-r--r--arch/arm/mach-ux500/board-u5500-wlan.h18
3 files changed, 133 insertions, 46 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-wlan.c b/arch/arm/mach-ux500/board-mop500-wlan.c
index 16169d1cfcb..e525d4fe8aa 100644
--- a/arch/arm/mach-ux500/board-mop500-wlan.c
+++ b/arch/arm/mach-ux500/board-mop500-wlan.c
@@ -16,8 +16,6 @@
#include <mach/cw1200_plat.h>
static void cw1200_release(struct device *dev);
-static int cw1200_power_ctrl(const struct cw1200_platform_data *pdata,
- bool enable);
static struct resource cw1200_href_resources[] = {
{
@@ -68,10 +66,11 @@ EXPORT_SYMBOL_GPL(cw1200_get_platform_data);
static int cw1200_pins_enable(bool enable)
{
- struct ux500_pins *pins;
+ struct ux500_pins *pins = NULL;
int ret = 0;
pins = ux500_pins_get("sdi1");
+
if (!pins) {
printk(KERN_ERR "cw1200: Pins are not found. "
"Check platform data.\n");
@@ -93,45 +92,12 @@ static int cw1200_pins_enable(bool enable)
return ret;
}
-static int cw1200_power_ctrl(const struct cw1200_platform_data *pdata,
- bool enable)
-{
- static const char *vdd_name = "vdd";
- struct regulator *vdd;
- int ret = 0;
-
- vdd = regulator_get(&cw1200_device.dev, vdd_name);
- if (IS_ERR(vdd)) {
- ret = PTR_ERR(vdd);
- dev_warn(&cw1200_device.dev,
- "%s: Failed to get regulator '%s': %d\n",
- __func__, vdd_name, ret);
- } else {
- if (enable)
- ret = regulator_enable(vdd);
- else
- ret = regulator_disable(vdd);
-
- if (ret) {
- dev_warn(&cw1200_device.dev,
- "%s: Failed to %s regulator '%s': %d\n",
- __func__, enable ? "enable" : "disable",
- vdd_name, ret);
- }
- regulator_put(vdd);
- }
- return ret;
-}
-
int __init mop500_wlan_init(void)
{
int ret;
- if (machine_is_snowball() ||
- machine_is_u8500() ||
- machine_is_u5500() ||
- machine_is_nomadik()) {
- cw1200_device.num_resources =
- ARRAY_SIZE(cw1200_href_resources);
+
+ if (machine_is_u8500() || 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 =
@@ -145,18 +111,12 @@ int __init mop500_wlan_init(void)
return -ENOTSUPP;
}
- if (machine_is_snowball() ||
- machine_is_u5500())
- cw1200_platform_data.mmc_id = "mmc2";
- else
- cw1200_platform_data.mmc_id = "mmc3";
+ cw1200_platform_data.mmc_id = "mmc3";
cw1200_platform_data.reset = &cw1200_device.resource[0];
cw1200_platform_data.irq = &cw1200_device.resource[1];
cw1200_device.dev.release = cw1200_release;
- if (machine_is_snowball())
- cw1200_platform_data.power_ctrl = cw1200_power_ctrl;
ret = cw1200_pins_enable(true);
if (WARN_ON(ret))
diff --git a/arch/arm/mach-ux500/board-u5500-wlan.c b/arch/arm/mach-ux500/board-u5500-wlan.c
new file mode 100644
index 00000000000..68282db06c3
--- /dev/null
+++ b/arch/arm/mach-ux500/board-u5500-wlan.c
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011
+ *
+ * Author: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>
+ *Author: Bartosz Markowski <bartosz.markowski@tieto.com> for ST-Ericsson
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#include <linux/kernel.h>
+#include <linux/err.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+#include <asm/mach-types.h>
+#include <mach/irqs.h>
+#include <plat/pincfg.h>
+#include "pins.h"
+#include <mach/cw1200_plat.h>
+
+static void cw1200_release(struct device *dev);
+
+static struct resource cw1200_u5500_resources[] = {
+ {
+ .start = NOMADIK_GPIO_TO_IRQ(129),
+ .end = NOMADIK_GPIO_TO_IRQ(129),
+ .flags = IORESOURCE_IRQ,
+ .name = "cw1200_irq",
+ },
+};
+
+static struct cw1200_platform_data cw1200_platform_data = { 0 };
+
+static struct platform_device cw1200_device = {
+ .name = "cw1200_wlan",
+ .dev = {
+ .platform_data = &cw1200_platform_data,
+ .release = cw1200_release,
+ .init_name = "cw1200_wlan",
+ },
+};
+
+const struct cw1200_platform_data *cw1200_get_platform_data(void)
+{
+ return &cw1200_platform_data;
+}
+EXPORT_SYMBOL_GPL(cw1200_get_platform_data);
+
+static int cw1200_pins_enable(bool enable)
+{
+ struct ux500_pins *pins = NULL;
+ int ret = 0;
+
+ pins = ux500_pins_get("sdi3");
+
+ if (!pins) {
+ printk(KERN_ERR "cw1200: Pins are not found. "
+ "Check platform data.\n");
+ return -ENOENT;
+ }
+
+ if (enable)
+ ret = ux500_pins_enable(pins);
+ else
+ ret = ux500_pins_disable(pins);
+
+ if (ret)
+ printk(KERN_ERR "cw1200: Pins can not be %s: %d.\n",
+ enable ? "enabled" : "disabled",
+ ret);
+
+ ux500_pins_put(pins);
+
+ return ret;
+}
+
+int __init u5500_wlan_init(void)
+{
+ int ret;
+
+ if (machine_is_u5500()) {
+ cw1200_device.num_resources = ARRAY_SIZE(cw1200_u5500_resources);
+ cw1200_device.resource = cw1200_u5500_resources;
+ } else {
+ dev_err(&cw1200_device.dev,
+ "Unsupported mach type %d "
+ "(check mach-types.h)\n",
+ __machine_arch_type);
+ return -ENOTSUPP;
+ }
+
+ cw1200_platform_data.mmc_id = "mmc2";
+ cw1200_platform_data.irq = &cw1200_device.resource[0];
+
+ cw1200_device.dev.release = cw1200_release;
+
+ ret = cw1200_pins_enable(true);
+ if (WARN_ON(ret))
+ return ret;
+
+ ret = platform_device_register(&cw1200_device);
+ if (ret)
+ cw1200_pins_enable(false);
+
+ return ret;
+}
+
+static void cw1200_release(struct device *dev)
+{
+ cw1200_pins_enable(false);
+}
diff --git a/arch/arm/mach-ux500/board-u5500-wlan.h b/arch/arm/mach-ux500/board-u5500-wlan.h
new file mode 100644
index 00000000000..89fd41166fd
--- /dev/null
+++ b/arch/arm/mach-ux500/board-u5500-wlan.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011
+ *
+ * License terms: GNU General Public License (GPL), version 2
+ *
+ * U5500 board specific cw1200 (WLAN device) initialization.
+ *
+ * Author: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>
+ * Author: Bartosz Markowski <bartosz.markowski@tieto.com> for ST-Ericsson
+ *
+ */
+
+#ifndef __BOARD_U5500_WLAN_H
+#define __BOARD_U5500_WLAN_H
+
+int u5500_wlan_init(void);
+
+#endif