web-dev-qa-db-fra.com

Ubuntu ne détecte pas la carte combo wifi / bt BCM4330 (AP6383)

Je travaille avec un Zotac pi320. Dans Windows 8.1, la carte Wi-Fi intégrée (sdio) est détectée et affichée dans les paramètres de périphérique détaillés sous le nom de broadcom 4330. Une recherche secondaire le confirme, avec un démontage affichant la puce sous le nom AP6383, qui correspond également au BCM 4330.

Dans une nouvelle installation d'ubuntu 14.10, rien d'autre n'a été ajouté ou supprimé, il n'y a aucune reconnaissance de ce périphérique. J'ai parcouru toutes les sorties de lspci -v et il n'y avait rien, et rien trouvé ailleurs, par exemple, le gestionnaire de réseau. J'ai confirmé la présence des fichiers * .fw & * .bin dans/lib/firmware/brcm/et les fichiers 4330 et 43xx attendus étaient présents. iwconfig ne montre pas non plus ce périphérique. J'ai relancé hw-detect sans résultat.

1
Jim the fourth

Promethean, je l'ai fait fonctionner après environ deux semaines d'essayer d'obtenir de l'aide de la part de broadcom et d'Intel. La description la plus détaillée est à article de blog , mais voici le résumé:

ACPI est actuellement en panne, le WiFi est donc désactivé. Confirmer en émettant

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

alors activez-le en utilisant

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

C'est vraiment tout ce qu'il faut! :) Si vous avez besoin d’un firmware, copiez brcmfmac4330-sdio.bin de linux-firmware vers

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

Ensuite, récupérez le fichier NVRAM à partir de votre pilote Windows et copiez-le dans

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

Le mien ressemblait à ceci:

#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

J'ai STA et AP au travail.

Le bouton d'alimentation est un problème ACPI. Mika Westerberg d'Intel a créé un correctif contre la version 3.19:

From 3404c6f2422c9e8d3f51a8832fbce01483c423d9 Mon Sep 17 00:00:00 2001
From: Mika Westerberg <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 <benadler@...>
Signed-off-by: Mika Westerberg <mika.westerberg@...>
---
 drivers/pinctrl/intel/pinctrl-baytrail.c | 40 +++++++++++++++++++++++++-------
 1 file changed, 31 insertions(+), 9 deletions(-)

diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/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;

Cela fait fonctionner le bouton d'alimentation. Mika a déclaré que ce correctif se rendrait à Mainline, mais ne souhaitait pas confirmer la version 3.20, car cela nécessiterait davantage de travail.

1
benadler