%EC%9D%84%20%EA%B0%90%EC%A7%80%ED%95%98%EC%A7%80%20%EB%AA%BB%ED%95%A9%EB%8B%88%EB%8B%A4..png)
저는 Zotac pi320을 사용하고 있습니다. Windows 8.1에서는 내장(sdio) Wi-Fi 카드가 감지되어 세부 장치 설정에 broadcom 4330으로 표시됩니다. 2차 연구에서는 칩이 BCM 4330에 해당하는 AP6383으로 표시되어 이를 확인했습니다.
ubuntu 14.10을 새로 설치하면 추가되거나 제거된 것이 없으며 이 장치가 전혀 인식되지 않습니다. 나는 모든 출력물을 쏟아 부었지만 lspci -v
아무것도 없었고 네트워크 관리자와 같은 다른 곳에서는 아무것도 발견하지 못했습니다. /lib/firmware/brcm/에 *.fw 및 *.bin 파일이 있는지 확인했으며 예상되는 4330 및 43xx 파일이 존재했습니다. iwconfig
또한 이 장치를 표시하지 않습니다. 다시 실행했는데 hw-detect
결과가 없습니다.
답변1
Promethean, 저는 약 2주 동안 시도하고 브로드컴과 인텔 해커들의 도움을 받은 후에 작동하게 되었습니다. 더 자세한 설명은블로그 게시물, 그러나 요점은 다음과 같습니다.
현재 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 문제입니다. Intel의 Mika Westerberg는 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;
이렇게 하면 전원 버튼이 작동하게 됩니다. Mika는 이 패치가 메인라인에 적용될 것이라고 말했지만, 더 많은 작업이 필요하기 때문에 3.20을 확인하고 싶지 않았습니다.