Hi all,
As PSP for OMAP3 are based on kernel 2.6.37, and looks there is no intention to upgrade this kernel to a newer version. Could anyone confirm if the Wilink8 driver is available for kernel 2.6.37 or not ?
Thanks.
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.
Hello Joseph,
I am working on wl1805 integration with dm8168 processor. The kernel version is 2.6.37.
1) I am little confused with wl12xx and wl18xx. Are they both same or is there any difference between them?
-----------
2) I am trying to build the compat wireless for wl18xx from the procedure give in the below link
http://processors.wiki.ti.com/index.php/WL18xx_System_Build_Scripts
I have set the env file and calling the build script as ( sudo ./wl18xx_build.sh all )
I have run into the following error
Base tree: wl18xx.git
Base tree version: ol_r8.a8.10
compat.git: ol_r8.a8.10
compat-drivers release: ol_r8.a8.04_32
Code metrics archive: http://bit.ly/H6BTF7
Restored makefile: ./Makefile (and removed backup)
Processing new driver-select request...
Backing up makefile: Makefile.bk
Backing up makefile: drivers/net/wireless/Makefile.bk
Backup exists: drivers/net/wireless/Makefile.bk
Backing up makefile: drivers/net/wireless/ti/Makefile.bk
Backup exists: Makefile.bk
Backup exists: Makefile.bk
Backup exists: Makefile.bk
Backup exists: Makefile.bk
Backing up makefile: net/wireless/Makefile.bk
Backing up makefile: drivers/ssb/Makefile.bk
Backing up makefile: drivers/bcma/Makefile.bk
Backing up makefile: drivers/misc/eeprom/Makefile.bk
Backup exists: Makefile.bk
./scripts/gen-compat-autoconf.sh /home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/.config /home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/config.mk > include/linux/compat_autoconf.h
make -C /home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/board-support/linux-2.6.37-psp04.04.00.01 M=/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless modules
make[1]: Entering directory `/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/board-support/linux-2.6.37-psp04.04.00.01'
CC [M] /home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/compat/main.o
In file included from include/linux/i2c.h:37,
from include/linux/fb.h:5,
from include/linux/vga_switcheroo.h:10,
from /home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/include/linux/vga_switcheroo.h:7,
from /home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/include/linux/compat-3.5.h:106,
from /home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/include/linux/compat-3.4.h:44,
from /home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/include/linux/compat-2.6.h:69,
from <command-line>:0:
/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/include/linux/of.h: In function 'of_property_read_bool':
/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/include/linux/of.h:28: error: implicit declaration of function 'of_find_property'
/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/include/linux/of.h:28: warning: initialization makes pointer from integer without a cast
make[3]: *** [/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/compat/main.o] Error 1
make[2]: *** [/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless/compat] Error 2
make[1]: *** [_module_/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/work_space_R8_A8_10_32/compat-wireless] Error 2
make[1]: Leaving directory `/home/cornet/ti-ezsdk_dm816x-evm_5_05_02_00/board-support/linux-2.6.37-psp04.04.00.01'
make: *** [modules] Error 2
cornet@cornet:~/ti-ezsdk_dm816x-evm_5_05_02_00/build-utilites$
I have return the build command( sudo ./wl18xx_build.sh all ) output to a file and attaching it here.
I tried to edit the of.h but every time i compile the changes are gone and it shows me same error.
I edited the kernel source as told in this link
http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_OpenSource_EZSDK_WLAN_build
this procedure is for dm814x processer but i tried modify it for dm8168 processer. I still have to check this once i am able to compile the above utils with the build script.
Can you please help me with the above issue. Am i going in the correct path?
There are two build scripts 1) wl18xx_build.sh 2) wl12xx_build.sh. I am using first script. is that correct? or should i use the second script?
------------
3) In your previous message you told we can make wl18xx work with 2.6.37 kernel with some changes. Do you have any procedure which can help me?
Will be waiting for your reply. Thankq very much. please help.
Regards,
Srikanth.
Hi Srikanth,
(1) wl18xx_build.sh builds the WiLink8 drivers & wl12xx_build.sh builds the WiLink6/7 drivers. They are both different, and you should be using the wl18xx_build.sh script for your WL1805 integration.
(2) You can directly edit files in the "compat-wireless" package, and do a make inside the compat-wireless package.
(3) Like I told in my previous post, the minumum verified WL8 kernel version is 3.2 - older kernel versions might work, but you might have to modify the package. Unfortunately, I don't have any procedure for this.
Regards,
Gigi Joseph.
Hello Joseph,
Thank you very much for the reply.
I will try the steps and reply as soon as possible.
Regards,
Srikanth.
---------------------------------------------------------------- arch/arm/mach-omap2/board-ti8168evm.c ------------------------------------- static struct omap2_hsmmc_info mmc[] = { { //CTI Modified. //Custom Usage #ifdef CONFIG_WL12XX_PLATFORM_DATA /* WLAN_EN is GP1[9] */ #define GPIO_WLAN_EN ((1 * 32) + 11) /* WLAN_IRQ is GP1[11] */ #define GPIO_WLAN_IRQ ((1 * 32) + 9) .mmc = 1, //CTI Modified. .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD, //.caps = MMC_CAP_4_BIT_DATA, .gpio_cd = -EINVAL, .gpio_wp = -EINVAL, .ocr_mask = MMC_VDD_165_195, .nonremovable = true, }, #endif { .mmc = 1, .caps = MMC_CAP_4_BIT_DATA, .gpio_cd = -EINVAL, /* Dedicated pins for CD and WP */ .gpio_wp = -EINVAL, .ocr_mask = MMC_VDD_33_34, }, {} /* Terminator */ }; ---------------- static struct omap_board_mux board_mux[] __initdata = { TI816X_MUX(SC0_DET, OMAP_MUX_MODE2), /* gpio1-09 */ TI816X_MUX(SC0_CLK, OMAP_MUX_MODE2), /* gpio1-11 */ TI816X_MUX(MMC_CLK, OMAP_MUX_MODE0 | 0x10), TI816X_MUX(MMC_CMD, OMAP_MUX_MODE0 | 0x10), TI816X_MUX(MMC_DAT0, OMAP_MUX_MODE0 | 0x10), TI816X_MUX(MMC_DAT1_SDIRQ, OMAP_MUX_MODE0 | 0x10), TI816X_MUX(MMC_DAT2_SDRW, OMAP_MUX_MODE0 | 0x10), TI816X_MUX(MMC_DAT3, OMAP_MUX_MODE0 | 0x10), } ---------------- #ifdef CONFIG_WL12XX_PLATFORM_DATA static struct wl12xx_platform_data wlan_data __initdata = { .irq = OMAP_GPIO_IRQ(GPIO_WLAN_IRQ), /* COM6 (127x) uses FREF */ .board_ref_clock = WL12XX_REFCLOCK_26, /* COM7 (128x) uses TCXO */ .board_tcxo_clock = WL12XX_TCXOCLOCK_26, }; static int wl12xx_set_power(struct device *dev, int slot, int power_on, int vdd) { static bool power_state; printk("Powering %s wl12xx", power_on ? "on" : "off"); if (power_on == power_state) return 0; power_state = power_on; if (power_on) { /* Power up sequence required for wl127x devices */ gpio_set_value(GPIO_WLAN_EN, 1); usleep_range(15000, 15000); gpio_set_value(GPIO_WLAN_EN, 0); usleep_range(1000, 1000); gpio_set_value(GPIO_WLAN_EN, 1); msleep(70); } else { gpio_set_value(GPIO_WLAN_EN, 0); } return 0; } static void __init ti816x_wl12xx_wlan_init(void) { struct device *dev; struct omap_mmc_platform_data *pdata; int ret; /* Set up the WLAN_EN and WLAN_IRQ muxes * / //Custom Usage omap_mux_init_signal("gp1_io11", TI816X_PULL_DIS); omap_mux_init_signal("gp1_io9", TI816X_INPUT_EN | TI816X_PULL_DIS);*/ /* Pass the wl12xx platform data information to the wl12xx driver */ if (wl12xx_set_platform_data(&wlan_data)) { pr_err("Error setting wl12xx data\n"); return; } /* * The WLAN_EN gpio has to be toggled without using a fixed regulator, * as the omap_hsmmc does not enable/disable regulators on the TI816X. */ ret = gpio_request_one(GPIO_WLAN_EN, GPIOF_OUT_INIT_LOW, "wlan_en"); //ret = gpio_request_one(GPIO_WLAN_EN, GPIOF_OUT_INIT_HIGH, "wlan_en"); if (ret) { pr_err("Error requesting wlan enable gpio: %d\n", ret); return; } /* * Set our set_power callback function which will be called from * set_ios. This is requireq since, unlike other omap2+ platforms, a * no-op set_power function is registered. Thus, we cannot use a fixed * regulator, as it will never be toggled. * Moreover, even if this was not the case, we're on mmc0, for which * omap_hsmmc' set_power functions do not toggle any regulators. * TODO: Consider modifying omap_hsmmc so it would enable/disable a * regulator for ti814x/mmc0. */ dev = mmc[0].dev; if (!dev) { pr_err("wl12xx mmc device initialization failed\n"); return; } pdata = dev->platform_data; if (!pdata) { pr_err("Platform data of wl12xx device not set\n"); return; } pdata->slots[0].set_power = wl12xx_set_power; } static void __init ti816x_wl12xx_init(void) { ti816x_wl12xx_wlan_init(); } #else /* CONFIG_WL12XX_PLATFORM_DATA */ static void __init ti816x_wl12xx_init(void) { } #endif --------------------- static void __init ti8168_evm_init(void) { //Added ti816x_wl12xx_init(); } -------------------------------------------------------------------------------- arch/arm/mach-omap2/devices.c ------------------------------ void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, int nr_controllers) { else if (cpu_is_ti816x()) { printk("cpu_is_ti816x() case 0 \n"); base = TI816X_MMC1_BASE; //CTI Modified. #ifndef CONFIG_WL12XX_PLATFORM_DATA printk("TI81XX_IRQ_SD case 0 = %d \n", TI81XX_IRQ_SD); irq = TI81XX_IRQ_SD; #else printk("TI81XX_IRQ_SD case 0 = %d \n", TI81XX_IRQ_SD); irq = TI81XX_IRQ_SD; #endif } ------------------------------------------------------------------------------------- arch/arm/mach-omap2/kconfig ---------------------------- config TI8168EVM_WL12XX bool "TI816x wl12xx daughter board" depends on MACH_TI8168EVM select WL12XX_PLATFORM_DATA help The COM6/COM7 cards are wireless connectivity cards based on Murata's type TN module and Texas Insturments wl12xx chipset. Say Y if you want to use a wl12xx expansion card connected to the TI8168 EVM. -------------------------------------------------------------------------------------- arch/arm/plat-omap/include/plat/mmc.h -------------------------------------- //CTI Modified. #ifdef CONFIG_WL12XX_PLATFORM_DATA #define TI816X_NR_MMC 1 #else #define TI81XX_NR_MMC 1 #endif //CTI Modified #ifdef CONFIG_ARCH_TI814X #define TI81XX_NR_MMC TI814X_NR_MMC #else /* TI816X */ #define TI81XX_NR_MMC TI816X_NR_MMC #endif -------------------------------------------------------------------------------------- /drivers/mmc/core/core.c ------------------------ //CTI Modified #include <linux/pm_runtime.h> void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card) { //CTI Modified. // timeout_us += data->timeout_clks * 1000 / // (card->host->ios.clock / 1000); if (card->host->ios.clock) timeout_us += data->timeout_clks * 1000 / (card->host->ios.clock / 1000); } -------- void mmc_rescan(struct work_struct *work) { //CTI Modified /* if there is a card registered, check whether it is still present */ // if ((host->bus_ops != NULL) && host->bus_ops->detect && !host->bus_dead) /* * if there is a _removable_ card registered, check whether it is * still present */ if (host->bus_ops && host->bus_ops->detect && !host->bus_dead && mmc_card_is_removable(host)) host->bus_ops->detect(host); } ---------- int mmc_resume_host(struct mmc_host *host) { //CTI Modified. /* * Tell runtime PM core we just powered up the card, * since it still believes the card is powered off. * Note that currently runtime PM is only enabled * for SDIO cards that are MMC_CAP_POWER_OFF_CARD */ if (mmc_card_sdio(host->card) && (host->caps & MMC_CAP_POWER_OFF_CARD)) { pm_runtime_disable(&host->card->dev); pm_runtime_set_active(&host->card->dev); pm_runtime_enable(&host->card->dev); } } } -------------------------------------------------------------------------------------- /drivers/mmc/core/sdio.c ------------------------ static int sdio_read_cccr(struct mmc_card *card) { //CTI ADDED #if 0 // WL18xx returns CCR_REV_2_00 and so this is not an error if (cccr_vsn > SDIO_CCCR_REV_1_20) { printk(KERN_ERR "%s: unrecognised CCCR structure version %d\n", mmc_hostname(card->host), cccr_vsn); return -EINVAL; } #endif } ----------- static int mmc_sdio_resume(struct mmc_host *host) { //CTI Modified // err = mmc_sdio_init_card(host, host->ocr, host->card,(host->pm_flags & MMC_PM_KEEP_POWER)); /* No need to reinitialize powered-resumed nonremovable cards */ if (mmc_card_is_removable(host) || !mmc_card_is_powered_resumed(host)) err = mmc_sdio_init_card(host, host->ocr, host->card, (host->pm_flags & MMC_PM_KEEP_POWER)); else if (mmc_card_is_powered_resumed(host)) { /* We may have switched to 1-bit mode during suspend */ err = sdio_enable_4bit_bus(host->card); if (err > 0) { mmc_set_bus_width(host, MMC_BUS_WIDTH_4); err = 0; } } } -------------------------------------------------------------------------------------- /drivers/mmc/core/sdio_bus.c ---------------------------- //CTI Modified. #if 0 static int sdio_bus_pm_prepare(struct device *dev) { struct sdio_func *func = dev_to_sdio_func(dev); /* * Resume an SDIO device which was suspended at run time at this * point, in order to allow standard SDIO suspend/resume paths * to keep working as usual. * * Ultimately, the SDIO driver itself will decide (in its * suspend handler, or lack thereof) whether the card should be * removed or kept, and if kept, at what power state. * * At this point, PM core have increased our use count, so it's * safe to directly resume the device. After system is resumed * again, PM core will drop back its runtime PM use count, and if * needed device will be suspended again. * * The end result is guaranteed to be a power state that is * coherent with the device's runtime PM use count. * * The return value of pm_runtime_resume is deliberately unchecked * since there is little point in failing system suspend if a * device can't be resumed. */ if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD) pm_runtime_resume(dev); return 0; } #endif ---------------- static const struct dev_pm_ops sdio_bus_pm_ops = { //CTI Modified. // .prepare = sdio_bus_pm_prepare, } ------------------------------------------------------------------------------------------ include/linux/wl12xx.h ---------------------- //CTI Modified. /* Reference clock values */ enum { WL12XX_REFCLOCK_19 = 0, /* 19.2 MHz */ WL12XX_REFCLOCK_26 = 1, /* 26 MHz */ WL12XX_REFCLOCK_38 = 2, /* 38.4 MHz */ WL12XX_REFCLOCK_52 = 3, /* 52 MHz */ WL12XX_REFCLOCK_38_XTAL = 4, /* 38.4 MHz, XTAL */ WL12XX_REFCLOCK_26_XTAL = 5, /* 26 MHz, XTAL */ }; /* TCXO clock values */ enum { WL12XX_TCXOCLOCK_19_2 = 0, /* 19.2MHz */ WL12XX_TCXOCLOCK_26 = 1, /* 26 MHz */ WL12XX_TCXOCLOCK_38_4 = 2, /* 38.4MHz */ WL12XX_TCXOCLOCK_52 = 3, /* 52 MHz */ WL12XX_TCXOCLOCK_16_368 = 4, /* 16.368 MHz */ WL12XX_TCXOCLOCK_32_736 = 5, /* 32.736 MHz */ WL12XX_TCXOCLOCK_16_8 = 6, /* 16.8 MHz */ WL12XX_TCXOCLOCK_33_6 = 7, /* 33.6 MHz */ }; struct wl12xx_platform_data { void (*set_power)(bool enable); /* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */ int irq; bool use_eeprom; int board_ref_clock; //CTI Modified. int board_tcxo_clock; unsigned long platform_quirks; }; //CTI Modified. /* Platform does not support level trigger interrupts */ #define WL12XX_PLATFORM_QUIRK_EDGE_IRQ BIT(0) ------------------------------------------------------------------------------------------------- include/linux/mmc/host.h ------------------------ //CTI Modified static inline int mmc_card_is_powered_resumed(struct mmc_host *host) { return host->pm_flags & MMC_PM_KEEP_POWER; } ------------------------------------------------------------------------------------------------- include/linux/mmc/sdio.h ------------------------ //CTI ADDED // Backport for Wilink8 driver build #define SDIO_SDIO_REV_3_00 4 /* SDIO Spec Version 3.00 */ --------------------------------------------------------------------------------------------------
Hi Srikanth,
Please verify proper power up sequence of the module (VDD/VIO/CLOCK/ etc).
The power up sequence is mentioned in the data sheet as well as the below wiki page:
http://processors.wiki.ti.com/index.php/WL18xx_Module_Schematic_Checklist#Power-up_Sequence
Regards,
Gigi Joseph.
Hello Joseph,
In the power up sequence, it says we have to put "WLAN and BT_EN" to the gpio, We are not using the Bluetooth. do we have to enable that also.
I have a CD(Card detect resistor) connected. Do i have to remove that also?
Thanks for the help.
Regards,
Srikanth.
Hello Joseph,
I am getting this following error -110,
mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0 timing 0
mmc0: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 7 width 0 timing 0
Powering on wl12xx
if - gpio_set_value
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
notify_init : notify drivercreated for remote proc id 2 at physical Address 0xbf900000
usbcore: registered new interface driver snd-usb-audio
asoc: tlv320aic3x-hifi <-> davinci-mcasp.2 mapping ok
ALSA device list:
#0: TI81XX EVM
NET: Registered protocol family 26
nf_conntrack version 0.5.0 (3169 buckets, 12676 max)
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
Bridge firewalling registered
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
omap_voltage_late_init: Voltage driver support not added
Power Management for TI81XX.
smartreflex smartreflex: Driver is not initialized, nTarget values are not found
regulator_init_complete: disabling VFB
omap_rtc omap_rtc: setting system clock to 2000-01-01 00:00:01 UTC (946684801)
ata2: SATA link down (SStatus 0 SControl 300)
ata1: SATA link down (SStatus 0 SControl 300)
Powering off wl12xx
else - gpio_set_value
Powering on wl12xx
if - gpio_set_value
mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 7 width 0 timing 0
mmc0: starting CMD52 arg 00000c00 flags 00000195
mmc0: req done (CMD52): -110: 00000000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = -110
mmc0: starting CMD52 arg 80000c08 flags 00000195
mmc0: req done (CMD52): -110: 00000000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = -110
mmc0: clock 400000Hz busmode 1 powermode 2 cs 1 Vdd 7 width 0 timing 0
mmc0: starting CMD0 arg 00000000 flags 000000c0
mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000
mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 7 width 0 timing 0
mmc0: starting CMD8 arg 000000aa flags 000002f5
mmc0: req done (CMD8): -110: 00000000 00000000 00000000 00000000
mmc0: starting CMD5 arg 00000000 flags 000002e1
mmc0: req done (CMD5): 0: a0ffffc0 00000000 00000000 00000000
mmc_attach_bus success
mmc0: card claims to support voltages below the defined range. These will be ignored.
mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 7 width 0 timing 0
host->ocr = 128
mmc_sdio_init_card()
before -- mmc_send_io_op_cond()
mmc0: starting CMD5 arg 00000080 flags 000002e1
mmc0: req done (CMD5): 0: a0ffffc0 00000000 00000000 00000000
before -- mmc_alloc_card()
After -- mmc_alloc_card() = 0
card type = 0
else case
before -- host->ops->init_card
mmc0: starting CMD3 arg 00000000 flags 00000075
mmc0: req done (CMD3): 0: 00010000 00000000 00000000 00000000
before -- mmc_set_bus_mode()
mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 7 width 0 timing 0
before -- mmc_select_card()
mmc0: starting CMD7 arg 00010000 flags 00000015
mmc0: req done (CMD7): 0: 00001ec7 00000000 00000000 00000000
inside sdio_read_cccr()
mmc0: starting CMD52 arg 00000000 flags 00000195
mmc0: req done (CMD52): 0: 00001043 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00001000 flags 00000195
mmc0: req done (CMD52): 0: 00001012 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00002400 flags 00000195
mmc0: req done (CMD52): 0: 00001000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00002600 flags 00000195
mmc0: req done (CMD52): 0: 00001001 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00001200 flags 00000195
mmc0: req done (CMD52): 0: 00001000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00001400 flags 00000195
mmc0: req done (CMD52): 0: 00001010 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00001600 flags 00000195
mmc0: req done (CMD52): 0: 00001000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00200000 flags 00000195
mmc0: req done (CMD52): 0: 00001020 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00200200 flags 00000195
mmc0: req done (CMD52): 0: 00001004 00000000 00000000 00000000
davinci_mdio davinci_mdio.0: resetting idled controller
net eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=0:01, id=282f014)
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00200400 flags 00000195
mmc0: req done (CMD52): 0: 00001097 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00200600 flags 00000195
mmc0: req done (CMD52): 0: 00001000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00200800 flags 00000195
mmc0: req done (CMD52): 0: 00001076 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00200a00 flags 00000195
mmc0: req done (CMD52): 0: 00001040 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00200c00 flags 00000195
mmc0: req done (CMD52): 0: 00001021 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00200e00 flags 00000195
mmc0: req done (CMD52): 0: 00001002 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00201000 flags 00000195
mmc0: req done (CMD52): 0: 0000100c 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00201200 flags 00000195
mmc0: req done (CMD52): 0: 00001000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00201400 flags 00000195
mmc0: req done (CMD52): 0: 00001022 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00201600 flags 00000195
mmc0: req done (CMD52): 0: 00001004 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00201800 flags 00000195
mmc0: req done (CMD52): 0: 00001000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00201a00 flags 00000195
mmc0: req done (CMD52): 0: 00001000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00201c00 flags 00000195
mmc0: req done (CMD52): 0: 00001008 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00201e00 flags 00000195
mmc0: req done (CMD52): 0: 00001032 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 00202000 flags 00000195
mmc0: req done (CMD52): 0: 000010ff 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
inside cd disable1
mmc0: starting CMD52 arg 00002600 flags 00000195
mmc0: req done (CMD52): 0: 00001001 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
mmc0: starting CMD52 arg 80002603 flags 00000195
mmc0: req done (CMD52): 0: 00001003 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = 0
sdio_enable_hs()err > 0 = 1
mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 7 width 0 timing 2
before -- mmc_set_clock()
mmc0: clock 50000000Hz busmode 2 powermode 2 cs 0 Vdd 7 width 0 timing 2
inside -- sdio_enable_4bit_bus()
card->type = 2
mmc0: starting CMD52 arg 00000e00 flags 00000195
mmc0: req done (CMD52): -110: 00000000 00000000 00000000 00000000
err -- mmc_io_rw_direct_host(4) = -110
sdio_enable_4bit_bus() = -110
err2 = -110
mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0 timing 0
Powering off wl12xx
else - gpio_set_value
mmc0: error -110 whilst initialising SDIO card
mmc0: starting CMD55 arg 00000000 flags 000000f5
mmc0: req done (CMD55): -110: 00000000 00000000 00000000 00000000
mmc0: starting CMD55 arg 00000000 flags 000000f5
mmc0: req done (CMD55): -110: 00000000 00000000 00000000 00000000
mmc0: starting CMD55 arg 00000000 flags 000000f5
mmc0: req done (CMD55): -110: 00000000 00000000 00000000 00000000
mmc0: starting CMD55 arg 00000000 flags 000000f5
mmc0: req done (CMD55): -110: 00000000 00000000 00000000 00000000
mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0 timing 0
IP-Config: Complete:
Please help.
Thanks,
Srikanth.
Hi Srikanth,
Have you verified the Clock/connections?
I don't think this is a problem on the software side.
Regards,
Gigi Joseph.
Hello Joseph,
We checked the connections and trying to get the power up sequence right.
We are getting the WLAN_EN high and can see the clock when the commands are send out from the host. We are not getting the WLAN_IRQ.
http://processors.wiki.ti.com/index.php/WL18xx_Platform_Integration_Guide#WLAN_Reset.2FPower_up_sequence
The WLAN power-up sequence waveform in the above link before WLAN_IRQ high pulse it is told that "indicates completion of FW download and internal initilization". Can you tell us what dose that mean? Is the WL1835MOD download the FW from the host or the FW is stored in the module already?
Is the host have to download any firmware to the WL1835?
When we are trying to find the techinical documents for the wl1835 register addresses or any information we are unable to get them. Where can we get them? Can you provide us the reference manual for the WL1835 and WL1805?
Thanks for the help.
Regards,
Srikanth.
Hi Srikanth,
The host has to download the fw.
This will be taken care by the wl18xx driver itself. You just have to ensure that the correct fw (a file named wl18xx-fw-4.bin) is available in "/lib/firmware/ti-connectivity"
But I think your problem happens much earlier... The SD init is failing in your case.
Regarding the wl18xx register address, the driver source code is open. You can take a look at: "reg.h" (drivers/net/wireless/ti/wl18xx/)
Regards,
Gigi Joseph.
Hello Joseph,
Thanks for the help.
The problem is with the hardwarw connections.
The basic commands of the SD is clocked at 400khz and when the SDIO negotiate with the wl1835 and tries to swith to 50Mhz clock then it fails with -110 error.
Our hardware engineer is trying to shot the wire length, to make it work.
We are not sure if the wl1835MOD which we have is working, so we purchased a AM3359 evm board and tried to check it.
We have used "AM335xSDK 06_00_00_00" SDK.
We used the link below to get the wl18xx compilation.
http://processors.wiki.ti.com/index.php/WL18xx_System_Build_Scripts#Building_R8.3_SP1
It compiled and the board booted fine loading the wl18xx modules and firmware.
we are able to see the wlan0. and doing down and up on the device is also fine. when we tried run the command "iw wlan0 scan" it crashes with the messages below.
root@am335x-evm:~# ifconfig wlan0 down
root@am335x-evm:~# ifconfig wlan0 up
[ 71.366882] wlcore: PHY firmware version: Rev 8.2.0.0.195
[ 71.460876] wlcore: firmware booted (Rev 8.8.0.0.13)
root@am335x-evm:~# ifconfig
eth0 Link encap:Ethernet HWaddr C4:ED:BA:88:47:F0
inet addr:192.168.2.36 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:42322 errors:0 dropped:1 overruns:0 frame:0
TX packets:19395 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:51038104 (48.6 MiB) TX bytes:2941648 (2.8 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:127 errors:0 dropped:0 overruns:0 frame:0
TX packets:127 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:250507 (244.6 KiB) TX bytes:250507 (244.6 KiB)
wlan0 Link encap:Ethernet HWaddr 84:DD:20:92:A5:8A
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@am335x-evm:~# iw wlan0 scan
[ 93.037780] wlcore: ERROR ELP wakeup timeout!
[ 93.042358] ------------[ cut here ]------------
[ 93.047271] WARNING: at /home/videolab/ti-sdk-am335x-evm-06.00.00.00/build-utilites/workdir/compat-wireless/drivers/net/wireless/ti/wlcore/main.c:802 wl12xx_queue_recovery_work+0x74/0x7c [wlcore]()
[ 93.065673] Modules linked in: g_mass_storage wl18xx(O) wlcore(O) mac80211(O) cfg80211(O) wlcore_sdio(O) compat(O)
[ 93.076538] Backtrace:
[ 93.079132] [<c0017dbc>] (dump_backtrace+0x0/0x10c) from [<c04140c0>] (dump_stack+0x18/0x1c)
[ 93.087951] r6:bf0dbe74 r5:00000009 r4:00000000 r3:c05f7f0c
[ 93.093902] [<c04140a8>] (dump_stack+0x0/0x1c) from [<c003f1dc>] (warn_slowpath_common+0x54/0x6c)
[ 93.103210] [<c003f188>] (warn_slowpath_common+0x0/0x6c) from [<c003f218>] (warn_slowpath_null+0x24/0x2c)
[ 93.113220] r8:bf0fcb74 r7:ffffaef5 r6:c05f8e48 r5:ffffff92 r4:c61894a0
[ 93.120056] r3:00000009
[ 93.122833] [<c003f1f4>] (warn_slowpath_null+0x0/0x2c) from [<bf0dbe74>] (wl12xx_queue_recovery_work+0x74/0x7c [wlcore])
[ 93.134246] [<bf0dbe00>] (wl12xx_queue_recovery_work+0x0/0x7c [wlcore]) from [<bf0e6bf4>] (wl1271_ps_elp_wakeup+0xe0/0x230 [wlcore])
[ 93.146728] r4:c61894a0 r3:c05f7f28
[ 93.150512] [<bf0e6b14>] (wl1271_ps_elp_wakeup+0x0/0x230 [wlcore]) from [<bf0d9110>] (wl1271_op_config+0x58/0x160 [wlcore])
[ 93.162322] [<bf0d90b8>] (wl1271_op_config+0x0/0x160 [wlcore]) from [<bf066268>] (ieee80211_hw_config+0x58/0x294 [mac80211])
[ 93.174133] [<bf066210>] (ieee80211_hw_config+0x0/0x294 [mac80211]) from [<bf07407c>] (ieee80211_recalc_idle+0x28/0x2c [mac80211])
[ 93.186492] [<bf074054>] (ieee80211_recalc_idle+0x0/0x2c [mac80211]) from [<bf06b734>] (__ieee80211_start_scan+0x140/0x364 [mac80211])
[ 93.199127] r4:c6188b20 r3:00000002
[ 93.202941] [<bf06b5f4>] (__ieee80211_start_scan+0x0/0x364 [mac80211]) from [<bf06c384>] (ieee80211_request_scan+0x30/0x4c [mac80211])
[ 93.215576] r6:00000000 r5:c6109600 r4:c73213c0
[ 93.220489] [<bf06c354>] (ieee80211_request_scan+0x0/0x4c [mac80211]) from [<bf079a28>] (ieee80211_scan+0xa8/0xac [mac80211])
[ 93.232330] r5:c6188000 r4:00000001
[ 93.236236] [<bf079980>] (ieee80211_scan+0x0/0xac [mac80211]) from [<bf03bf5c>] (nl80211_trigger_scan+0x558/0x59c [cfg80211])
[ 93.248046] r4:c60b9c34 r3:bf079980
[ 93.251831] [<bf03ba04>] (nl80211_trigger_scan+0x0/0x59c [cfg80211]) from [<c0388b1c>] (genl_rcv_msg+0x224/0x25c)
[ 93.262603] [<c03888f8>] (genl_rcv_msg+0x0/0x25c) from [<c0387e88>] (netlink_rcv_skb+0xb4/0xc8)
[ 93.271697] [<c0387dd4>] (netlink_rcv_skb+0x0/0xc8) from [<c03888f0>] (genl_rcv+0x24/0x2c)
[ 93.280364] r6:c6109800 r5:c7055a40 r4:c7055a40 r3:00000000
[ 93.286285] [<c03888cc>] (genl_rcv+0x0/0x2c) from [<c0387878>] (netlink_unicast+0x280/0x2d0)
[ 93.295104] r4:00000000 r3:c03888cc
[ 93.298858] [<c03875f8>] (netlink_unicast+0x0/0x2d0) from [<c0387bc8>] (netlink_sendmsg+0x258/0x2c8)
[ 93.308441] [<c0387970>] (netlink_sendmsg+0x0/0x2c8) from [<c035f5bc>] (sock_sendmsg+0x90/0xb0)
[ 93.317535] [<c035f52c>] (sock_sendmsg+0x0/0xb0) from [<c035f94c>] (__sys_sendmsg+0x2bc/0x2d0)
[ 93.326568] [<c035f690>] (__sys_sendmsg+0x0/0x2d0) from [<c03611dc>] (sys_sendmsg+0x44/0x70)
[ 93.335418] [<c0361198>] (sys_sendmsg+0x0/0x70) from [<c0014740>] (ret_fast_syscall+0x0/0x30)
[ 93.344329] r6:00009629 r5:bef22c48 r4:40189114
[ 93.349182] ---[ end trace 3975c341d447a3e5 ]---
[ 93.354949] wlcore: Hardware recovery in progr.0.13
[ 93.362121] ----------------------
[ 93.367034] WARNING: at /home/videolab/ti-sdk-am335x-evm-06.00.00.00/build-utilites/workdir/compat-wireless/drivers/net/wireless/ti/wlcore/io.h:65 wlcore_set_partition+0xa0/0x4e8 [wlcore]()
[ 93.384704] Modules linked in: g_mass_storage wl18xx(O) wlcore(O) mac80211(O) cfg80211(O) wlcore_sdio(O) compat(O)
[ 93.395568] Backtrace:
[ 93.398132] [<c0017dbc>] (dump_backtrace+0x0/0x10c) from [<c04140c0>] (dump_stack+0x18/0x1c)
[ 93.406951] r6:bf0e2b7c r5:00000009 r4:00000000 r3:c05f7f0c
[ 93.412902] [<c04140a8>] (dump_stack+0x0/0x1c) from [<c003f1dc>] (warn_slowpath_common+0x54/0x6c)
[ 93.422210] [<c003f188>] (warn_slowpath_common+0x0/0x6c) from [<c003f218>] (warn_slowpath_null+0x24/0x2c)
[ 93.432220] r8:00000000 r7:00000000 r6:bf0fcb74 r5:bf11c244 r4:c61894a0
[ 93.439056] r3:00000009
[ 93.441833] [<c003f1f4>] (warn_slowpath_null+0x0/0x2c) from [<bf0e2b7c>] (wlcore_set_partition+0xa0/0x4e8 [wlcore])
[ 93.452789] [<bf0e2adc>] (wlcore_set_partition+0x0/0x4e8 [wlcore]) from [<bf0dc33c>] (wl1271_recovery_work+0x70/0x560 [wlcore])
[ 93.464813] r7:bf0dc2cc r6:c61894d4 r5:c61894a0 r4:c6189734
[ 93.470764] [<bf0dc2cc>] (wl1271_recovery_work+0x0/0x560 [wlcore]) from [<c0052330>] (process_one_work+0x11c/0x364)
[ 93.481689] [<c0052214>] (process_one_work+0x0/0x364) from [<c0052c90>] (worker_thread+0x17c/0x310)
[ 93.491180] [<c0052b14>] (worker_thread+0x0/0x310) from [<c00573b4>] (kthread+0x8c/0x94)
[ 93.499633] [<c0057328>] (kthread+0x0/0x94) from [<c004203c>] (do_exit+0x0/0x65c)
[ 93.507476] r6:c004203c r5:c0057328 r4:c701ded4
[ 93.512298] ---[ end trace 3975c341d447a3e6 ]---
[ 93.517150] wlcore: down
command failed: Resource temporarily unavailable[ 93.523468] ieee80211 phy0: Hardware restart was requested
(-11)
root@am335x-evm:[ 93.932891] wlcore: PHY firmware version: Rev 8.2.0.0.195
[ 94.030822] wlcore: firmware booted (Rev 8.8.0.0.13)
Can you please tell us if our wl1835mod is working. Is there any more test to make sure the module is fine?
Thanks,
Srikanth.
Hi Srikanth,
I think your module is working fine as you are able to turn on WLAN. The only problem is: "wlcore: ERROR ELP wakeup timeout!" while scanning.
The typical reason for this would be the mapping of the IRQ line in your host.
Since you have an AM335x, I recommend that you use the prebuilt binaries in: http://processors.wiki.ti.com/index.php/WL18xx_AMxxx_platform_integration_guide
and confirm the WLAN functionality.
Regards,
Gigi Joseph.
Hello Joseph,
Sorry for the late reply.
We purchased a new wl1835 dongle and checked it with the AM3359 board and it is working fine.
The previous dongle which we have is gone bad.
One more good news is, i told you that we are making a custom board with dm8168 processor and put wl1805 chip in that. we received the board last week and after all the board bring up and video working. We put the wifi code which you helped us with and it worked very well. Now we are able to stream the video through wifi.
We really appreciate your help. Thanks a lot.
Regards,
Srikanth.
Hi Srikanth,
Thanks for the update... I will mark this as closed.
Please raise a new thread for any additional assistance.
Regards,
Gigi Joseph.
Hello Kunjal,
I am using the SDK version "5_05_02_00" and the kernel is 2.6.37.
My wifi driver version is "R8_A6_02" and when my board boots up it says "wl18xx driver version: R8.xx_Build-309"
Joseph has provided us with the build scrips which helped us to bownload the backport and build for 2.6.37 kernel.
Thanks,
Srikanth.