One, Basic Knowledge
1. The brcm80211 drivers are included in the kernel. They are named brcmsmac for PCI cards and brcmfmac for SDIO devices.
2. brcm80211
2.1. The kernel contains two built-in open-source drivers: brcmfmac for native FullMAC and brcmsmac for mac80211-based SoftMAC. They should be automatically loaded when booting.
2.2. brcmfmac supports newer chipsets, and supports AP mode, P2P mode, or hardware encryption.
2.3. brcmsmac only supports old chipsets like BCM4313, BCM43224, BCM43225.
Two, FAQs
1. 如何将wlan-platdata的驱动先于DHD驱动运行?
Wifi load driver when kernel bootup
2. Some Macro
dhd_linux-platdata.c : Macro CUSTOMER_HW is defined. And use Android style wifi platform data (aka wifi control function).
dhd_linux-platdata.c : Marco CONFIG_DTS is not defined.
wifi_ctrlfunc_register_drv
dhd_gpio.c : Macro CUSTOMER_OOB is defined.
3. failed in dhd_linux_platdev.c
882 if (down_timeout(&dhd_chipup_sem, msecs_to_jiffies(POWERUP_WAIT_MS)) == 0) {
883 printk("%s: %s ===> %d\n", __FILE__, __func__, __LINE__);
884 dhd_bus_unreg_sdio_notify();
885 printk("%s: %s ===> %d\n", __FILE__, __func__, __LINE__);
886 chip_up = TRUE;
887 break;
888 }
wifi_platform_bus_enumerate()
===calls===>plat_data->set_carddetect(device_present), which is dhd_wlan_set_carddetect()
===calls===>rockchip_wifi_set_carddetect(1) or rockchip_wifi_set_carddetect()
===calls===>mmc_host_rescan()