This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Backporting wl1270 NLCP driver to kernel-2.6.32

Other Parts Discussed in Thread: WL1271

Hi,

I'm trying to backport the WL1270 (NLCP) driver from TI compat-wireless (R5 SP3.05) for my WG7311-2A WLAN module on my 2.6.32 kernel.
Until now, I was using a pin compatible WG7310-2A chip with the "old" TI WiLink driver (what I think is MCP, I'm not sure. It works with sdio.ko, tiwlan_drv.ko and tiwlan_loader)

I want this new chip to work (whatever the driver). However I've been told the old WiLink driver can't pass latest EN300 328 v1.8.1 certification. I guess I need to use the NLCP driver here.
As far as I understand SDIO, WLAN enable and WLAN IRQ configuration remains unchanged on my board files. I mean, they don't need to change since it used to work with a pin compatible chip.

I followed those guidelines and advice :

- http://wireless.kernel.org/en/users/Drivers/wl12xx
- http://processors.wiki.ti.com/index.php/WL127x_Porting_Guide
- http://thread.gmane.org/gmane.linux.kernel.wireless.general/61910
- http://thread.gmane.org/gmane.linux.kernel.wireless.general/61952
- http://thread.gmane.org/gmane.linux.kernel.wireless.general/61986

I applied/backported the following patches (I tried to follow the same order as mainline kernel history):

• sdio: fix nasty oops in mmc_sdio_detect (Sun Nov 14 12:40:33 2010) - http://www.spinics.net/lists/linux-mmc/msg04549.html
• sdio: support suspend/resume while runtime suspended (Sat Oct 2 13:54:13 2010) - http://www.spinics.net/lists/linux-mmc/msg03975.html
• sdio: ensure mmc_sdio_detect is powered - http://www.spinics.net/lists/linux-mmc/msg03974.html
• sdio: enable runtime PM for SDIO functions - http://www.spinics.net/lists/linux-mmc/msg03973.html
• sdio: enable runtime PM for SDIO cards - http://www.spinics.net/lists/linux-mmc/msg03972.html
• sdio: use the generic runtime PM handlers - http://www.spinics.net/lists/linux-mmc/msg03971.html
• mmc: add runtime PM handlers - http://www.spinics.net/lists/linux-mmc/msg03970.html
• mmc: sdio: add power_restore support - http://www.spinics.net/lists/linux-mmc/msg03969.html
• mmc: propagate power save/restore ops return value (Sat Oct 2 13:54:06 2010) - http://www.spinics.net/lists/linux-mmc/msg03968.html
• mmc: sdio: fully reconfigure oldcard on resume (Sat Oct 2 13:54:05 2010) - http://www.spinics.net/lists/linux-mmc/msg03967.html (***: see above)
• PM: lenient generic runtime pm callbacks (Thu Sep 9 00:46:16 2010) http://permalink.gmane.org/gmane.linux.power-management.general/21579
• workqueue: flush_delayed_work: keep the original workqueue for re-queueing (Fri Apr 30 07:23:51 2010) - vanilla 47dd5be2d6a82b8153e059a1d09eb3879d485bfd
• PM: Provide generic subsystem-level callbacks (Sat Mar 6 21:28:37 2010) - vanilla d690b2cd222afc75320b9b8e9da7df02e9e630ca
• sdio: don't use CMD[357] as part of a powered SDIO resume (Fri Mar 5 13:43:33 2010) - vanilla 3bca4cf703826fcb2bbabbe19c6fc7b2fc4fd7cc
• PM: use pm_runtime_put_sync in system resume (Mon Dec 21 02:46:11 2009) - http://article.gmane.org/gmane.linux.power-management.general/16838
• PM: allow for usage_count > 0 in pm_runtime_get() (Sun Dec 13 20:28:30 2009) - http://article.gmane.org/gmane.linux.power-management.general/16434

***: For this patch, I only backported the code from the mmc_sdio_init_card function, not the mmc_sdio_resume one (it was a bit tricky to backport because features where not there in the 2.6.32 tree)

On the compat-wireless source tree:

- patches from https://gforge.ti.com/gf/download/frsrelease/934/6105/Compat-wireless-patches-R5_SP3_build_10.zip are applied
- then patches from my chip vendor are applied. Those are bluez-related patches I don't realy need, so I let them apply anyway.
- finally I applied the following custom patches to make it compile with my 2.6.32 kernel (see enclosed patch files) :

• 0001-compat-wireless-backport-convert-multicast-list-to-l.patch
• 0002-The-quirks-attribute-is-not-available-on-older-kerne.patch
• 0003-backport-mmc_power_save_host-usage.patch
• 0004-fix-2.6.32-compatibility-macros-redefinitions.patch
• 0005-enable-CONFIG_COMPAT_WL12XX_SDIO-and-CONFIG_WL12XX_P.patch

WL12XX_PLATFORM_DATA patches are already applied in the compat-wireless tree so I (think that) didn't need to use the following patches on the NLCP (or kernel) tree:
- http://www.spinics.net/lists/linux-wireless/msg61836.html
- http://www.spinics.net/lists/linux-wireless/msg61839.html

Then, the modules can build and I load them:

insmod compat.ko
insmod cfg80211.ko
insmod mac80211.ko
insmod compat_firmware_class.ko
insmod wl12xx.ko
insmod wl12xx_platform_data.ko
insmod wl12xx_sdio.ko
ifconfig wlan0 up

It produces:

Compat-wireless backport release: ol_R5.SP3.06
Backport based on wl12xx.git ol_R5.SP3.06
cfg80211: Calling CRDA to update world regulatory domain
wl12xx: driver version: ol_R5.SP3.06
wl12xx: compilation time: Thu Nov 15 15:50:59 2012
wl12xx_platform_data: module license 'unspecified' taints kernel.
Disabling lock debugging due to kernel taint
sdio_register_driver: Registring SDIO driver wl1271_sdio
ifconfig: SIOCGIFFLAGS: No such device

So, I can't "up" wlan0...

I can see that I miss "mmc*" logs that **should** appear. But they don't ...

Here is, enclosed too:
- my kernel .config file
- and my boot logs (just before loading the modules).

I'm pretty much stuck here, I'm running out of ideas now :/
There is a mistake somewhere or something I missed ...
So if you have any advice, any lead, ... to help me, I would be very thankful !!

Regards,

Yoann

From 07c0fc7c37f8c7b4e271f7d0cef9773c2f78c52c Mon Sep 17 00:00:00 2001
From: Yoann Sculo <yoanns@bookeen.com>
Date: Fri, 28 Jun 2013 15:45:58 +0200
Subject: [PATCH] compat-wireless: backport convert multicast list to
 list_head.

---
 drivers/net/wireless/wl12xx/main.c |   33 +++++++++++++++++++++++++++++++++
 include/net/mac80211.h             |    4 ++++
 net/mac80211/driver-ops.h          |   17 +++++++++++++++--
 net/mac80211/ieee80211_i.h         |    5 +++++
 net/mac80211/iface.c               |   10 ++++++++++
 net/mac80211/main.c                |    6 ++++++
 6 files changed, 73 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c
index 72deb40..2be7adb 100644
--- a/drivers/net/wireless/wl12xx/main.c
+++ b/drivers/net/wireless/wl12xx/main.c
@@ -3751,11 +3751,20 @@ struct wl1271_filter_params {
 	u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
 };
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
 				       struct netdev_hw_addr_list *mc_list)
+#else
+static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
+				       struct dev_addr_list *mc_list)
+#endif
 {
 	struct wl1271_filter_params *fp;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 	struct netdev_hw_addr *ha;
+#else
+	int i;
+#endif
 
 	fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
 	if (!fp) {
@@ -3764,16 +3773,40 @@ static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
 	}
 
 	/* update multicast filtering parameters */
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 	fp->mc_list_length = 0;
 	if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
+#else
+	fp->enabled = true;
+	if (mc_count > ACX_MC_ADDRESS_GROUP_MAX) {
+		mc_count = 0;
+#endif
 		fp->enabled = false;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 	} else {
 		fp->enabled = true;
 		netdev_hw_addr_list_for_each(ha, mc_list) {
+#else
+	}
+
+	fp->mc_list_length = 0;
+	for (i = 0; i < mc_count; i++) {
+		if (mc_list->da_addrlen == ETH_ALEN) {
+#endif
 			memcpy(fp->mc_list[fp->mc_list_length],
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 					ha->addr, ETH_ALEN);
+#else
+			       mc_list->da_addr, ETH_ALEN);
+#endif
 			fp->mc_list_length++;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 		}
+#else
+		} else
+			wl1271_warning("Unknown mc address length.");
+		mc_list = mc_list->next;
+#endif
 	}
 
 	return (u64)(unsigned long)fp;
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 6c07b9e..c45b5ec 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2176,7 +2176,11 @@ struct ieee80211_ops {
 			       enum ieee80211_tx_sync_type type);
 
 	u64 (*prepare_multicast)(struct ieee80211_hw *hw,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 				 struct netdev_hw_addr_list *mc_list);
+#else
+				 int mc_count, struct dev_addr_list *mc_list);
+#endif
 	void (*configure_filter)(struct ieee80211_hw *hw,
 				 unsigned int changed_flags,
 				 unsigned int *total_flags,
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
index e3b409a..8b8fe30 100644
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
@@ -204,16 +204,29 @@ static inline void drv_finish_tx_sync(struct ieee80211_local *local,
 }
 
 static inline u64 drv_prepare_multicast(struct ieee80211_local *local,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 					struct netdev_hw_addr_list *mc_list)
+#else
+					int mc_count,
+					struct dev_addr_list *mc_list)
+#endif
 {
 	u64 ret = 0;
 
-	trace_drv_prepare_multicast(local, mc_list->count);
-
 	if (local->ops->prepare_multicast)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 		ret = local->ops->prepare_multicast(&local->hw, mc_list);
+#else
+		ret = local->ops->prepare_multicast(&local->hw, mc_count,
+						    mc_list);
+#endif
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+	trace_drv_prepare_multicast(local, mc_list->count);
 	trace_drv_return_u64(local, ret);
+#else
+	trace_drv_prepare_multicast(local, mc_count);
+#endif
 
 	return ret;
 }
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 1c8d658..7a5bb1e 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -815,7 +815,12 @@ struct ieee80211_local {
 	struct work_struct recalc_smps;
 
 	/* aggregated multicast list */
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 	struct netdev_hw_addr_list mc_list;
+#else
+	struct dev_addr_list *mc_list;
+	int mc_count;
+#endif
 
 	bool tim_in_locked_section; /* see ieee80211_beacon_get() */
 
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 6d20925..86d49c9 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -449,8 +449,13 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
 
 	netif_addr_lock_bh(sdata->dev);
 	spin_lock_bh(&local->filter_lock);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 	__hw_addr_unsync(&local->mc_list, &sdata->dev->mc,
 			 sdata->dev->addr_len);
+#else
+	__dev_addr_unsync(&local->mc_list, &local->mc_count,
+			  &sdata->dev->mc_list, &sdata->dev->mc_count);
+#endif
 	spin_unlock_bh(&local->filter_lock);
 	netif_addr_unlock_bh(sdata->dev);
 
@@ -618,7 +623,12 @@ static void ieee80211_set_multicast_list(struct net_device *dev)
 		sdata->flags ^= IEEE80211_SDATA_PROMISC;
 	}
 	spin_lock_bh(&local->filter_lock);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 	__hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len);
+#else
+	__dev_addr_sync(&local->mc_list, &local->mc_count,
+			&dev->mc_list, &dev->mc_count);
+#endif
 	spin_unlock_bh(&local->filter_lock);
 	ieee80211_queue_work(&local->hw, &local->reconfig_filter);
 }
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 9972bd3..136c053 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -71,7 +71,11 @@ void ieee80211_configure_filter(struct ieee80211_local *local)
 	spin_lock_bh(&local->filter_lock);
 	changed_flags = local->filter_flags ^ new_flags;
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 	mc = drv_prepare_multicast(local, &local->mc_list);
+#else
+	mc = drv_prepare_multicast(local, local->mc_count, local->mc_list);
+#endif
 	spin_unlock_bh(&local->filter_lock);
 
 	/* be a bit nasty */
@@ -621,7 +625,9 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
 
 	INIT_LIST_HEAD(&local->interfaces);
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
 	__hw_addr_init(&local->mc_list);
+#endif
 
 	mutex_init(&local->iflist_mtx);
 	mutex_init(&local->mtx);
-- 
1.7.10.4

From 0abfe55f39a90ce0bffadcbb9eae2cac8f4eac54 Mon Sep 17 00:00:00 2001
From: Yoann Sculo <yoanns@bookeen.com>
Date: Tue, 2 Jul 2013 11:25:18 +0200
Subject: [PATCH] The quirks attribute is not available on older
 kernels.

---
 drivers/net/wireless/wl12xx/sdio.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/wireless/wl12xx/sdio.c b/drivers/net/wireless/wl12xx/sdio.c
index c7505d0..2837c2f 100644
--- a/drivers/net/wireless/wl12xx/sdio.c
+++ b/drivers/net/wireless/wl12xx/sdio.c
@@ -221,7 +221,9 @@ static int __devinit wl1271_probe(struct sdio_func *func,
 	func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
 
 	/* Use block mode for transferring over one block size of data */
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 	func->card->quirks |= MMC_QUIRK_BLKSZ_FOR_BYTE_MODE;
+#endif
 
 	wlan_data = wl12xx_get_platform_data();
 	if (IS_ERR(wlan_data)) {
-- 
1.7.10.4

From a17ff50255d0edec22037de0372d6b111c4eb50e Mon Sep 17 00:00:00 2001
From: Yoann Sculo <yoanns@bookeen.com>
Date: Tue, 2 Jul 2013 15:59:49 +0200
Subject: [PATCH] backport mmc_power_save_host usage

mmc_power_save_host is a void function in the 2.6.32 kernel
---
 drivers/net/wireless/wl12xx/sdio.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/wl12xx/sdio.c b/drivers/net/wireless/wl12xx/sdio.c
index 2837c2f..d9dbc9d 100644
--- a/drivers/net/wireless/wl12xx/sdio.c
+++ b/drivers/net/wireless/wl12xx/sdio.c
@@ -142,18 +142,24 @@ static int wl12xx_sdio_power_on(struct wl12xx_sdio_glue *glue)
 		 * might have a positive reference counter. Make sure it is
 		 * really powered on.
 		 */
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,32))
+		mmc_power_restore_host(card->host);
+#else
 		ret = mmc_power_restore_host(card->host);
 		if (ret < 0) {
 			pm_runtime_put_sync(&card->dev);
 			goto out;
 		}
+#endif
 	}
 
 	sdio_claim_host(func);
 	sdio_enable_func(func);
 	sdio_release_host(func);
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,32))
 out:
+#endif
 	return ret;
 }
 
@@ -168,14 +174,20 @@ static int wl12xx_sdio_power_off(struct wl12xx_sdio_glue *glue)
 	sdio_release_host(func);
 
 	/* Power off the card manually in case it wasn't powered off above */
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,32))
+	mmc_power_save_host(card->host);
+#else
 	ret = mmc_power_save_host(card->host);
 	if (ret < 0)
 		goto out;
+#endif
 
 	/* Let runtime PM know the card is powered off */
 	pm_runtime_put_sync(&card->dev);
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,32))
 out:
+#endif
 	return ret;
 }
 
@@ -385,4 +397,4 @@ MODULE_FIRMWARE(WL127X_FW_NAME_MULTI);
 MODULE_FIRMWARE(WL128X_FW_NAME_SINGLE);
 MODULE_FIRMWARE(WL128X_FW_NAME_MULTI);
 MODULE_FIRMWARE(WL127X_PLT_FW_NAME);
-MODULE_FIRMWARE(WL128X_PLT_FW_NAME);
\ No newline at end of file
+MODULE_FIRMWARE(WL128X_PLT_FW_NAME);
-- 
1.7.10.4

From d5b771987e9daa53c3830b7a656b32db2acf00fb Mon Sep 17 00:00:00 2001
From: Yoann Sculo <yoanns@bookeen.com>
Date: Mon, 8 Jul 2013 14:19:39 +0200
Subject: [PATCH] fix 2.6.32 compatibility (macros redefinitions)

---
 include/linux/compat-2.6.33.h |    3 ---
 include/linux/compat-2.6.34.h |    1 -
 2 files changed, 4 deletions(-)

diff --git a/include/linux/compat-2.6.33.h b/include/linux/compat-2.6.33.h
index c900a6f..a60fb6f 100644
--- a/include/linux/compat-2.6.33.h
+++ b/include/linux/compat-2.6.33.h
@@ -58,9 +58,6 @@ static inline void compat_release_firmware(const struct firmware *fw)
 #define IFF_DONT_BRIDGE 0x800		/* disallow bridging this ether dev */
 /* source: include/linux/if.h */
 
-/* this will never happen on older kernels */
-#define NETDEV_POST_INIT 0xffff
-
 /* mask netdev_alloc_skb_ip_align as debian squeeze also backports this */
 #define netdev_alloc_skb_ip_align(a, b) compat_netdev_alloc_skb_ip_align(a, b)
 
diff --git a/include/linux/compat-2.6.34.h b/include/linux/compat-2.6.34.h
index a9c9dd1..c303507 100644
--- a/include/linux/compat-2.6.34.h
+++ b/include/linux/compat-2.6.34.h
@@ -268,7 +268,6 @@ static inline int usb_disable_autosuspend(struct usb_device *udev)
 { return 0; }
 
 #define MMC_PM_KEEP_POWER	(1 << 0)	/* preserve card power during suspend */
-#define sdio_set_host_pm_flags(a, b) 0
 
 #define rcu_dereference_protected(p, c) (p)
 #define rcu_access_pointer(p)   ACCESS_ONCE(p)
-- 
1.7.10.4

From 959ca51ecb119cf8d5b4cb11cd1b4c23f38b981a Mon Sep 17 00:00:00 2001
From: Yoann Sculo <yoanns@bookeen.com>
Date: Mon, 8 Jul 2013 14:29:41 +0200
Subject: [PATCH] enable CONFIG_COMPAT_WL12XX_SDIO and
 CONFIG_WL12XX_PLATFORM_DATA in config file

---
 config.mk |    4 ++
 1 file changed, 2 insertions(+)

diff --git a/config.mk b/config.mk
index f09d16d..4f37298 100644
--- a/config.mk
+++ b/config.mk
@@ -658,6 +658,8 @@ CONFIG_BRCMUTIL=m
 ifdef CONFIG_CRC7
 CONFIG_WL1251=m
 CONFIG_WL12XX=m
+CONFIG_COMPAT_WL12XX_SDIO=m
+CONFIG_WL12XX_PLATFORM_DATA=m
 endif #CONFIG_CRC7
 
 CONFIG_MWIFIEX=m
-- 
1.7.10.4

3872.config.cfg

Linux version 2.6.32.7 (yoann@yoann) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #82 PREEMPT Tue Jul 9 15:27:13 CEST 2013
CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: ODYV3
Memory policy: ECC disabled, Data cache writeback
On node 0 totalpages: 32768
free_area_init_node: node 0, pgdat c03b7344, node_mem_map c03cd000
  Normal zone: 256 pages used for memmap
  Normal zone: 0 pages reserved
  Normal zone: 32512 pages, LIFO batch:7
OMAP3630 ES1.2 (l2cache iva sgx neon isp 192mhz_clk )
SRAM: Mapped pa 0x40200000 to va 0xfe400000 size: 0x100000
Reserving 16777216 bytes SDRAM for VRAM
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
Kernel command line: console=ttyO0,115200n8 root=/dev/mmcblk0p2 rw rootwait panic=1 dev_opts=3 swv=67438144 video=omap3epfb:mode=1024x758x16x20x0,deferred_io=-1,pmic_dwell=1000,vcom=-1855,pmic=tps65185-i2c nv=2 eth=90:d7:4f:01:27:00 bt=ff:ff:ff:ff:ff:ff emei=4294967295 sn=t
PID hash table entries: 512 (order: -1, 2048 bytes)
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 103380KB available (3304K code, 286K data, 148K init, 0K highmem)
Hierarchical RCU implementation.
NR_IRQS:402
Clocking rate (Crystal/Core/MPU): 26.0/332/600 MHz
Reprogramming SDRC clock to 332000000 Hz
GPMC revision 5.0
IRQ: Found an INTC at 0xfa200000 (revision 4.0) with 96 interrupts
Total of 96 interrupts on 1 active controller
OMAP GPIO hardware version 2.5
OMAP clockevent source: GPTIMER1 at 32768 Hz
Console: colour dummy device 80x30
Calibrating delay loop... 597.64 BogoMIPS (lpj=2334720)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
devtmpfs: initialized
regulator: core version 0.5
NET: Registered protocol family 16
Odyssey V3 Rev 3.0 board
SR1:Fused Nvalues for VDD1OPP130 aaceb9
SR1:Fused Nvalues for VDD1OPP100 9a8dfc
SR1:Fused Nvalues for VDD1OPP50 99d5bf
SR2:Fused Nvalues for VDD2OPP100 10065800
SR2:Fused Nvalues for VDD2OPP50 10085071
OMAP DMA hardware revision 5.0
bio: create slab <bio-0> at 0
omap-uart.1: ttyO0 at MMIO 0x4806a000 (irq = 72) is a OMAP UART1
console [ttyO0] enabled
SCSI subsystem initialized
i2c_omap i2c_omap.1: bus 1 rev4.0 at 2400 kHz
twl4030: PIH (irq 7) chaining IRQs 368..375
twl4030: power (irq 373) chaining IRQs 376..383
twl4030: gpio (irq 368) chaining IRQs 384..401
May Configuring MMC Embedded TIWLAN Controller (mmc==2)
May Configuring MMC Embedded TIWLAN Controller (mmc==1)
May Configuring MMC Embedded TIWLAN Controller (mmc==3)
regulator: VUSB1V5: 1500 mV normal standby
regulator: VUSB1V8: 1800 mV normal standby
regulator: VUSB3V1: 3100 mV normal standby
twl4030_usb twl4030_usb: Initialized TWL4030 USB module
regulator: VMMC2: 1850 mV normal standby
regulator: VMMC1: 1850 <--> 3150 mV normal standby
regulator: VDAC: 1800 mV normal standby
i2c_omap i2c_omap.2: bus 2 rev4.0 at 100 kHz
Registering new bus SDIO!
Switching to clocksource 32k_counter
musb_hdrc: version 6.0, musb-dma, peripheral, debug=0
HS USB OTG: revision 0x40, sysconfig 0x2011, sysstatus 0x1, intrfsel 0x1, simenable  0x0
musb_hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine (X), bulk split (X), HB-ISO Rx, HB-ISO Tx, SoftConn)
musb_hdrc: MHDRC RTL version 1.800 
musb_hdrc: setup fifo_mode 4
musb_hdrc: 28/31 max ep, 16384/16384 memory
WARNING: IRQ 92 does not support wakeup
musb_hdrc: USB Peripheral mode controller at fa0ab000 using DMA, IRQ 92
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
dspbridge_init: 600000 bytes @ 81500000
PMM: Registering `wifi'...
omap_zoom3_wifi_init: Will Switch Wifi Power On!
NetWinder Floating Point Emulator V0.97 (double precision)
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
fuse init (API version 7.13)
msgmni has been set to 202
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
tps65185: detected CPLD with version: 3 SA: 1
tps65185: detected device with ID=65 (TPS65185r1p2)
DSP Bridge driver loaded
Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
brd: module loaded
loop: module loaded
ODYV3 Platform [OMAP3621@800Mhz/TPS65921/TPS65185]
sn = `BK615BK3FD1I0528A1' | bsn = `0017079'
PMM Init.
input: TWL4030 Keypad as /devices/platform/i2c_omap.1/i2c-1/1-004a/twl4030_keypad/input/input0
PMM: Registering `twlkeypad'...
PMM: Registering `mma7660'...
mma7660 2-004c: i2c io error: -121
mma7660 2-004c: i2c io error: -121
mma7660 2-004c: i2c io error: -121
mma7660 2-004c: i2c io error: -121
mma7660 2-004c: i2c io error: -121
mma7660 2-004c: i2c io error: -121
mma7660 2-004c: i2c io error: -121
input: mma7660 Joystick as /devices/virtual/input/input1
input: etk2136 Touchscreen as /devices/virtual/input/input2
etk2136: type: 82FB version 0.1
PMM: Registering `etk2136'...
etk2136 2-0015: irq 181 busy?
etk2136: probe of 2-0015 failed with error -16
input: twl4030_pwrbutton as /devices/platform/i2c_omap.1/i2c-1/1-0049/twl4030_pwrbutton/input/input3
twl_rtc twl_rtc: rtc core: registered twl_rtc as rtc0
i2c /dev entries driver
nvram loaded.
OMAP Watchdog Timer Rev 0x31: initial timeout 60 sec
cpuidle: using governor ladder
cpuidle: using governor menu
Registered led device: frontlight
TCP cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 10
NET: Registered protocol family 17
Power Management for TI OMAP3.
SmartReflex driver initialized
SmartReflex driver initialized
Disabling unused clock "gpt2_ick"
Disabling unused clock "uart3_ick"
Disabling unused clock "gpio2_dbck"
Disabling unused clock "gpio3_dbck"
Disabling unused clock "gpio5_dbck"
Disabling unused clock "gpio6_dbck"
Disabling unused clock "gpt2_fck"
Disabling unused clock "uart3_fck"
Disabling unused clock "dss_ick"
Disabling unused clock "dss2_alwon_fck"
Disabling unused clock "dss_96m_fck"
Disabling unused clock "dss1_alwon_fck"
Disabling unused clock "i2c_ick"
Disabling unused clock "i2c_fck"
Disabling unused clock "sad2d_ick"
Disabling unused clock "dpll4_m6x2_ck"
Disabling unused clock "dpll4_m5x2_ck"
Disabling unused clock "dpll4_m3x2_ck"
Disabling unused clock "dpll3_m3x2_ck"
Disabling unused clock "sys_clkout1"
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
twl_rtc twl_rtc: setting system clock to 2012-12-26 04:22:37 UTC (1356495757)
Waiting for root device /dev/mmcblk0p2...
mmc1: new high speed MMC card at address 0001
mmcblk0: mmc1:0001 002G49 1.82 GiB 
 mmcblk0: p1 p2 p3 p4
kjournald starting.  Commit interval 5 seconds
EXT3-fs (mmcblk0p2): using internal journal
EXT3-fs (mmcblk0p2): mounted filesystem with writeback data mode
VFS: Mounted root (ext3 filesystem) on device 179:2.
devtmpfs: mounted
Freeing init memory: 148K
mmc2: card ROCR value: 0x80FF8000
mmc2: host does not support reading read-only switch. assuming write-enable.
mmc2: new SD card at address d532
mmcblk1: mmc2:d532 SU01G 968 MiB 
 mmcblk1: p1
udev: starting version 141
kjournald starting.  Commit interval 5 seconds
EXT3-fs (mmcblk0p3): using internal journal
EXT3-fs (mmcblk0p3): recovery complete
EXT3-fs (mmcblk0p3): mounted filesystem with writeback data mode
proc_load: Processor Loaded /lib/dsp/baseimage.dof
omap mailbox rev 4.0
proc_start: dsp in running state
procwrap_detach: deprecated dspbridge ioctl
proc_memory_sync: InValid address parameters 4054a000 be000
proc_memory_sync: InValid address parameters 40488000 2f600
proc_memory_sync: InValid address parameters 404b8000 2f600
DSPTrace:=== DSP: subframeip SN ver.1.08 (MV5) 07.X.2011 #1 (PPU)(IMG)(EINK-7) ===
proc_memory_sync: InValid address parameters 404e8000 2f600
proc_memory_sync: InValid address parameters 40518000 2f600
proc_memory_sync: InValid address parameters 4001e000 80
proc_memory_sync: InValid address parameters 4001f000 80
proc_memory_sync: InValid address parameters 40020000 80
proc_memory_sync: InValid address parameters 40021000 80
proc_memory_sync: InValid address parameters 40022000 80
proc_memory_sync: InValid address parameters 40548000 80
proc_memory_sync: InValid address parameters 40549000 80
proc_memory_sync: InValid address parameters 40608000 200
DSPTrace:=== DSP: Load waveforms for t = 32 ===
=== DSP: EINK parser version 1.07 (MV5) ===
-I- ------ Header 1 ------
DSPTrace:-I- File checksum B44B6C43 (hex)
-I- File size 143632
-I- Serial No 00000DE2 (hex)
-I- Run Type: C
-I- FPL: Vizplex 220
-I- FPL lot No 00A2 (hex)
-I- Mode Version: 0 INIT, 1 DU, 2 GC16, 3 ***, 4 A2, 5 GL16, 6 A2IN, 7 A2OUT
-I- Waveform version/subversion 18/01 (hex)
-I- Waveform type: WS
-I- Panel size: 6.0"
-W- Manufacturer code: Unknown 0x6D
-I- XWIA 000040 (hex)
-I- ------ Header 2 ------
-I- WMTA = 000062 (hex)
-I- Control format (FVSN): Simple Basic Format
-I- Entry Size (ES): 2 bits.
-I- Entry Count (EC): 256 entries per sub-frame.
DSPTrace:-I- Max Frame Count (MFC): 256 sub-frames per update.
-I- Temperature Range Table [15] loaded.
-I- Ranges: 0-3-6-9-12-15-18-21-24-27-30-33-38-43-48
-I- ========================================
=== ========================================
DSPTrace:-I- [0] Loaded ID = 2, t = 30 - 33, Subframes = 59
DSPTrace:-I- [1] Loaded ID = 2, t = 30 - 33, Subframes = 59
DSPTrace:-I- [2] Loaded ID = 1, t = 30 - 33, Subframes = 17
DSPTrace:-I- [3] Loaded ID = 4, t = 30 - 33, Subframes = 10
DSPTrace:-I- [4] Loaded ID = 5, t = 30 - 33, Subframes = 59
DSPTrace:-I- [5] Loaded ID = 6, t = 30 - 33, Subframes = 27
DSPTrace:-I- [6] Loaded ID = 7, t = 30 - 33, Subframes = 69
DSPTrace:-I- [7] Loaded ID = 0, t = 30 - 33, Subframes = 129
=== ========================================
fusd: starting, $Id:$, debugging messages disabled
cdev control id: 263192576
g_file_storage gadget: File-backed Storage Gadget, version: 20 November 2008
g_file_storage gadget: Number of LUNs=2
FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
mma7660 2-004c: i2c io error: -121
mma7660 2-004c: i2c io error: -121
mma7660 2-004c: i2c io error: -121
musb_hdrc periph: enabled ep1in for bulk IN, dma, maxpacket 512
musb_hdrc periph: enabled ep1out for bulk OUT, dma, maxpacket 512
g_file_storage gadget: high speed config #1
etk2136: poweron packet: 545800A1

  • Hi Yoann,

    From the log i do not see the WLAN card getting detected.. Can you make sure the WLAN_EN is toggled either as part of MMC enumeration?

  • Hello Victor,

    Sorry for my late answer. I had to switch to another very urgent project and didn't really go any further on my wlan issue since.

    Just after your answer I put a scope and checked that WLAN_EN was properly toggled. It was the case...

    I think I miss something very trivial here. This behaviour is very strange.

    I will come back here on that matter as soon as my urgent project is gone. But In the meantime I wanted to thank you for trying to help me.

    See you soon.

    Regards,

    Yoann