diff options
author | Bartosz Markowski <bartosz.markowski@tieto.com> | 2011-10-14 08:55:48 +0200 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2012-01-05 10:20:24 +0000 |
commit | 6d2e54be0e5dd5f87800c6a35eafe8d104eef66a (patch) | |
tree | b870e0082a4bd307cd5394477304e952d20937d6 /arch/arm/mach-ux500 | |
parent | f8efabae67a2ecddfa5324c99c5c67781eb4a6ec (diff) |
ux500: enable WLAN clock by request
Change-Id: Icd8433b49939613801c40e50138e15a4b49869d9
Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>
Signed-off-by: Bartosz Markowski <bartosz.markowski@tieto.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/34070
Tested-by: Robert MARKLUND <robert.marklund@stericsson.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 | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-wlan.c b/arch/arm/mach-ux500/board-mop500-wlan.c index ec53fca5f8d..84c1b8958fa 100644 --- a/arch/arm/mach-ux500/board-mop500-wlan.c +++ b/arch/arm/mach-ux500/board-mop500-wlan.c @@ -12,14 +12,17 @@ #include <asm/mach-types.h> #include <mach/irqs.h> #include <plat/pincfg.h> -#include "pins.h" +#include <linux/clk.h> #include <mach/cw1200_plat.h> +#include "pins.h" + static void cw1200_release(struct device *dev); static int cw1200_power_ctrl(const struct cw1200_platform_data *pdata, + bool enable); +static int cw1200_clk_ctrl(const struct cw1200_platform_data *pdata, bool enable); - static struct resource cw1200_href_resources[] = { { .start = 215, @@ -50,7 +53,9 @@ static struct resource cw1200_href60_resources[] = { }, }; -static struct cw1200_platform_data cw1200_platform_data = { 0 }; +static struct cw1200_platform_data cw1200_platform_data = { + .clk_ctrl = cw1200_clk_ctrl, +}; static struct platform_device cw1200_device = { .name = "cw1200_wlan", @@ -125,7 +130,37 @@ static int cw1200_power_ctrl(const struct cw1200_platform_data *pdata, return ret; } +static int cw1200_clk_ctrl(const struct cw1200_platform_data *pdata, + bool enable) +{ + static const char *clock_name = "sys_clk_out"; + struct clk *clk_dev; + int ret = 0; + + clk_dev = clk_get(&cw1200_device.dev, clock_name); + if (IS_ERR(clk_dev)) { + ret = PTR_ERR(clk_dev); + dev_warn(&cw1200_device.dev, + "%s: Failed to get clk '%s': %d\n", + __func__, clock_name, ret); + + } else { + + if (enable) + ret = clk_enable(clk_dev); + else + clk_disable(clk_dev); + + if (ret) { + dev_warn(&cw1200_device.dev, + "%s: Failed to %s clk enable: %d\n", + __func__, clock_name, ret); + } + } + + return ret; +} int __init mop500_wlan_init(void) { |