Ubuntu没有检测到wifi / bt组合卡BCM4330(AP6383)

我正在使用Zotac pi320。 在Windows 8.1中,检测到buit-in(sdio)wifi卡并在详细的设备设置中显示为broadcom 4330.二次研究证实了这一点,拆解显示芯片为AP6383,也对应于BCM 4330。

在ubuntu 14.10的全新安装中,没有添加或删除任何其他内容,根本无法识别此设备。 我倾注了来自lspci -v所有输出,没有任何东西,在其他任何地方都没有找到,例如,网络管理员。 我确实在/ lib / firmware / brcm /中确认了* .fw和* .bin文件的存在,并且存在预期的4330和43xx文件。 iwconfig也没有显示此设备。 我没有结果重新运行hw-detect

Promethean,经过大约两周的尝试并得到broadcom和英特尔黑客的帮助,我得到了它的工作。 更详细的描述在博客文章中 ,但这里是要点:

ACPI目前已损坏,因此WiFi已关闭。 通过签发确认

 # cat /sys/bus/acpi/devices/INT33BB\:00/power_state D3cold 

所以启用它

 # echo on > /sys/bus/platform/devices/INT33BB\:00/power/control 

多数民众赞成真的需要! :)如果您需要固件,请将linux-firmware中的brcmfmac4330-sdio.bin复制到

 /lib/firmware/brcm/brcmfmac4330-sdio.bin 

然后从Windows驱动程序中获取NVRAM文件并将其复制到

 /lib/firmware/brcm/brcmfmac4330-sdio.txt 

我看起来像这样:

 #Sample variables file for BCM94330 SD FC AGB board T77H360.04_EVT5_20120731 manfid=0x2d0 prodid=0x0547 vendid=0x14e4 devid=0x4360 boardtype=0x05e1 boardrev=0x1202 boardflags=0x10080a00 nocrc=1 xtalfreq=26000 boardnum=22 macaddr=00:90:4c:c5:12:38 ag0=0x40 ag1=0xBF aa2g=1 aa5g=1 ccode=all pa0itssit=0x20 pa0b0=4924 pa0b1=-595 pa0b2=-157 rssismf2g=0xa rssismc2g=0x3 rssisav2g=0x7 #rssi params for 5GHz rssismf5g=0x4 rssismc5g=0x3 rssisav5g=0x7 #PA parameters for lower a-band pa1lob0=5050 pa1lob1=-630 pa1lob2=-195 #PA parameters for midband pa1b0=4880 pa1b1=-625 pa1b2=-200 #PA parameters for high band pa1hib0=4880 pa1hib1=-620 pa1hib2=-190 rxpo5g=0 maxp2ga0=0x44 maxp5ga0=0x3A maxp5gla0=0x3A maxp5gha0=0x3A # 2.4G Tx Power offsets ofdm2gpo=0x22222222 mcs2gpo0=0x4444 mcs2gpo1=0x4444 # 5G Tx Power offsets ofdm5gpo=0x00000000 ofdm5glpo=0x00000000 ofdm5ghpo=0x00000000 mcs5gpo0=0x2222 mcs5gpo1=0x2222 mcs5glpo0=0x2222 mcs5glpo1=0x2222 mcs5ghpo0=0x2222 mcs5ghpo1=0x2222 sromrev=3 il0macaddr=00:90:4c:c5:12:38 wl0id=0x431b cckPwrOffset=6 triso2g=3 #swctrlmap_2g=0x44844484,0x42824282,0x42824282,0x18282,0x1ff swctrlmap_2g=0x04040404,0x02020202,0x02020202,0x18282,0x1ff triso5g=6 swctrlmap_5g=0x10101010,0x28282020,0x20202020,0x10202,0x0f8 noise_cal_ref_2g=53 rfreg033=0x19 rfreg033_cck=0x1f dacrate2g=160 dacrate5g=160 txalpfbyp2g=1 bphyscale=17 cckPwrIdxCorr=-15 pacalpwr5glo=13 pacalpwr5glo1=11 pacalpwr5g=13 pacalpwr5g1=11 pacalpwr5ghi=13 pacalpwr5ghi1=11 #pacalpwr2g1=13 #pacalath2g=180 #pacalidx2g1=55 pacalpwr2g=13 txgaintbl=1 rfreg088=15 cckdigfilttype=20 noise_cal_adj_2g=-3 #wake on wireless LAN sd_gpout=0 sd_gpval=1 sd_gpdc=0 

我让STA和AP都工作了。

电源按钮是ACPI问题。 英特尔的Mika Westerberg创建了针对3.19的补丁:

 From 3404c6f2422c9e8d3f51a8832fbce01483c423d9 Mon Sep 17 00:00:00 2001 From: Mika Westerberg  Date: Wed, 11 Feb 2015 17:21:18 +0200 Subject: [PATCH] pinctrl: baytrail: Relax GPIO request rules for certain pin On Baytrail-T based machines the power button is part of GPIO keys like button array (and implemented as a GPIO). However, Zotac ZBOX BIOS fails to configure the pin properly which prevents the driver to request it. Following is printed on the console: byt_gpio INT33FC:02: pin 16 cannot be used as GPIO. Fix this by relaxing GPIO request rules for this particular pin. Reported-by: Benjamin Adler  Signed-off-by: Mika Westerberg  --- drivers/pinctrl/intel/pinctrl-baytrail.c | 40 +++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.cb/drivers/pinctrl/intel/pinctrl-baytrail.c index 5afe03e28b91..44a7fef8a0f8 100644 --- a/drivers/pinctrl/intel/pinctrl-baytrail.c +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c @@ -158,17 +158,29 @@ static void __iomem *byt_gpio_reg(struct gpio_chip *chip, unsigned offset, return vg->reg_base + reg_offset + reg; } -static bool is_special_pin(struct byt_gpio *vg, unsigned offset) +static unsigned get_gpio_mux(struct byt_gpio *vg, unsigned offset) { /* SCORE pin 92-93 */ if (!strcmp(vg->range->name, BYT_SCORE_ACPI_UID) && offset >= 92 && offset <= 93) - return true; + return 1; /* SUS pin 11-21 */ if (!strcmp(vg->range->name, BYT_SUS_ACPI_UID) && offset >= 11 && offset <= 21) - return true; + return 1; + + return 0; +} + +static bool can_mux_as_gpio(struct byt_gpio *vg, unsigned offset) +{ + if (!strcmp(vg->range->name, BYT_SUS_ACPI_UID)) { + switch (offset) { + case 16: /* Power button on BYT-T machines */ + return true; + } + } return false; } @@ -177,8 +189,10 @@ static int byt_gpio_request(struct gpio_chip *chip, unsigned offset) { struct byt_gpio *vg = to_byt_gpio(chip); void __iomem *reg = byt_gpio_reg(chip, offset, BYT_CONF0_REG); + unsigned long flags; u32 value; - bool special; + + spin_lock_irqsave(&vg->lock, flags); /* * In most cases, func pin mux 000 means GPIO function. @@ -187,13 +201,21 @@ static int byt_gpio_request(struct gpio_chip *chip, unsigned offset) * func pin mux preset as GPIO function by BIOS/FW. */ value = readl(reg) & BYT_PIN_MUX; - special = is_special_pin(vg, offset); - if ((special && value != 1) || (!special && value)) { - dev_err(&vg->pdev->dev, - "pin %u cannot be used as GPIO.\n", offset); - return -EINVAL; + if (value != get_gpio_mux(vg, offset)) { + /* Some misconfigured pins can still be muxed as GPIOs */ + if (can_mux_as_gpio(vg, offset)) { + value = readl(reg); + value |= 1; + writel(value, reg); + } else { + dev_err(&vg->pdev->dev, + "pin %u cannot be used as GPIO.\n", offset); + spin_unlock_irqrestore(&vg->lock, flags); + return -EINVAL; + } } + spin_unlock_irqrestore(&vg->lock, flags); pm_runtime_get(&vg->pdev->dev); return 0; 

这使电源按钮工作。 Mika说这个补丁会使它成为主线,但不想确认3.20,因为它需要更多的工作。