aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
diff options
context:
space:
mode:
authorMatti Laakso <matti.laakso@outlook.com>2018-01-14 17:39:53 +0200
committerPiotr Dymacz <pepe2k@gmail.com>2018-02-22 18:53:22 +0100
commit2ea98fc39b21392c1556d6768604f54a578278d4 (patch)
tree42880f89b9bc7d7921342e512580a73230124b70 /target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
parent22ae9b742bb0ac3290aa45858268d278f66d55b2 (diff)
downloadupstream-2ea98fc39b21392c1556d6768604f54a578278d4.tar.gz
upstream-2ea98fc39b21392c1556d6768604f54a578278d4.tar.bz2
upstream-2ea98fc39b21392c1556d6768604f54a578278d4.zip
ar71xx: fix 5 GHz Wi-Fi on NBG6716
Some NBG6716 do not have ath10k calibration data in flash, only in chip OTP. To determine if flash has a valid calibration data, the first two bytes telling the length of the calibration data are checked against the requested length. If the lengths match, calibration data is valid and read from flash. Signed-off-by: Matti Laakso <matti.laakso@outlook.com>
Diffstat (limited to 'target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata')
-rw-r--r--target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata8
1 files changed, 7 insertions, 1 deletions
diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index a3d4867b0b..e6ea873e40 100644
--- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -18,12 +18,18 @@ ath10kcal_extract() {
local part=$1
local offset=$2
local count=$3
- local mtd
+ local mtd cal_size
mtd=$(find_mtd_chardev $part)
[ -n "$mtd" ] || \
ath10kcal_die "no mtd device found for partition $part"
+ # Check that the calibration data size in header equals the desired size
+ cal_size=$(dd if=$mtd bs=2 count=1 skip=$(( $offset / 2 )) conv=swab 2>/dev/null | hexdump -ve '1/2 "%d"')
+
+ [ "$count" = "$cal_size" ] || \
+ ath10kcal_die "no calibration data found in $part"
+
dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
ath10kcal_die "failed to extract calibration data from $mtd"
}