NOTE: this page is for archival only, see the note at the end of the page.

wl12xx

Driver for Texas Instruments' Wilink(tm) combo devices WL1271/3 and WL1281/3

Overview

The WL1271x and WL128x chipsets support both single band (2.4GHz) and dual band (2.4GHz and 5GHz) modes. WL127x is a combo chip comprises of WLAN, Bluetooth(tm) and FM Rx/Tx technologies. WL128x adds a GPS core to it. The open source driver supports the standard mac80211 full MAC architecture

Driver supported features

  • 802.11 a/b/g/n
  • STA and AP(*) modes
  • 11n block acknowledgment
  • SDIO runtime PM
  • Scheduled scan(*)

(*) upstream in progress

Under development

  • Advanced scan features for further host offloading
  • Throughput optimizations
  • Further power scheme optimizations

Get the latest wl12xx driver

The wl12xx driver resides under the the wireless drivers domain. The latest driver can be downloaded at:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git

Using compat-wireless the wl12xx driver and its dependencies can be compiled for kernels >= 2.6.27

Note: if you are using compat-wireless to back port the wl12xx driver to kernels 2.6.36 or earlier, you will need to integrate the following patches for proper operation. These patches are not part of the compat-wireless package.

  1. SDIO runtime PM support - here

  2. Lenient generic runtime pm callbacks - here

  3. Add platform data passing support - here

Firmware

The firmware for WL127x chipset is available under the Linux firmware license on David Woodhouse's git tree at:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/dwmw2/linux-firmware.git

The firmware is accompanied by an NVS file that is required for the proper operation of the WL127x device. Those binaries need to be placed under /lib/firmware on Linux systems and under /etc/firmware on Android systems

Calibration

The NVS file contains initialization data as well as required calibration information. It can be created and calibrated by special utility, which available from:

git clone git://github.com/gxk/ti-utils.git

More detailed descriptions available at README file from source code

Porting wl12xx

Porting the wl12xx driver to a new hardware platform requires following these steps:

  1. Modify or create the board-specific configuration. An example on how this should be done can be found under arch/arm/mach-omap2/board-zoom-peripherals.c for the TI Zoom reference boards. This is where you need to set the right mmc port, assign the gpios, adjust the reference clock information, etc.

  2. Apply the SDIO and PM patches described above, if using kernels earlier than 2.6.37.
  3. Use compat-wireless that is right to your kernel version.
  4. Download the firmware and NVS files and place them under the correct folder.

Troubleshooting

Porting to Kernel 2.6.32 based systems

If you are porting the wl12xx driver with mac80211 specifically to Kernel version 2.6.32, there are a few additional patches are not part of the compat-wireless but would be mandatory for proper operations. These patches need to be applied after applying the patches described above.

  1. PM: allow for usage_count > 0 in pm_runtime_get() - here

  2. PM: Use pm_runtime_put_sync in system resume - here

  3. PM: Provide generic subsystem-level callbacks - here

  4. SDIO: fix nasty oops in mmc_sdio_detect - here

Additional support

  • Through the linux-wireless mailing list.
  • On IRC at freenode.net. You can find us on the #linux-wireless channel and on the #wl12xx channel, a dedicated channel for wl12xx related discussions.

Hardware Information

Please refer to the hardware specifications page for more information

TODO

  • Add information on the calibration tool & process

  • Add information on WLAN-BT co-existence
  • Add porting instructions for Android OS
  • Add more information required for new HW bringup

This is a static dump of the old wiki, taken after locking it in January 2015. The new wiki is at https://wireless.wiki.kernel.org/.
versions of this page: last, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1