diff options
author | Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> | 2011-05-22 23:22:42 +0200 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2012-01-05 10:19:17 +0000 |
commit | 02470f689caa2345410121405c5fcefbfab68534 (patch) | |
tree | eee23e969db8f1ae73deb40beee6eff8014076c0 /arch/arm/mach-ux500 | |
parent | 3035a718d71e8973d1ecd0e5511dc8f45c1525fd (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.c | 42 |
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); } |