summaryrefslogtreecommitdiff
path: root/arch/arm/mach-ux500
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-05-22 23:22:42 +0200
committerLee Jones <lee.jones@linaro.org>2012-01-05 10:19:17 +0000
commit02470f689caa2345410121405c5fcefbfab68534 (patch)
treeeee23e969db8f1ae73deb40beee6eff8014076c0 /arch/arm/mach-ux500
parent3035a718d71e8973d1ecd0e5511dc8f45c1525fd (diff)
cw1200: Request SDIO pins at device registration.
ux500 platform requires hardware pins to be explicitly requested. Change-Id: I739b6badfb5d19e6e1c49eb8232df3b8aaa958e9 Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/23620 Reviewed-by: Par-Gunnar HJALMDAHL <par-gunnar.p.hjalmdahl@stericsson.com> Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Reviewed-by: Janusz DZIEDZIC <janusz.dziedzic@tieto.com> Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
Diffstat (limited to 'arch/arm/mach-ux500')
-rw-r--r--arch/arm/mach-ux500/board-mop500-wlan.c42
1 files changed, 40 insertions, 2 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-wlan.c b/arch/arm/mach-ux500/board-mop500-wlan.c
index c24069600ca..90b17e70e23 100644
--- a/arch/arm/mach-ux500/board-mop500-wlan.c
+++ b/arch/arm/mach-ux500/board-mop500-wlan.c
@@ -9,6 +9,8 @@
#include <linux/platform_device.h>
#include <asm/mach-types.h>
#include <mach/irqs-board-mop500.h>
+#include <plat/pincfg.h>
+#include "pins.h"
#include "../drivers/staging/cw1200/cw1200_plat.h"
static void cw1200_release(struct device *dev);
@@ -66,8 +68,36 @@ const struct cw1200_platform_data *cw1200_get_platform_data(void)
}
EXPORT_SYMBOL_GPL(cw1200_get_platform_data);
+static int cw1200_pins_enable(bool enable)
+{
+ struct ux500_pins *pins;
+ int ret = 0;
+
+ pins = ux500_pins_get("sdi1");
+ 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 mop500_wlan_init(void)
{
+ int ret;
if (machine_is_snowball() ||
machine_is_u8500() ||
machine_is_u5500() ||
@@ -99,10 +129,18 @@ int __init mop500_wlan_init(void)
cw1200_device.dev.release = cw1200_release;
- return platform_device_register(&cw1200_device);
+ 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)
{
- /* Do nothing: release is handled by SDIO stack */
+ cw1200_pins_enable(false);
}