summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Markowski <bartosz.markowski@tieto.com>2011-10-14 08:55:48 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-10-14 15:53:17 +0200
commitefdf9c2e9c2fb5cb99414c1fa7f2393076ffff2b (patch)
tree1aca31549f9172c0e76616301842c7fd91681cd7
parentd1f1f05b655e5f24fcb34b6c3aa3d123a627e316 (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>
-rw-r--r--arch/arm/mach-ux500/board-mop500-wlan.c41
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)
{