ap6xxx-aml: new driver package

This commit is contained in:
Adam Green 2017-12-12 15:52:27 +00:00
parent 9155531c28
commit 57da0eda10
No known key found for this signature in database
GPG Key ID: 52B701B6EF2F2E58
6 changed files with 198 additions and 0 deletions

View File

@ -0,0 +1 @@
options dhd firmware_path=/usr/lib/firmware/brcm/ nvram_path=/usr/lib/firmware/brcm/

View File

@ -0,0 +1,48 @@
################################################################################
# This file is part of LibreELEC - https://libreelec.tv
# Copyright (C) 2017-present Team LibreELEC
#
# LibreELEC is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# LibreELEC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LibreELEC. If not, see <http://www.gnu.org/licenses/>.
################################################################################
PKG_NAME="ap6xxx-aml"
PKG_VERSION="99b3459"
PKG_SHA256="5f2bfc29616d869ad5fb41e0782887d73cafe0bae8a13e7e945bb32b2a2c0877"
PKG_ARCH="arm aarch64"
PKG_LICENSE="GPL"
PKG_SITE="https://github.com/khadas/android_hardware_wifi_broadcom_drivers_ap6xxx"
PKG_URL="https://github.com/khadas/android_hardware_wifi_broadcom_drivers_ap6xxx/archive/$PKG_VERSION.tar.gz"
PKG_SOURCE_DIR="android_hardware_wifi_broadcom_drivers_ap6xxx-$PKG_VERSION*"
PKG_DEPENDS_TARGET="toolchain linux"
PKG_NEED_UNPACK="$LINUX_DEPENDS"
PKG_SECTION="driver"
PKG_SHORTDESC="ap6xxx: Linux drivers for AP6xxx WLAN chips used in some devices based on Amlogic SoCs"
PKG_LONGDESC="ap6xxx: Linux drivers for AP6xxx WLAN chips used in some devices based on Amlogic SoCs"
PKG_IS_KERNEL_PKG="yes"
PKG_TOOLCHAIN="manual"
pre_make_target() {
unset LDFLAGS
}
make_target() {
make -C $(kernel_path) M=$PKG_BUILD/bcmdhd.1.363.59.144.x.cn \
ARCH=$TARGET_KERNEL_ARCH \
CROSS_COMPILE=$TARGET_PREFIX
}
makeinstall_target() {
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \;
}

View File

@ -0,0 +1,34 @@
From fb537b584b78c0407c663ed4076e4ff79b36a14c Mon Sep 17 00:00:00 2001
From: kszaq <kszaquitto@gmail.com>
Date: Thu, 14 Sep 2017 21:20:18 +0200
Subject: [PATCH 1/4] bcmdhd: Add new SDIO vendor/device ID for AP6212
---
bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c b/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c
index af321a6..f7d9a09 100644
--- a/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c
+++ b/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c
@@ -74,6 +74,9 @@
#if !defined(SDIO_DEVICE_ID_BROADCOM_43239)
#define SDIO_DEVICE_ID_BROADCOM_43239 43239
#endif /* !defined(SDIO_DEVICE_ID_BROADCOM_43239) */
+#if !defined(SDIO_DEVICE_ID_BROADCOM_4343)
+#define SDIO_DEVICE_ID_BROADCOM_4343 0xa9a6
+#endif /* !defined(SDIO_DEVICE_ID_BROADCOM_4343) */
extern void wl_cfg80211_set_parent_dev(void *dev);
extern void sdioh_sdmmc_devintr_off(sdioh_info_t *sd);
@@ -217,6 +220,7 @@ static void bcmsdh_sdmmc_remove(struct sdio_func *func)
/* devices we support, null terminated */
static const struct sdio_device_id bcmsdh_sdmmc_ids[] = {
{ SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_DEFAULT) },
+ { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4343) },
{ SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4325_SDGWB) },
{ SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4325) },
{ SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4329) },
--
2.7.4

View File

@ -0,0 +1,53 @@
From cd000f263d8433f2a1a29d7e722cd57e47b30fc5 Mon Sep 17 00:00:00 2001
From: kszaq <kszaquitto@gmail.com>
Date: Thu, 14 Sep 2017 21:20:55 +0200
Subject: [PATCH 2/4] bcmdhd: add BCM4335 firmware loading support
---
bcmdhd.1.363.59.144.x.cn/dhd_config.c | 10 ++++++++++
bcmdhd.1.363.59.144.x.cn/dhd_config.h | 1 +
2 files changed, 11 insertions(+)
diff --git a/bcmdhd.1.363.59.144.x.cn/dhd_config.c b/bcmdhd.1.363.59.144.x.cn/dhd_config.c
index ff07d18..b668400 100644
--- a/bcmdhd.1.363.59.144.x.cn/dhd_config.c
+++ b/bcmdhd.1.363.59.144.x.cn/dhd_config.c
@@ -141,6 +141,14 @@ const static char *bcm43241b4_ag_fw_name[] = {
"fw_bcm43241b4_ag_mfg.bin"
};
+const static char *bcm4335b0_ag_fw_name[] = {
+ "fw_bcm4335b0_ag.bin",
+ "fw_bcm4335b0_ag_apsta.bin",
+ "fw_bcm4335b0_ag_p2p.bin",
+ "fw_bcm4335b0_ag_es.bin",
+ "fw_bcm4335b0_ag_mfg.bin"
+};
+
const static char *bcm4339a0_ag_fw_name[] = {
"fw_bcm4339a0_ag.bin",
"fw_bcm4339a0_ag_apsta.bin",
@@ -529,6 +537,8 @@ dhd_conf_set_fw_name_by_chip(dhd_pub_t *dhd, char *fw_path)
case BCM4335_CHIP_ID:
if (chiprev == BCM4335A0_CHIP_REV)
strcpy(&fw_path[i+1], bcm4339a0_ag_fw_name[fw_type]);
+ else if (chiprev == BCM4335B0_CHIP_REV)
+ strcpy(&fw_path[i+1], bcm4335b0_ag_fw_name[fw_type]);
break;
case BCM4345_CHIP_ID:
case BCM43454_CHIP_ID:
diff --git a/bcmdhd.1.363.59.144.x.cn/dhd_config.h b/bcmdhd.1.363.59.144.x.cn/dhd_config.h
index cc76e8b..450df56 100644
--- a/bcmdhd.1.363.59.144.x.cn/dhd_config.h
+++ b/bcmdhd.1.363.59.144.x.cn/dhd_config.h
@@ -28,6 +28,7 @@ extern uint dhd_slpauto;
#define BCM43341B0_CHIP_REV 2
#define BCM43241B4_CHIP_REV 5
#define BCM4335A0_CHIP_REV 2
+#define BCM4335B0_CHIP_REV 1
#define BCM4339A0_CHIP_REV 1
#define BCM43455C0_CHIP_REV 6
#define BCM4354A1_CHIP_REV 1
--
2.7.4

View File

@ -0,0 +1,25 @@
From 24affe6bf59dfd6fd9b62b3118e4b2b9e555181a Mon Sep 17 00:00:00 2001
From: kszaq <kszaquitto@gmail.com>
Date: Thu, 14 Sep 2017 21:21:18 +0200
Subject: [PATCH 3/4] bcmdhd: match only Broadcom SDIO devices
---
bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c b/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c
index f7d9a09..47ca535 100644
--- a/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c
+++ b/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c
@@ -229,7 +229,7 @@ static const struct sdio_device_id bcmsdh_sdmmc_ids[] = {
{ SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4334) },
{ SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4324) },
{ SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_43239) },
- { SDIO_DEVICE_CLASS(SDIO_CLASS_NONE) },
+ { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_ANY_ID) },
{ /* end: all zeroes */ },
};
--
2.7.4

View File

@ -0,0 +1,37 @@
From b9edf37b14f64a8bed5586898e3503322a5b8bfc Mon Sep 17 00:00:00 2001
From: kszaq <kszaquitto@gmail.com>
Date: Thu, 5 Oct 2017 22:04:11 +0200
Subject: [PATCH 4/4] bcmdhd: if driver is not yet initialized, wait and retry
---
bcmdhd.1.363.59.144.x.cn/dhd_linux.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/bcmdhd.1.363.59.144.x.cn/dhd_linux.c b/bcmdhd.1.363.59.144.x.cn/dhd_linux.c
index c64f851..1754fb7 100644
--- a/bcmdhd.1.363.59.144.x.cn/dhd_linux.c
+++ b/bcmdhd.1.363.59.144.x.cn/dhd_linux.c
@@ -6127,9 +6127,17 @@ dhd_open(struct net_device *net)
int ifidx;
int32 ret = 0;
- if (!dhd_download_fw_on_driverload && !dhd_driver_init_done) {
- DHD_ERROR(("%s: WLAN driver is not initialized\n", __FUNCTION__));
- return -1;
+ for (int retry = 0; ++retry; ) {
+ if (!dhd_download_fw_on_driverload && !dhd_driver_init_done) {
+ DHD_ERROR(("%s: WLAN driver is not initialized\n", __FUNCTION__));
+ if (retry > 1) {
+ return -1;
+ } else {
+ OSL_SLEEP(1000);
+ }
+ } else {
+ break;
+ }
}
printf("%s: Enter %p\n", __FUNCTION__, net);
--
2.7.4