[glsdk/meta-ti-glsdk.git] / recipes-kernel / linux / linux-am335x-3.2.0-psp04.06.00.08 / 0001-am335x-enable-pullup-on-the-WLAN-enable-pin-fo.patch
1 From f69ffbef6793b7238a8518481735fd53326e0cdf Mon Sep 17 00:00:00 2001
2 From: Vita Preskovsky <vitap@ti.com>
3 Date: Tue, 24 Jul 2012 20:02:28 +0300
4 Subject: [PATCH] am335x: enable pullup on the WLAN enable pin for keeping wlan
6 * Enable pullup on the WLAN enable pin for keeping wlan active
7 during suspend in wowlan mode. The fix is relevant only in the case
8 of am335x-SK board.
11 Signed-off-by: Vita Preskovsky <vitap@ti.com>
12 ---
13 arch/arm/mach-omap2/board-am335xevm.c | 22 ++++++++++++++++++++++
14 1 files changed, 22 insertions(+), 0 deletions(-)
16 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
17 index f68710c..f263f84 100644
18 --- a/arch/arm/mach-omap2/board-am335xevm.c
19 +++ b/arch/arm/mach-omap2/board-am335xevm.c
20 @@ -1673,13 +1673,35 @@ static void wl12xx_bluetooth_enable(void)
21 gpio_direction_output(am335xevm_wlan_data.bt_enable_gpio, 0);
22 }
24 +#define AM33XX_CTRL_REGADDR(reg) \
25 + AM33XX_L4_WK_IO_ADDRESS(AM33XX_SCM_BASE + (reg))
26 +
27 +/* wlan enable pin */
28 +#define AM33XX_CONTROL_PADCONF_GPMC_CSN0_OFFSET 0x087C
29 static int wl12xx_set_power(struct device *dev, int slot, int on, int vdd)
30 {
31 + int pad_mux_value;
32 +
33 if (on) {
34 gpio_direction_output(am335xevm_wlan_data.wlan_enable_gpio, 1);
35 +
36 + /* Enable pullup on the WLAN enable pin for keeping wlan active during suspend
37 + in wowlan mode */
38 + if ( am335x_evm_get_id() == EVM_SK ) {
39 + pad_mux_value = readl(AM33XX_CTRL_REGADDR(AM33XX_CONTROL_PADCONF_GPMC_CSN0_OFFSET));
40 + pad_mux_value &= (~AM33XX_PULL_DISA);
41 + writel(pad_mux_value, AM33XX_CTRL_REGADDR(AM33XX_CONTROL_PADCONF_GPMC_CSN0_OFFSET));
42 + }
43 +
44 mdelay(70);
45 } else {
46 gpio_direction_output(am335xevm_wlan_data.wlan_enable_gpio, 0);
47 + /* Disable pullup on the WLAN enable when WLAN is off */
48 + if ( am335x_evm_get_id() == EVM_SK ) {
49 + pad_mux_value = readl(AM33XX_CTRL_REGADDR(AM33XX_CONTROL_PADCONF_GPMC_CSN0_OFFSET));
50 + pad_mux_value |= AM33XX_PULL_DISA;
51 + writel(pad_mux_value, AM33XX_CTRL_REGADDR(AM33XX_CONTROL_PADCONF_GPMC_CSN0_OFFSET));
52 + }
53 }
55 return 0;
56 --
57 1.7.0.4