--- /dev/null
+#!/bin/sh
+
+[ -e /lib/firmware/$FIRMWARE ] && exit 0
+
+. /lib/functions/caldata.sh
+
+caldata_extract_swap() {
+ local part=$1
+ local offset=$2
+ local count=$3
+ local mtd
+
+ mtd=$(find_mtd_chardev $part)
+ [ -n "$mtd" ] || caldata_die "no mtd device found for partition $part"
+
+ offset=$(($offset / 2))
+ count=$(($count / 2))
+
+ dd if=$mtd of=/lib/firmware/$FIRMWARE bs=2 skip=$offset count=$count conv=swab 2>/dev/null || \
+ caldata_die "failed to extract calibration data from $mtd"
+}
+
+case "$FIRMWARE" in
+ "ath9k-eeprom-pci-0000:00:01.0.bin")
+ case "$(board_name)" in
+ huawei,hg556a-b)
+ caldata_extract_swap "cal_data" 0x1e000 0xeb8
+ ;;
+ *)
+ caldata_die "board $board is not supported yet"
+ ;;
+ esac
+ ;;
+esac
};
};
- ath9k-fixup {
- compatible = "brcm,ath9k-fixup";
- reg = <0x30000000 0x8000000>;
-
- pci-dev = <1>;
-
- nvmem-cells = <&macaddr_cfe_6a0>;
- nvmem-cell-names = "mac-address";
- mac-address-increment = <1>;
+ ath9k-leds {
+ compatible = "gpio-leds";
- ath,eeprom = <&cal_data 0x1e000>;
- ath,endian-check;
- ath,led-pin = <2>;
- ath,led-active-high;
+ wlan {
+ label = "red:wlan";
+ gpios = <&ath9k 2 GPIO_ACTIVE_HIGH>;
+ linux,default-trigger = "phy0tpt";
+ };
};
};
&pci {
status = "okay";
+
+ ath9k: wifi@1,0 {
+ compatible = "pci168c,0029";
+ reg = <0x0800 0 0 0 0>;
+
+ qca,no-eeprom;
+
+ nvmem-cells = <&macaddr_cfe_6a0>;
+ nvmem-cell-names = "mac-address";
+ mac-address-increment = <1>;
+
+ #gpio-cells = <2>;
+ gpio-controller;
+ };
};
&pflash {
status = "okay";
};
+&cal_data {
+ compatible = "nvmem-cells";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ cal_data_1e000: cal@1e000 {
+ reg = <0x1e000 0xeb8>;
+ };
+};
+
&cfe {
compatible = "nvmem-cells";
#address-cells = <1>;
endef
### Package helpers ###
-ATH9K_PACKAGES := kmod-ath9k wpad-basic-mbedtls
+ATH9K_PACKAGES := kmod-ath9k kmod-owl-loader wpad-basic-mbedtls
B43_PACKAGES := kmod-b43 wpad-basic-mbedtls
USB1_PACKAGES := kmod-usb-ohci kmod-usb-ledtrig-usbport
USB2_PACKAGES := $(USB1_PACKAGES) kmod-usb2